From 937428a19836f63897a5d8cfa283347e30f7342b Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 31 Aug 2017 11:15:52 -0400 Subject: Resume decompiling trade.s --- src/trade.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 102 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index cb190d194..44eb8212a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2,6 +2,11 @@ #include "name_string_util.h" #include "string_util.h" #include "text.h" +#include "main.h" +#include "species.h" +#include "items.h" +#include "moves.h" +#include "easy_chat.h" struct InGameTrade { /*0x00*/ u8 name[11]; @@ -34,9 +39,104 @@ struct UnkStructD { /*0x12*/ u16 var12[1]; }; -extern const struct InGameTrade gIngameTrades[]; -extern const u16 gIngameTradeMail[][10]; +void sub_8047EC0(void); +const struct InGameTrade gIngameTrades[] = { + { + _("MAKIT"), + SPECIES_MAKUHITA, + 5, 5, 4, 4, 4, 4, + TRUE, 49562, + 5, 5, 5, 5, 30, + 0x9C40, + ITEM_X_ATTACK, -1, + _("ELYSSA"), + MALE, 10, SPECIES_SLAKOTH + }, { + _("SKITIT"), + SPECIES_SKITTY, + 5, 4, 4, 5, 4, 4, + FALSE, 2259, + 5, 5, 30, 5, 5, + 0x498A2E17, + ITEM_GLITTER_MAIL, 0, + _("DARRELL"), + FEMALE, 10, SPECIES_PIKACHU + }, { + _("COROSO"), + SPECIES_CORSOLA, + 4, 4, 5, 4, 4, 5, + TRUE, 50183, + 5, 30, 5, 5, 5, + 0x4C970B7F, + ITEM_TROPIC_MAIL, 1, + _("LANE"), + FEMALE, 10, SPECIES_BELLOSSOM + } +}; + +const u16 gIngameTradeMail[][10] = { + { + EC_POKEMON(PIKACHU), + EC_WORD_THANK_YOU, + EC_WORD_EXCL, + EC_WORD_MY, + EC_POKEMON(SKITTY), + EC_WORD_EATS, + EC_WORD_A_LOT, + EC_WORD_NOW, + EC_WORD_EXCL, + 0 + }, { + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_TO, + EC_WORD_SEE, + EC_WORD_A, + EC_MOVE2(PETAL_DANCE), + EC_WORD_IT_S, + EC_WORD_SO, + EC_WORD_PRETTY, + 0 + } +}; + +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 +}; + +void sub_8047CD8(void) +{ + SetMainCallback2(sub_8047EC0); +} + +asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { int y, x; -- cgit v1.2.3 From b636d3cafa2a1b3314fddb3c7bde2bdb94c1e2c2 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 31 Aug 2017 11:35:14 -0400 Subject: sub_8047CE8 --- src/trade.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 44eb8212a..874a203ba 100644 --- a/src/trade.c +++ b/src/trade.c @@ -7,6 +7,8 @@ #include "items.h" #include "moves.h" #include "easy_chat.h" +#include "link.h" +#include "strings2.h" struct InGameTrade { /*0x00*/ u8 name[11]; @@ -39,29 +41,52 @@ struct UnkStructD { /*0x12*/ u16 var12[1]; }; +struct UnkStructE { + u8 *unk00; + u8 fil04[8]; + u8 *unk0C; + u8 fil10[8]; + u8 *unk18; + u8 fil1C[4]; + void *unk20; +}; + void sub_8047EC0(void); +void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8); +void sub_804ACD8(const u8 *, u8 *, u8); +void nullsub_5(u8, u8); + +extern struct UnkStructE gUnknown_020296CC; + +const u8 *const gUnknown_0820C14C[] = { + TradeText_Cancel, + TradeText_ChoosePoke, + TradeText_Summary1, + TradeText_Trade1, + TradeText_CancelTradePrompt, + TradeText_PressBToExit +}; +asm(".section .rodata.igt"); const struct InGameTrade gIngameTrades[] = { { - _("MAKIT"), - SPECIES_MAKUHITA, + _("MAKIT"), SPECIES_MAKUHITA, 5, 5, 4, 4, 4, 4, TRUE, 49562, 5, 5, 5, 5, 30, 0x9C40, ITEM_X_ATTACK, -1, - _("ELYSSA"), - MALE, 10, SPECIES_SLAKOTH + _("ELYSSA"), MALE, 10, + SPECIES_SLAKOTH }, { - _("SKITIT"), - SPECIES_SKITTY, + _("SKITIT"), SPECIES_SKITTY, 5, 4, 4, 5, 4, 4, FALSE, 2259, 5, 5, 30, 5, 5, 0x498A2E17, ITEM_GLITTER_MAIL, 0, - _("DARRELL"), - FEMALE, 10, SPECIES_PIKACHU + _("DARRELL"), FEMALE, 10, + SPECIES_PIKACHU }, { _("COROSO"), SPECIES_CORSOLA, @@ -70,8 +95,8 @@ const struct InGameTrade gIngameTrades[] = { 5, 30, 5, 5, 5, 0x4C970B7F, ITEM_TROPIC_MAIL, 1, - _("LANE"), - FEMALE, 10, SPECIES_BELLOSSOM + _("LANE"), FEMALE, 10, + SPECIES_BELLOSSOM } }; @@ -136,6 +161,17 @@ void sub_8047CD8(void) SetMainCallback2(sub_8047EC0); } +void sub_8047CE8(void) +{ + u8 mpId; + sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC.unk00, gSaveBlock2.playerName, 0xC); + mpId = GetMultiplayerId(); + sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC.unk0C, gLinkPlayers[mpId ^ 1].name, 0xC); + sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC.unk18, gUnknown_0820C14C[0], 0x8); + sub_804ACD8(gUnknown_0820C14C[1], gUnknown_020296CC.unk20, 0x14); + nullsub_5(3, 0); +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From d3dca02924bc19bff355feb74a667707751bcc8f Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 31 Aug 2017 13:46:14 -0400 Subject: Nonmatching sub_8047D58 --- src/trade.c | 487 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 456 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 874a203ba..392ab881a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -9,6 +9,7 @@ #include "easy_chat.h" #include "link.h" #include "strings2.h" +#include "graphics.h" struct InGameTrade { /*0x00*/ u8 name[11]; @@ -41,14 +42,9 @@ struct UnkStructD { /*0x12*/ u16 var12[1]; }; -struct UnkStructE { - u8 *unk00; - u8 fil04[8]; - u8 *unk0C; - u8 fil10[8]; - u8 *unk18; - u8 fil1C[4]; - void *unk20; +struct TradeEwramStruct { + /*0x00000*/ u8 filler_00000[0xd000]; + /*0x0d000*/ u8 tileBuffers[13][256]; }; void sub_8047EC0(void); @@ -56,7 +52,143 @@ void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8); void sub_804ACD8(const u8 *, u8 *, u8); void nullsub_5(u8, u8); -extern struct UnkStructE gUnknown_020296CC; +extern u8 *gUnknown_020296CC[13]; + +extern u8 ewram[]; +#define ewram_2010000 (*(struct TradeEwramStruct *)(ewram + 0x10000)) + + +const u32 unref_data_820ABD4[] = { + 0x00000890, + 0x00003AC0, + 0x0000001C, + 0x00000530, + 0x00000024, + 0x00000064, + 0x000004D8 +}; + +const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); +const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); +const u16 gTradeStripesBG2Tilemap[] = INCBIN_U16("graphics/trade/stripes_bg2_map.bin"); +const u16 gTradeStripesBG3Tilemap[] = INCBIN_U16("graphics/trade/stripes_bg3_map.bin"); + +const struct OamData gOamData_820BFEC = { + .shape = ST_OAM_H_RECTANGLE, + .size = 2, + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_820BFF4[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_820BFFC[] = { + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_820C004[] = { + ANIMCMD_FRAME(16, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_820C00C[] = { + ANIMCMD_FRAME(24, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_820C014[] = { + ANIMCMD_FRAME(32, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_820C01C[] = { + ANIMCMD_FRAME(40, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_820C024[] = { + gSpriteAnim_820BFF4, + gSpriteAnim_820BFFC, + gSpriteAnim_820C004, + gSpriteAnim_820C00C, + gSpriteAnim_820C014, + gSpriteAnim_820C01C +}; + +const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text1.gbapal"); +const u16 UnrefTradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text2.gbapal"); + +const struct SpriteSheet gUnknown_0820C07C[] = { + {ewram_2010000.tileBuffers[ 0], 256, 200}, + {ewram_2010000.tileBuffers[ 1], 256, 201}, + {ewram_2010000.tileBuffers[ 2], 256, 202}, + {ewram_2010000.tileBuffers[ 3], 256, 203}, + {ewram_2010000.tileBuffers[ 4], 256, 204}, + {ewram_2010000.tileBuffers[ 5], 256, 205}, + {ewram_2010000.tileBuffers[ 6], 256, 206}, + {ewram_2010000.tileBuffers[ 7], 256, 207}, + {ewram_2010000.tileBuffers[ 8], 256, 208}, + {ewram_2010000.tileBuffers[ 9], 256, 209}, + {ewram_2010000.tileBuffers[10], 256, 210}, + {ewram_2010000.tileBuffers[11], 256, 211}, + {ewram_2010000.tileBuffers[12], 256, 212}, +}; + +const struct SpritePalette gSpritePalette_TradeScreenText = { + TradeScreenTextPalette, 4925 +}; + +const struct SpriteTemplate gSpriteTemplate_820C0EC = { + 200, + 4925, + &gOamData_820BFEC, + gSpriteAnimTable_820C024, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const struct OamData gOamData_820C104 = { + .shape = ST_OAM_H_RECTANGLE, + .size = 3, + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_820C10C[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_820C114[] = { + ANIMCMD_FRAME(32, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_820C11C[] = { + gSpriteAnim_820C10C, + gSpriteAnim_820C114 +}; + +const struct SpriteSheet gUnknown_0820C124 = { + gUnknown_08EA1DEC, 0x800, 300 +}; + +const struct SpritePalette gUnknown_0820C12C = { + gUnknown_08EA0328, 2345 +}; + +const struct SpriteTemplate gSpriteTemplate_820C134 = { + 300, + 2345, + &gOamData_820C104, + gSpriteAnimTable_820C11C, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; const u8 *const gUnknown_0820C14C[] = { TradeText_Cancel, @@ -67,6 +199,153 @@ const u8 *const gUnknown_0820C14C[] = { TradeText_PressBToExit }; +// This is used to determine the next mon to select when the D-Pad is +// pressed in a given direction. +// Note that the mons are laid out like this. +// 0-5 are the player's party and 6-11 are the trading partner's party. +// 12 is the cancel button. +// 0 1 6 7 +// 2 3 8 9 +// 4 5 10 11 +// 12 + +const u8 gTradeNextSelectedMonTable[][4][6] = { + { + {4, 2, 12, 12, 0, 0}, + {2, 4, 12, 12, 0, 0}, + {7, 6, 1, 0, 0, 0}, + {1, 6, 7, 0, 0, 0} + }, { + {5, 3, 12, 12, 0, 0}, + {3, 5, 12, 12, 0, 0}, + {0, 7, 6, 1, 0, 0}, + {6, 7, 0, 1, 0, 0} + }, { + {0, 0, 0, 0, 0, 0}, + {4, 0, 0, 0, 0, 0}, + {9, 8, 7, 6, 0, 0}, + {3, 1, 0, 0, 0, 0} + }, { + {1, 1, 1, 1, 0, 0}, + {5, 1, 1, 1, 0, 0}, + {2, 9, 8, 7, 0, 0}, + {8, 9, 6, 6, 0, 0} + }, { + {2, 2, 2, 2, 0, 0}, + {0, 0, 0, 0, 0, 0}, + {11, 10, 9, 8, 7, 6}, + {5, 3, 1, 0, 0, 0} + }, { + {3, 3, 3, 3, 0, 0}, + {1, 1, 1, 1, 0, 0}, + {4, 4, 4, 4, 0, 0}, + {10, 8, 6, 0, 0, 0} + }, { + {10, 8, 12, 0, 0, 0}, + {8, 10, 12, 0, 0, 0}, + {1, 0, 0, 0, 0, 0}, + {7, 0, 1, 0, 0, 0} + }, { + {12, 0, 0, 0, 0, 0}, + {9, 12, 0, 0, 0, 0}, + {6, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0} + }, { + {6, 0, 0, 0, 0, 0}, + {10, 6, 0, 0, 0, 0}, + {3, 2, 1, 0, 0, 0}, + {9, 7, 0, 0, 0, 0} + }, { + {7, 0, 0, 0, 0, 0}, + {11, 12, 0, 0, 0, 0}, + {8, 0, 0, 0, 0, 0}, + {2, 1, 0, 0, 0, 0} + }, { + {8, 0, 0, 0, 0, 0}, + {6, 0, 0, 0, 0, 0}, + {5, 4, 3, 2, 1, 0}, + {11, 9, 7, 0, 0, 0} + }, { + {9, 0, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0}, + {10, 0, 0, 0, 0, 0}, + {4, 2, 0, 0, 0, 0} + }, { + {11, 9, 7, 6, 0, 0}, + {7, 6, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0} + } +}; + +const u8 gTradeMonSpriteCoords[][2] = { + // Your party + {1, 5}, + {8, 5}, + {1, 10}, + {8, 10}, + {1, 15}, + {8, 15}, + + // Friend's party + {16, 5}, + {23, 5}, + {16, 10}, + {23, 10}, + {16, 15}, + {23, 15}, + + {23, 18} // CANCEL +}; + +const u8 gTradeLevelDisplayCoords[][2] = { + // Your party + { 5, 4}, + {12, 4}, + { 5, 9}, + {12, 9}, + { 5, 14}, + {12, 14}, + + // Friend's party + {20, 4}, + {27, 4}, + {20, 9}, + {27, 9}, + {20, 14}, + {27, 14} +}; + +const u8 gTradeMonBoxCoords[][2] = { + // Your party + { 1, 3}, + { 8, 3}, + { 1, 8}, + { 8, 8}, + { 1, 13}, + { 8, 13}, + + // Friend's party + {16, 3}, + {23, 3}, + {16, 8}, + {23, 8}, + {16, 13}, + {23, 13} +}; + +const u8 gTradeUnknownSpriteCoords[][2][2] = { + { + { 59, 10}, + {179, 10}, + }, + { + { 59, 10}, + {179, 10} + } +}; + + asm(".section .rodata.igt"); const struct InGameTrade gIngameTrades[] = { { @@ -127,33 +406,33 @@ const u16 gIngameTradeMail[][10] = { }; 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, + 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, + 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, + 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 + 0, 0, 1, 0, + 1, 1, 2, 3 }; void sub_8047CD8(void) @@ -164,14 +443,160 @@ void sub_8047CD8(void) void sub_8047CE8(void) { u8 mpId; - sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC.unk00, gSaveBlock2.playerName, 0xC); + sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC[0], gSaveBlock2.playerName, 0xC); mpId = GetMultiplayerId(); - sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC.unk0C, gLinkPlayers[mpId ^ 1].name, 0xC); - sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC.unk18, gUnknown_0820C14C[0], 0x8); - sub_804ACD8(gUnknown_0820C14C[1], gUnknown_020296CC.unk20, 0x14); + sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC[3], gLinkPlayers[mpId ^ 1].name, 0xC); + sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC[6], gUnknown_0820C14C[0], 0x8); + sub_804ACD8(gUnknown_0820C14C[1], gUnknown_020296CC[8], 0x14); nullsub_5(3, 0); } +#ifdef NONMATCHING +void sub_8047D58(void) +{ + u8 language; + struct SpriteTemplate spriteTemplate; + int i; + s16 x; + u8 mpId; + + language = StringLength(gSaveBlock2.playerName) <= 5 ? 0 : 1; + for (i = 0, x = gTradeUnknownSpriteCoords[language][0][0]; i < 3; x += 32, i ++) + { + spriteTemplate = gSpriteTemplate_820C0EC; + spriteTemplate.tileTag += i; + CreateSprite(&spriteTemplate, x, gTradeUnknownSpriteCoords[language][0][1], 1); + } + + mpId = GetMultiplayerId(); + language = StringLength(gLinkPlayers[mpId ^ 1].name) <= 5 ? 0 : 1; + for (i = 0, x = gTradeUnknownSpriteCoords[language][1][0]; i < 3; x += 32, i ++) + { + spriteTemplate = gSpriteTemplate_820C0EC; + spriteTemplate.tileTag += i + 3; + CreateSprite(&spriteTemplate, x, gTradeUnknownSpriteCoords[language][1][1], 1); + } + nullsub_5(5, 0); +} +#else +__attribute__((naked)) +void sub_8047D58(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x18\n" + "\tldr r0, _08047E30 @ =gSaveBlock2\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0\n" + "\tcmp r0, 0x5\n" + "\tbls _08047D72\n" + "\tmovs r1, 0x1\n" + "_08047D72:\n" + "\tmovs r5, 0\n" + "\tlsls r2, r1, 2\n" + "\tmov r6, sp\n" + "\tldr r0, _08047E34 @ =gTradeUnknownSpriteCoords\n" + "\tadds r1, r0, 0x1\n" + "\tadds r1, r2\n" + "\tmov r8, r1\n" + "\tadds r0, r2, r0\n" + "\tldrb r0, [r0]\n" + "\tlsls r4, r0, 16\n" + "_08047D86:\n" + "\tmov r1, sp\n" + "\tldr r0, _08047E38 @ =gSpriteTemplate_820C0EC\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, [r6]\n" + "\tadds r0, r5\n" + "\tstrh r0, [r6]\n" + "\tasrs r1, r4, 16\n" + "\tmov r0, sp\n" + "\tmov r3, r8\n" + "\tldrb r2, [r3]\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tmovs r7, 0x80\n" + "\tlsls r7, 14\n" + "\tadds r4, r7\n" + "\tadds r5, 0x1\n" + "\tcmp r5, 0x2\n" + "\tble _08047D86\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, _08047E3C @ =gLinkPlayers + 0x8\n" + "\tadds r0, r1\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0\n" + "\tcmp r0, 0x5\n" + "\tbls _08047DDA\n" + "\tmovs r1, 0x1\n" + "_08047DDA:\n" + "\tmovs r5, 0\n" + "\tlsls r2, r1, 2\n" + "\tmov r6, sp\n" + "\tldr r0, _08047E40 @ =gTradeUnknownSpriteCoords + 0x3\n" + "\tadds r1, r2, r0\n" + "\tmov r8, r1\n" + "\tsubs r0, 0x1\n" + "\tadds r0, r2, r0\n" + "\tldrb r0, [r0]\n" + "\tlsls r4, r0, 16\n" + "_08047DEE:\n" + "\tmov r1, sp\n" + "\tldr r0, _08047E38 @ =gSpriteTemplate_820C0EC\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, r5, 0x3\n" + "\tldrh r1, [r6]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r6]\n" + "\tasrs r1, r4, 16\n" + "\tmov r0, sp\n" + "\tmov r3, r8\n" + "\tldrb r2, [r3]\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tmovs r7, 0x80\n" + "\tlsls r7, 14\n" + "\tadds r4, r7\n" + "\tadds r5, 0x1\n" + "\tcmp r5, 0x2\n" + "\tble _08047DEE\n" + "\tmovs r0, 0x5\n" + "\tmovs r1, 0\n" + "\tbl nullsub_5\n" + "\tadd sp, 0x18\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08047E30: .4byte gSaveBlock2\n" + "_08047E34: .4byte gTradeUnknownSpriteCoords\n" + "_08047E38: .4byte gSpriteTemplate_820C0EC\n" + "_08047E3C: .4byte gLinkPlayers + 0x8\n" + "_08047E40: .4byte gTradeUnknownSpriteCoords + 0x3"); +} +#endif + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From ea13e41fba35a8caf9e6a1657fdd63d04a1108e6 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 31 Aug 2017 13:56:08 -0400 Subject: nonmatching sub_8047E44 --- src/trade.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 392ab881a..a624dc861 100644 --- a/src/trade.c +++ b/src/trade.c @@ -478,9 +478,29 @@ void sub_8047D58(void) } nullsub_5(5, 0); } + +void sub_8047E44(void) +{ + struct SpriteTemplate spriteTemplate; + int i; + s16 x; + + for (i = 0, x = 0xd6; i < 2; x += 32, i ++) + { + spriteTemplate = gSpriteTemplate_820C0EC; + spriteTemplate.tileTag += i + 6; + CreateSprite(&spriteTemplate, x, 0x98, 1); + } + + for (i = 0, x = 0x18; i < 5; x += 32, i ++) + { + spriteTemplate = gSpriteTemplate_820C0EC; + spriteTemplate.tileTag += i + 8; + CreateSprite(&spriteTemplate, x, 0x96, 1); + } +} #else -__attribute__((naked)) -void sub_8047D58(void) +__attribute__((naked)) void sub_8047D58(void) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r8\n" @@ -595,6 +615,71 @@ void sub_8047D58(void) "_08047E3C: .4byte gLinkPlayers + 0x8\n" "_08047E40: .4byte gTradeUnknownSpriteCoords + 0x3"); } + +__attribute__((naked)) void sub_8047E44(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tsub sp, 0x18\n" + "\tmovs r4, 0\n" + "\tmov r5, sp\n" + "\tmovs r6, 0xD6\n" + "\tlsls r6, 16\n" + "_08047E50:\n" + "\tmov r1, sp\n" + "\tldr r0, _08047EBC @ =gSpriteTemplate_820C0EC\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, r4, 0x6\n" + "\tldrh r1, [r5]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5]\n" + "\tasrs r1, r6, 16\n" + "\tmov r0, sp\n" + "\tmovs r2, 0x98\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 14\n" + "\tadds r6, r2\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x1\n" + "\tble _08047E50\n" + "\tmovs r4, 0\n" + "\tmov r5, sp\n" + "\tmovs r6, 0xC0\n" + "\tlsls r6, 13\n" + "_08047E84:\n" + "\tmov r1, sp\n" + "\tldr r0, _08047EBC @ =gSpriteTemplate_820C0EC\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, r4, 0\n" + "\tadds r0, 0x8\n" + "\tldrh r3, [r5]\n" + "\tadds r0, r3\n" + "\tstrh r0, [r5]\n" + "\tasrs r1, r6, 16\n" + "\tmov r0, sp\n" + "\tmovs r2, 0x96\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tmovs r7, 0x80\n" + "\tlsls r7, 14\n" + "\tadds r6, r7\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _08047E84\n" + "\tadd sp, 0x18\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08047EBC: .4byte gSpriteTemplate_820C0EC"); +} #endif asm(".section .text.sub_804A96C"); -- cgit v1.2.3 From f1f9da755ce51f6ebff2639be492ee11c7b04b9b Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 31 Aug 2017 17:44:07 -0400 Subject: sub_8047EC0 --- src/trade.c | 246 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 245 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a624dc861..a50024249 100644 --- a/src/trade.c +++ b/src/trade.c @@ -10,6 +10,15 @@ #include "link.h" #include "strings2.h" #include "graphics.h" +#include "palette.h" +#include "task.h" +#include "menu.h" +#include "text_window.h" +#include "pokemon_icon.h" +#include "cable_club.h" +#include "party_menu.h" +#include "songs.h" +#include "sound.h" struct InGameTrade { /*0x00*/ u8 name[11]; @@ -42,8 +51,45 @@ struct UnkStructD { /*0x12*/ u16 var12[1]; }; +struct UnkStructE { + /*0x00*/ u8 filler_00[8]; + /*0x08*/ void *vramAddr; + /*0x0c*/ u8 filler_0c[4]; + /*0x10*/ u8 unk_10; +}; + +struct TradeEwramSubstruct { + /*0x0000*/ u8 unk_0000; + /*0x0001*/ u8 unk_0001; + /*0x0004*/ struct Window window; + /*0x0034*/ u8 playerPartyIcons[6]; + /*0x003a*/ u8 friendPartyIcons[6]; + /*0x0040*/ u8 unk_0040; + /*0x0041*/ u8 unk_0041; + /*0x0042*/ u8 playerPartyCount; + /*0x0043*/ u8 friendPartyCount; + /*0x0044*/ u8 filler_0044[0x31]; + /*0x0075*/ u8 unk_0075; + /*0x0076*/ u8 filler_0076[4]; + /*0x007a*/ u8 unk_007a; + /*0x007b*/ u8 unk_007b; + /*0x007c*/ u8 unk_007c; + /*0x007d*/ u8 filler_007d[3]; + /*0x0080*/ u8 unk_0080; + /*0x0081*/ u8 unk_0081; + /*0x0082*/ u8 filler_0082[4]; + /*0x0086*/ u8 unk_0086; + /*0x0087*/ u8 unk_0087; + /*0x0088*/ u8 filler_0088[0x2c]; + /*0x00b4*/ u8 unk_00b4; + /*0x00b5*/ u8 filler_00b4[0x13]; + /*0x00c8*/ struct UnkStructE unk_00c8; + /*0x00dc*/ u8 filler_00dc[0x5f24]; +}; + struct TradeEwramStruct { - /*0x00000*/ u8 filler_00000[0xd000]; + /*0x00000*/ u8 filler_00000[0x7000]; + /*0x07000*/ struct TradeEwramSubstruct unk_07000; /*0x0d000*/ u8 tileBuffers[13][256]; }; @@ -51,8 +97,26 @@ void sub_8047EC0(void); void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8); void sub_804ACD8(const u8 *, u8 *, u8); void nullsub_5(u8, u8); +void sub_804AA88(void); +void sub_804A964(struct UnkStructE *, void *); +void sub_80489F4(void); +void sub_804AA0C(u8); +bool8 sub_8048D44(void); +void sub_804AF84(void); +void sub_809D62C(struct Sprite *); +bool8 sub_804ABF8(void); +void sub_804ACF4(u8); +void sub_804A41C(u8); +void sub_8048C70(void); +void sub_8048B0C(u8); +void sub_804AE3C(u8); +void sub_804AF10(void); +void sub_80494D8(void); +void sub_8048AB4(void); extern u8 *gUnknown_020296CC[13]; +extern struct TradeEwramSubstruct *gUnknown_03004824; +extern u8 gUnknown_03000508; extern u8 ewram[]; #define ewram_2010000 (*(struct TradeEwramStruct *)(ewram + 0x10000)) @@ -682,6 +746,186 @@ __attribute__((naked)) void sub_8047E44(void) } #endif +void sub_8047EC0(void) +{ + int i; + + switch (gMain.state) + { + case 0: + gUnknown_03004824 = &ewram_2010000.unk_07000; + sub_804AA88(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + sub_804A964(&gUnknown_03004824->unk_00c8, (void *)BG_SCREEN_ADDR(5)); + SetVBlankCallback(sub_80489F4); + InitMenuWindow(&gWindowConfig_81E6CE4); + SetUpWindowConfig(&gWindowConfig_81E6F84); + InitWindowFromConfig(&gUnknown_03004824->window, &gWindowConfig_81E6F84); + gUnknown_03004824->unk_007a = SetTextWindowBaseTileNum(20); + LoadTextWindowGraphics(&gUnknown_03004824->window); + MenuZeroFillScreen(); + sub_809D51C(); + gUnknown_03004824->unk_0075 = 0; + gUnknown_03004824->unk_007b = 0; + gUnknown_03004824->unk_007c = 0; + gUnknown_03004824->unk_0080 = 0; + gUnknown_03004824->unk_0081 = 0; + gUnknown_03004824->unk_0086 = 0; + gUnknown_03004824->unk_0087 = 0; + gUnknown_03004824->unk_00b4 = 0; + gUnknown_03000508 = 0; + gMain.state ++; + sub_804AA0C(0); + CpuFill16(0, ewram_2010000.tileBuffers, sizeof(ewram_2010000.tileBuffers)); + for (i = 0; i < 13; i ++) + gUnknown_020296CC[i] = ewram_2010000.tileBuffers[i]; + break; + case 1: + gLinkType = 0x1122; + OpenLink(); + for (i = 0; i < PARTY_SIZE; i ++) + CreateMon(&gEnemyParty[i], 0, 0, 0x20, FALSE, 0, FALSE, 0); + gMain.state ++; + gUnknown_03004824->unk_00b4 = 0; + CreateTask(sub_8083C50, 1); + break; + case 2: + gUnknown_03004824->unk_00b4 ++; + if (gUnknown_03004824->unk_00b4 > 11) + { + gUnknown_03004824->unk_00b4 = 0; + gMain.state ++; + } + break; + case 3: + if (GetLinkPlayerCount_2() >= sub_800820C()) + { + if (IsLinkMaster()) + { + if (++gUnknown_03004824->unk_00b4 > 30) + { + sub_8007F4C(); + gMain.state ++; + } + } + else + gMain.state ++; + } + break; + case 4: + if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == TRUE) + { + CalculatePlayerPartyCount(); + gMain.state ++; + } + break; + case 5: + if (sub_8048D44()) + { + sub_804AF84(); + gMain.state ++; + } + break; + case 6: + CalculateEnemyPartyCount(); + FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, 0, 0, 29, 19); + REG_DISPCNT = 0; + gUnknown_03004824->playerPartyCount = gPlayerPartyCount; + gUnknown_03004824->friendPartyCount = gEnemyPartyCount; + for (i = 0; i < gUnknown_03004824->playerPartyCount; i ++) + gUnknown_03004824->playerPartyIcons[i] = CreateMonIcon(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2), sub_809D62C, gTradeMonSpriteCoords[i][0] * 8 + 14, gTradeMonSpriteCoords[i][1] * 8 - 12, TRUE, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY)); + for (i = 0; i < gUnknown_03004824->friendPartyCount; i ++) + gUnknown_03004824->friendPartyIcons[i] = CreateMonIcon(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[6 + i][0] * 8 + 14, gTradeMonSpriteCoords[6 + i][1] * 8 - 12, TRUE, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY)); + nullsub_5(2, 0); + gMain.state ++; + break; + case 7: + LoadHeldItemIconGraphics(); + CreateHeldItemIcons(&gUnknown_03004824->playerPartyCount, gUnknown_03004824->playerPartyIcons, 0); + gMain.state ++; + break; + case 8: + CreateHeldItemIcons(&gUnknown_03004824->playerPartyCount, gUnknown_03004824->playerPartyIcons, 1); + gMain.state ++; + break; + case 9: + sub_8047CE8(); + gMain.state ++; + gUnknown_03004824->unk_00b4 = 0; + break; + case 10: + nullsub_5(4, 0); + if (sub_804ABF8()) + gMain.state ++; + break; + case 11: + sub_8047D58(); + gMain.state ++; + break; + case 12: + sub_8047E44(); + gUnknown_03004824->unk_0040 = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); + gUnknown_03004824->unk_0041 = 0; + gMain.state ++; + nullsub_5(6, 0); + break; + case 13: + sub_804ACF4(0); + sub_804A41C(0); + gUnknown_03004824->unk_0000 = 0; + gUnknown_03004824->unk_0001 = 0; + sub_8048C70(); + gMain.state ++; + nullsub_5(7, 0); + PlayBGM(BGM_P_SCHOOL); + break; + case 14: + sub_804ACF4(1); + sub_804A41C(1); + gMain.state ++; + // fallthrough + case 15: + sub_8048B0C(0); + gMain.state ++; + break; + case 16: + sub_8048B0C(1); + gMain.state ++; + break; + case 17: + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gMain.state ++; + break; + case 18: + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; + gMain.state ++; + break; + case 19: + sub_804AE3C(0); + gMain.state ++; + break; + case 20: + sub_804AE3C(1); + sub_804AF10(); + gMain.state ++; + break; + case 21: + if (!gPaletteFade.active) + { + gMain.callback1 = sub_80494D8; + SetMainCallback2(sub_8048AB4); + gUnknown_03000508 = 0; + } + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From ba17d44881371ac80aaee7178077f887749f9595 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 31 Aug 2017 17:58:25 -0400 Subject: Matching sub_8047D58 and sub_8047E44 --- src/trade.c | 210 ++++-------------------------------------------------------- 1 file changed, 14 insertions(+), 196 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a50024249..c5cde0b39 100644 --- a/src/trade.c +++ b/src/trade.c @@ -515,30 +515,31 @@ void sub_8047CE8(void) nullsub_5(3, 0); } -#ifdef NONMATCHING void sub_8047D58(void) { - u8 language; struct SpriteTemplate spriteTemplate; int i; - s16 x; u8 mpId; + u16 slen; + int language; - language = StringLength(gSaveBlock2.playerName) <= 5 ? 0 : 1; - for (i = 0, x = gTradeUnknownSpriteCoords[language][0][0]; i < 3; x += 32, i ++) + slen = StringLength(gSaveBlock2.playerName); + language = slen <= 5 ? 0 : 1; + for (i = 0; i < 3; i ++) { spriteTemplate = gSpriteTemplate_820C0EC; spriteTemplate.tileTag += i; - CreateSprite(&spriteTemplate, x, gTradeUnknownSpriteCoords[language][0][1], 1); + CreateSprite(&spriteTemplate, gTradeUnknownSpriteCoords[language][0][0] + 32 * i, gTradeUnknownSpriteCoords[language][0][1], 1); } mpId = GetMultiplayerId(); - language = StringLength(gLinkPlayers[mpId ^ 1].name) <= 5 ? 0 : 1; - for (i = 0, x = gTradeUnknownSpriteCoords[language][1][0]; i < 3; x += 32, i ++) + slen = StringLength(gLinkPlayers[mpId ^ 1].name); + language = slen <= 5 ? 0 : 1; + for (i = 0; i < 3; i ++) { spriteTemplate = gSpriteTemplate_820C0EC; spriteTemplate.tileTag += i + 3; - CreateSprite(&spriteTemplate, x, gTradeUnknownSpriteCoords[language][1][1], 1); + CreateSprite(&spriteTemplate, gTradeUnknownSpriteCoords[language][1][0] + 32 * i, gTradeUnknownSpriteCoords[language][1][1], 1); } nullsub_5(5, 0); } @@ -547,204 +548,21 @@ void sub_8047E44(void) { struct SpriteTemplate spriteTemplate; int i; - s16 x; - for (i = 0, x = 0xd6; i < 2; x += 32, i ++) + for (i = 0; i < 2; i ++) { spriteTemplate = gSpriteTemplate_820C0EC; spriteTemplate.tileTag += i + 6; - CreateSprite(&spriteTemplate, x, 0x98, 1); + CreateSprite(&spriteTemplate, 0xd6 + 32 * i, 0x98, 1); } - for (i = 0, x = 0x18; i < 5; x += 32, i ++) + for (i = 0; i < 5; i ++) { spriteTemplate = gSpriteTemplate_820C0EC; spriteTemplate.tileTag += i + 8; - CreateSprite(&spriteTemplate, x, 0x96, 1); + CreateSprite(&spriteTemplate, 0x18 + 32 * i, 0x96, 1); } } -#else -__attribute__((naked)) void sub_8047D58(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tsub sp, 0x18\n" - "\tldr r0, _08047E30 @ =gSaveBlock2\n" - "\tbl StringLength\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmovs r1, 0\n" - "\tcmp r0, 0x5\n" - "\tbls _08047D72\n" - "\tmovs r1, 0x1\n" - "_08047D72:\n" - "\tmovs r5, 0\n" - "\tlsls r2, r1, 2\n" - "\tmov r6, sp\n" - "\tldr r0, _08047E34 @ =gTradeUnknownSpriteCoords\n" - "\tadds r1, r0, 0x1\n" - "\tadds r1, r2\n" - "\tmov r8, r1\n" - "\tadds r0, r2, r0\n" - "\tldrb r0, [r0]\n" - "\tlsls r4, r0, 16\n" - "_08047D86:\n" - "\tmov r1, sp\n" - "\tldr r0, _08047E38 @ =gSpriteTemplate_820C0EC\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, [r6]\n" - "\tadds r0, r5\n" - "\tstrh r0, [r6]\n" - "\tasrs r1, r4, 16\n" - "\tmov r0, sp\n" - "\tmov r3, r8\n" - "\tldrb r2, [r3]\n" - "\tmovs r3, 0x1\n" - "\tbl CreateSprite\n" - "\tmovs r7, 0x80\n" - "\tlsls r7, 14\n" - "\tadds r4, r7\n" - "\tadds r5, 0x1\n" - "\tcmp r5, 0x2\n" - "\tble _08047D86\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, _08047E3C @ =gLinkPlayers + 0x8\n" - "\tadds r0, r1\n" - "\tbl StringLength\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmovs r1, 0\n" - "\tcmp r0, 0x5\n" - "\tbls _08047DDA\n" - "\tmovs r1, 0x1\n" - "_08047DDA:\n" - "\tmovs r5, 0\n" - "\tlsls r2, r1, 2\n" - "\tmov r6, sp\n" - "\tldr r0, _08047E40 @ =gTradeUnknownSpriteCoords + 0x3\n" - "\tadds r1, r2, r0\n" - "\tmov r8, r1\n" - "\tsubs r0, 0x1\n" - "\tadds r0, r2, r0\n" - "\tldrb r0, [r0]\n" - "\tlsls r4, r0, 16\n" - "_08047DEE:\n" - "\tmov r1, sp\n" - "\tldr r0, _08047E38 @ =gSpriteTemplate_820C0EC\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, r5, 0x3\n" - "\tldrh r1, [r6]\n" - "\tadds r0, r1\n" - "\tstrh r0, [r6]\n" - "\tasrs r1, r4, 16\n" - "\tmov r0, sp\n" - "\tmov r3, r8\n" - "\tldrb r2, [r3]\n" - "\tmovs r3, 0x1\n" - "\tbl CreateSprite\n" - "\tmovs r7, 0x80\n" - "\tlsls r7, 14\n" - "\tadds r4, r7\n" - "\tadds r5, 0x1\n" - "\tcmp r5, 0x2\n" - "\tble _08047DEE\n" - "\tmovs r0, 0x5\n" - "\tmovs r1, 0\n" - "\tbl nullsub_5\n" - "\tadd sp, 0x18\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08047E30: .4byte gSaveBlock2\n" - "_08047E34: .4byte gTradeUnknownSpriteCoords\n" - "_08047E38: .4byte gSpriteTemplate_820C0EC\n" - "_08047E3C: .4byte gLinkPlayers + 0x8\n" - "_08047E40: .4byte gTradeUnknownSpriteCoords + 0x3"); -} - -__attribute__((naked)) void sub_8047E44(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tsub sp, 0x18\n" - "\tmovs r4, 0\n" - "\tmov r5, sp\n" - "\tmovs r6, 0xD6\n" - "\tlsls r6, 16\n" - "_08047E50:\n" - "\tmov r1, sp\n" - "\tldr r0, _08047EBC @ =gSpriteTemplate_820C0EC\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, r4, 0x6\n" - "\tldrh r1, [r5]\n" - "\tadds r0, r1\n" - "\tstrh r0, [r5]\n" - "\tasrs r1, r6, 16\n" - "\tmov r0, sp\n" - "\tmovs r2, 0x98\n" - "\tmovs r3, 0x1\n" - "\tbl CreateSprite\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 14\n" - "\tadds r6, r2\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x1\n" - "\tble _08047E50\n" - "\tmovs r4, 0\n" - "\tmov r5, sp\n" - "\tmovs r6, 0xC0\n" - "\tlsls r6, 13\n" - "_08047E84:\n" - "\tmov r1, sp\n" - "\tldr r0, _08047EBC @ =gSpriteTemplate_820C0EC\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, r4, 0\n" - "\tadds r0, 0x8\n" - "\tldrh r3, [r5]\n" - "\tadds r0, r3\n" - "\tstrh r0, [r5]\n" - "\tasrs r1, r6, 16\n" - "\tmov r0, sp\n" - "\tmovs r2, 0x96\n" - "\tmovs r3, 0x1\n" - "\tbl CreateSprite\n" - "\tmovs r7, 0x80\n" - "\tlsls r7, 14\n" - "\tadds r6, r7\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x4\n" - "\tble _08047E84\n" - "\tadd sp, 0x18\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08047EBC: .4byte gSpriteTemplate_820C0EC"); -} -#endif void sub_8047EC0(void) { -- cgit v1.2.3 From d074813fc531f43a634559f104e41795560678fa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 31 Aug 2017 19:21:38 -0400 Subject: sub_80484F4 --- src/trade.c | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 151 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index c5cde0b39..cf2070fe1 100644 --- a/src/trade.c +++ b/src/trade.c @@ -84,12 +84,20 @@ struct TradeEwramSubstruct { /*0x00b4*/ u8 unk_00b4; /*0x00b5*/ u8 filler_00b4[0x13]; /*0x00c8*/ struct UnkStructE unk_00c8; - /*0x00dc*/ u8 filler_00dc[0x5f24]; + /*0x00dc*/ u8 filler_00dc[0xf24]; +}; + +struct UnkStructF { + u8 filler_0000[9]; + u8 unk_0009; + u8 filler_000a[0xff6]; }; struct TradeEwramStruct { /*0x00000*/ u8 filler_00000[0x7000]; /*0x07000*/ struct TradeEwramSubstruct unk_07000; + /*0x08000*/ struct UnkStructF unk_08000; + /*0x09000*/ u8 filler_09000[0x4000]; /*0x0d000*/ u8 tileBuffers[13][256]; }; @@ -744,6 +752,148 @@ void sub_8047EC0(void) UpdatePaletteFade(); } +void sub_80484F4(void) +{ + int i; + struct UnkStructF *unkStructF; + + switch (gMain.state) + { + case 0: + gUnknown_03004824 = &ewram_2010000.unk_07000; + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + sub_804A964(&gUnknown_03004824->unk_00c8, (void *)BG_SCREEN_ADDR(5)); + SetVBlankCallback(sub_80489F4); + InitMenuWindow(&gWindowConfig_81E6CE4); + SetUpWindowConfig(&gWindowConfig_81E6F84); + InitWindowFromConfig(&gUnknown_03004824->window, &gWindowConfig_81E6F84); + gUnknown_03004824->unk_007a = SetTextWindowBaseTileNum(20); + LoadTextWindowGraphics(&gUnknown_03004824->window); + MenuZeroFillScreen(); + sub_809D51C(); + gUnknown_03004824->unk_0075 = 0; + gUnknown_03004824->unk_007b = 0; + gUnknown_03004824->unk_007c = 0; + gUnknown_03004824->unk_0080 = 0; + gUnknown_03004824->unk_0081 = 0; + gUnknown_03004824->unk_0086 = 0; + gUnknown_03004824->unk_0087 = 0; + gUnknown_03004824->unk_00b4 = 0; + gUnknown_03000508 = 0; + gMain.state ++; + for (i = 0; i < 13; i ++) + gUnknown_020296CC[i] = ewram_2010000.tileBuffers[i]; + break; + case 1: + gMain.state ++; + gUnknown_03004824->unk_00b4 = 0; + break; + case 2: + gMain.state ++; + break; + case 3: + gMain.state ++; + break; + case 4: + CalculatePlayerPartyCount(); + gMain.state ++; + break; + case 5: + gMain.state ++; + break; + case 6: + CalculateEnemyPartyCount(); + REG_DISPCNT = 0; + gUnknown_03004824->playerPartyCount = gPlayerPartyCount; + gUnknown_03004824->friendPartyCount = gEnemyPartyCount; + sub_804A41C(0); + sub_804A41C(1); + for (i = 0; i < gUnknown_03004824->playerPartyCount; i ++) + gUnknown_03004824->playerPartyIcons[i] = CreateMonIcon(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[i][0] * 8 + 14, gTradeMonSpriteCoords[i][1] * 8 - 12, TRUE, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY)); + for (i = 0; i < gUnknown_03004824->friendPartyCount; i ++) + gUnknown_03004824->friendPartyIcons[i] = CreateMonIcon(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[6 + i][0] * 8 + 14, gTradeMonSpriteCoords[6 + i][1] * 8 - 12, TRUE, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY)); + nullsub_5(2, 0); + gMain.state ++; + break; + case 7: + LoadHeldItemIconGraphics(); + CreateHeldItemIcons(&gUnknown_03004824->playerPartyCount, gUnknown_03004824->playerPartyIcons, 0); + gMain.state ++; + break; + case 8: + CreateHeldItemIcons(&gUnknown_03004824->playerPartyCount, gUnknown_03004824->playerPartyIcons, 1); + gMain.state ++; + break; + case 9: + sub_8047CE8(); + gMain.state ++; + gUnknown_03004824->unk_00b4 = 0; + break; + case 10: + nullsub_5(4, 0); + if (sub_804ABF8()) + { + gMain.state ++; + } + break; + case 11: + sub_8047D58(); + gMain.state ++; + break; + case 12: + sub_8047E44(); + unkStructF = &ewram_2010000.unk_08000; + if (gUnknown_03004824->unk_0041 < 6) + gUnknown_03004824->unk_0041 = unkStructF->unk_0009; + else + gUnknown_03004824->unk_0041 = unkStructF->unk_0009 + 6; + gUnknown_03004824->unk_0040 = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[gUnknown_03004824->unk_0041][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_03004824->unk_0041][1] * 8, 2); + gMain.state = 15; + nullsub_5(6, 0); + break; + case 15: + sub_8048B0C(0); + gMain.state ++; + break; + case 16: + sub_8048B0C(1); + gUnknown_03004824->unk_0000 = 0; + gUnknown_03004824->unk_0001 = 0; + sub_8048C70(); + nullsub_5(7, 0); + gMain.state ++; + break; + case 17: + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gMain.state ++; + break; + case 18: + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; + gMain.state ++; + break; + case 19: + gMain.state ++; + break; + case 20: + sub_804AF10(); + gMain.state ++; + break; + case 21: + if (!gPaletteFade.active) + { + SetMainCallback2(sub_8048AB4); + gUnknown_03000508 = 0; + } + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 67d86d6a4cf715b9089f420c067935bcee9d1d7f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 31 Aug 2017 19:33:46 -0400 Subject: through sub_8048AB4 --- src/trade.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index cf2070fe1..4e1c74b83 100644 --- a/src/trade.c +++ b/src/trade.c @@ -80,7 +80,9 @@ struct TradeEwramSubstruct { /*0x0082*/ u8 filler_0082[4]; /*0x0086*/ u8 unk_0086; /*0x0087*/ u8 unk_0087; - /*0x0088*/ u8 filler_0088[0x2c]; + /*0x0088*/ u8 filler_0088[2]; + /*0x008a*/ u8 unk_008a; + /*0x008b*/ u8 filler_008b[0x29]; /*0x00b4*/ u8 unk_00b4; /*0x00b5*/ u8 filler_00b4[0x13]; /*0x00c8*/ struct UnkStructE unk_00c8; @@ -121,7 +123,13 @@ void sub_804AE3C(u8); void sub_804AF10(void); void sub_80494D8(void); void sub_8048AB4(void); +void sub_804A940(struct UnkStructE *); +void sub_804B41C(void); +void sub_8049DE0(void); +void sub_804AB30(void); +void sub_8049ED4(u8); +extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; extern struct TradeEwramSubstruct *gUnknown_03004824; extern u8 gUnknown_03000508; @@ -894,6 +902,57 @@ void sub_80484F4(void) UpdatePaletteFade(); } +void sub_80489F4(void) +{ + sub_804A940(&gUnknown_03004824->unk_00c8); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8048A14(void) +{ + if (++gUnknown_03004824->unk_00b4 >= 16) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_03004824->unk_007b = 10; + } +} + +void sub_8048A50(void) +{ + if (!gPaletteFade.active) + { + gUnknown_020297D8[0] = gUnknown_03004824->unk_0041; + gUnknown_020297D8[1] = gUnknown_03004824->unk_008a; + sub_800832C(); + gUnknown_03004824->unk_007b = 13; + } +} + +void sub_8048A90(void) +{ + if (!gReceivedRemoteLinkPlayers) + { + gMain.callback1 = NULL; + SetMainCallback2(sub_804B41C); + } +} + +void sub_8048AB4(void) +{ + sub_8049DE0(); + sub_804AB30(); + sub_8049ED4(0); + sub_8049ED4(1); + REG_BG2HOFS = gUnknown_03004824->unk_0000++; + REG_BG3HOFS = gUnknown_03004824->unk_0001--; + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From ff1da361388c9f38813e6622839e702740b2974c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 1 Sep 2017 22:02:57 -0400 Subject: nonmatching sub_8048B0C --- src/trade.c | 235 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 233 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 4e1c74b83..38cde38de 100644 --- a/src/trade.c +++ b/src/trade.c @@ -56,6 +56,7 @@ struct UnkStructE { /*0x08*/ void *vramAddr; /*0x0c*/ u8 filler_0c[4]; /*0x10*/ u8 unk_10; + /*0x12*/ u16 unk_12[0x400]; }; struct TradeEwramSubstruct { @@ -84,9 +85,9 @@ struct TradeEwramSubstruct { /*0x008a*/ u8 unk_008a; /*0x008b*/ u8 filler_008b[0x29]; /*0x00b4*/ u8 unk_00b4; - /*0x00b5*/ u8 filler_00b4[0x13]; + /*0x00b5*/ u8 filler_00b5[0x13]; /*0x00c8*/ struct UnkStructE unk_00c8; - /*0x00dc*/ u8 filler_00dc[0xf24]; + /*0x08dc*/ u8 filler_04dc[0x724]; }; struct UnkStructF { @@ -128,6 +129,8 @@ void sub_804B41C(void); void sub_8049DE0(void); void sub_804AB30(void); void sub_8049ED4(u8); +void sub_804A6DC(u8); +void sub_804A938(struct UnkStructE *); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -953,6 +956,234 @@ void sub_8048AB4(void) UpdatePaletteFade(); } +#ifdef NONMATCHING +// Only minor register permutations +#pragma push_macro("BLOCKSIZE") +#define BLOCKSIZE 0x800 +void sub_8048B0C(u8 a0) +{ + int i; + u16 *dest; + const u16 *src; + u32 size; + switch (a0) + { + case 0: + for (i = 0; i < 48; i ++) + { + gPlttBufferUnfaded[i] = *(gUnknown_08EA02C8 + i); + gPlttBufferFaded[i] = *(gUnknown_08EA02C8 + i); + } + src = gUnknown_08EA0348; + dest = (u16 *)BG_VRAM; + size = 0x1280; + while (1) + { + DmaCopy16(3, src, dest, BLOCKSIZE * sizeof(u16)); + src += BLOCKSIZE; + dest += BLOCKSIZE; + size -= BLOCKSIZE * sizeof(u16); + if (size <= BLOCKSIZE * sizeof(u16)) + { + DmaCopy16(3, src, dest, size); + break; + } + } + for (i = 0; i < 0x400; i ++) + gUnknown_03004824->unk_00c8.unk_12[i] = gUnknown_08EA15C8[i]; + dest = (u16 *)BG_SCREEN_ADDR(6); + DmaCopy16(3, gTradeStripesBG2Tilemap, dest, 0x800); + break; + case 1: + src = gTradeStripesBG3Tilemap; + dest = (u16 *)BG_SCREEN_ADDR(7); + DmaCopy16(3, src, dest, 0x800); + sub_804A6DC(0); + sub_804A6DC(1); + sub_804A938(&gUnknown_03004824->unk_00c8); + REG_BG0CNT &= ~0x03; // BGCNT_PRIORITY(0) + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(5); + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(6); + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(7); + REG_BG0HOFS = 0; + REG_BG1HOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG3VOFS = 0; + break; + } +} +#pragma pop_macro("BLOCKSIZE") +#else +asm(".include \"constants/gba_constants.inc\""); +__attribute__((naked)) +void sub_8048B0C(u8 a0) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08048B1C\n" + "\tcmp r0, 0x1\n" + "\tbeq _08048BD0\n" + "\tb _08048C3A\n" + "_08048B1C:\n" + "\tldr r5, _08048BA0 @ =gUnknown_08EA0348\n" + "\tldr r0, _08048BA4 @ =gTradeStripesBG2Tilemap\n" + "\tmov r12, r0\n" + "\tldr r1, _08048BA8 @ =gUnknown_08EA02C8\n" + "\tldr r4, _08048BAC @ =gPlttBufferFaded\n" + "\tldr r3, _08048BB0 @ =gPlttBufferUnfaded\n" + "\tmovs r2, 0x2F\n" + "_08048B2A:\n" + "\tldrh r0, [r1]\n" + "\tstrh r0, [r3]\n" + "\tldrh r0, [r1]\n" + "\tstrh r0, [r4]\n" + "\tadds r1, 0x2\n" + "\tadds r4, 0x2\n" + "\tadds r3, 0x2\n" + "\tsubs r2, 0x1\n" + "\tcmp r2, 0\n" + "\tbge _08048B2A\n" + "\tadds r3, r5, 0\n" + "\tmovs r4, 0xC0\n" + "\tlsls r4, 19\n" + "\tmovs r5, 0x94\n" + "\tlsls r5, 5\n" + "\tldr r1, _08048BB4 @ =0x040000d4\n" + "\tldr r6, _08048BB8 @ =0x80000800\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 5\n" + "\tmovs r7, 0x80\n" + "\tlsls r7, 24\n" + "_08048B54:\n" + "\tstr r3, [r1]\n" + "\tstr r4, [r1, 0x4]\n" + "\tstr r6, [r1, 0x8]\n" + "\tldr r0, [r1, 0x8]\n" + "\tadds r3, r2\n" + "\tadds r4, r2\n" + "\tsubs r5, r2\n" + "\tcmp r5, r2\n" + "\tbhi _08048B54\n" + "\tstr r3, [r1]\n" + "\tstr r4, [r1, 0x4]\n" + "\tlsrs r0, r5, 1\n" + "\torrs r0, r7\n" + "\tstr r0, [r1, 0x8]\n" + "\tldr r0, [r1, 0x8]\n" + "\tmovs r2, 0\n" + "\tldr r5, _08048BBC @ =0x000003ff\n" + "\tldr r4, _08048BC0 @ =gUnknown_03004824\n" + "\tldr r3, _08048BC4 @ =gUnknown_08EA15C8\n" + "_08048B7A:\n" + "\tldr r0, [r4]\n" + "\tlsls r1, r2, 1\n" + "\tadds r0, 0xDA\n" + "\tadds r0, r1\n" + "\tldrh r1, [r3]\n" + "\tstrh r1, [r0]\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x1\n" + "\tcmp r2, r5\n" + "\tble _08048B7A\n" + "\tldr r1, _08048BC8 @ =0x06003000\n" + "\tldr r0, _08048BB4 @ =0x040000d4\n" + "\tmov r2, r12\n" + "\tstr r2, [r0]\n" + "\tstr r1, [r0, 0x4]\n" + "\tldr r1, _08048BCC @ =0x80000400\n" + "\tstr r1, [r0, 0x8]\n" + "\tldr r0, [r0, 0x8]\n" + "\tb _08048C3A\n" + "\t.align 2, 0\n" + "_08048BA0: .4byte gUnknown_08EA0348\n" + "_08048BA4: .4byte gTradeStripesBG2Tilemap\n" + "_08048BA8: .4byte gUnknown_08EA02C8\n" + "_08048BAC: .4byte gPlttBufferFaded\n" + "_08048BB0: .4byte gPlttBufferUnfaded\n" + "_08048BB4: .4byte 0x040000d4\n" + "_08048BB8: .4byte 0x80000800\n" + "_08048BBC: .4byte 0x000003ff\n" + "_08048BC0: .4byte gUnknown_03004824\n" + "_08048BC4: .4byte gUnknown_08EA15C8\n" + "_08048BC8: .4byte 0x06003000\n" + "_08048BCC: .4byte 0x80000400\n" + "_08048BD0:\n" + "\tldr r1, _08048C40 @ =gTradeStripesBG3Tilemap\n" + "\tldr r2, _08048C44 @ =0x06003800\n" + "\tldr r0, _08048C48 @ =0x040000d4\n" + "\tstr r1, [r0]\n" + "\tstr r2, [r0, 0x4]\n" + "\tldr r1, _08048C4C @ =0x80000400\n" + "\tstr r1, [r0, 0x8]\n" + "\tldr r0, [r0, 0x8]\n" + "\tmovs r0, 0\n" + "\tbl sub_804A6DC\n" + "\tmovs r0, 0x1\n" + "\tbl sub_804A6DC\n" + "\tldr r0, _08048C50 @ =gUnknown_03004824\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0xC8\n" + "\tbl sub_804A938\n" + "\tldr r2, _08048C54 @ =REG_BG0CNT\n" + "\tldrh r1, [r2]\n" + "\tldr r0, _08048C58 @ =0x0000fffc\n" + "\tands r0, r1\n" + "\tstrh r0, [r2]\n" + "\tldr r1, _08048C5C @ =REG_BG1CNT\n" + "\tldr r2, _08048C60 @ =0x00000501\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tldr r2, _08048C64 @ =0x00000602\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tldr r2, _08048C68 @ =0x00000703\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tldr r0, _08048C6C @ =REG_BG0HOFS\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tsubs r0, 0xA\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "_08048C3A:\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08048C40: .4byte gTradeStripesBG3Tilemap\n" + "_08048C44: .4byte 0x06003800\n" + "_08048C48: .4byte 0x040000d4\n" + "_08048C4C: .4byte 0x80000400\n" + "_08048C50: .4byte gUnknown_03004824\n" + "_08048C54: .4byte REG_BG0CNT\n" + "_08048C58: .4byte 0x0000fffc\n" + "_08048C5C: .4byte REG_BG1CNT\n" + "_08048C60: .4byte 0x00000501\n" + "_08048C64: .4byte 0x00000602\n" + "_08048C68: .4byte 0x00000703\n" + "_08048C6C: .4byte REG_BG0HOFS"); +} +#endif + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From a4b29bdd2b3cb2ff3fc69fc69e0725ce50bd828a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 1 Sep 2017 22:09:59 -0400 Subject: sub_8048C70 --- src/trade.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 38cde38de..5b0ea50fe 100644 --- a/src/trade.c +++ b/src/trade.c @@ -69,7 +69,9 @@ struct TradeEwramSubstruct { /*0x0041*/ u8 unk_0041; /*0x0042*/ u8 playerPartyCount; /*0x0043*/ u8 friendPartyCount; - /*0x0044*/ u8 filler_0044[0x31]; + /*0x0044*/ u8 tradeIconsActive[12]; + /*0x0050*/ u8 unk_0050; + /*0x0051*/ u8 filler_0044[0x24]; /*0x0075*/ u8 unk_0075; /*0x0076*/ u8 filler_0076[4]; /*0x007a*/ u8 unk_007a; @@ -1184,6 +1186,33 @@ void sub_8048B0C(u8 a0) } #endif +void sub_8048C70(void) +{ + int i; + for (i = 0; i < PARTY_SIZE; i ++) + { + if (i < gUnknown_03004824->playerPartyCount) + { + gSprites[gUnknown_03004824->playerPartyIcons[i]].invisible = FALSE; + gUnknown_03004824->tradeIconsActive[i] = TRUE; + } + else + { + gUnknown_03004824->tradeIconsActive[i] = FALSE; + } + if (i < gUnknown_03004824->friendPartyCount) + { + gSprites[gUnknown_03004824->friendPartyIcons[i]].invisible = FALSE; + gUnknown_03004824->tradeIconsActive[i + 6] = TRUE; + } + else + { + gUnknown_03004824->tradeIconsActive[i + 6] = FALSE; + } + } + gUnknown_03004824->unk_0050 = TRUE; +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From e3ecbe5d7850c50de8882385c1400ed4e77c61b5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 1 Sep 2017 22:12:35 -0400 Subject: nullsub_5 and sub_8048D24 --- src/trade.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 5b0ea50fe..60b11b63f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1213,6 +1213,14 @@ void sub_8048C70(void) gUnknown_03004824->unk_0050 = TRUE; } +void nullsub_5(u8 a0, u8 a1) {} + +void sub_8048D24(u8 *dest, const u8 *src, u32 size) +{ + int i; + for (i = 0; i < size; i ++) dest[i] = src[i]; +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From af86929d787ca449ab86b3bd8674cbd5c44fb7ea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 10:18:29 -0400 Subject: sub_8048D44 --- src/trade.c | 208 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 206 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 60b11b63f..d4d5e0b50 100644 --- a/src/trade.c +++ b/src/trade.c @@ -19,6 +19,7 @@ #include "party_menu.h" #include "songs.h" #include "sound.h" +#include "data2.h" struct InGameTrade { /*0x00*/ u8 name[11]; @@ -87,7 +88,8 @@ struct TradeEwramSubstruct { /*0x008a*/ u8 unk_008a; /*0x008b*/ u8 filler_008b[0x29]; /*0x00b4*/ u8 unk_00b4; - /*0x00b5*/ u8 filler_00b5[0x13]; + /*0x00b5*/ u8 unk_00b5[7]; + /*0x00bc*/ u8 filler_00bc[12]; /*0x00c8*/ struct UnkStructE unk_00c8; /*0x08dc*/ u8 filler_04dc[0x724]; }; @@ -133,11 +135,14 @@ void sub_804AB30(void); void sub_8049ED4(u8); void sub_804A6DC(u8); void sub_804A938(struct UnkStructE *); +u8 sub_804A9F4(void); +u8 sub_804AA00(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; extern struct TradeEwramSubstruct *gUnknown_03004824; extern u8 gUnknown_03000508; +extern struct MailStruct gUnknown_02029700[16]; extern u8 ewram[]; #define ewram_2010000 (*(struct TradeEwramStruct *)(ewram + 0x10000)) @@ -430,8 +435,68 @@ const u8 gTradeUnknownSpriteCoords[][2][2] = { } }; +const u8 *const gUnknown_0820C2F0[] = { + TradeText_LinkStandby, + TradeText_TradeCancelled, + TradeText_OnlyPoke, + TradeText_NonTradablePoke, + TradeText_WaitingForFriend, + TradeText_WantToTrade +}; + +const u8 gTradeMessageWindowRects[][4] = { + {8, 7, 22, 12}, + {8, 7, 22, 12}, + {6, 7, 24, 12}, + {6, 7, 24, 12}, + {8, 7, 22, 12}, + {7, 7, 23, 12} +}; + +const struct MenuAction gUnknown_0820C320[] = { + {TradeText_Summary2, sub_804A9F4}, + {TradeText_Trade2, sub_804AA00} +}; + +const u8 gUnknown_0820C330[][2] = { + { 0, 14}, + {15, 29} +}; + +const u8 gUnknown_0820C334[][2] = { + { 3, 5}, + { 3, 7}, + {18, 5}, + {18, 7} +}; + +const u8 gOtherText_Terminator[] = _(""); +const u8 gOtherText_MaleSymbol3[] = _("♂"); +const u8 gOtherText_FemaleSymbol3[] = _("♀"); +const u8 gOtherText_GenderlessSymbol[] = _("$"); + +u8 *const unref_data_820C344 = gTileBuffer; +const u8 unref_strings_820C348[][13] = { + _("かいめの そうしん"), + _("かいめの じゅしん"), + _("ポケモンアイコンセット"), + _("OBJテキストセット"), + _("セルセット"), + _("OBJテキストADD"), + _("システムメッセージADD"), + _("はいけいセット"), +}; + +const u8 gUnknown_0820C3B0[] = _("ヌケニン"); +const u8 unref_string_0820C3B5[] = _("こうかんせいりつ "); +const u8 unref_string_0820C3C3[] = _("だめだたらしいよ "); +const u8 gUnknown_0820C3D1[][2] = { + { 4, 3}, + {19, 3} +}; asm(".section .rodata.igt"); + const struct InGameTrade gIngameTrades[] = { { _("MAKIT"), SPECIES_MAKUHITA, @@ -520,6 +585,8 @@ const s8 gTradeBallVerticalVelocityTable[] = { 1, 1, 2, 3 }; +// .text + void sub_8047CD8(void) { SetMainCallback2(sub_8047EC0); @@ -1215,12 +1282,149 @@ void sub_8048C70(void) void nullsub_5(u8 a0, u8 a1) {} -void sub_8048D24(u8 *dest, const u8 *src, u32 size) +static void sub_8048D24(u8 *dest, const u8 *src, u32 size) { int i; for (i = 0; i < size; i ++) dest[i] = src[i]; } +bool8 sub_8048D44(void) +{ + u8 mpId = GetMultiplayerId(); + int i; + u16 species; + u8 nickname[11]; + struct Pokemon *pokemon; + + SetLinkDebugValues(gUnknown_03004824->unk_0075 / 100, gUnknown_03004824->unk_0075 % 100); + switch (gUnknown_03004824->unk_0075) + { + case 0: + sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[0], 2 * sizeof(struct Pokemon)); + gUnknown_03004824->unk_0075 ++; + break; + case 1: + if (sub_8007ECC()) + { + if (GetBlockReceivedStatus() == 0) + { + gUnknown_03004824->unk_0075 ++; + } + else + { + ResetBlockReceivedFlags(); + gUnknown_03004824->unk_0075 ++; + } + } + break; + case 2: + if (mpId == 0) + { + sub_8007E9C(1); + } + gUnknown_03004824->unk_0075 ++; + break; + case 3: + if (GetBlockReceivedStatus() == 3) + { + sub_8048D24((u8 *)&gEnemyParty[0], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); + ResetBlockReceivedFlags(); + gUnknown_03004824->unk_0075 ++; + } + break; + case 4: + sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[2], 2 * sizeof(struct Pokemon)); + gUnknown_03004824->unk_0075 ++; + break; + case 5: + if (mpId == 0) + { + sub_8007E9C(1); + } + gUnknown_03004824->unk_0075 ++; + break; + case 6: + if (GetBlockReceivedStatus() == 3) + { + sub_8048D24((u8 *)&gEnemyParty[2], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); + ResetBlockReceivedFlags(); + gUnknown_03004824->unk_0075 ++; + } + break; + case 7: + sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[4], 2 * sizeof(struct Pokemon)); + gUnknown_03004824->unk_0075 ++; + break; + case 8: + if (mpId == 0) + { + sub_8007E9C(1); + } + gUnknown_03004824->unk_0075 ++; + break; + case 9: + if (GetBlockReceivedStatus() == 3) + { + sub_8048D24((u8 *)&gEnemyParty[4], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); + ResetBlockReceivedFlags(); + gUnknown_03004824->unk_0075 ++; + } + break; + case 10: + sub_8048D24(gBlockSendBuffer, (const u8 *)&gSaveBlock1.mail[0], 6 * sizeof(struct MailStruct) + 4); + gUnknown_03004824->unk_0075 ++; + break; + case 11: + if (mpId == 0) + { + sub_8007E9C(3); + } + gUnknown_03004824->unk_0075 ++; + break; + case 12: + if (GetBlockReceivedStatus() == 3) + { + sub_8048D24((u8 *)&gUnknown_02029700[0], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 6 * sizeof(struct MailStruct)); + ResetBlockReceivedFlags(); + gUnknown_03004824->unk_0075 ++; + } + break; + case 13: + sub_8048D24(gBlockSendBuffer, (const u8 *)gSaveBlock1.giftRibbons, 11); + gUnknown_03004824->unk_0075 ++; + break; + case 14: + if (mpId == 0) + { + sub_8007E9C(4); + } + gUnknown_03004824->unk_0075 ++; + break; + case 15: + if (GetBlockReceivedStatus() == 3) + { + sub_8048D24((u8 *)gUnknown_03004824->unk_00b5, (const u8 *)gBlockRecvBuffer[mpId ^ 1], 11); + ResetBlockReceivedFlags(); + gUnknown_03004824->unk_0075 ++; + } + break; + case 16: + pokemon = gEnemyParty; + for (i = 0; i < PARTY_SIZE; i ++) + { + if ((species = GetMonData(pokemon, MON_DATA_SPECIES)) != SPECIES_NONE && species == SPECIES_SHEDINJA && GetMonData(pokemon, MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE) + { + GetMonData(pokemon, MON_DATA_NICKNAME, nickname); + if (!StringCompareWithoutExtCtrlCodes(nickname, gUnknown_0820C3B0)) + SetMonData(pokemon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]); + } + pokemon ++; + } + return TRUE; + } + return FALSE; +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 2f903c67c9ffbdbec52e1982bbe6cb064e0d1138 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 10:27:59 -0400 Subject: sub_8049088 --- src/trade.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index d4d5e0b50..a8f3bf6e8 100644 --- a/src/trade.c +++ b/src/trade.c @@ -78,7 +78,8 @@ struct TradeEwramSubstruct { /*0x007a*/ u8 unk_007a; /*0x007b*/ u8 unk_007b; /*0x007c*/ u8 unk_007c; - /*0x007d*/ u8 filler_007d[3]; + /*0x007d*/ u8 unk_007d; + /*0x007e*/ u16 unk_007e; /*0x0080*/ u8 unk_0080; /*0x0081*/ u8 unk_0081; /*0x0082*/ u8 filler_0082[4]; @@ -1425,6 +1426,13 @@ bool8 sub_8048D44(void) return FALSE; } +void sub_8049088(void) +{ + u8 string[28]; + StringCopy(string, gTradeText_TradeOkayPrompt); + sub_804ACD8(string, (u8 *)BG_CHAR_ADDR(4) + gUnknown_03004824->unk_007e * 32, 20); +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From abdaf14f1098be7e65b388ad1960a94c4552bf80 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 11:32:05 -0400 Subject: sub_80490BC --- src/trade.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a8f3bf6e8..440a26ffb 100644 --- a/src/trade.c +++ b/src/trade.c @@ -82,7 +82,9 @@ struct TradeEwramSubstruct { /*0x007e*/ u16 unk_007e; /*0x0080*/ u8 unk_0080; /*0x0081*/ u8 unk_0081; - /*0x0082*/ u8 filler_0082[4]; + /*0x0082*/ u8 filler_0082[2]; + /*0x0084*/ u8 unk_0084; + /*0x0085*/ u8 unk_0085; /*0x0086*/ u8 unk_0086; /*0x0087*/ u8 unk_0087; /*0x0088*/ u8 filler_0088[2]; @@ -139,6 +141,10 @@ void sub_804A938(struct UnkStructE *); u8 sub_804A9F4(void); u8 sub_804AA00(void); +#ifdef ENGLISH +#define sub_804A96C_alt sub_804A96C +#endif + extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; extern struct TradeEwramSubstruct *gUnknown_03004824; @@ -1433,6 +1439,49 @@ void sub_8049088(void) sub_804ACD8(string, (u8 *)BG_CHAR_ADDR(4) + gUnknown_03004824->unk_007e * 32, 20); } +void sub_80490BC(u8 a0, u8 a1) +{ + if (a1 & 1) + { + switch (gBlockRecvBuffer[a0][0]) + { + case 0xeeaa: + gUnknown_03004824->unk_0084 = 2; + break; + case 0xaabb: + gUnknown_03004824->unk_0084 = 1; + break; + case 0xbbbb: + gUnknown_03004824->unk_0086 = 1; + break; + case 0xbbcc: + gUnknown_03004824->unk_0086 = 2; + break; + } + ResetBlockReceivedFlag(0); + } + if (a1 & 2) + { + switch (gBlockRecvBuffer[1][0]) + { + case 0xeeaa: + gUnknown_03004824->unk_0085 = 2; + break; + case 0xaabb: + gUnknown_03004824->unk_008a = gBlockRecvBuffer[1][1] + 6; + gUnknown_03004824->unk_0085 = 1; + break; + case 0xbbbb: + gUnknown_03004824->unk_0087 = 1; + break; + case 0xbbcc: + gUnknown_03004824->unk_0087 = 2; + break; + } + ResetBlockReceivedFlag(1); + } +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 84471b024d0ca28200b49416d022c6c588b3546e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 11:40:02 -0400 Subject: sub_80491E4 --- src/trade.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 440a26ffb..ee4853944 100644 --- a/src/trade.c +++ b/src/trade.c @@ -140,6 +140,7 @@ void sub_804A6DC(u8); void sub_804A938(struct UnkStructE *); u8 sub_804A9F4(void); u8 sub_804AA00(void); +void sub_8049E9C(u8); #ifdef ENGLISH #define sub_804A96C_alt sub_804A96C @@ -1482,6 +1483,44 @@ void sub_80490BC(u8 a0, u8 a1) } } +void sub_80491E4(u8 unused, u8 a1) +{ + if (a1 & 1) + { + switch (gBlockRecvBuffer[0][0]) + { + case 0xeebb: + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + sub_804AA0C(4); + gUnknown_03004824->unk_007b = 11; + break; + case 0xeecc: + sub_804AA0C(5); + gUnknown_03004824->unk_007b = 8; + break; + case 0xdddd: + gUnknown_03004824->unk_008a = ((u8 *)gBlockRecvBuffer[0])[1 * sizeof(u16)] + 6; + sub_8049E9C(gUnknown_03004824->unk_0041); + sub_8049E9C(gUnknown_03004824->unk_008a); + gUnknown_03004824->unk_007b = 7; + break; + case 0xccdd: + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_03004824->unk_007b = 10; + break; + case 0xddee: + sub_804AA0C(1); + gUnknown_03004824->unk_007b = 8; + break; + } + ResetBlockReceivedFlag(0); + } + if (a1 & 2) + { + ResetBlockReceivedFlag(1); + } +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 4f684294677b00c4ebf78cf957e16b32882dfa09 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 11:58:00 -0400 Subject: sub_80492D8 --- src/trade.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index ee4853944..2fc76c820 100644 --- a/src/trade.c +++ b/src/trade.c @@ -89,7 +89,10 @@ struct TradeEwramSubstruct { /*0x0087*/ u8 unk_0087; /*0x0088*/ u8 filler_0088[2]; /*0x008a*/ u8 unk_008a; - /*0x008b*/ u8 filler_008b[0x29]; + /*0x008b*/ u8 unk_008b; + /*0x008c*/ u16 unk_008c; + /*0x008e*/ u16 unk_008e; + /*0x0090*/ u8 filler_0090[0x24]; /*0x00b4*/ u8 unk_00b4; /*0x00b5*/ u8 unk_00b5[7]; /*0x00bc*/ u8 filler_00bc[12]; @@ -141,6 +144,7 @@ void sub_804A938(struct UnkStructE *); u8 sub_804A9F4(void); u8 sub_804AA00(void); void sub_8049E9C(u8); +void sub_804AADC(u8, u8); #ifdef ENGLISH #define sub_804A96C_alt sub_804A96C @@ -1521,6 +1525,72 @@ void sub_80491E4(u8 unused, u8 a1) } } +void sub_80492D8(void) +{ + if (gUnknown_03004824->unk_0084 && gUnknown_03004824->unk_0085) + { + if (gUnknown_03004824->unk_0084 == 1 && gUnknown_03004824->unk_0085 == 1) + { + gUnknown_03004824->unk_007b = 6; + gUnknown_03004824->unk_008c = 0xdddd; + gUnknown_03004824->unk_008e = gUnknown_03004824->unk_0041; + sub_804AADC(5, 0); + gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; + } + else if (gUnknown_03004824->unk_0084 == 1 && gUnknown_03004824->unk_0085 == 2) + { + sub_804AA0C(1); + gUnknown_03004824->unk_008c = 0xeecc; + gUnknown_03004824->unk_008e = 0; + sub_804AADC(5, 0); + gUnknown_03004824->unk_0086 = gUnknown_03004824->unk_0087 = 0; + gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; + gUnknown_03004824->unk_007b = 8; + } + else if (gUnknown_03004824->unk_0084 == 2 && gUnknown_03004824->unk_0085 == 1) + { + sub_804AA0C(5); + gUnknown_03004824->unk_008c = 0xddee; + gUnknown_03004824->unk_008e = 0; + sub_804AADC(5, 0); + gUnknown_03004824->unk_0086 = gUnknown_03004824->unk_0087 = 0; + gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; + gUnknown_03004824->unk_007b = 8; + } + else if (gUnknown_03004824->unk_0084 == 2 && gUnknown_03004824->unk_0085 == 2) + { + gUnknown_03004824->unk_008c = 0xeebb; + gUnknown_03004824->unk_008e = 0; + sub_804AADC(5, 0); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; + gUnknown_03004824->unk_007b = 11; + } + } + if (gUnknown_03004824->unk_0086 && gUnknown_03004824->unk_0087) + { + if (gUnknown_03004824->unk_0086 == 1 && gUnknown_03004824->unk_0087 == 1) + { + gUnknown_03004824->unk_008c = 0xccdd; + gUnknown_03004824->unk_008e = 0; + sub_804AADC(5, 0); + gUnknown_03004824->unk_0086 = 0; + gUnknown_03004824->unk_0087 = 0; + gUnknown_03004824->unk_007b = 9; + } + if (gUnknown_03004824->unk_0086 == 2 || gUnknown_03004824->unk_0087 == 2) + { + sub_804AA0C(1); + gUnknown_03004824->unk_008c = 0xddee; + gUnknown_03004824->unk_008e = 0; + sub_804AADC(5, 0); + gUnknown_03004824->unk_0086 = 0; + gUnknown_03004824->unk_0087 = 0; + gUnknown_03004824->unk_007b = 8; + } + } +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From fd5ccd263652760f3c0c77fb0b727a01ef9d83a0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 12:02:53 -0400 Subject: sub_80494D8 --- src/trade.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 2fc76c820..78befff44 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1444,11 +1444,11 @@ void sub_8049088(void) sub_804ACD8(string, (u8 *)BG_CHAR_ADDR(4) + gUnknown_03004824->unk_007e * 32, 20); } -void sub_80490BC(u8 a0, u8 a1) +static void sub_80490BC(u8 mpId, u8 a1) { if (a1 & 1) { - switch (gBlockRecvBuffer[a0][0]) + switch (gBlockRecvBuffer[mpId][0]) { case 0xeeaa: gUnknown_03004824->unk_0084 = 2; @@ -1487,9 +1487,9 @@ void sub_80490BC(u8 a0, u8 a1) } } -void sub_80491E4(u8 unused, u8 a1) +static void sub_80491E4(u8 mpId, u8 status) { - if (a1 & 1) + if (status & 1) { switch (gBlockRecvBuffer[0][0]) { @@ -1519,13 +1519,13 @@ void sub_80491E4(u8 unused, u8 a1) } ResetBlockReceivedFlag(0); } - if (a1 & 2) + if (status & 2) { ResetBlockReceivedFlag(1); } } -void sub_80492D8(void) +static void sub_80492D8(void) { if (gUnknown_03004824->unk_0084 && gUnknown_03004824->unk_0085) { @@ -1591,6 +1591,22 @@ void sub_80492D8(void) } } +void sub_80494D8(void) +{ + u8 mpId = GetMultiplayerId(); + u8 status = GetBlockReceivedStatus(); + if (status) + { + if (mpId == 0) + sub_80490BC(mpId, status); + else + sub_80491E4(mpId, status); + ResetBlockReceivedFlags(); + } + if (mpId == 0) + sub_80492D8(); +} + asm(".section .text.sub_804A96C"); void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 4ba14aacde2d62ada21ed1054d642fc17aac870e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 12:20:18 -0400 Subject: Add static decorations where possible --- src/trade.c | 113 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 56 insertions(+), 57 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 78befff44..8bdc9865c 100644 --- a/src/trade.c +++ b/src/trade.c @@ -20,6 +20,11 @@ #include "songs.h" #include "sound.h" #include "data2.h" +#include "trade.h" + +#ifdef ENGLISH +#define sub_804A96C_alt sub_804A96C +#endif struct InGameTrade { /*0x00*/ u8 name[11]; @@ -114,41 +119,36 @@ struct TradeEwramStruct { /*0x0d000*/ u8 tileBuffers[13][256]; }; -void sub_8047EC0(void); -void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8); -void sub_804ACD8(const u8 *, u8 *, u8); -void nullsub_5(u8, u8); -void sub_804AA88(void); -void sub_804A964(struct UnkStructE *, void *); -void sub_80489F4(void); -void sub_804AA0C(u8); -bool8 sub_8048D44(void); -void sub_804AF84(void); -void sub_809D62C(struct Sprite *); -bool8 sub_804ABF8(void); -void sub_804ACF4(u8); -void sub_804A41C(u8); -void sub_8048C70(void); -void sub_8048B0C(u8); -void sub_804AE3C(u8); -void sub_804AF10(void); -void sub_80494D8(void); -void sub_8048AB4(void); -void sub_804A940(struct UnkStructE *); -void sub_804B41C(void); -void sub_8049DE0(void); -void sub_804AB30(void); -void sub_8049ED4(u8); -void sub_804A6DC(u8); -void sub_804A938(struct UnkStructE *); -u8 sub_804A9F4(void); -u8 sub_804AA00(void); -void sub_8049E9C(u8); -void sub_804AADC(u8, u8); - -#ifdef ENGLISH -#define sub_804A96C_alt sub_804A96C -#endif +static void sub_8047EC0(void); +/*static*/ void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8); +/*static*/ void sub_804ACD8(const u8 *, u8 *, u8); +static void nullsub_5(u8, u8); +/*static*/ void sub_804AA88(void); +/*static*/ void sub_804A964(struct UnkStructE *, void *); +static void sub_80489F4(void); +/*static*/ void sub_804AA0C(u8); +static bool8 sub_8048D44(void); +/*static*/ void sub_804AF84(void); +/*static*/ bool8 sub_804ABF8(void); +/*static*/ void sub_804ACF4(u8); +/*static*/ void sub_804A41C(u8); +static void sub_8048C70(void); +static void sub_8048B0C(u8); +/*static*/ void sub_804AE3C(u8); +/*static*/ void sub_804AF10(void); +static void sub_80494D8(void); +static void sub_8048AB4(void); +/*static*/ void sub_804A940(struct UnkStructE *); +/*static*/ void sub_804B41C(void); +/*static*/ void sub_8049DE0(void); +/*static*/ void sub_804AB30(void); +/*static*/ void sub_8049ED4(u8); +/*static*/ void sub_804A6DC(u8); +/*static*/ void sub_804A938(struct UnkStructE *); +/*static*/ u8 sub_804A9F4(void); +/*static*/ u8 sub_804AA00(void); +/*static*/ void sub_8049E9C(u8); +/*static*/ void sub_804AADC(u8, u8); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -156,7 +156,6 @@ extern struct TradeEwramSubstruct *gUnknown_03004824; extern u8 gUnknown_03000508; extern struct MailStruct gUnknown_02029700[16]; -extern u8 ewram[]; #define ewram_2010000 (*(struct TradeEwramStruct *)(ewram + 0x10000)) @@ -604,7 +603,7 @@ void sub_8047CD8(void) SetMainCallback2(sub_8047EC0); } -void sub_8047CE8(void) +static void sub_8047CE8(void) { u8 mpId; sub_804AFB8(&gWindowConfig_81E725C, gUnknown_020296CC[0], gSaveBlock2.playerName, 0xC); @@ -615,7 +614,7 @@ void sub_8047CE8(void) nullsub_5(3, 0); } -void sub_8047D58(void) +static void sub_8047D58(void) { struct SpriteTemplate spriteTemplate; int i; @@ -644,7 +643,7 @@ void sub_8047D58(void) nullsub_5(5, 0); } -void sub_8047E44(void) +static void sub_8047E44(void) { struct SpriteTemplate spriteTemplate; int i; @@ -664,7 +663,7 @@ void sub_8047E44(void) } } -void sub_8047EC0(void) +static void sub_8047EC0(void) { int i; @@ -844,7 +843,7 @@ void sub_8047EC0(void) UpdatePaletteFade(); } -void sub_80484F4(void) +/*static*/ void sub_80484F4(void) { int i; struct UnkStructF *unkStructF; @@ -986,7 +985,7 @@ void sub_80484F4(void) UpdatePaletteFade(); } -void sub_80489F4(void) +static void sub_80489F4(void) { sub_804A940(&gUnknown_03004824->unk_00c8); LoadOam(); @@ -994,7 +993,7 @@ void sub_80489F4(void) TransferPlttBuffer(); } -void sub_8048A14(void) +/*static*/ void sub_8048A14(void) { if (++gUnknown_03004824->unk_00b4 >= 16) { @@ -1003,7 +1002,7 @@ void sub_8048A14(void) } } -void sub_8048A50(void) +/*static*/ void sub_8048A50(void) { if (!gPaletteFade.active) { @@ -1014,7 +1013,7 @@ void sub_8048A50(void) } } -void sub_8048A90(void) +/*static*/ void sub_8048A90(void) { if (!gReceivedRemoteLinkPlayers) { @@ -1023,7 +1022,7 @@ void sub_8048A90(void) } } -void sub_8048AB4(void) +static void sub_8048AB4(void) { sub_8049DE0(); sub_804AB30(); @@ -1041,7 +1040,7 @@ void sub_8048AB4(void) // Only minor register permutations #pragma push_macro("BLOCKSIZE") #define BLOCKSIZE 0x800 -void sub_8048B0C(u8 a0) +static void sub_8048B0C(u8 a0) { int i; u16 *dest; @@ -1101,7 +1100,7 @@ void sub_8048B0C(u8 a0) #else asm(".include \"constants/gba_constants.inc\""); __attribute__((naked)) -void sub_8048B0C(u8 a0) +static void sub_8048B0C(u8 a0) { asm_unified("\tpush {r4-r7,lr}\n" "\tlsls r0, 24\n" @@ -1265,7 +1264,7 @@ void sub_8048B0C(u8 a0) } #endif -void sub_8048C70(void) +static void sub_8048C70(void) { int i; for (i = 0; i < PARTY_SIZE; i ++) @@ -1292,7 +1291,7 @@ void sub_8048C70(void) gUnknown_03004824->unk_0050 = TRUE; } -void nullsub_5(u8 a0, u8 a1) {} +static void nullsub_5(u8 a0, u8 a1) {} static void sub_8048D24(u8 *dest, const u8 *src, u32 size) { @@ -1300,7 +1299,7 @@ static void sub_8048D24(u8 *dest, const u8 *src, u32 size) for (i = 0; i < size; i ++) dest[i] = src[i]; } -bool8 sub_8048D44(void) +static bool8 sub_8048D44(void) { u8 mpId = GetMultiplayerId(); int i; @@ -1437,7 +1436,7 @@ bool8 sub_8048D44(void) return FALSE; } -void sub_8049088(void) +/*static*/ void sub_8049088(void) { u8 string[28]; StringCopy(string, gTradeText_TradeOkayPrompt); @@ -1591,11 +1590,11 @@ static void sub_80492D8(void) } } -void sub_80494D8(void) +static void sub_80494D8(void) { u8 mpId = GetMultiplayerId(); - u8 status = GetBlockReceivedStatus(); - if (status) + u8 status; + if ((status = GetBlockReceivedStatus())) { if (mpId == 0) sub_80490BC(mpId, status); @@ -1609,7 +1608,7 @@ void sub_80494D8(void) asm(".section .text.sub_804A96C"); -void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { +/*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { int y, x; for (y = 0; y < height; y++) @@ -1636,7 +1635,7 @@ void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 asm(".section .text.sub_804DAD4"); -void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { +/*static*/ void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { s32 i; for (i = 0; i < 9; i++) -- cgit v1.2.3 From 2af364e054debd0a7159b701e86885125e5f9a88 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 13:39:04 -0400 Subject: sub_8049514 --- src/trade.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 8bdc9865c..76ff71204 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1606,6 +1606,21 @@ static void sub_80494D8(void) sub_80492D8(); } +u8 sub_8049514(u8 a0, u8 a1) +{ + int i; + u8 retval = 0; + for (i = 0; i < PARTY_SIZE; i ++) + { + if (gUnknown_03004824->tradeIconsActive[gTradeNextSelectedMonTable[a0][a1][i]] == TRUE) + { + retval = gTradeNextSelectedMonTable[a0][a1][i]; + break; + } + } + return retval; +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 736fe47d4a9972fa4fcb7c7c48edb1d9c2dd025b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 13:51:29 -0400 Subject: sub_8049560 --- src/trade.c | 145 ++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 83 insertions(+), 62 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 76ff71204..c05bc0c63 100644 --- a/src/trade.c +++ b/src/trade.c @@ -75,9 +75,8 @@ struct TradeEwramSubstruct { /*0x0041*/ u8 unk_0041; /*0x0042*/ u8 playerPartyCount; /*0x0043*/ u8 friendPartyCount; - /*0x0044*/ u8 tradeIconsActive[12]; - /*0x0050*/ u8 unk_0050; - /*0x0051*/ u8 filler_0044[0x24]; + /*0x0044*/ u8 tradeMenuOptionsActive[13]; + /*0x0051*/ u8 filler_0051[0x24]; /*0x0075*/ u8 unk_0075; /*0x0076*/ u8 filler_0076[4]; /*0x007a*/ u8 unk_007a; @@ -312,70 +311,70 @@ const u8 *const gUnknown_0820C14C[] = { const u8 gTradeNextSelectedMonTable[][4][6] = { { - {4, 2, 12, 12, 0, 0}, - {2, 4, 12, 12, 0, 0}, - {7, 6, 1, 0, 0, 0}, - {1, 6, 7, 0, 0, 0} + { 4, 2, 12, 12, 0, 0}, + { 2, 4, 12, 12, 0, 0}, + { 7, 6, 1, 0, 0, 0}, + { 1, 6, 7, 0, 0, 0} }, { - {5, 3, 12, 12, 0, 0}, - {3, 5, 12, 12, 0, 0}, - {0, 7, 6, 1, 0, 0}, - {6, 7, 0, 1, 0, 0} + { 5, 3, 12, 12, 0, 0}, + { 3, 5, 12, 12, 0, 0}, + { 0, 7, 6, 1, 0, 0}, + { 6, 7, 0, 1, 0, 0} }, { - {0, 0, 0, 0, 0, 0}, - {4, 0, 0, 0, 0, 0}, - {9, 8, 7, 6, 0, 0}, - {3, 1, 0, 0, 0, 0} + { 0, 0, 0, 0, 0, 0}, + { 4, 0, 0, 0, 0, 0}, + { 9, 8, 7, 6, 0, 0}, + { 3, 1, 0, 0, 0, 0} }, { - {1, 1, 1, 1, 0, 0}, - {5, 1, 1, 1, 0, 0}, - {2, 9, 8, 7, 0, 0}, - {8, 9, 6, 6, 0, 0} + { 1, 1, 1, 1, 0, 0}, + { 5, 1, 1, 1, 0, 0}, + { 2, 9, 8, 7, 0, 0}, + { 8, 9, 6, 6, 0, 0} }, { - {2, 2, 2, 2, 0, 0}, - {0, 0, 0, 0, 0, 0}, - {11, 10, 9, 8, 7, 6}, - {5, 3, 1, 0, 0, 0} + { 2, 2, 2, 2, 0, 0}, + { 0, 0, 0, 0, 0, 0}, + {11, 10, 9, 8, 7, 6}, + { 5, 3, 1, 0, 0, 0} }, { - {3, 3, 3, 3, 0, 0}, - {1, 1, 1, 1, 0, 0}, - {4, 4, 4, 4, 0, 0}, - {10, 8, 6, 0, 0, 0} + { 3, 3, 3, 3, 0, 0}, + { 1, 1, 1, 1, 0, 0}, + { 4, 4, 4, 4, 0, 0}, + {10, 8, 6, 0, 0, 0} }, { - {10, 8, 12, 0, 0, 0}, - {8, 10, 12, 0, 0, 0}, - {1, 0, 0, 0, 0, 0}, - {7, 0, 1, 0, 0, 0} + {10, 8, 12, 0, 0, 0}, + { 8, 10, 12, 0, 0, 0}, + { 1, 0, 0, 0, 0, 0}, + { 7, 0, 1, 0, 0, 0} }, { - {12, 0, 0, 0, 0, 0}, - {9, 12, 0, 0, 0, 0}, - {6, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0} + {12, 0, 0, 0, 0, 0}, + { 9, 12, 0, 0, 0, 0}, + { 6, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0} }, { - {6, 0, 0, 0, 0, 0}, - {10, 6, 0, 0, 0, 0}, - {3, 2, 1, 0, 0, 0}, - {9, 7, 0, 0, 0, 0} + { 6, 0, 0, 0, 0, 0}, + {10, 6, 0, 0, 0, 0}, + { 3, 2, 1, 0, 0, 0}, + { 9, 7, 0, 0, 0, 0} }, { - {7, 0, 0, 0, 0, 0}, - {11, 12, 0, 0, 0, 0}, - {8, 0, 0, 0, 0, 0}, - {2, 1, 0, 0, 0, 0} + { 7, 0, 0, 0, 0, 0}, + {11, 12, 0, 0, 0, 0}, + { 8, 0, 0, 0, 0, 0}, + { 2, 1, 0, 0, 0, 0} }, { - {8, 0, 0, 0, 0, 0}, - {6, 0, 0, 0, 0, 0}, - {5, 4, 3, 2, 1, 0}, - {11, 9, 7, 0, 0, 0} + { 8, 0, 0, 0, 0, 0}, + { 6, 0, 0, 0, 0, 0}, + { 5, 4, 3, 2, 1, 0}, + {11, 9, 7, 0, 0, 0} }, { - {9, 0, 0, 0, 0, 0}, - {12, 0, 0, 0, 0, 0}, - {10, 0, 0, 0, 0, 0}, - {4, 2, 0, 0, 0, 0} + { 9, 0, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0}, + {10, 0, 0, 0, 0, 0}, + { 4, 2, 0, 0, 0, 0} }, { - {11, 9, 7, 6, 0, 0}, - {7, 6, 0, 0, 0, 0}, - {12, 0, 0, 0, 0, 0}, - {12, 0, 0, 0, 0, 0} + {11, 9, 7, 6, 0, 0}, + { 7, 6, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0} } }; @@ -1272,23 +1271,23 @@ static void sub_8048C70(void) if (i < gUnknown_03004824->playerPartyCount) { gSprites[gUnknown_03004824->playerPartyIcons[i]].invisible = FALSE; - gUnknown_03004824->tradeIconsActive[i] = TRUE; + gUnknown_03004824->tradeMenuOptionsActive[i] = TRUE; } else { - gUnknown_03004824->tradeIconsActive[i] = FALSE; + gUnknown_03004824->tradeMenuOptionsActive[i] = FALSE; } if (i < gUnknown_03004824->friendPartyCount) { gSprites[gUnknown_03004824->friendPartyIcons[i]].invisible = FALSE; - gUnknown_03004824->tradeIconsActive[i + 6] = TRUE; + gUnknown_03004824->tradeMenuOptionsActive[i + 6] = TRUE; } else { - gUnknown_03004824->tradeIconsActive[i + 6] = FALSE; + gUnknown_03004824->tradeMenuOptionsActive[i + 6] = FALSE; } } - gUnknown_03004824->unk_0050 = TRUE; + gUnknown_03004824->tradeMenuOptionsActive[12] = TRUE; } static void nullsub_5(u8 a0, u8 a1) {} @@ -1606,13 +1605,13 @@ static void sub_80494D8(void) sub_80492D8(); } -u8 sub_8049514(u8 a0, u8 a1) +static u8 sub_8049514(u8 a0, u8 a1) { int i; u8 retval = 0; for (i = 0; i < PARTY_SIZE; i ++) { - if (gUnknown_03004824->tradeIconsActive[gTradeNextSelectedMonTable[a0][a1][i]] == TRUE) + if (gUnknown_03004824->tradeMenuOptionsActive[gTradeNextSelectedMonTable[a0][a1][i]] == TRUE) { retval = gTradeNextSelectedMonTable[a0][a1][i]; break; @@ -1621,6 +1620,28 @@ u8 sub_8049514(u8 a0, u8 a1) return retval; } +/*static*/ void sub_8049560(u8 *a0, u8 a1) +{ + u8 v0 = sub_8049514(*a0, a1); + if (v0 == 12) // CANCEL + { + StartSpriteAnim(&gSprites[gUnknown_03004824->unk_0040], 1); + gSprites[gUnknown_03004824->unk_0040].pos1.x = 0xe0; + gSprites[gUnknown_03004824->unk_0040].pos1.y = 0xa0; + } + else + { + StartSpriteAnim(&gSprites[gUnknown_03004824->unk_0040], 0); + gSprites[gUnknown_03004824->unk_0040].pos1.x = gTradeMonSpriteCoords[v0][0] * 8 + 32; + gSprites[gUnknown_03004824->unk_0040].pos1.y = gTradeMonSpriteCoords[v0][1] * 8; + } + if (*a0 != v0) + { + PlaySE(SE_SELECT); + } + *a0 = v0; +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 249dda4489a31e5b7e1b283a32d3e830cfb46926 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 13:57:02 -0400 Subject: sub_8049620 --- src/trade.c | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index c05bc0c63..a313106ea 100644 --- a/src/trade.c +++ b/src/trade.c @@ -94,9 +94,7 @@ struct TradeEwramSubstruct { /*0x0088*/ u8 filler_0088[2]; /*0x008a*/ u8 unk_008a; /*0x008b*/ u8 unk_008b; - /*0x008c*/ u16 unk_008c; - /*0x008e*/ u16 unk_008e; - /*0x0090*/ u8 filler_0090[0x24]; + /*0x008c*/ u16 linkData[20]; /*0x00b4*/ u8 unk_00b4; /*0x00b5*/ u8 unk_00b5[7]; /*0x00bc*/ u8 filler_00bc[12]; @@ -1530,16 +1528,16 @@ static void sub_80492D8(void) if (gUnknown_03004824->unk_0084 == 1 && gUnknown_03004824->unk_0085 == 1) { gUnknown_03004824->unk_007b = 6; - gUnknown_03004824->unk_008c = 0xdddd; - gUnknown_03004824->unk_008e = gUnknown_03004824->unk_0041; + gUnknown_03004824->linkData[0] = 0xdddd; + gUnknown_03004824->linkData[1] = gUnknown_03004824->unk_0041; sub_804AADC(5, 0); gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; } else if (gUnknown_03004824->unk_0084 == 1 && gUnknown_03004824->unk_0085 == 2) { sub_804AA0C(1); - gUnknown_03004824->unk_008c = 0xeecc; - gUnknown_03004824->unk_008e = 0; + gUnknown_03004824->linkData[0] = 0xeecc; + gUnknown_03004824->linkData[1] = 0; sub_804AADC(5, 0); gUnknown_03004824->unk_0086 = gUnknown_03004824->unk_0087 = 0; gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; @@ -1548,8 +1546,8 @@ static void sub_80492D8(void) else if (gUnknown_03004824->unk_0084 == 2 && gUnknown_03004824->unk_0085 == 1) { sub_804AA0C(5); - gUnknown_03004824->unk_008c = 0xddee; - gUnknown_03004824->unk_008e = 0; + gUnknown_03004824->linkData[0] = 0xddee; + gUnknown_03004824->linkData[1] = 0; sub_804AADC(5, 0); gUnknown_03004824->unk_0086 = gUnknown_03004824->unk_0087 = 0; gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; @@ -1557,8 +1555,8 @@ static void sub_80492D8(void) } else if (gUnknown_03004824->unk_0084 == 2 && gUnknown_03004824->unk_0085 == 2) { - gUnknown_03004824->unk_008c = 0xeebb; - gUnknown_03004824->unk_008e = 0; + gUnknown_03004824->linkData[0] = 0xeebb; + gUnknown_03004824->linkData[1] = 0; sub_804AADC(5, 0); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; @@ -1569,8 +1567,8 @@ static void sub_80492D8(void) { if (gUnknown_03004824->unk_0086 == 1 && gUnknown_03004824->unk_0087 == 1) { - gUnknown_03004824->unk_008c = 0xccdd; - gUnknown_03004824->unk_008e = 0; + gUnknown_03004824->linkData[0] = 0xccdd; + gUnknown_03004824->linkData[1] = 0; sub_804AADC(5, 0); gUnknown_03004824->unk_0086 = 0; gUnknown_03004824->unk_0087 = 0; @@ -1579,8 +1577,8 @@ static void sub_80492D8(void) if (gUnknown_03004824->unk_0086 == 2 || gUnknown_03004824->unk_0087 == 2) { sub_804AA0C(1); - gUnknown_03004824->unk_008c = 0xddee; - gUnknown_03004824->unk_008e = 0; + gUnknown_03004824->linkData[0] = 0xddee; + gUnknown_03004824->linkData[1] = 0; sub_804AADC(5, 0); gUnknown_03004824->unk_0086 = 0; gUnknown_03004824->unk_0087 = 0; @@ -1642,6 +1640,22 @@ static u8 sub_8049514(u8 a0, u8 a1) *a0 = v0; } +/*static*/ void sub_8049620(void) +{ + sub_804AA0C(0); + gUnknown_03004824->unk_007b = 5; + if (GetMultiplayerId() == 1) + { + gUnknown_03004824->linkData[0] = 0xaabb; + gUnknown_03004824->linkData[1] = gUnknown_03004824->unk_0041; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, 20); + } + else + { + gUnknown_03004824->unk_0084 = 1; + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 28615f2924d208b97de19f7376d6eea3278ed779 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 14:12:51 -0400 Subject: sub_8049680 --- src/trade.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a313106ea..a96a68f66 100644 --- a/src/trade.c +++ b/src/trade.c @@ -72,7 +72,7 @@ struct TradeEwramSubstruct { /*0x0034*/ u8 playerPartyIcons[6]; /*0x003a*/ u8 friendPartyIcons[6]; /*0x0040*/ u8 unk_0040; - /*0x0041*/ u8 unk_0041; + /*0x0041*/ u8 tradeMenuCursorPosition; /*0x0042*/ u8 playerPartyCount; /*0x0043*/ u8 friendPartyCount; /*0x0044*/ u8 tradeMenuOptionsActive[13]; @@ -781,7 +781,7 @@ static void sub_8047EC0(void) case 12: sub_8047E44(); gUnknown_03004824->unk_0040 = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); - gUnknown_03004824->unk_0041 = 0; + gUnknown_03004824->tradeMenuCursorPosition = 0; gMain.state ++; nullsub_5(6, 0); break; @@ -933,11 +933,11 @@ static void sub_8047EC0(void) case 12: sub_8047E44(); unkStructF = &ewram_2010000.unk_08000; - if (gUnknown_03004824->unk_0041 < 6) - gUnknown_03004824->unk_0041 = unkStructF->unk_0009; + if (gUnknown_03004824->tradeMenuCursorPosition < 6) + gUnknown_03004824->tradeMenuCursorPosition = unkStructF->unk_0009; else - gUnknown_03004824->unk_0041 = unkStructF->unk_0009 + 6; - gUnknown_03004824->unk_0040 = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[gUnknown_03004824->unk_0041][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_03004824->unk_0041][1] * 8, 2); + gUnknown_03004824->tradeMenuCursorPosition = unkStructF->unk_0009 + 6; + gUnknown_03004824->unk_0040 = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[gUnknown_03004824->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_03004824->tradeMenuCursorPosition][1] * 8, 2); gMain.state = 15; nullsub_5(6, 0); break; @@ -1003,7 +1003,7 @@ static void sub_80489F4(void) { if (!gPaletteFade.active) { - gUnknown_020297D8[0] = gUnknown_03004824->unk_0041; + gUnknown_020297D8[0] = gUnknown_03004824->tradeMenuCursorPosition; gUnknown_020297D8[1] = gUnknown_03004824->unk_008a; sub_800832C(); gUnknown_03004824->unk_007b = 13; @@ -1500,7 +1500,7 @@ static void sub_80491E4(u8 mpId, u8 status) break; case 0xdddd: gUnknown_03004824->unk_008a = ((u8 *)gBlockRecvBuffer[0])[1 * sizeof(u16)] + 6; - sub_8049E9C(gUnknown_03004824->unk_0041); + sub_8049E9C(gUnknown_03004824->tradeMenuCursorPosition); sub_8049E9C(gUnknown_03004824->unk_008a); gUnknown_03004824->unk_007b = 7; break; @@ -1529,7 +1529,7 @@ static void sub_80492D8(void) { gUnknown_03004824->unk_007b = 6; gUnknown_03004824->linkData[0] = 0xdddd; - gUnknown_03004824->linkData[1] = gUnknown_03004824->unk_0041; + gUnknown_03004824->linkData[1] = gUnknown_03004824->tradeMenuCursorPosition; sub_804AADC(5, 0); gUnknown_03004824->unk_0084 = gUnknown_03004824->unk_0085 = 0; } @@ -1603,25 +1603,25 @@ static void sub_80494D8(void) sub_80492D8(); } -static u8 sub_8049514(u8 a0, u8 a1) +static u8 sub_8049514(u8 oldPosition, u8 direction) { int i; - u8 retval = 0; + u8 newPosition = 0; for (i = 0; i < PARTY_SIZE; i ++) { - if (gUnknown_03004824->tradeMenuOptionsActive[gTradeNextSelectedMonTable[a0][a1][i]] == TRUE) + if (gUnknown_03004824->tradeMenuOptionsActive[gTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE) { - retval = gTradeNextSelectedMonTable[a0][a1][i]; + newPosition = gTradeNextSelectedMonTable[oldPosition][direction][i]; break; } } - return retval; + return newPosition; } -/*static*/ void sub_8049560(u8 *a0, u8 a1) +static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) { - u8 v0 = sub_8049514(*a0, a1); - if (v0 == 12) // CANCEL + u8 newPosition = sub_8049514(*tradeMenuCursorPosition, direction); + if (newPosition == 12) // CANCEL { StartSpriteAnim(&gSprites[gUnknown_03004824->unk_0040], 1); gSprites[gUnknown_03004824->unk_0040].pos1.x = 0xe0; @@ -1630,14 +1630,14 @@ static u8 sub_8049514(u8 a0, u8 a1) else { StartSpriteAnim(&gSprites[gUnknown_03004824->unk_0040], 0); - gSprites[gUnknown_03004824->unk_0040].pos1.x = gTradeMonSpriteCoords[v0][0] * 8 + 32; - gSprites[gUnknown_03004824->unk_0040].pos1.y = gTradeMonSpriteCoords[v0][1] * 8; + gSprites[gUnknown_03004824->unk_0040].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[gUnknown_03004824->unk_0040].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; } - if (*a0 != v0) + if (*tradeMenuCursorPosition != newPosition) { PlaySE(SE_SELECT); } - *a0 = v0; + *tradeMenuCursorPosition = newPosition; } /*static*/ void sub_8049620(void) @@ -1647,7 +1647,7 @@ static u8 sub_8049514(u8 a0, u8 a1) if (GetMultiplayerId() == 1) { gUnknown_03004824->linkData[0] = 0xaabb; - gUnknown_03004824->linkData[1] = gUnknown_03004824->unk_0041; + gUnknown_03004824->linkData[1] = gUnknown_03004824->tradeMenuCursorPosition; SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, 20); } else @@ -1656,6 +1656,58 @@ static u8 sub_8049514(u8 a0, u8 a1) } } +/*static*/ void sub_8049680(void) +{ + int i; + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + TradeMenuMoveCursor(&gUnknown_03004824->tradeMenuCursorPosition, 0); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + TradeMenuMoveCursor(&gUnknown_03004824->tradeMenuCursorPosition, 1); + } + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + TradeMenuMoveCursor(&gUnknown_03004824->tradeMenuCursorPosition, 2); + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + TradeMenuMoveCursor(&gUnknown_03004824->tradeMenuCursorPosition, 3); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_03004824->tradeMenuCursorPosition < PARTY_SIZE) + { + DrawTextWindow(&gUnknown_03004824->window, 18, 14, 28, 19); + PrintMenuItems(19, 15, 2, gUnknown_0820C320); + InitMenu(0, 19, 15, 2, 0, 9); + gUnknown_03004824->unk_007b = 1; + } + else if (gUnknown_03004824->tradeMenuCursorPosition < 2 * PARTY_SIZE) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_03004824->unk_007b = 2; + } + else if (gUnknown_03004824->tradeMenuCursorPosition == 2 * PARTY_SIZE) + { + DrawTextWindow(&gUnknown_03004824->window, 24, 14, 29, 19); + InitYesNoMenu(24, 14, 4); + gUnknown_03004824->unk_007b = 4; + sub_804ACD8(gUnknown_0820C14C[4], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); + } + } + if (gMain.newKeys & R_BUTTON) + { + for (i = 0; i < 10; i ++) + { + gUnknown_03004824->linkData[i] = i; + } + SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, 20); + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From c66dc8fe51e6d49bf761b30a8772ef879e5ebf2d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 14:19:00 -0400 Subject: sub_8049804 --- src/trade.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a96a68f66..faa931e37 100644 --- a/src/trade.c +++ b/src/trade.c @@ -146,6 +146,7 @@ static void sub_8048AB4(void); /*static*/ u8 sub_804AA00(void); /*static*/ void sub_8049E9C(u8); /*static*/ void sub_804AADC(u8, u8); +/*static*/ void sub_804A80C(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -1708,6 +1709,15 @@ static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) } } +/*static*/ void sub_8049804(void) +{ + HandleDestroyMenuCursors(); + sub_804A80C(); + gUnknown_03004824->unk_007b = 0; + gSprites[gUnknown_03004824->unk_0040].invisible = FALSE; + sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 765bed46b08990779c379204f5ac813b310b863d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 14:28:29 -0400 Subject: sub_8049860 --- src/trade.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index faa931e37..b8732aeea 100644 --- a/src/trade.c +++ b/src/trade.c @@ -76,7 +76,7 @@ struct TradeEwramSubstruct { /*0x0042*/ u8 playerPartyCount; /*0x0043*/ u8 friendPartyCount; /*0x0044*/ u8 tradeMenuOptionsActive[13]; - /*0x0051*/ u8 filler_0051[0x24]; + /*0x0051*/ u8 unk_0051[0x24]; /*0x0075*/ u8 unk_0075; /*0x0076*/ u8 filler_0076[4]; /*0x007a*/ u8 unk_007a; @@ -147,6 +147,7 @@ static void sub_8048AB4(void); /*static*/ void sub_8049E9C(u8); /*static*/ void sub_804AADC(u8, u8); /*static*/ void sub_804A80C(void); +/*static*/ bool8 sub_80499F0(const u8 *, u8, u8); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -1641,7 +1642,7 @@ static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) *tradeMenuCursorPosition = newPosition; } -/*static*/ void sub_8049620(void) +static void sub_8049620(void) { sub_804AA0C(0); gUnknown_03004824->unk_007b = 5; @@ -1718,6 +1719,44 @@ static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); } +/*static*/ void sub_8049860(void) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + gUnknown_03004824->unk_007c = MoveMenuCursor(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + gUnknown_03004824->unk_007c = MoveMenuCursor(+1); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (GetMenuCursorPos() == 0) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_03004824->unk_007b = 2; + } + else if (!sub_80499F0(gUnknown_03004824->unk_0051, gUnknown_03004824->playerPartyCount, gUnknown_03004824->tradeMenuCursorPosition)) + { + sub_804AADC(3, 2); + gUnknown_03004824->unk_007b = 8; + } + else + { + sub_8049620(); + gSprites[gUnknown_03004824->unk_0040].invisible = TRUE; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_8049804(); + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 85e758cb43dff511033c03d5c8f9ff3155bb805a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 14:30:28 -0400 Subject: sub_8049954 --- src/trade.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index b8732aeea..a9eeddf7c 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1757,6 +1757,15 @@ static void sub_8049620(void) } } +/*static*/ void sub_8049954(void) +{ + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_8049804(); + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 2a5df1b3eed197bd44a10d54960770b9f02995f5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 14:34:55 -0400 Subject: sub_804997C --- src/trade.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a9eeddf7c..ff63411ce 100644 --- a/src/trade.c +++ b/src/trade.c @@ -20,6 +20,7 @@ #include "songs.h" #include "sound.h" #include "data2.h" +#include "pokemon_summary_screen.h" #include "trade.h" #ifdef ENGLISH @@ -842,7 +843,7 @@ static void sub_8047EC0(void) UpdatePaletteFade(); } -/*static*/ void sub_80484F4(void) +void sub_80484F4(void) { int i; struct UnkStructF *unkStructF; @@ -1766,6 +1767,21 @@ static void sub_8049620(void) } } +/*static*/ void sub_804997C(void) +{ + if (!gPaletteFade.active) + { + if (gUnknown_03004824->tradeMenuCursorPosition < PARTY_SIZE) + { + ShowPokemonSummaryScreen(gPlayerParty, gUnknown_03004824->tradeMenuCursorPosition, gUnknown_03004824->playerPartyCount - 1, sub_80484F4, 4); + } + else + { + ShowPokemonSummaryScreen(gEnemyParty, gUnknown_03004824->tradeMenuCursorPosition - 6, gUnknown_03004824->friendPartyCount - 1, sub_80484F4, 4); + } + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 6481f3b1201dfc6cbefb49e735d16f0522b32e09 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 14:39:03 -0400 Subject: sub_80499F0 --- src/trade.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index ff63411ce..493730095 100644 --- a/src/trade.c +++ b/src/trade.c @@ -77,7 +77,8 @@ struct TradeEwramSubstruct { /*0x0042*/ u8 playerPartyCount; /*0x0043*/ u8 friendPartyCount; /*0x0044*/ u8 tradeMenuOptionsActive[13]; - /*0x0051*/ u8 unk_0051[0x24]; + /*0x0051*/ u8 unk_0051[6]; + /*0x0056*/ u8 filler_0057[30]; /*0x0075*/ u8 unk_0075; /*0x0076*/ u8 filler_0076[4]; /*0x007a*/ u8 unk_007a; @@ -148,7 +149,7 @@ static void sub_8048AB4(void); /*static*/ void sub_8049E9C(u8); /*static*/ void sub_804AADC(u8, u8); /*static*/ void sub_804A80C(void); -/*static*/ bool8 sub_80499F0(const u8 *, u8, u8); +/*static*/ u8 sub_80499F0(const u8 *, u8, u8); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -1740,7 +1741,7 @@ static void sub_8049620(void) BeginNormalPaletteFade(-1, 0, 0, 16, 0); gUnknown_03004824->unk_007b = 2; } - else if (!sub_80499F0(gUnknown_03004824->unk_0051, gUnknown_03004824->playerPartyCount, gUnknown_03004824->tradeMenuCursorPosition)) + else if (sub_80499F0(gUnknown_03004824->unk_0051, gUnknown_03004824->playerPartyCount, gUnknown_03004824->tradeMenuCursorPosition) == 0) { sub_804AADC(3, 2); gUnknown_03004824->unk_007b = 8; @@ -1782,6 +1783,20 @@ static void sub_8049620(void) } } +/*static*/ u8 sub_80499F0(const u8 *src, u8 partyCount, u8 tradeMenuCursorPosition) +{ + u8 retval = 0; + int i; + for (i = 0; i < partyCount; i ++) + { + if (tradeMenuCursorPosition != i) + { + retval += src[i]; + } + } + return retval; +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 6e8d33ec0c683dc9520dfca79102d595fd4780b7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 14:46:41 -0400 Subject: sub_8049A20 --- src/trade.c | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 493730095..d0a375b0f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -149,7 +149,7 @@ static void sub_8048AB4(void); /*static*/ void sub_8049E9C(u8); /*static*/ void sub_804AADC(u8, u8); /*static*/ void sub_804A80C(void); -/*static*/ u8 sub_80499F0(const u8 *, u8, u8); +static u8 sub_80499F0(const u8 *, u8, u8); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -1652,7 +1652,7 @@ static void sub_8049620(void) { gUnknown_03004824->linkData[0] = 0xaabb; gUnknown_03004824->linkData[1] = gUnknown_03004824->tradeMenuCursorPosition; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, 20); + SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); } else { @@ -1708,7 +1708,7 @@ static void sub_8049620(void) { gUnknown_03004824->linkData[i] = i; } - SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, 20); + SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); } } @@ -1783,7 +1783,7 @@ static void sub_8049620(void) } } -/*static*/ u8 sub_80499F0(const u8 *src, u8 partyCount, u8 tradeMenuCursorPosition) +static u8 sub_80499F0(const u8 *src, u8 partyCount, u8 tradeMenuCursorPosition) { u8 retval = 0; int i; @@ -1797,6 +1797,31 @@ static void sub_8049620(void) return retval; } +/*static*/ void sub_8049A20(void) +{ + u8 unk_0051[12]; + int i; + for (i = 0; i < gUnknown_03004824->playerPartyCount; i ++) + { + unk_0051[i] = gUnknown_03004824->unk_0051[i]; + } + if (sub_80499F0(unk_0051, gUnknown_03004824->playerPartyCount, gUnknown_03004824->tradeMenuCursorPosition) == 0) + { + sub_804AADC(3, 2); + gUnknown_03004824->linkData[0] = 0xbbcc; + sub_804AADC(0xb4, 0); + } + else + { + sub_804AADC(3, 1); + gUnknown_03004824->linkData[0] = 0xbbbb; + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); + } + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From b9a41c7dca30fdbe1b8f14aa254b345666df2462 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 14:55:23 -0400 Subject: sub_8049AC0 --- src/trade.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index d0a375b0f..32791dce7 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1797,7 +1797,7 @@ static u8 sub_80499F0(const u8 *src, u8 partyCount, u8 tradeMenuCursorPosition) return retval; } -/*static*/ void sub_8049A20(void) +static void sub_8049A20(void) { u8 unk_0051[12]; int i; @@ -1822,6 +1822,49 @@ static u8 sub_80499F0(const u8 *src, u8 partyCount, u8 tradeMenuCursorPosition) } } +/*static*/ void sub_8049AC0(void) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + gUnknown_03004824->unk_007c = MoveMenuCursor(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + gUnknown_03004824->unk_007c = MoveMenuCursor(+1); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (GetMenuCursorPos() == 0) + { + sub_8049A20(); + } + else + { + sub_804AADC(3, 1); + if (sub_8007ECC()) + { + gUnknown_03004824->linkData[0] = 0xbbcc; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); + } + } + gUnknown_03004824->unk_007b = 100; + } + else if (gMain.newKeys & B_BUTTON) + { + sub_804AADC(3, 1); + if (GetMenuCursorPos() == 0) + { + gUnknown_03004824->unk_007c = MoveMenuCursor(1); + } + gUnknown_03004824->linkData[0] = 0xbbcc; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); + gUnknown_03004824->unk_007b = 100; + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 2903c9cc17c42b53a05bf9d5642bbc33bf2de5e8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 15:02:52 -0400 Subject: sub_8049BC0 --- src/trade.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 32791dce7..5cddaf12f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -72,7 +72,7 @@ struct TradeEwramSubstruct { /*0x0004*/ struct Window window; /*0x0034*/ u8 playerPartyIcons[6]; /*0x003a*/ u8 friendPartyIcons[6]; - /*0x0040*/ u8 unk_0040; + /*0x0040*/ u8 tradeMenuCursorSpriteIdx; /*0x0041*/ u8 tradeMenuCursorPosition; /*0x0042*/ u8 playerPartyCount; /*0x0043*/ u8 friendPartyCount; @@ -784,7 +784,7 @@ static void sub_8047EC0(void) break; case 12: sub_8047E44(); - gUnknown_03004824->unk_0040 = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); + gUnknown_03004824->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); gUnknown_03004824->tradeMenuCursorPosition = 0; gMain.state ++; nullsub_5(6, 0); @@ -941,7 +941,7 @@ void sub_80484F4(void) gUnknown_03004824->tradeMenuCursorPosition = unkStructF->unk_0009; else gUnknown_03004824->tradeMenuCursorPosition = unkStructF->unk_0009 + 6; - gUnknown_03004824->unk_0040 = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[gUnknown_03004824->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_03004824->tradeMenuCursorPosition][1] * 8, 2); + gUnknown_03004824->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_820C134, gTradeMonSpriteCoords[gUnknown_03004824->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_03004824->tradeMenuCursorPosition][1] * 8, 2); gMain.state = 15; nullsub_5(6, 0); break; @@ -1627,15 +1627,15 @@ static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) u8 newPosition = sub_8049514(*tradeMenuCursorPosition, direction); if (newPosition == 12) // CANCEL { - StartSpriteAnim(&gSprites[gUnknown_03004824->unk_0040], 1); - gSprites[gUnknown_03004824->unk_0040].pos1.x = 0xe0; - gSprites[gUnknown_03004824->unk_0040].pos1.y = 0xa0; + StartSpriteAnim(&gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx], 1); + gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].pos1.x = 0xe0; + gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].pos1.y = 0xa0; } else { - StartSpriteAnim(&gSprites[gUnknown_03004824->unk_0040], 0); - gSprites[gUnknown_03004824->unk_0040].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[gUnknown_03004824->unk_0040].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; + StartSpriteAnim(&gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx], 0); + gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; } if (*tradeMenuCursorPosition != newPosition) { @@ -1717,7 +1717,7 @@ static void sub_8049620(void) HandleDestroyMenuCursors(); sub_804A80C(); gUnknown_03004824->unk_007b = 0; - gSprites[gUnknown_03004824->unk_0040].invisible = FALSE; + gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = FALSE; sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); } @@ -1749,7 +1749,7 @@ static void sub_8049620(void) else { sub_8049620(); - gSprites[gUnknown_03004824->unk_0040].invisible = TRUE; + gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = TRUE; } } else if (gMain.newKeys & B_BUTTON) @@ -1857,7 +1857,7 @@ static void sub_8049A20(void) sub_804AADC(3, 1); if (GetMenuCursorPos() == 0) { - gUnknown_03004824->unk_007c = MoveMenuCursor(1); + gUnknown_03004824->unk_007c = MoveMenuCursor(+1); } gUnknown_03004824->linkData[0] = 0xbbcc; SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); @@ -1865,6 +1865,42 @@ static void sub_8049A20(void) } } +/*static*/ void sub_8049BC0(void) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + gUnknown_03004824->unk_007c = MoveMenuCursor(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + gUnknown_03004824->unk_007c = MoveMenuCursor(+1); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (GetMenuCursorPos() == 0) + { + sub_804AA0C(4); + gUnknown_03004824->linkData[0] = 0xeeaa; + gUnknown_03004824->linkData[1] = 0; + sub_804AADC(5, 0); + gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = TRUE; + gUnknown_03004824->unk_007b = 100; + } + else + { + sub_8049804(); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_8049804(); + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From da429471ec7dead013e49c340ed4932b5a85bc44 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 15:07:42 -0400 Subject: sub_8049C8C --- src/trade.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 5cddaf12f..d04662a93 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1901,6 +1901,16 @@ static void sub_8049A20(void) } } +void sub_8049C8C(void) +{ + if (GetMultiplayerId() == 0) + { + sub_8049E9C(gUnknown_03004824->tradeMenuCursorPosition); + sub_8049E9C(gUnknown_03004824->unk_008a); + } + gUnknown_03004824->unk_007b = 7; +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 6183bc1e87b42f0996eb38fbfabb91d79a9cc2cb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 15:10:28 -0400 Subject: sub_8049CC4 --- src/trade.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index d04662a93..036f0b4f4 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1437,7 +1437,7 @@ static bool8 sub_8048D44(void) return FALSE; } -/*static*/ void sub_8049088(void) +static void sub_8049088(void) { u8 string[28]; StringCopy(string, gTradeText_TradeOkayPrompt); @@ -1901,7 +1901,7 @@ static void sub_8049A20(void) } } -void sub_8049C8C(void) +/*static*/ void sub_8049C8C(void) { if (GetMultiplayerId() == 0) { @@ -1911,6 +1911,15 @@ void sub_8049C8C(void) gUnknown_03004824->unk_007b = 7; } +/*static*/ void sub_8049CC4(void) +{ + if (gUnknown_03004824->unk_0080 == 5 && gUnknown_03004824->unk_0081 == 5) + { + sub_8049088(); + gUnknown_03004824->unk_007b = 14; + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From f4b7f25df8a8231a6ade0a39b833b27b9c31ccbc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 15:14:30 -0400 Subject: DisplayMessageAndContinueTask --- src/trade.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 036f0b4f4..308082606 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1920,6 +1920,18 @@ static void sub_8049A20(void) } } +/*static*/ void DisplayMessageAndContinueTask(void) +{ + gUnknown_03004824->unk_00b4++; + if (gUnknown_03004824->unk_00b4 > 120) + { + DrawTextWindow(&gUnknown_03004824->window, 24, 14, 29, 19); + InitYesNoMenu(24, 14, 4); + gUnknown_03004824->unk_00b4 = 0; + gUnknown_03004824->unk_007b = 3; + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 714503c895eb1fae6771fbf8d687f3d6ca16c3d8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 15:20:40 -0400 Subject: Through sub_8049D9C --- src/trade.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 308082606..774b5f6d1 100644 --- a/src/trade.c +++ b/src/trade.c @@ -150,6 +150,7 @@ static void sub_8048AB4(void); /*static*/ void sub_804AADC(u8, u8); /*static*/ void sub_804A80C(void); static u8 sub_80499F0(const u8 *, u8, u8); +/*static*/ void sub_804A840(u8); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -1932,6 +1933,27 @@ static void sub_8049A20(void) } } +/*static*/ void sub_8049D44(void) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_804A840(0); + sub_804A840(1); + gUnknown_03004824->unk_007b = 0; + gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = FALSE; + } +} + +/*static*/ void sub_8049D9C(void) +{ + if (!gPaletteFade.active) + { + sub_800832C(); + gUnknown_03004824->unk_007b = 12; + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From fdce319c1c3e54948b476a6e27be80b07a80ac1d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 15:23:49 -0400 Subject: sub_8049DC4 --- src/trade.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 774b5f6d1..5989b1484 100644 --- a/src/trade.c +++ b/src/trade.c @@ -21,6 +21,7 @@ #include "sound.h" #include "data2.h" #include "pokemon_summary_screen.h" +#include "rom4.h" #include "trade.h" #ifdef ENGLISH @@ -1954,6 +1955,14 @@ static void sub_8049A20(void) } } +/*static*/ void sub_8049DC4(void) +{ + if (gReceivedRemoteLinkPlayers == 0) + { + SetMainCallback2(sub_805465C); + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 8fa301e80c5b196c4530235d874e603689a7a8f4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 15:30:51 -0400 Subject: sub_8049DE0 --- src/trade.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 66 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 5989b1484..b1692a984 100644 --- a/src/trade.c +++ b/src/trade.c @@ -140,7 +140,7 @@ static void sub_80494D8(void); static void sub_8048AB4(void); /*static*/ void sub_804A940(struct UnkStructE *); /*static*/ void sub_804B41C(void); -/*static*/ void sub_8049DE0(void); +static void sub_8049DE0(void); /*static*/ void sub_804AB30(void); /*static*/ void sub_8049ED4(u8); /*static*/ void sub_804A6DC(u8); @@ -1662,7 +1662,7 @@ static void sub_8049620(void) } } -/*static*/ void sub_8049680(void) +static void sub_8049680(void) { int i; if (gMain.newAndRepeatedKeys & DPAD_UP) @@ -1714,7 +1714,7 @@ static void sub_8049620(void) } } -/*static*/ void sub_8049804(void) +static void sub_8049804(void) { HandleDestroyMenuCursors(); sub_804A80C(); @@ -1723,7 +1723,7 @@ static void sub_8049620(void) sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); } -/*static*/ void sub_8049860(void) +static void sub_8049860(void) { if (gMain.newAndRepeatedKeys & DPAD_UP) { @@ -1761,7 +1761,7 @@ static void sub_8049620(void) } } -/*static*/ void sub_8049954(void) +static void sub_8049954(void) { if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { @@ -1770,7 +1770,7 @@ static void sub_8049620(void) } } -/*static*/ void sub_804997C(void) +static void sub_804997C(void) { if (!gPaletteFade.active) { @@ -1824,7 +1824,7 @@ static void sub_8049A20(void) } } -/*static*/ void sub_8049AC0(void) +static void sub_8049AC0(void) { if (gMain.newAndRepeatedKeys & DPAD_UP) { @@ -1867,7 +1867,7 @@ static void sub_8049A20(void) } } -/*static*/ void sub_8049BC0(void) +static void sub_8049BC0(void) { if (gMain.newAndRepeatedKeys & DPAD_UP) { @@ -1903,7 +1903,7 @@ static void sub_8049A20(void) } } -/*static*/ void sub_8049C8C(void) +static void sub_8049C8C(void) { if (GetMultiplayerId() == 0) { @@ -1913,7 +1913,7 @@ static void sub_8049A20(void) gUnknown_03004824->unk_007b = 7; } -/*static*/ void sub_8049CC4(void) +static void sub_8049CC4(void) { if (gUnknown_03004824->unk_0080 == 5 && gUnknown_03004824->unk_0081 == 5) { @@ -1922,7 +1922,7 @@ static void sub_8049A20(void) } } -/*static*/ void DisplayMessageAndContinueTask(void) +static void DisplayMessageAndContinueTask(void) { gUnknown_03004824->unk_00b4++; if (gUnknown_03004824->unk_00b4 > 120) @@ -1934,7 +1934,7 @@ static void sub_8049A20(void) } } -/*static*/ void sub_8049D44(void) +static void sub_8049D44(void) { if (gMain.newKeys & A_BUTTON) { @@ -1946,7 +1946,7 @@ static void sub_8049A20(void) } } -/*static*/ void sub_8049D9C(void) +static void sub_8049D9C(void) { if (!gPaletteFade.active) { @@ -1955,7 +1955,7 @@ static void sub_8049A20(void) } } -/*static*/ void sub_8049DC4(void) +static void sub_8049DC4(void) { if (gReceivedRemoteLinkPlayers == 0) { @@ -1963,6 +1963,58 @@ static void sub_8049A20(void) } } +static void sub_8049DE0(void) +{ + switch (gUnknown_03004824->unk_007b) + { + case 0: + sub_8049680(); + break; + case 1: + sub_8049860(); + break; + case 2: + sub_804997C(); + break; + case 3: + sub_8049AC0(); + break; + case 4: + sub_8049BC0(); + break; + case 6: + sub_8049C8C(); + break; + case 7: + sub_8049CC4(); + break; + case 8: + sub_8049D44(); + break; + case 9: + sub_8048A14(); + break; + case 10: + sub_8048A50(); + break; + case 11: + sub_8049D9C(); + break; + case 12: + sub_8049DC4(); + break; + case 13: + sub_8048A90(); + break; + case 14: + DisplayMessageAndContinueTask(); + break; + case 15: + sub_8049954(); + break; + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 99b65c1b5e8b4f75ca50cb21ecf84b20eff944ae Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 15:35:05 -0400 Subject: sub_8049E9C --- src/trade.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index b1692a984..9d28ec8a5 100644 --- a/src/trade.c +++ b/src/trade.c @@ -87,9 +87,8 @@ struct TradeEwramSubstruct { /*0x007c*/ u8 unk_007c; /*0x007d*/ u8 unk_007d; /*0x007e*/ u16 unk_007e; - /*0x0080*/ u8 unk_0080; - /*0x0081*/ u8 unk_0081; - /*0x0082*/ u8 filler_0082[2]; + /*0x0080*/ u8 unk_0080[2]; + /*0x0082*/ u8 unk_0082[2]; /*0x0084*/ u8 unk_0084; /*0x0085*/ u8 unk_0085; /*0x0086*/ u8 unk_0086; @@ -147,7 +146,7 @@ static void sub_8049DE0(void); /*static*/ void sub_804A938(struct UnkStructE *); /*static*/ u8 sub_804A9F4(void); /*static*/ u8 sub_804AA00(void); -/*static*/ void sub_8049E9C(u8); +static void sub_8049E9C(u8); /*static*/ void sub_804AADC(u8, u8); /*static*/ void sub_804A80C(void); static u8 sub_80499F0(const u8 *, u8, u8); @@ -690,8 +689,8 @@ static void sub_8047EC0(void) gUnknown_03004824->unk_0075 = 0; gUnknown_03004824->unk_007b = 0; gUnknown_03004824->unk_007c = 0; - gUnknown_03004824->unk_0080 = 0; - gUnknown_03004824->unk_0081 = 0; + gUnknown_03004824->unk_0080[0] = 0; + gUnknown_03004824->unk_0080[1] = 0; gUnknown_03004824->unk_0086 = 0; gUnknown_03004824->unk_0087 = 0; gUnknown_03004824->unk_00b4 = 0; @@ -870,8 +869,8 @@ void sub_80484F4(void) gUnknown_03004824->unk_0075 = 0; gUnknown_03004824->unk_007b = 0; gUnknown_03004824->unk_007c = 0; - gUnknown_03004824->unk_0080 = 0; - gUnknown_03004824->unk_0081 = 0; + gUnknown_03004824->unk_0080[0] = 0; + gUnknown_03004824->unk_0080[1] = 0; gUnknown_03004824->unk_0086 = 0; gUnknown_03004824->unk_0087 = 0; gUnknown_03004824->unk_00b4 = 0; @@ -1915,7 +1914,7 @@ static void sub_8049C8C(void) static void sub_8049CC4(void) { - if (gUnknown_03004824->unk_0080 == 5 && gUnknown_03004824->unk_0081 == 5) + if (gUnknown_03004824->unk_0080[0] == 5 && gUnknown_03004824->unk_0080[1] == 5) { sub_8049088(); gUnknown_03004824->unk_007b = 14; @@ -2015,6 +2014,16 @@ static void sub_8049DE0(void) } } +static void sub_8049E9C(u8 a0) +{ + u8 v0 = a0 / 6; + if (gUnknown_03004824->unk_0080[v0] == 0) + { + gUnknown_03004824->unk_0080[v0] = 1; + gUnknown_03004824->unk_0082[v0] = a0; + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 01b88dba1f0a7f28c8d047e711affeaa14c257d4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 18:35:33 -0400 Subject: sub_804A2B4; change `struct Window->config` to const --- src/text.c | 4 +- src/trade.c | 164 +++++++++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 121 insertions(+), 47 deletions(-) (limited to 'src') diff --git a/src/text.c b/src/text.c index b27084b86..1dc81df0c 100644 --- a/src/text.c +++ b/src/text.c @@ -1943,7 +1943,7 @@ void InitWindowFromConfig(struct Window *win, const struct WindowConfig *winConf void InitWindow(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) { - struct WindowConfig *winConfig = win->config; + const struct WindowConfig *winConfig = win->config; win->textMode = winConfig->textMode; win->fontNum = winConfig->fontNum; win->language = GAME_LANGUAGE; @@ -3653,7 +3653,7 @@ void sub_8004E3C(struct WindowConfig *winConfig, u8 *tileData, const u8 *text) sub_8002F44(&sTempWindow); } -u8 GetStringWidthGivenWindowConfig(struct WindowConfig *winConfig, const u8 *s) +u8 GetStringWidthGivenWindowConfig(const struct WindowConfig *winConfig, const u8 *s) { sTempWindow.config = winConfig; InitWindow(&sTempWindow, s, 0, 0, 0); diff --git a/src/trade.c b/src/trade.c index 9d28ec8a5..302d323d3 100644 --- a/src/trade.c +++ b/src/trade.c @@ -23,6 +23,7 @@ #include "pokemon_summary_screen.h" #include "rom4.h" #include "trade.h" +#include "rom_8077ABC.h" #ifdef ENGLISH #define sub_804A96C_alt sub_804A96C @@ -53,13 +54,6 @@ struct UnkStructC { }; struct UnkStructD { - /*0x00*/ u8 pad00[0x10]; - /*0x10*/ u8 var10; - /*0x11*/ u8 pad11[1]; - /*0x12*/ u16 var12[1]; -}; - -struct UnkStructE { /*0x00*/ u8 filler_00[8]; /*0x08*/ void *vramAddr; /*0x0c*/ u8 filler_0c[4]; @@ -71,12 +65,10 @@ struct TradeEwramSubstruct { /*0x0000*/ u8 unk_0000; /*0x0001*/ u8 unk_0001; /*0x0004*/ struct Window window; - /*0x0034*/ u8 playerPartyIcons[6]; - /*0x003a*/ u8 friendPartyIcons[6]; + /*0x0034*/ u8 partyIcons[2][6]; /*0x0040*/ u8 tradeMenuCursorSpriteIdx; /*0x0041*/ u8 tradeMenuCursorPosition; - /*0x0042*/ u8 playerPartyCount; - /*0x0043*/ u8 friendPartyCount; + /*0x0042*/ u8 partyCounts[2]; /*0x0044*/ u8 tradeMenuOptionsActive[13]; /*0x0051*/ u8 unk_0051[6]; /*0x0056*/ u8 filler_0057[30]; @@ -100,7 +92,7 @@ struct TradeEwramSubstruct { /*0x00b4*/ u8 unk_00b4; /*0x00b5*/ u8 unk_00b5[7]; /*0x00bc*/ u8 filler_00bc[12]; - /*0x00c8*/ struct UnkStructE unk_00c8; + /*0x00c8*/ struct UnkStructD unk_00c8; /*0x08dc*/ u8 filler_04dc[0x724]; }; @@ -123,7 +115,7 @@ static void sub_8047EC0(void); /*static*/ void sub_804ACD8(const u8 *, u8 *, u8); static void nullsub_5(u8, u8); /*static*/ void sub_804AA88(void); -/*static*/ void sub_804A964(struct UnkStructE *, void *); +/*static*/ void sub_804A964(struct UnkStructD *, void *); static void sub_80489F4(void); /*static*/ void sub_804AA0C(u8); static bool8 sub_8048D44(void); @@ -137,13 +129,13 @@ static void sub_8048B0C(u8); /*static*/ void sub_804AF10(void); static void sub_80494D8(void); static void sub_8048AB4(void); -/*static*/ void sub_804A940(struct UnkStructE *); +/*static*/ void sub_804A940(struct UnkStructD *); /*static*/ void sub_804B41C(void); static void sub_8049DE0(void); /*static*/ void sub_804AB30(void); /*static*/ void sub_8049ED4(u8); /*static*/ void sub_804A6DC(u8); -/*static*/ void sub_804A938(struct UnkStructE *); +/*static*/ void sub_804A938(struct UnkStructD *); /*static*/ u8 sub_804A9F4(void); /*static*/ u8 sub_804AA00(void); static void sub_8049E9C(u8); @@ -151,6 +143,7 @@ static void sub_8049E9C(u8); /*static*/ void sub_804A80C(void); static u8 sub_80499F0(const u8 *, u8, u8); /*static*/ void sub_804A840(u8); +/*static*/ u8 sub_804A2B4(u8 *, u8, u8); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -751,22 +744,22 @@ static void sub_8047EC0(void) CalculateEnemyPartyCount(); FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, 0, 0, 29, 19); REG_DISPCNT = 0; - gUnknown_03004824->playerPartyCount = gPlayerPartyCount; - gUnknown_03004824->friendPartyCount = gEnemyPartyCount; - for (i = 0; i < gUnknown_03004824->playerPartyCount; i ++) - gUnknown_03004824->playerPartyIcons[i] = CreateMonIcon(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2), sub_809D62C, gTradeMonSpriteCoords[i][0] * 8 + 14, gTradeMonSpriteCoords[i][1] * 8 - 12, TRUE, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY)); - for (i = 0; i < gUnknown_03004824->friendPartyCount; i ++) - gUnknown_03004824->friendPartyIcons[i] = CreateMonIcon(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[6 + i][0] * 8 + 14, gTradeMonSpriteCoords[6 + i][1] * 8 - 12, TRUE, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY)); + gUnknown_03004824->partyCounts[0] = gPlayerPartyCount; + gUnknown_03004824->partyCounts[1] = gEnemyPartyCount; + for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++) + gUnknown_03004824->partyIcons[0][i] = CreateMonIcon(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2), sub_809D62C, gTradeMonSpriteCoords[i][0] * 8 + 14, gTradeMonSpriteCoords[i][1] * 8 - 12, TRUE, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY)); + for (i = 0; i < gUnknown_03004824->partyCounts[1]; i ++) + gUnknown_03004824->partyIcons[1][i] = CreateMonIcon(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[6 + i][0] * 8 + 14, gTradeMonSpriteCoords[6 + i][1] * 8 - 12, TRUE, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY)); nullsub_5(2, 0); gMain.state ++; break; case 7: LoadHeldItemIconGraphics(); - CreateHeldItemIcons(&gUnknown_03004824->playerPartyCount, gUnknown_03004824->playerPartyIcons, 0); + CreateHeldItemIcons(&gUnknown_03004824->partyCounts[0], gUnknown_03004824->partyIcons[0], 0); gMain.state ++; break; case 8: - CreateHeldItemIcons(&gUnknown_03004824->playerPartyCount, gUnknown_03004824->playerPartyIcons, 1); + CreateHeldItemIcons(&gUnknown_03004824->partyCounts[0], gUnknown_03004824->partyIcons[0], 1); gMain.state ++; break; case 9: @@ -899,24 +892,24 @@ void sub_80484F4(void) case 6: CalculateEnemyPartyCount(); REG_DISPCNT = 0; - gUnknown_03004824->playerPartyCount = gPlayerPartyCount; - gUnknown_03004824->friendPartyCount = gEnemyPartyCount; + gUnknown_03004824->partyCounts[0] = gPlayerPartyCount; + gUnknown_03004824->partyCounts[1] = gEnemyPartyCount; sub_804A41C(0); sub_804A41C(1); - for (i = 0; i < gUnknown_03004824->playerPartyCount; i ++) - gUnknown_03004824->playerPartyIcons[i] = CreateMonIcon(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[i][0] * 8 + 14, gTradeMonSpriteCoords[i][1] * 8 - 12, TRUE, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY)); - for (i = 0; i < gUnknown_03004824->friendPartyCount; i ++) - gUnknown_03004824->friendPartyIcons[i] = CreateMonIcon(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[6 + i][0] * 8 + 14, gTradeMonSpriteCoords[6 + i][1] * 8 - 12, TRUE, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY)); + for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++) + gUnknown_03004824->partyIcons[0][i] = CreateMonIcon(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[i][0] * 8 + 14, gTradeMonSpriteCoords[i][1] * 8 - 12, TRUE, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY)); + for (i = 0; i < gUnknown_03004824->partyCounts[1]; i ++) + gUnknown_03004824->partyIcons[1][i] = CreateMonIcon(GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), sub_809D62C, gTradeMonSpriteCoords[6 + i][0] * 8 + 14, gTradeMonSpriteCoords[6 + i][1] * 8 - 12, TRUE, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY)); nullsub_5(2, 0); gMain.state ++; break; case 7: LoadHeldItemIconGraphics(); - CreateHeldItemIcons(&gUnknown_03004824->playerPartyCount, gUnknown_03004824->playerPartyIcons, 0); + CreateHeldItemIcons(&gUnknown_03004824->partyCounts[0], gUnknown_03004824->partyIcons[0], 0); gMain.state ++; break; case 8: - CreateHeldItemIcons(&gUnknown_03004824->playerPartyCount, gUnknown_03004824->playerPartyIcons, 1); + CreateHeldItemIcons(&gUnknown_03004824->partyCounts[0], gUnknown_03004824->partyIcons[0], 1); gMain.state ++; break; case 9: @@ -1271,18 +1264,18 @@ static void sub_8048C70(void) int i; for (i = 0; i < PARTY_SIZE; i ++) { - if (i < gUnknown_03004824->playerPartyCount) + if (i < gUnknown_03004824->partyCounts[0]) { - gSprites[gUnknown_03004824->playerPartyIcons[i]].invisible = FALSE; + gSprites[gUnknown_03004824->partyIcons[0][i]].invisible = FALSE; gUnknown_03004824->tradeMenuOptionsActive[i] = TRUE; } else { gUnknown_03004824->tradeMenuOptionsActive[i] = FALSE; } - if (i < gUnknown_03004824->friendPartyCount) + if (i < gUnknown_03004824->partyCounts[1]) { - gSprites[gUnknown_03004824->friendPartyIcons[i]].invisible = FALSE; + gSprites[gUnknown_03004824->partyIcons[1][i]].invisible = FALSE; gUnknown_03004824->tradeMenuOptionsActive[i + 6] = TRUE; } else @@ -1742,7 +1735,7 @@ static void sub_8049860(void) BeginNormalPaletteFade(-1, 0, 0, 16, 0); gUnknown_03004824->unk_007b = 2; } - else if (sub_80499F0(gUnknown_03004824->unk_0051, gUnknown_03004824->playerPartyCount, gUnknown_03004824->tradeMenuCursorPosition) == 0) + else if (sub_80499F0(gUnknown_03004824->unk_0051, gUnknown_03004824->partyCounts[0], gUnknown_03004824->tradeMenuCursorPosition) == 0) { sub_804AADC(3, 2); gUnknown_03004824->unk_007b = 8; @@ -1775,11 +1768,11 @@ static void sub_804997C(void) { if (gUnknown_03004824->tradeMenuCursorPosition < PARTY_SIZE) { - ShowPokemonSummaryScreen(gPlayerParty, gUnknown_03004824->tradeMenuCursorPosition, gUnknown_03004824->playerPartyCount - 1, sub_80484F4, 4); + ShowPokemonSummaryScreen(gPlayerParty, gUnknown_03004824->tradeMenuCursorPosition, gUnknown_03004824->partyCounts[0] - 1, sub_80484F4, 4); } else { - ShowPokemonSummaryScreen(gEnemyParty, gUnknown_03004824->tradeMenuCursorPosition - 6, gUnknown_03004824->friendPartyCount - 1, sub_80484F4, 4); + ShowPokemonSummaryScreen(gEnemyParty, gUnknown_03004824->tradeMenuCursorPosition - 6, gUnknown_03004824->partyCounts[1] - 1, sub_80484F4, 4); } } } @@ -1802,11 +1795,11 @@ static void sub_8049A20(void) { u8 unk_0051[12]; int i; - for (i = 0; i < gUnknown_03004824->playerPartyCount; i ++) + for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++) { unk_0051[i] = gUnknown_03004824->unk_0051[i]; } - if (sub_80499F0(unk_0051, gUnknown_03004824->playerPartyCount, gUnknown_03004824->tradeMenuCursorPosition) == 0) + if (sub_80499F0(unk_0051, gUnknown_03004824->partyCounts[0], gUnknown_03004824->tradeMenuCursorPosition) == 0) { sub_804AADC(3, 2); gUnknown_03004824->linkData[0] = 0xbbcc; @@ -2024,9 +2017,90 @@ static void sub_8049E9C(u8 a0) } } +//static void sub_8049ED4(u8 a0) +//{ +// struct Pokemon pokemon; +// u8 i; +// u8 temp0 = gUnknown_03004824->unk_0082[a0]; +// u8 sp_plus_6c = temp0 < PARTY_SIZE ? 1 : 0; +// u8 r8 = temp0 % 6; +// u8 stringLength; +// u8 string[12]; +// +// switch (gUnknown_03004824->unk_0080[a0]) +// { +// case 1: +// for (i = 0; i < gUnknown_03004824->partyCounts[a0]; i ++) +// { +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][i]].invisible = TRUE; +// } +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].invisible = FALSE; +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].data0 = 20; +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].data2 = (gTradeMonSpriteCoords[sp_plus_6c][0] + gTradeMonSpriteCoords[sp_plus_6c][1]) / 2 * 8 + 14; +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].data4 = gTradeMonSpriteCoords[sp_plus_6c][1] * 8 - 12; +// oamt_set_x3A_32(&gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]], sub_809D62C); +// gUnknown_03004824->unk_0080[a0] ++; +// sub_8078A34(&gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]]); +// HandleDestroyMenuCursors(); +// FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[sp_plus_6c][1], 0, gUnknown_0820C330[sp_plus_6c][1], 19); +// sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15 * sp_plus_6c, 0, gTradePartyBoxTilemap, 15, 17, 0); +// if (sp_plus_6c == 0) +// { +// sub_804A80C(); +// } +// break; +// case 2: +// if (gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].callback == sub_809D62C) +// { +// gUnknown_03004824->unk_0080[a0] = 3; +// } +// break; +// case 3: +// sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15 * sp_plus_6c, 0, gTradePartyBoxTilemap, 15, 11, 0); +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos1.x = (gTradeMonSpriteCoords[sp_plus_6c][0] + gTradeMonSpriteCoords[sp_plus_6c][1]) / 2 * 8 + 14; +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos1.y = gTradeMonSpriteCoords[sp_plus_6c][1] * 8 - 12; +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos2.x = 0; +// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos2.y = 0; +// stringLength = sub_804A2B4(&pokemon, sp_plus_6c, r8); +// string[0] = 0xFC; +// string[1] = 0x06; +// string[2] = 0x04; +// string[3] = 0xFC; +// string[4] = 0x11; +// string[5] = (64 - stringLength + (stringLength > 64 ? 1 : 0)) / 2; +// sub_8003460(&gUnknown_03004824->window, string, sp_plus_6c * 192 + gUnknown_03004824->unk_007a, gUnknown_0820C334[sp_plus_6c][0], gUnknown_0820C334[sp_plus_6c][1]); +// sub_804A33C() +// break; +// case 4: +// break; +// } +//} + +asm(".section .text.sub_804A2B4"); + +u8 sub_804A2B4(u8 *a0, u8 whichParty, u8 whichPokemon) +{ + u8 string[11]; + if (whichParty == 0) + { + GetMonData(&gPlayerParty[whichPokemon], MON_DATA_NICKNAME, string); + StringCopy10(a0, string); + GetMonGender(&gPlayerParty[whichPokemon]); + GetMonData(&gPlayerParty[whichPokemon], MON_DATA_LEVEL); + } + else + { + GetMonData(&gEnemyParty[whichPokemon], MON_DATA_NICKNAME, string); + StringCopy10(a0, string); + GetMonGender(&gEnemyParty[whichPokemon]); + GetMonData(&gEnemyParty[whichPokemon], MON_DATA_LEVEL); + } + return GetStringWidthGivenWindowConfig(&gWindowConfig_81E7294, a0); +} + asm(".section .text.sub_804A96C"); -/*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { +/*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { int y, x; for (y = 0; y < height; y++) @@ -2034,20 +2108,20 @@ asm(".section .text.sub_804A96C"); for (x = 0; x < width; x++) { - arg0->var12[(top * 32 + left) + y * 32 + x] = tilemap[width * y + x] | sp8; + arg0->unk_12[(top * 32 + left) + y * 32 + x] = tilemap[width * y + x] | sp8; } } #if ENGLISH - arg0->var10 = 1; + arg0->unk_10 = 1; #endif } #if GERMAN -void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { +void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { sub_804A96C(arg0, left, top, tilemap, width, height, sp8); - arg0->var10 = 1; + arg0->unk_10 = 1; } #endif -- cgit v1.2.3 From e36682b776b03c69b7d6dc3f2bfce5e97c255830 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 18:47:26 -0400 Subject: sub_804A33C --- src/trade.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 302d323d3..ad97b0ca7 100644 --- a/src/trade.c +++ b/src/trade.c @@ -71,7 +71,8 @@ struct TradeEwramSubstruct { /*0x0042*/ u8 partyCounts[2]; /*0x0044*/ u8 tradeMenuOptionsActive[13]; /*0x0051*/ u8 unk_0051[6]; - /*0x0056*/ u8 filler_0057[30]; + /*0x0057*/ u8 filler_0057[6]; + /*0x005d*/ u8 unk_005d[4][6]; /*0x0075*/ u8 unk_0075; /*0x0076*/ u8 filler_0076[4]; /*0x007a*/ u8 unk_007a; @@ -2017,6 +2018,7 @@ static void sub_8049E9C(u8 a0) } } +// TODO: Figure out what the f**k is going on here //static void sub_8049ED4(u8 a0) //{ // struct Pokemon pokemon; @@ -2024,8 +2026,8 @@ static void sub_8049E9C(u8 a0) // u8 temp0 = gUnknown_03004824->unk_0082[a0]; // u8 sp_plus_6c = temp0 < PARTY_SIZE ? 1 : 0; // u8 r8 = temp0 % 6; -// u8 stringLength; -// u8 string[12]; +// s8 stringLength; +// u8 string[10]; // // switch (gUnknown_03004824->unk_0080[a0]) // { @@ -2098,6 +2100,36 @@ u8 sub_804A2B4(u8 *a0, u8 whichParty, u8 whichPokemon) return GetStringWidthGivenWindowConfig(&gWindowConfig_81E7294, a0); } +void sub_804A33C(u8 *a0, u8 whichParty, u8 whichPokemon) +{ + u16 i; + u16 moves[4]; + if (gUnknown_03004824->unk_005d[whichParty][whichPokemon] == 0) + { + for (i = 0; i < 4; i ++) + { + if (whichParty == 0) + moves[i] = GetMonData(&gPlayerParty[whichPokemon], MON_DATA_MOVE1 + i, NULL); + else + moves[i] = GetMonData(&gEnemyParty[whichPokemon], MON_DATA_MOVE1 + i, NULL); + } + StringCopy(a0, gOtherText_Terminator); + for (i = 0; i < 4; i ++) + { + if (moves[i] != 0) + { + StringAppend(a0, gMoveNames[moves[i]]); + } + StringAppend(a0, gOtherText_ControlAndMiscText); + } + } + else + { + StringCopy(a0, gOtherText_Terminator); + StringAppend(a0, gOtherText_FourQuestions); + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From e32ae86756636812ab899b543ebe4c943459cd49 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 20:06:47 -0400 Subject: sub_804A51C --- src/trade.c | 218 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 214 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index ad97b0ca7..412e52102 100644 --- a/src/trade.c +++ b/src/trade.c @@ -22,8 +22,9 @@ #include "data2.h" #include "pokemon_summary_screen.h" #include "rom4.h" -#include "trade.h" #include "rom_8077ABC.h" +#include "daycare.h" +#include "trade.h" #ifdef ENGLISH #define sub_804A96C_alt sub_804A96C @@ -145,6 +146,7 @@ static void sub_8049E9C(u8); static u8 sub_80499F0(const u8 *, u8, u8); /*static*/ void sub_804A840(u8); /*static*/ u8 sub_804A2B4(u8 *, u8, u8); +/*static*/ void sub_804A96C_alt(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -2027,7 +2029,7 @@ static void sub_8049E9C(u8 a0) // u8 sp_plus_6c = temp0 < PARTY_SIZE ? 1 : 0; // u8 r8 = temp0 % 6; // s8 stringLength; -// u8 string[10]; +// u8 string[50]; // // switch (gUnknown_03004824->unk_0080[a0]) // { @@ -2063,13 +2065,13 @@ static void sub_8049E9C(u8 a0) // gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos1.y = gTradeMonSpriteCoords[sp_plus_6c][1] * 8 - 12; // gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos2.x = 0; // gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos2.y = 0; -// stringLength = sub_804A2B4(&pokemon, sp_plus_6c, r8); +// stringLength = sub_804A2B4(&string[6], sp_plus_6c, r8); // string[0] = 0xFC; // string[1] = 0x06; // string[2] = 0x04; // string[3] = 0xFC; // string[4] = 0x11; -// string[5] = (64 - stringLength + (stringLength > 64 ? 1 : 0)) / 2; +// string[5] = (64 - stringLength) / 2; // sub_8003460(&gUnknown_03004824->window, string, sp_plus_6c * 192 + gUnknown_03004824->unk_007a, gUnknown_0820C334[sp_plus_6c][0], gUnknown_0820C334[sp_plus_6c][1]); // sub_804A33C() // break; @@ -2130,6 +2132,214 @@ void sub_804A33C(u8 *a0, u8 whichParty, u8 whichPokemon) } } +#ifdef NONMATCHING +void sub_804A41C(u8 whichParty) +{ + u8 i; + u8 nickname[22]; + u8 string[40]; + struct Pokemon *pokemon; + + string[0] = 0xFC; + string[1] = 0x06; + string[2] = 0x04; + string[3] = 0xFC; + string[4] = 0x11; + string[5] = 0x00; + + for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++) + { + pokemon = whichParty == 0 ? &gPlayerParty[i] : &gEnemyParty[i]; + GetMonData(pokemon, MON_DATA_NICKNAME, nickname); + StringCopy10(string + 6, nickname); + GetMonGender(pokemon); + string[5] = (50 - GetStringWidthGivenWindowConfig(&gWindowConfig_81E7294, string + 6)) / 2; + sub_8003460(&gUnknown_03004824->window, string, gUnknown_03004824->unk_007a + 22 * 6 * whichParty + 22 * i, gTradeMonSpriteCoords[i + 6 * whichParty][0], gTradeMonSpriteCoords[i + 6 * whichParty][1]); + } +} +#else +__attribute__((naked)) +void sub_804A41C(u8 whichParty) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x44\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadd r3, sp, 0x1C\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0xFC\n" + "\tstrb r1, [r3]\n" + "\tmovs r0, 0x6\n" + "\tstrb r0, [r3, 0x1]\n" + "\tmovs r0, 0x4\n" + "\tstrb r0, [r3, 0x2]\n" + "\tstrb r1, [r3, 0x3]\n" + "\tmovs r0, 0x11\n" + "\tstrb r0, [r3, 0x4]\n" + "\tstrb r2, [r3, 0x5]\n" + "\tmovs r6, 0\n" + "\tldr r1, _0804A470 @ =gUnknown_03004824\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x42\n" + "\tadds r0, r5\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tbcs _0804A504\n" + "\tmov r8, r3\n" + "\tadds r7, r1, 0\n" + "\tldr r0, _0804A474 @ =gTradeMonSpriteCoords\n" + "\tmov r9, r0\n" + "\tmovs r4, 0x1\n" + "\tadd r4, r9\n" + "\tmov r10, r4\n" + "_0804A462:\n" + "\tcmp r5, 0\n" + "\tbne _0804A47C\n" + "\tmovs r0, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r0\n" + "\tldr r0, _0804A478 @ =gPlayerParty\n" + "\tb _0804A484\n" + "\t.align 2, 0\n" + "_0804A470: .4byte gUnknown_03004824\n" + "_0804A474: .4byte gTradeMonSpriteCoords\n" + "_0804A478: .4byte gPlayerParty\n" + "_0804A47C:\n" + "\tmovs r0, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r0\n" + "\tldr r0, _0804A514 @ =gEnemyParty\n" + "_0804A484:\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x2\n" + "\tadd r2, sp, 0x4\n" + "\tbl GetMonData\n" + "\tmov r0, sp\n" + "\tadds r0, 0x22\n" + "\tadd r1, sp, 0x4\n" + "\tbl StringCopy10\n" + "\tadds r0, r4, 0\n" + "\tbl GetMonGender\n" + "\tmov r1, sp\n" + "\tadds r1, 0x22\n" + "\tldr r0, _0804A518 @ =gWindowConfig_81E7294\n" + "\tbl GetStringWidthGivenWindowConfig\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmovs r1, 0x32\n" + "\tsubs r1, r0\n" + "\tlsrs r0, r1, 31\n" + "\tadds r1, r0\n" + "\tasrs r1, 1\n" + "\tmov r0, r8\n" + "\tstrb r1, [r0, 0x5]\n" + "\tldr r1, [r7]\n" + "\tadds r0, r1, 0x4\n" + "\tadds r1, 0x7A\n" + "\tlsls r2, r5, 5\n" + "\tadds r2, r5\n" + "\tlsls r2, 2\n" + "\tldrb r1, [r1]\n" + "\tadds r2, r1\n" + "\tmovs r1, 0x16\n" + "\tmuls r1, r6\n" + "\tadds r2, r1\n" + "\tlsls r2, 16\n" + "\tlsrs r2, 16\n" + "\tlsls r1, r5, 1\n" + "\tadds r1, r5\n" + "\tlsls r1, 1\n" + "\tadds r1, r6, r1\n" + "\tlsls r1, 1\n" + "\tmov r4, r9\n" + "\tadds r3, r1, r4\n" + "\tldrb r3, [r3]\n" + "\tadd r1, r10\n" + "\tldrb r1, [r1]\n" + "\tstr r1, [sp]\n" + "\tmov r1, r8\n" + "\tbl sub_8003460\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tldr r0, [r7]\n" + "\tadds r0, 0x42\n" + "\tadds r0, r5\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tbcc _0804A462\n" + "_0804A504:\n" + "\tadd sp, 0x44\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804A514: .4byte gEnemyParty\n" + "_0804A518: .4byte gWindowConfig_81E7294"); +} +#endif + +void sub_804A51C(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4, u8 a5) +{ + u8 nickname[24]; + u8 level; + u8 gender; + u8 lv_div_10; + sub_804A96C(&gUnknown_03004824->unk_00c8, a4, a5, gTradeMonBoxTilemap, 6, 3, 0); + if (a0 == 0) + { + level = GetMonData(&gPlayerParty[a1], MON_DATA_LEVEL, NULL); + gender = GetMonGender(&gPlayerParty[a1]); + GetMonData(&gPlayerParty[a1], MON_DATA_NICKNAME, nickname); + } + else + { + level = GetMonData(&gEnemyParty[a1], MON_DATA_LEVEL, NULL); + gender = GetMonGender(&gEnemyParty[a1]); + GetMonData(&gEnemyParty[a1], MON_DATA_NICKNAME, nickname); + } + if (gUnknown_03004824->unk_005d[a0][a1] == 0) + { + lv_div_10 = level / 10; + if (lv_div_10 != 0) + { + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3] = lv_div_10 + 0x60; + } + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 + 1] = (u8)(level % 10) + 0x70; + if (gender == MON_MALE) + { + if (!NameHasGenderSymbol(nickname, MON_MALE)) + { + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] += 1; + } + } + else if (gender == MON_FEMALE) + { + if (!NameHasGenderSymbol(nickname, MON_FEMALE)) + { + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] += 2; + } + } + } + else + { + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 32] = gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 33]; + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] = gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 36] | 0x400; + } +#ifdef GERMAN + gUnknown_03004824->unk_00c8.unk_10 = 1; +#endif +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From e2475defe8867d6b50364e98e765ef4b5d117c4f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 20:25:16 -0400 Subject: nearly-matching sub_804A6DC --- src/trade.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 103 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 412e52102..29ba8c137 100644 --- a/src/trade.c +++ b/src/trade.c @@ -397,40 +397,46 @@ const u8 gTradeMonSpriteCoords[][2] = { {23, 18} // CANCEL }; -const u8 gTradeLevelDisplayCoords[][2] = { - // Your party - { 5, 4}, - {12, 4}, - { 5, 9}, - {12, 9}, - { 5, 14}, - {12, 14}, - - // Friend's party - {20, 4}, - {27, 4}, - {20, 9}, - {27, 9}, - {20, 14}, - {27, 14} +const u8 gTradeLevelDisplayCoords[2][6][2] = { + { + // Your party + {5, 4}, + {12, 4}, + {5, 9}, + {12, 9}, + {5, 14}, + {12, 14}, + }, + { + // Friend's party + {20, 4}, + {27, 4}, + {20, 9}, + {27, 9}, + {20, 14}, + {27, 14} + } }; -const u8 gTradeMonBoxCoords[][2] = { - // Your party - { 1, 3}, - { 8, 3}, - { 1, 8}, - { 8, 8}, - { 1, 13}, - { 8, 13}, - - // Friend's party - {16, 3}, - {23, 3}, - {16, 8}, - {23, 8}, - {16, 13}, - {23, 13} +const u8 gTradeMonBoxCoords[2][6][2] = { + { + // Your party + {1, 3}, + {8, 3}, + {1, 8}, + {8, 8}, + {1, 13}, + {8, 13}, + }, + { + // Friend's party + {16, 3}, + {23, 3}, + {16, 8}, + {23, 8}, + {16, 13}, + {23, 13} + } }; const u8 gTradeUnknownSpriteCoords[][2][2] = { @@ -2340,6 +2346,71 @@ void sub_804A51C(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4, u8 a5) #endif } +#ifdef NONMATCHING +void sub_804A6DC(u8 whichParty) +{ + int i; + for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++) + { + sub_804A51C(whichParty, i, gTradeLevelDisplayCoords[whichParty][i][0], gTradeLevelDisplayCoords[whichParty][i][1], gTradeMonBoxCoords[whichParty][i][0], gTradeMonBoxCoords[whichParty][i][1]); + } +} +#else +__attribute__((naked)) +void sub_804A6DC(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, _0804A734 @ =gUnknown_03004824\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x42\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tbge _0804A72C\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r6\n" + "\tldr r1, _0804A738 @ =gTradeLevelDisplayCoords\n" + "\tlsls r0, 2\n" + "\tadds r5, r0, r1\n" + "\tldr r1, _0804A73C @ =gTradeMonBoxCoords\n" + "\tadds r4, r0, r1\n" + "_0804A702:\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_804A51C\n" + "\tadds r5, 0x2\n" + "\tadds r4, 0x2\n" + "\tadds r7, 0x1\n" + "\tldr r0, _0804A734 @ =gUnknown_03004824\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x42\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tblt _0804A702\n" + "_0804A72C:\n" + "\tadd sp, 0x8\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804A734: .4byte gUnknown_03004824\n" + "_0804A738: .4byte gTradeLevelDisplayCoords\n" + "_0804A73C: .4byte gTradeMonBoxCoords"); +} +#endif + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 23854ba34673553218830405dfce1af4dbd701ad Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 20:31:40 -0400 Subject: sub_804A740 --- src/trade.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 29ba8c137..4a3584083 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2411,6 +2411,19 @@ void sub_804A6DC(u8 whichParty) } #endif +void sub_804A740(u8 whichParty) +{ + int i; + for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++) + { + gSprites[gUnknown_03004824->partyIcons[whichParty][i]].invisible = FALSE; + gSprites[gUnknown_03004824->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[6 * whichParty + i][0] * 8 + 14; + gSprites[gUnknown_03004824->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[6 * whichParty + i][1] * 8 - 12; + gSprites[gUnknown_03004824->partyIcons[whichParty][i]].pos2.x = 0; + gSprites[gUnknown_03004824->partyIcons[whichParty][i]].pos2.y = 0; + } +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 43bb9296ae8d2fdcaf9b80b3116bca93fe288c12 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 21:15:51 -0400 Subject: sub_804A80C --- src/trade.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 4a3584083..4a84c1b1d 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2424,6 +2424,12 @@ void sub_804A740(u8 whichParty) } } +void sub_804A80C(void) +{ + FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[1][0], 0, gUnknown_0820C330[1][1], 19); + sub_804A41C(1); +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 3d914f466ccb187d20b84ae050fb54eec63cb9c6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 21:23:25 -0400 Subject: sub_804A840 --- src/trade.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 4a84c1b1d..9a6273238 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2430,6 +2430,31 @@ void sub_804A80C(void) sub_804A41C(1); } +void sub_804A840(u8 whichParty) +{ + if (whichParty == 0) + { + FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[0][0], 0, gUnknown_0820C330[0][1], 19); + sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 0, 0, gTradePartyBoxTilemap, 15, 17, 0); + sub_804A6DC(0); + sub_804A41C(0); + sub_804A740(0); + sub_804A938(&gUnknown_03004824->unk_00c8); + } + else + { + HandleDestroyMenuCursors(); + FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[1][0], 0, gUnknown_0820C330[1][1], 19); + sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15, 0, gTradePartyBoxTilemap, 15, 17, 0); + sub_804A6DC(1); + sub_804A41C(1); + sub_804A740(1); + sub_804A938(&gUnknown_03004824->unk_00c8); + } + sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); + gUnknown_03004824->unk_0080[whichParty] = 0; +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { -- cgit v1.2.3 From 3fb87d064e12bda763c15a4d1e54f244bf185db9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 21:32:56 -0400 Subject: Close a swiss cheese hole --- src/trade.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 9a6273238..702bc109d 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2455,7 +2455,25 @@ void sub_804A840(u8 whichParty) gUnknown_03004824->unk_0080[whichParty] = 0; } -asm(".section .text.sub_804A96C"); +void sub_804A938(struct UnkStructD *unkStructD) +{ + unkStructD->unk_10 = 1; +} + +void sub_804A940(struct UnkStructD *unkStructD) +{ + if (unkStructD->unk_10) + { + CpuCopy16(unkStructD->unk_12, unkStructD->vramAddr, sizeof(unkStructD->unk_12)); + unkStructD->unk_10 = 0; + } +} + +void sub_804A964(struct UnkStructD *unkStructD, void *dest) +{ + unkStructD->unk_10 = 0; + unkStructD->vramAddr = dest; +} /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { int y, x; -- cgit v1.2.3 From b7b7010563a309a67422d52775c892ac4d25fb64 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 21:49:30 -0400 Subject: sub_804AA0C --- src/trade.c | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 702bc109d..ea3e7732f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -117,34 +117,34 @@ static void sub_8047EC0(void); /*static*/ void sub_804ACD8(const u8 *, u8 *, u8); static void nullsub_5(u8, u8); /*static*/ void sub_804AA88(void); -/*static*/ void sub_804A964(struct UnkStructD *, void *); +static void sub_804A964(struct UnkStructD *, void *); static void sub_80489F4(void); /*static*/ void sub_804AA0C(u8); static bool8 sub_8048D44(void); /*static*/ void sub_804AF84(void); /*static*/ bool8 sub_804ABF8(void); /*static*/ void sub_804ACF4(u8); -/*static*/ void sub_804A41C(u8); +static void sub_804A41C(u8); static void sub_8048C70(void); static void sub_8048B0C(u8); /*static*/ void sub_804AE3C(u8); /*static*/ void sub_804AF10(void); static void sub_80494D8(void); static void sub_8048AB4(void); -/*static*/ void sub_804A940(struct UnkStructD *); +static void sub_804A940(struct UnkStructD *); /*static*/ void sub_804B41C(void); static void sub_8049DE0(void); /*static*/ void sub_804AB30(void); /*static*/ void sub_8049ED4(u8); -/*static*/ void sub_804A6DC(u8); -/*static*/ void sub_804A938(struct UnkStructD *); -/*static*/ u8 sub_804A9F4(void); -/*static*/ u8 sub_804AA00(void); +static void sub_804A6DC(u8); +static void sub_804A938(struct UnkStructD *); +static void sub_804A9F4(u8); +static void sub_804AA00(u8); static void sub_8049E9C(u8); /*static*/ void sub_804AADC(u8, u8); /*static*/ void sub_804A80C(void); static u8 sub_80499F0(const u8 *, u8, u8); -/*static*/ void sub_804A840(u8); +static void sub_804A840(u8); /*static*/ u8 sub_804A2B4(u8 *, u8, u8); /*static*/ void sub_804A96C_alt(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16); @@ -468,7 +468,7 @@ const u8 gTradeMessageWindowRects[][4] = { {7, 7, 23, 12} }; -const struct MenuAction gUnknown_0820C320[] = { +const struct MenuAction2 gUnknown_0820C320[] = { {TradeText_Summary2, sub_804A9F4}, {TradeText_Trade2, sub_804AA00} }; @@ -1688,7 +1688,7 @@ static void sub_8049680(void) if (gUnknown_03004824->tradeMenuCursorPosition < PARTY_SIZE) { DrawTextWindow(&gUnknown_03004824->window, 18, 14, 28, 19); - PrintMenuItems(19, 15, 2, gUnknown_0820C320); + PrintMenuItems(19, 15, 2, (const struct MenuAction *)gUnknown_0820C320); InitMenu(0, 19, 15, 2, 0, 9); gUnknown_03004824->unk_007b = 1; } @@ -2139,7 +2139,7 @@ void sub_804A33C(u8 *a0, u8 whichParty, u8 whichPokemon) } #ifdef NONMATCHING -void sub_804A41C(u8 whichParty) +static void sub_804A41C(u8 whichParty) { u8 i; u8 nickname[22]; @@ -2165,7 +2165,7 @@ void sub_804A41C(u8 whichParty) } #else __attribute__((naked)) -void sub_804A41C(u8 whichParty) +static void sub_804A41C(u8 whichParty) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -2347,7 +2347,7 @@ void sub_804A51C(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4, u8 a5) } #ifdef NONMATCHING -void sub_804A6DC(u8 whichParty) +static void sub_804A6DC(u8 whichParty) { int i; for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++) @@ -2357,7 +2357,7 @@ void sub_804A6DC(u8 whichParty) } #else __attribute__((naked)) -void sub_804A6DC(u8 whichParty) +static void sub_804A6DC(u8 whichParty) { asm_unified("\tpush {r4-r7,lr}\n" "\tsub sp, 0x8\n" @@ -2430,7 +2430,7 @@ void sub_804A80C(void) sub_804A41C(1); } -void sub_804A840(u8 whichParty) +static void sub_804A840(u8 whichParty) { if (whichParty == 0) { @@ -2455,7 +2455,7 @@ void sub_804A840(u8 whichParty) gUnknown_03004824->unk_0080[whichParty] = 0; } -void sub_804A938(struct UnkStructD *unkStructD) +static void sub_804A938(struct UnkStructD *unkStructD) { unkStructD->unk_10 = 1; } @@ -2469,7 +2469,7 @@ void sub_804A940(struct UnkStructD *unkStructD) } } -void sub_804A964(struct UnkStructD *unkStructD, void *dest) +static void sub_804A964(struct UnkStructD *unkStructD, void *dest) { unkStructD->unk_10 = 0; unkStructD->vramAddr = dest; @@ -2500,6 +2500,22 @@ void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilema } #endif +static void sub_804A9F4(u8 unused) +{ + MenuZeroFillScreen(); +} + +static void sub_804AA00(u8 unused) +{ + MenuZeroFillScreen(); +} + +/*static*/ void sub_804AA0C(u8 a0) +{ + DrawTextWindow(&gUnknown_03004824->window, gTradeMessageWindowRects[a0][0], gTradeMessageWindowRects[a0][1], gTradeMessageWindowRects[a0][2], gTradeMessageWindowRects[a0][3]); + sub_8003460(&gUnknown_03004824->window, gUnknown_0820C2F0[a0], 0x180 + gUnknown_03004824->unk_007a, gTradeMessageWindowRects[a0][0] + 1, gTradeMessageWindowRects[a0][1] + 1); +} + asm(".section .text.sub_804DAD4"); /*static*/ void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { -- cgit v1.2.3 From afc3164c5b9139537875c96bb7da693fe16f5815 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 21:58:54 -0400 Subject: sub_804AA88 --- src/trade.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index ea3e7732f..2e854ebb7 100644 --- a/src/trade.c +++ b/src/trade.c @@ -62,6 +62,12 @@ struct UnkStructD { /*0x12*/ u16 unk_12[0x400]; }; +struct UnkStructE { + /*0x00*/ u8 unk_00; + /*0x02*/ u16 unk_02; + /*0x04*/ u8 unk_04; +}; + struct TradeEwramSubstruct { /*0x0000*/ u8 unk_0000; /*0x0001*/ u8 unk_0001; @@ -95,7 +101,8 @@ struct TradeEwramSubstruct { /*0x00b5*/ u8 unk_00b5[7]; /*0x00bc*/ u8 filler_00bc[12]; /*0x00c8*/ struct UnkStructD unk_00c8; - /*0x08dc*/ u8 filler_04dc[0x724]; + /*0x08dc*/ struct UnkStructE unk_08dc[4]; + /*0x08fc*/ u8 filler_08fc[0x704]; }; struct UnkStructF { @@ -116,7 +123,7 @@ static void sub_8047EC0(void); /*static*/ void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8); /*static*/ void sub_804ACD8(const u8 *, u8 *, u8); static void nullsub_5(u8, u8); -/*static*/ void sub_804AA88(void); +static void sub_804AA88(void); static void sub_804A964(struct UnkStructD *, void *); static void sub_80489F4(void); /*static*/ void sub_804AA0C(u8); @@ -2516,6 +2523,17 @@ static void sub_804AA00(u8 unused) sub_8003460(&gUnknown_03004824->window, gUnknown_0820C2F0[a0], 0x180 + gUnknown_03004824->unk_007a, gTradeMessageWindowRects[a0][0] + 1, gTradeMessageWindowRects[a0][1] + 1); } +static void sub_804AA88(void) +{ + int i; + for (i = 0; i < 4; i ++) + { + gUnknown_03004824->unk_08dc[i].unk_00 = 0; + gUnknown_03004824->unk_08dc[i].unk_02 = 0; + gUnknown_03004824->unk_08dc[i].unk_04 |= 0xff; + } +} + asm(".section .text.sub_804DAD4"); /*static*/ void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { -- cgit v1.2.3 From 2f5f072f2254cfe324b9be297ec1ae6056e6d11a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 22:01:46 -0400 Subject: sub_804AADC --- src/trade.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 2e854ebb7..66f0b2b30 100644 --- a/src/trade.c +++ b/src/trade.c @@ -148,7 +148,7 @@ static void sub_804A938(struct UnkStructD *); static void sub_804A9F4(u8); static void sub_804AA00(u8); static void sub_8049E9C(u8); -/*static*/ void sub_804AADC(u8, u8); +static void sub_804AADC(u16, u8); /*static*/ void sub_804A80C(void); static u8 sub_80499F0(const u8 *, u8, u8); static void sub_804A840(u8); @@ -2534,6 +2534,21 @@ static void sub_804AA88(void) } } +static void sub_804AADC(u16 a0, u8 a1) +{ + int i; + for (i = 0; i < 4; i ++) + { + if (gUnknown_03004824->unk_08dc[i].unk_00 == 0) + { + gUnknown_03004824->unk_08dc[i].unk_02 = a0; + gUnknown_03004824->unk_08dc[i].unk_04 = a1; + gUnknown_03004824->unk_08dc[i].unk_00 = 1; + break; + } + } +} + asm(".section .text.sub_804DAD4"); /*static*/ void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { -- cgit v1.2.3 From f1e2ec57fbdf2cd39bf792add4c26acc386f80ce Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 22:09:19 -0400 Subject: sub_804AB30 --- src/trade.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 66f0b2b30..71cef2d08 100644 --- a/src/trade.c +++ b/src/trade.c @@ -30,6 +30,8 @@ #define sub_804A96C_alt sub_804A96C #endif +#define Trade_SendData() SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)) + struct InGameTrade { /*0x00*/ u8 name[11]; /*0x0C*/ u16 species; @@ -141,7 +143,7 @@ static void sub_8048AB4(void); static void sub_804A940(struct UnkStructD *); /*static*/ void sub_804B41C(void); static void sub_8049DE0(void); -/*static*/ void sub_804AB30(void); +static void sub_804AB30(void); /*static*/ void sub_8049ED4(u8); static void sub_804A6DC(u8); static void sub_804A938(struct UnkStructD *); @@ -1662,7 +1664,7 @@ static void sub_8049620(void) { gUnknown_03004824->linkData[0] = 0xaabb; gUnknown_03004824->linkData[1] = gUnknown_03004824->tradeMenuCursorPosition; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); + Trade_SendData(); } else { @@ -1718,7 +1720,7 @@ static void sub_8049680(void) { gUnknown_03004824->linkData[i] = i; } - SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); + Trade_SendData(); } } @@ -1827,7 +1829,7 @@ static void sub_8049A20(void) gUnknown_03004824->linkData[0] = 0xbbbb; if (sub_8007ECC()) { - SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); + Trade_SendData(); } } } @@ -1857,7 +1859,7 @@ static void sub_8049AC0(void) if (sub_8007ECC()) { gUnknown_03004824->linkData[0] = 0xbbcc; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); + Trade_SendData(); } } gUnknown_03004824->unk_007b = 100; @@ -1870,7 +1872,7 @@ static void sub_8049AC0(void) gUnknown_03004824->unk_007c = MoveMenuCursor(+1); } gUnknown_03004824->linkData[0] = 0xbbcc; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)); + Trade_SendData(); gUnknown_03004824->unk_007b = 100; } } @@ -2043,7 +2045,7 @@ static void sub_8049E9C(u8 a0) // u8 r8 = temp0 % 6; // s8 stringLength; // u8 string[50]; -// +// // switch (gUnknown_03004824->unk_0080[a0]) // { // case 1: @@ -2549,6 +2551,44 @@ static void sub_804AADC(u16 a0, u8 a1) } } +static void sub_804AB30(void) +{ + int i; + for (i = 0; i < 4; i ++) + { + if (gUnknown_03004824->unk_08dc[i].unk_00) + { + if (gUnknown_03004824->unk_08dc[i].unk_02 != 0) + { + gUnknown_03004824->unk_08dc[i].unk_02 --; + continue; + } + switch (gUnknown_03004824->unk_08dc[i].unk_04) + { + case 0: + Trade_SendData(); + break; + case 1: + sub_804AA0C(0); + break; + case 2: + sub_804AA0C(2); + break; + case 3: + sub_804AA0C(3); + break; + case 4: + sub_804AA0C(3); + break; + case 5: + sub_804AA0C(3); + break; + } + gUnknown_03004824->unk_08dc[i].unk_00 = 0; + } + } +} + asm(".section .text.sub_804DAD4"); /*static*/ void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { -- cgit v1.2.3 From 530155f301fb535c3be4a8094c8749b1c828e587 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 22:16:32 -0400 Subject: sub_804ABF8 --- src/trade.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 71cef2d08..4262f19bf 100644 --- a/src/trade.c +++ b/src/trade.c @@ -131,7 +131,7 @@ static void sub_80489F4(void); /*static*/ void sub_804AA0C(u8); static bool8 sub_8048D44(void); /*static*/ void sub_804AF84(void); -/*static*/ bool8 sub_804ABF8(void); +static bool8 sub_804ABF8(void); /*static*/ void sub_804ACF4(u8); static void sub_804A41C(u8); static void sub_8048C70(void); @@ -2589,6 +2589,36 @@ static void sub_804AB30(void) } } +static bool8 sub_804ABF8(void) +{ + switch (gUnknown_03004824->unk_00b4) + { + case 8: + gUnknown_03004824->unk_007e = LoadSpriteSheet(&gUnknown_0820C07C[gUnknown_03004824->unk_00b4]); + gUnknown_03004824->unk_00b4 ++; + return FALSE; + case 13: + LoadSpritePalette(&gSpritePalette_TradeScreenText); + gUnknown_03004824->unk_00b4 ++; + return FALSE; + case 14: + LoadSpritePalette(&gUnknown_0820C12C); + gUnknown_03004824->unk_00b4 ++; + return FALSE; + case 15: + LoadSpriteSheet(&gUnknown_0820C124); + gUnknown_03004824->unk_00b4 ++; + // fallthrough + case 16: + gUnknown_03004824->unk_00b4 = 0; + return TRUE; + default: + LoadSpriteSheet(&gUnknown_0820C07C[gUnknown_03004824->unk_00b4]); + gUnknown_03004824->unk_00b4 ++; + return FALSE; + } +} + asm(".section .text.sub_804DAD4"); /*static*/ void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { -- cgit v1.2.3 From 8e97779987c1e8fd3a943386ef376c8c6911ddab Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 2 Sep 2017 22:18:59 -0400 Subject: sub_804ACD8 --- src/trade.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 4262f19bf..efd6a1314 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2619,6 +2619,11 @@ static bool8 sub_804ABF8(void) } } +/*static*/ void sub_804ACD8(const u8 *src, u8 *dest, u8 a2) +{ + sub_804AFB8(&gWindowConfig_81E725C, dest, src, a2); +} + asm(".section .text.sub_804DAD4"); /*static*/ void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { -- cgit v1.2.3 From 927df6fb3e61b94eee3ceffb08ce0e9d5db2c71e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 3 Sep 2017 09:35:25 -0400 Subject: sub_8049ED4 (an attempt was made) --- src/trade.c | 630 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 569 insertions(+), 61 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index efd6a1314..0eb05bb52 100644 --- a/src/trade.c +++ b/src/trade.c @@ -28,6 +28,7 @@ #ifdef ENGLISH #define sub_804A96C_alt sub_804A96C +asm(".set sub_804A96C_alt, sub_804A96C"); #endif #define Trade_SendData() SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)) @@ -144,7 +145,7 @@ static void sub_804A940(struct UnkStructD *); /*static*/ void sub_804B41C(void); static void sub_8049DE0(void); static void sub_804AB30(void); -/*static*/ void sub_8049ED4(u8); +static void sub_8049ED4(u8); static void sub_804A6DC(u8); static void sub_804A938(struct UnkStructD *); static void sub_804A9F4(u8); @@ -156,6 +157,14 @@ static u8 sub_80499F0(const u8 *, u8, u8); static void sub_804A840(u8); /*static*/ u8 sub_804A2B4(u8 *, u8, u8); /*static*/ void sub_804A96C_alt(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16); +#ifdef NONMATCHING +static +#endif +void sub_804A33C(u8 *, u8, u8); +#ifdef NONMATCHING +static +#endif +void sub_804A51C(u8, u8, u8, u8, u8, u8); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -2036,66 +2045,559 @@ static void sub_8049E9C(u8 a0) } // TODO: Figure out what the f**k is going on here -//static void sub_8049ED4(u8 a0) -//{ -// struct Pokemon pokemon; -// u8 i; -// u8 temp0 = gUnknown_03004824->unk_0082[a0]; -// u8 sp_plus_6c = temp0 < PARTY_SIZE ? 1 : 0; -// u8 r8 = temp0 % 6; -// s8 stringLength; -// u8 string[50]; -// -// switch (gUnknown_03004824->unk_0080[a0]) -// { -// case 1: -// for (i = 0; i < gUnknown_03004824->partyCounts[a0]; i ++) -// { -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][i]].invisible = TRUE; -// } -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].invisible = FALSE; -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].data0 = 20; -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].data2 = (gTradeMonSpriteCoords[sp_plus_6c][0] + gTradeMonSpriteCoords[sp_plus_6c][1]) / 2 * 8 + 14; -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].data4 = gTradeMonSpriteCoords[sp_plus_6c][1] * 8 - 12; -// oamt_set_x3A_32(&gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]], sub_809D62C); -// gUnknown_03004824->unk_0080[a0] ++; -// sub_8078A34(&gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]]); -// HandleDestroyMenuCursors(); -// FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[sp_plus_6c][1], 0, gUnknown_0820C330[sp_plus_6c][1], 19); -// sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15 * sp_plus_6c, 0, gTradePartyBoxTilemap, 15, 17, 0); -// if (sp_plus_6c == 0) -// { -// sub_804A80C(); -// } -// break; -// case 2: -// if (gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].callback == sub_809D62C) -// { -// gUnknown_03004824->unk_0080[a0] = 3; -// } -// break; -// case 3: -// sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15 * sp_plus_6c, 0, gTradePartyBoxTilemap, 15, 11, 0); -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos1.x = (gTradeMonSpriteCoords[sp_plus_6c][0] + gTradeMonSpriteCoords[sp_plus_6c][1]) / 2 * 8 + 14; -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos1.y = gTradeMonSpriteCoords[sp_plus_6c][1] * 8 - 12; -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos2.x = 0; -// gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos2.y = 0; -// stringLength = sub_804A2B4(&string[6], sp_plus_6c, r8); -// string[0] = 0xFC; -// string[1] = 0x06; -// string[2] = 0x04; -// string[3] = 0xFC; -// string[4] = 0x11; -// string[5] = (64 - stringLength) / 2; -// sub_8003460(&gUnknown_03004824->window, string, sp_plus_6c * 192 + gUnknown_03004824->unk_007a, gUnknown_0820C334[sp_plus_6c][0], gUnknown_0820C334[sp_plus_6c][1]); -// sub_804A33C() -// break; -// case 4: -// break; -// } -//} - -asm(".section .text.sub_804A2B4"); +#ifdef NONMATCHING +static void sub_8049ED4(u8 a0) +{ + u8 i; + s8 stringLength; + u8 whichParty = 1; + u8 whichPokemon; + u8 string1[40]; + u8 string2[56]; + u8 temp0 = gUnknown_03004824->unk_0082[a0]; + if (temp0 < PARTY_SIZE) + whichParty = 0; + whichPokemon = temp0 % PARTY_SIZE; + + switch (gUnknown_03004824->unk_0080[a0]) + { + case 1: + for (i = 0; i < gUnknown_03004824->partyCounts[a0]; i ++) + { + gSprites[gUnknown_03004824->partyIcons[whichParty][i]].invisible = TRUE; + } + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].invisible = FALSE; + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data0 = 20; + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data2 = (gTradeMonSpriteCoords[6 * whichParty + whichPokemon][0] + gTradeMonSpriteCoords[6 * whichParty + whichPokemon + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data4 = gTradeMonSpriteCoords[6 * whichParty + whichPokemon][1] * 8 - 12; + oamt_set_x3A_32(&gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]], sub_809D62C); + gUnknown_03004824->unk_0080[a0] ++; + sub_8078A34(&gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]]); + HandleDestroyMenuCursors(); + FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[whichParty][0], 0, gUnknown_0820C330[whichParty][1], 19); + sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15 * a0, 0, gTradePartyBoxTilemap, 15, 17, 0); + if (whichParty == 0) + { + sub_804A80C(); + } + break; + case 2: + if (gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].callback == sub_809D62C) + { + gUnknown_03004824->unk_0080[a0] = 3; + } + break; + case 3: + sub_804A96C_alt(&gUnknown_03004824->unk_00c8, 15 * whichParty, 0, gTradePartyBoxTilemap, 15, 17, 0); + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].pos1.x = (gTradeMonSpriteCoords[6 * whichParty + whichPokemon ][0] + gTradeMonSpriteCoords[6 * whichParty + whichPokemon + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].pos1.y = gTradeMonSpriteCoords[6 * whichParty + whichPokemon ][1] * 8 - 12; + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].pos2.x = 0; + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].pos2.y = 0; + stringLength = sub_804A2B4(string1 + 6, whichParty, whichPokemon); + string1[0] = 0xFC; + string1[1] = 0x06; + string1[2] = 0x04; + string1[3] = 0xFC; + string1[4] = 0x11; + string1[5] = (64 - stringLength) / 2; + sub_8003460(&gUnknown_03004824->window, string1, gUnknown_03004824->unk_007a + whichParty * 6 * 32, gUnknown_0820C334[whichParty][0], gUnknown_0820C334[whichParty][1]); + sub_804A33C(string2, whichParty, whichPokemon); + sub_8003460(&gUnknown_03004824->window, gOtherText_Terminator2, gUnknown_03004824->unk_007a + whichParty * 6 * 32 + 32, gUnknown_0820C334[whichParty + 1][0], gUnknown_0820C334[whichParty + 1][1] + 1); + sub_8003460(&gUnknown_03004824->window, string2, gUnknown_03004824->unk_007a + whichParty * 6 * 32 + 38, gUnknown_0820C334[whichParty + 1][0], gUnknown_0820C334[whichParty + 1][1] + 1); + gUnknown_03004824->unk_0080[a0] ++; + break; + case 4: + sub_804ACD8(gUnknown_0820C14C[5], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); + sub_804A51C(a0, whichPokemon, gUnknown_0820C3D1[a0][0] + 4, gUnknown_0820C3D1[a0][1] + 1, gUnknown_0820C3D1[a0][0], gUnknown_0820C3D1[a0][1]); + gUnknown_03004824->unk_0080[a0] ++; + break; + } +} +#else +__attribute__((naked)) +static void sub_8049ED4(u8 a0) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x74\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r10, r0\n" + "\tldr r0, _08049F24 @ =gUnknown_03004824\n" + "\tldr r5, [r0]\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x82\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0]\n" + "\tmovs r1, 0x1\n" + "\tstr r1, [sp, 0x6C]\n" + "\tcmp r0, 0x5\n" + "\tbhi _08049EFE\n" + "\tmovs r2, 0\n" + "\tstr r2, [sp, 0x6C]\n" + "_08049EFE:\n" + "\tmovs r1, 0x6\n" + "\tbl __umodsi3\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r8, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x80\n" + "\tmov r1, r10\n" + "\tadds r3, r0, r1\n" + "\tldrb r0, [r3]\n" + "\tcmp r0, 0x2\n" + "\tbne _08049F1A\n" + "\tb _0804A0AC\n" + "_08049F1A:\n" + "\tcmp r0, 0x2\n" + "\tbgt _08049F28\n" + "\tcmp r0, 0x1\n" + "\tbeq _08049F36\n" + "\tb _0804A294\n" + "\t.align 2, 0\n" + "_08049F24: .4byte gUnknown_03004824\n" + "_08049F28:\n" + "\tcmp r0, 0x3\n" + "\tbne _08049F2E\n" + "\tb _0804A0E4\n" + "_08049F2E:\n" + "\tcmp r0, 0x4\n" + "\tbne _08049F34\n" + "\tb _0804A244\n" + "_08049F34:\n" + "\tb _0804A294\n" + "_08049F36:\n" + "\tmovs r4, 0\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0x42\n" + "\tadd r0, r10\n" + "\tldr r7, _0804A094 @ =gSprites\n" + "\tldr r2, [sp, 0x6C]\n" + "\tlsls r2, 1\n" + "\tmov r9, r2\n" + "\tldr r3, _0804A098 @ =gTradeMonSpriteCoords\n" + "\tmov r12, r3\n" + "\tmov r5, r10\n" + "\tlsls r5, 4\n" + "\tstr r5, [sp, 0x70]\n" + "\tldrb r0, [r0]\n" + "\tcmp r4, r0\n" + "\tbcs _08049F8E\n" + "\tadds r6, r7, 0\n" + "\tldr r2, _0804A09C @ =gUnknown_03004824\n" + "\tldr r0, [sp, 0x6C]\n" + "\tadd r0, r9\n" + "\tlsls r3, r0, 1\n" + "\tmovs r5, 0x4\n" + "_08049F62:\n" + "\tldr r0, [r2]\n" + "\tadds r1, r4, r3\n" + "\tadds r0, 0x34\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r6\n" + "\tadds r0, 0x3E\n" + "\tldrb r1, [r0]\n" + "\torrs r1, r5\n" + "\tstrb r1, [r0]\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0x42\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0]\n" + "\tcmp r4, r0\n" + "\tbcc _08049F62\n" + "_08049F8E:\n" + "\tldr r1, _0804A09C @ =gUnknown_03004824\n" + "\tldr r0, [r1]\n" + "\tldr r5, [sp, 0x6C]\n" + "\tadd r5, r9\n" + "\tlsls r3, r5, 1\n" + "\tmov r2, r8\n" + "\tadds r6, r2, r3\n" + "\tadds r0, 0x34\n" + "\tadds r0, r6\n" + "\tldrb r1, [r0]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tadds r0, 0x3E\n" + "\tldrb r2, [r0]\n" + "\tmovs r1, 0x5\n" + "\tnegs r1, r1\n" + "\tands r1, r2\n" + "\tstrb r1, [r0]\n" + "\tldr r0, _0804A09C @ =gUnknown_03004824\n" + "\tldr r4, [r0]\n" + "\tadds r4, 0x34\n" + "\tadds r4, r6\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tmovs r1, 0x14\n" + "\tstrh r1, [r0, 0x2E]\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tlsls r5, 2\n" + "\tmov r1, r12\n" + "\tadds r0, r5, r1\n" + "\tldrb r0, [r0]\n" + "\tadds r3, 0x1\n" + "\tlsls r3, 1\n" + "\tadd r3, r12\n" + "\tldrb r1, [r3]\n" + "\tadds r0, r1\n" + "\tasrs r0, 1\n" + "\tlsls r0, 3\n" + "\tadds r0, 0xE\n" + "\tstrh r0, [r2, 0x32]\n" + "\tldrb r0, [r4]\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r7\n" + "\tmov r0, r12\n" + "\tadds r0, 0x1\n" + "\tadds r5, r0\n" + "\tldrb r0, [r5]\n" + "\tlsls r0, 3\n" + "\tsubs r0, 0xC\n" + "\tstrh r0, [r1, 0x36]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tldr r1, _0804A0A0 @ =sub_809D62C\n" + "\tbl oamt_set_x3A_32\n" + "\tldr r2, _0804A09C @ =gUnknown_03004824\n" + "\tldr r1, [r2]\n" + "\tadds r1, 0x80\n" + "\tadd r1, r10\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0x34\n" + "\tadds r0, r6\n" + "\tldrb r1, [r0]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tbl sub_8078A34\n" + "\tbl HandleDestroyMenuCursors\n" + "\tldr r3, _0804A09C @ =gUnknown_03004824\n" + "\tldr r0, [r3]\n" + "\tadds r0, 0x4\n" + "\tldr r1, _0804A0A4 @ =gUnknown_0820C330\n" + "\tmov r5, r9\n" + "\tadds r2, r5, r1\n" + "\tldrb r2, [r2]\n" + "\tadds r1, 0x1\n" + "\tadd r1, r9\n" + "\tldrb r1, [r1]\n" + "\tstr r1, [sp]\n" + "\tmovs r1, 0x13\n" + "\tstr r1, [sp, 0x4]\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl FillWindowRect_DefaultPalette\n" + "\tldr r1, _0804A09C @ =gUnknown_03004824\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0xC8\n" + "\tldr r2, [sp, 0x70]\n" + "\tmov r3, r10\n" + "\tsubs r1, r2, r3\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tldr r3, _0804A0A8 @ =gTradePartyBoxTilemap\n" + "\tmovs r2, 0xF\n" + "\tstr r2, [sp]\n" + "\tmovs r2, 0x11\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r5, 0\n" + "\tstr r5, [sp, 0x8]\n" + "\tmovs r2, 0\n" + "\tbl sub_804A96C_alt\n" + "\tldr r0, [sp, 0x6C]\n" + "\tcmp r0, 0\n" + "\tbeq _0804A08C\n" + "\tb _0804A294\n" + "_0804A08C:\n" + "\tbl sub_804A80C\n" + "\tb _0804A294\n" + "\t.align 2, 0\n" + "_0804A094: .4byte gSprites\n" + "_0804A098: .4byte gTradeMonSpriteCoords\n" + "_0804A09C: .4byte gUnknown_03004824\n" + "_0804A0A0: .4byte sub_809D62C\n" + "_0804A0A4: .4byte gUnknown_0820C330\n" + "_0804A0A8: .4byte gTradePartyBoxTilemap\n" + "_0804A0AC:\n" + "\tldr r2, _0804A0DC @ =gSprites\n" + "\tldr r1, [sp, 0x6C]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 1\n" + "\tadd r0, r8\n" + "\tadds r1, r5, 0\n" + "\tadds r1, 0x34\n" + "\tadds r1, r0\n" + "\tldrb r1, [r1]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r2, 0x1C\n" + "\tadds r0, r2\n" + "\tldr r1, [r0]\n" + "\tldr r0, _0804A0E0 @ =sub_809D62C\n" + "\tcmp r1, r0\n" + "\tbeq _0804A0D4\n" + "\tb _0804A294\n" + "_0804A0D4:\n" + "\tmovs r0, 0x3\n" + "\tstrb r0, [r3]\n" + "\tb _0804A294\n" + "\t.align 2, 0\n" + "_0804A0DC: .4byte gSprites\n" + "_0804A0E0: .4byte sub_809D62C\n" + "_0804A0E4:\n" + "\tadds r0, r5, 0\n" + "\tadds r0, 0xC8\n" + "\tldr r2, [sp, 0x6C]\n" + "\tlsls r1, r2, 4\n" + "\tsubs r1, r2\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tldr r3, _0804A228 @ =gTradeMovesBoxTilemap\n" + "\tmovs r2, 0xF\n" + "\tstr r2, [sp]\n" + "\tmovs r7, 0x11\n" + "\tstr r7, [sp, 0x4]\n" + "\tmovs r5, 0\n" + "\tstr r5, [sp, 0x8]\n" + "\tmovs r2, 0\n" + "\tbl sub_804A96C_alt\n" + "\tldr r0, _0804A22C @ =gUnknown_03004824\n" + "\tldr r3, [r0]\n" + "\tldr r1, [sp, 0x6C]\n" + "\tlsls r6, r1, 1\n" + "\tadds r1, r6\n" + "\tmov r9, r1\n" + "\tlsls r1, 1\n" + "\tmov r2, r8\n" + "\tadds r0, r2, r1\n" + "\tadds r3, 0x34\n" + "\tadds r3, r0\n" + "\tldrb r0, [r3]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tldr r5, _0804A230 @ =gSprites\n" + "\tadds r2, r5\n" + "\tldr r4, _0804A234 @ =gTradeMonSpriteCoords\n" + "\tmov r0, r9\n" + "\tlsls r5, r0, 2\n" + "\tadds r0, r5, r4\n" + "\tldrb r0, [r0]\n" + "\tadds r1, 0x1\n" + "\tlsls r1, 1\n" + "\tadds r1, r4\n" + "\tldrb r1, [r1]\n" + "\tadds r0, r1\n" + "\tasrs r0, 1\n" + "\tlsls r0, 3\n" + "\tadds r0, 0xE\n" + "\tstrh r0, [r2, 0x20]\n" + "\tldrb r0, [r3]\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tldr r2, _0804A230 @ =gSprites\n" + "\tadds r1, r2\n" + "\tadds r4, 0x1\n" + "\tadds r5, r4\n" + "\tldrb r0, [r5]\n" + "\tlsls r0, 3\n" + "\tsubs r0, 0xC\n" + "\tstrh r0, [r1, 0x22]\n" + "\tldrb r1, [r3]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r2\n" + "\tmovs r5, 0\n" + "\tstrh r5, [r0, 0x24]\n" + "\tldrb r1, [r3]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r2\n" + "\tstrh r5, [r0, 0x26]\n" + "\tmov r0, sp\n" + "\tadds r0, 0x12\n" + "\tldr r1, [sp, 0x6C]\n" + "\tmov r2, r8\n" + "\tbl sub_804A2B4\n" + "\tadd r1, sp, 0xC\n" + "\tmovs r3, 0xFC\n" + "\tstrb r3, [r1]\n" + "\tadds r2, r1, 0\n" + "\tmovs r1, 0x6\n" + "\tstrb r1, [r2, 0x1]\n" + "\tmovs r1, 0x4\n" + "\tstrb r1, [r2, 0x2]\n" + "\tadds r1, r2, 0\n" + "\tstrb r3, [r1, 0x3]\n" + "\tstrb r7, [r1, 0x4]\n" + "\tlsls r0, 24\n" + "\tasrs r0, 24\n" + "\tmovs r1, 0x40\n" + "\tsubs r1, r0\n" + "\tlsrs r0, r1, 31\n" + "\tadds r1, r0\n" + "\tasrs r1, 1\n" + "\tstrb r1, [r2, 0x5]\n" + "\tldr r0, _0804A22C @ =gUnknown_03004824\n" + "\tldr r1, [r0]\n" + "\tadds r0, r1, 0x4\n" + "\tadds r1, 0x7A\n" + "\tldrb r2, [r1]\n" + "\tmov r1, r9\n" + "\tlsls r1, 6\n" + "\tmov r9, r1\n" + "\tadd r2, r9\n" + "\tldr r4, _0804A238 @ =gUnknown_0820C334\n" + "\tldr r3, [sp, 0x6C]\n" + "\tlsls r1, r3, 2\n" + "\tadds r3, r1, r4\n" + "\tldrb r3, [r3]\n" + "\tldr r5, _0804A23C @ =gUnknown_0820C334 + 0x1\n" + "\tadds r1, r5\n" + "\tldrb r1, [r1]\n" + "\tstr r1, [sp]\n" + "\tadd r1, sp, 0xC\n" + "\tbl sub_8003460\n" + "\tadd r7, sp, 0x34\n" + "\tadds r0, r7, 0\n" + "\tldr r1, [sp, 0x6C]\n" + "\tmov r2, r8\n" + "\tbl sub_804A33C\n" + "\tldr r0, _0804A22C @ =gUnknown_03004824\n" + "\tldr r2, [r0]\n" + "\tadds r0, r2, 0x4\n" + "\tldr r1, _0804A240 @ =gOtherText_Terminator2\n" + "\tadds r2, 0x7A\n" + "\tldrb r2, [r2]\n" + "\tadd r2, r9\n" + "\tadds r2, 0x20\n" + "\tadds r6, 0x1\n" + "\tlsls r6, 1\n" + "\tadds r4, r6, r4\n" + "\tldrb r5, [r4]\n" + "\tldr r3, _0804A23C @ =gUnknown_0820C334 + 0x1\n" + "\tadds r6, r3\n" + "\tldrb r4, [r6]\n" + "\tadds r4, 0x1\n" + "\tlsls r4, 24\n" + "\tlsrs r4, 24\n" + "\tstr r4, [sp]\n" + "\tadds r3, r5, 0\n" + "\tbl sub_8003460\n" + "\tldr r0, _0804A22C @ =gUnknown_03004824\n" + "\tldr r1, [r0]\n" + "\tadds r0, r1, 0x4\n" + "\tadds r1, 0x7A\n" + "\tldrb r2, [r1]\n" + "\tadd r2, r9\n" + "\tadds r2, 0x26\n" + "\tstr r4, [sp]\n" + "\tadds r1, r7, 0\n" + "\tadds r3, r5, 0\n" + "\tbl sub_8003460\n" + "\tldr r2, _0804A22C @ =gUnknown_03004824\n" + "\tldr r1, [r2]\n" + "\tb _0804A28A\n" + "\t.align 2, 0\n" + "_0804A228: .4byte gTradeMovesBoxTilemap\n" + "_0804A22C: .4byte gUnknown_03004824\n" + "_0804A230: .4byte gSprites\n" + "_0804A234: .4byte gTradeMonSpriteCoords\n" + "_0804A238: .4byte gUnknown_0820C334\n" + "_0804A23C: .4byte gUnknown_0820C334 + 0x1\n" + "_0804A240: .4byte gOtherText_Terminator2\n" + "_0804A244:\n" + "\tldr r0, _0804A2A4 @ =gUnknown_0820C14C\n" + "\tldr r0, [r0, 0x14]\n" + "\tadds r1, r5, 0\n" + "\tadds r1, 0x7E\n" + "\tldrh r1, [r1]\n" + "\tlsls r1, 5\n" + "\tldr r3, _0804A2A8 @ =0x06010000\n" + "\tadds r1, r3\n" + "\tmovs r2, 0x14\n" + "\tbl sub_804ACD8\n" + "\tldr r0, _0804A2AC @ =gUnknown_0820C3D1\n" + "\tmov r5, r10\n" + "\tlsls r1, r5, 1\n" + "\tadds r4, r1, r0\n" + "\tldrb r2, [r4]\n" + "\tadds r2, 0x4\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tadds r0, 0x1\n" + "\tadds r1, r0\n" + "\tldrb r3, [r1]\n" + "\tadds r3, 0x1\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tldrb r0, [r4]\n" + "\tstr r0, [sp]\n" + "\tldrb r0, [r1]\n" + "\tstr r0, [sp, 0x4]\n" + "\tmov r0, r10\n" + "\tmov r1, r8\n" + "\tbl sub_804A51C\n" + "\tldr r0, _0804A2B0 @ =gUnknown_03004824\n" + "\tldr r1, [r0]\n" + "_0804A28A:\n" + "\tadds r1, 0x80\n" + "\tadd r1, r10\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "_0804A294:\n" + "\tadd sp, 0x74\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804A2A4: .4byte gUnknown_0820C14C\n" + "_0804A2A8: .4byte 0x06010000\n" + "_0804A2AC: .4byte gUnknown_0820C3D1\n" + "_0804A2B0: .4byte gUnknown_03004824"); +} +#endif u8 sub_804A2B4(u8 *a0, u8 whichParty, u8 whichPokemon) { @@ -2117,6 +2619,9 @@ u8 sub_804A2B4(u8 *a0, u8 whichParty, u8 whichPokemon) return GetStringWidthGivenWindowConfig(&gWindowConfig_81E7294, a0); } +#ifdef NONMATCHING +static +#endif void sub_804A33C(u8 *a0, u8 whichParty, u8 whichPokemon) { u16 i; @@ -2303,6 +2808,9 @@ static void sub_804A41C(u8 whichParty) } #endif +#ifdef NONMATCHING +static +#endif void sub_804A51C(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4, u8 a5) { u8 nickname[24]; -- cgit v1.2.3 From 0849f5637d2aa2b9feebd9dce27cf9cb64754d4a Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 11:06:39 -0400 Subject: sub_804DB2C --- src/trade.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 0eb05bb52..6b85ecb05 100644 --- a/src/trade.c +++ b/src/trade.c @@ -24,6 +24,7 @@ #include "rom4.h" #include "rom_8077ABC.h" #include "daycare.h" +#include "event_data.h" #include "trade.h" #ifdef ENGLISH @@ -3155,3 +3156,10 @@ asm(".section .text.sub_804DAD4"); arg0->species = trade->species; arg0->heldItem = trade->heldItem; } + +u16 sub_804DB2C(void) +{ + if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG)) + return SPECIES_NONE; + return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES); +} -- cgit v1.2.3 From 007f28e2d0b54f3ce06029a0a2101ae6388771e8 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 11:27:39 -0400 Subject: sub_804DB84 --- src/trade.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 6b85ecb05..982e6a319 100644 --- a/src/trade.c +++ b/src/trade.c @@ -102,8 +102,8 @@ struct TradeEwramSubstruct { /*0x008b*/ u8 unk_008b; /*0x008c*/ u16 linkData[20]; /*0x00b4*/ u8 unk_00b4; - /*0x00b5*/ u8 unk_00b5[7]; - /*0x00bc*/ u8 filler_00bc[12]; + /*0x00b5*/ u8 unk_00b5[11]; + /*0x00c0*/ u8 filler_00c0[8]; /*0x00c8*/ struct UnkStructD unk_00c8; /*0x08dc*/ struct UnkStructE unk_08dc[4]; /*0x08fc*/ u8 filler_08fc[0x704]; @@ -115,12 +115,24 @@ struct UnkStructF { u8 filler_000a[0xff6]; }; +struct TradeEwramSubstruct2 { + /*0x0000*/ u8 filler_0000[0x9e]; + /*0x009e*/ u16 unk_009e; + /*0x00a0*/ u8 unk_00a0[0x18]; + /*0x00b8*/ u8 unk_00b8; + /*0x00b9*/ u8 unk_00b9; + /*0x00ba*/ u8 filler_00ba[3]; + /*0x00bd*/ u8 unk_00bd; +}; + struct TradeEwramStruct { /*0x00000*/ u8 filler_00000[0x7000]; /*0x07000*/ struct TradeEwramSubstruct unk_07000; /*0x08000*/ struct UnkStructF unk_08000; /*0x09000*/ u8 filler_09000[0x4000]; /*0x0d000*/ u8 tileBuffers[13][256]; + /*0x0dd00*/ u8 filler_0dd00[0x1300]; + /*0x0f000*/ struct TradeEwramSubstruct2 unk_0f000; }; static void sub_8047EC0(void); @@ -166,10 +178,17 @@ void sub_804A33C(u8 *, u8, u8); static #endif void sub_804A51C(u8, u8, u8, u8, u8, u8); +/*static*/ void sub_804D948(u8, u8); +/*static*/ void sub_804BA94(u8, u8); +/*static*/ bool8 sub_804C29C(void); +/*static*/ void sub_804DC18(void); +/*static*/ void sub_804BB78(void); +/*static*/ void sub_804D63C(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; extern struct TradeEwramSubstruct *gUnknown_03004824; +extern struct TradeEwramSubstruct2 *gUnknown_03004828; extern u8 gUnknown_03000508; extern struct MailStruct gUnknown_02029700[16]; @@ -3163,3 +3182,27 @@ u16 sub_804DB2C(void) return SPECIES_NONE; return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES); } + +void sub_804DB68(void) +{ + sub_804D948(gSpecialVar_0x8005, gSpecialVar_0x8004); +} + +void sub_804DB84(void) +{ + if (sub_804C29C() == TRUE) + { + DestroySprite(&gSprites[gUnknown_03004828->unk_00b8]); + FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_00b9]); + sub_804BA94(gUnknown_020297D8[0], gUnknown_020297D8[1] % 6); + gUnknown_03004828->unk_009e = 0xabcd; + gUnknown_03004828->unk_00bd = 1; + SetMainCallback2(sub_804DC18); + } + sub_804BB78(); + sub_804D63C(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From 257acf3e0766a3ec98066e016c6a1e6b6c44db70 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 11:35:23 -0400 Subject: sub_804DC18 --- src/trade.c | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 982e6a319..2d045d3b5 100644 --- a/src/trade.c +++ b/src/trade.c @@ -32,7 +32,7 @@ asm(".set sub_804A96C_alt, sub_804A96C"); #endif -#define Trade_SendData() SendBlock(bitmask_all_link_players_but_self(), gUnknown_03004824->linkData, ARRAY_COUNT(gUnknown_03004824->linkData)) +#define Trade_SendData(ptr) SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20) struct InGameTrade { /*0x00*/ u8 name[11]; @@ -116,9 +116,10 @@ struct UnkStructF { }; struct TradeEwramSubstruct2 { - /*0x0000*/ u8 filler_0000[0x9e]; - /*0x009e*/ u16 unk_009e; - /*0x00a0*/ u8 unk_00a0[0x18]; + /*0x0000*/ u8 filler_0000[0x9c]; + /*0x009c*/ u8 unk_009c; + /*0x009d*/ u8 unk_009d; + /*0x009e*/ u16 linkData[13]; /*0x00b8*/ u8 unk_00b8; /*0x00b9*/ u8 unk_00b9; /*0x00ba*/ u8 filler_00ba[3]; @@ -184,6 +185,7 @@ void sub_804A51C(u8, u8, u8, u8, u8, u8); /*static*/ void sub_804DC18(void); /*static*/ void sub_804BB78(void); /*static*/ void sub_804D63C(void); +/*static*/ bool8 sub_804B2B0(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -1693,7 +1695,7 @@ static void sub_8049620(void) { gUnknown_03004824->linkData[0] = 0xaabb; gUnknown_03004824->linkData[1] = gUnknown_03004824->tradeMenuCursorPosition; - Trade_SendData(); + Trade_SendData(gUnknown_03004824); } else { @@ -1749,7 +1751,7 @@ static void sub_8049680(void) { gUnknown_03004824->linkData[i] = i; } - Trade_SendData(); + Trade_SendData(gUnknown_03004824); } } @@ -1858,7 +1860,7 @@ static void sub_8049A20(void) gUnknown_03004824->linkData[0] = 0xbbbb; if (sub_8007ECC()) { - Trade_SendData(); + Trade_SendData(gUnknown_03004824); } } } @@ -1888,7 +1890,7 @@ static void sub_8049AC0(void) if (sub_8007ECC()) { gUnknown_03004824->linkData[0] = 0xbbcc; - Trade_SendData(); + Trade_SendData(gUnknown_03004824); } } gUnknown_03004824->unk_007b = 100; @@ -1901,7 +1903,7 @@ static void sub_8049AC0(void) gUnknown_03004824->unk_007c = MoveMenuCursor(+1); } gUnknown_03004824->linkData[0] = 0xbbcc; - Trade_SendData(); + Trade_SendData(gUnknown_03004824); gUnknown_03004824->unk_007b = 100; } } @@ -3094,7 +3096,7 @@ static void sub_804AB30(void) switch (gUnknown_03004824->unk_08dc[i].unk_04) { case 0: - Trade_SendData(); + Trade_SendData(gUnknown_03004824); break; case 1: sub_804AA0C(0); @@ -3195,7 +3197,7 @@ void sub_804DB84(void) DestroySprite(&gSprites[gUnknown_03004828->unk_00b8]); FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_00b9]); sub_804BA94(gUnknown_020297D8[0], gUnknown_020297D8[1] % 6); - gUnknown_03004828->unk_009e = 0xabcd; + gUnknown_03004828->linkData[0] = 0xabcd; gUnknown_03004828->unk_00bd = 1; SetMainCallback2(sub_804DC18); } @@ -3206,3 +3208,20 @@ void sub_804DB84(void) BuildOamBuffer(); UpdatePaletteFade(); } + +void sub_804DC18(void) +{ + u8 flag = sub_804B2B0(); + sub_804D63C(); + if (!flag && gUnknown_03004828->unk_009c == 1 && gUnknown_03004828->unk_009d == 1) + { + gUnknown_03004828->linkData[0] = 0xdcba; + Trade_SendData(gUnknown_03004828); + gUnknown_03004828->unk_009c = 2; + gUnknown_03004828->unk_009d = 2; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From fac5905a048fd08b5d41ef316d48d6c8d330405e Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 12:37:26 -0400 Subject: sub_804DC88 --- src/trade.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 140 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 2d045d3b5..8eb9983c8 100644 --- a/src/trade.c +++ b/src/trade.c @@ -25,6 +25,9 @@ #include "rom_8077ABC.h" #include "daycare.h" #include "event_data.h" +#include "strings.h" +#include "load_save.h" +#include "save.h" #include "trade.h" #ifdef ENGLISH @@ -116,7 +119,10 @@ struct UnkStructF { }; struct TradeEwramSubstruct2 { - /*0x0000*/ u8 filler_0000[0x9c]; + /*0x0000*/ u8 filler_0000; + /*0x0004*/ struct Window window; + /*0x0034*/ u8 unk_0034; + /*0x0035*/ u8 filler_0035[0x67]; /*0x009c*/ u8 unk_009c; /*0x009d*/ u8 unk_009d; /*0x009e*/ u16 linkData[13]; @@ -124,6 +130,7 @@ struct TradeEwramSubstruct2 { /*0x00b9*/ u8 unk_00b9; /*0x00ba*/ u8 filler_00ba[3]; /*0x00bd*/ u8 unk_00bd; + /*0x00c0*/ u32 unk_00c0; }; struct TradeEwramStruct { @@ -186,6 +193,7 @@ void sub_804A51C(u8, u8, u8, u8, u8, u8); /*static*/ void sub_804BB78(void); /*static*/ void sub_804D63C(void); /*static*/ bool8 sub_804B2B0(void); +/*static*/ void sub_804E144(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3225,3 +3233,134 @@ void sub_804DC18(void) BuildOamBuffer(); UpdatePaletteFade(); } + +void sub_804DC88(void) +{ + switch (gMain.state) + { + case 0: + gUnknown_03004828 = &ewram_2010000.unk_0f000; + gMain.state ++; + ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); + StringExpandPlaceholders(gStringVar4, gOtherText_LinkStandby2); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + break; + case 1: + sub_80084A4(); + gMain.state = 100; + gUnknown_03004828->unk_00c0 = 0; + break; + case 100: + if (++ gUnknown_03004828->unk_00c0 > 180) + { + gMain.state = 101; + gUnknown_03004828->unk_00c0 = 0; + } + if (sub_8007ECC()) + { + gMain.state = 2; + } + break; + case 101: + if (sub_8007ECC()) + { + gMain.state = 2; + } + break; + case 2: + gMain.state = 50; + ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); + sub_8003460(&gUnknown_03004828->window, gSystemText_Saving, gUnknown_03004828->unk_0034, 2, 15); + break; + case 50: + SetSecretBase2Field_9_AndHideBG(); + IncrementGameStat(GAME_STAT_POKEMON_TRADES); + sub_8125D80(); + gMain.state ++; + gUnknown_03004828->unk_00c0 = 0; + break; + case 51: + if (++ gUnknown_03004828->unk_00c0 == 5) + { + gMain.state ++; + } + break; + case 52: + if (sub_8125DA8()) + { + ClearSecretBase2Field_9_2(); + gMain.state = 4; + } + else + { + gUnknown_03004828->unk_00c0 = 0; + gMain.state = 51; + } + break; + case 4: + sub_8125DDC(); + gMain.state = 40; + gUnknown_03004828->unk_00c0 = 0; + break; + case 40: + if (++ gUnknown_03004828->unk_00c0 > 50) + { + gUnknown_03004828->unk_00c0 = 0; + gMain.state = 41; + } + break; + case 41: + sub_80084A4(); + gMain.state = 42; + break; + case 42: + if (sub_8007ECC()) + { + sub_8125E04(); + gSoftResetDisabled = FALSE; + gMain.state = 5; + } + break; + case 5: + if (++ gUnknown_03004828->unk_00c0 > 60) + { + gMain.state ++; + sub_80084A4(); + } + break; + case 6: + if (sub_8007ECC()) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gMain.state ++; + } + break; + case 7: + if (!gPaletteFade.active) + { + FadeOutBGM(3); + gMain.state ++; + } + break; + case 8: + if (IsBGMStopped() == TRUE) + { + sub_800832C(); + gMain.state ++; + } + break; + case 9: + if (!gReceivedRemoteLinkPlayers) + { + SetMainCallback2(sub_804E144); + } + break; + } + if (!HasLinkErrorOccurred()) + { + RunTasks(); + } + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From d0e2766ec23f63b1acb90bdaa1757a3c7bc71dd7 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 12:41:15 -0400 Subject: sub_804E144 --- src/trade.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 8eb9983c8..c29d7558b 100644 --- a/src/trade.c +++ b/src/trade.c @@ -193,7 +193,7 @@ void sub_804A51C(u8, u8, u8, u8, u8, u8); /*static*/ void sub_804BB78(void); /*static*/ void sub_804D63C(void); /*static*/ bool8 sub_804B2B0(void); -/*static*/ void sub_804E144(void); +static void sub_804E144(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3364,3 +3364,13 @@ void sub_804DC88(void) BuildOamBuffer(); UpdatePaletteFade(); } + +static void sub_804E144(void) +{ + if (!gPaletteFade.active) + SetMainCallback2((sub_8047CD8)); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From a94566d512891ab13a218e686f8b0317c4ad7e03 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 12:45:52 -0400 Subject: sub_804E174 and sub_804E1A0 --- src/trade.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index c29d7558b..940bfc8fc 100644 --- a/src/trade.c +++ b/src/trade.c @@ -28,6 +28,8 @@ #include "strings.h" #include "load_save.h" #include "save.h" +#include "script.h" +#include "field_fadetransition.h" #include "trade.h" #ifdef ENGLISH @@ -35,7 +37,7 @@ asm(".set sub_804A96C_alt, sub_804A96C"); #endif -#define Trade_SendData(ptr) SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20) +#define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20)) struct InGameTrade { /*0x00*/ u8 name[11]; @@ -194,6 +196,8 @@ void sub_804A51C(u8, u8, u8, u8, u8, u8); /*static*/ void sub_804D63C(void); /*static*/ bool8 sub_804B2B0(void); static void sub_804E144(void); +static void sub_804E1A0(u8); +/*static*/ void sub_804B790(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3374,3 +3378,20 @@ static void sub_804E144(void) BuildOamBuffer(); UpdatePaletteFade(); } + +void sub_804E174(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_804E1A0, 10); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); +} + +static void sub_804E1A0(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(sub_804B790); + gFieldCallback = sub_8080990; + DestroyTask(taskId); + } +} -- cgit v1.2.3 From 7b5d41909bcf86103fe51eea0c1a8370ca4c478e Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 12:50:16 -0400 Subject: sub_804E1DC --- src/trade.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 940bfc8fc..72f198511 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3395,3 +3395,15 @@ static void sub_804E1A0(u8 taskId) DestroyTask(taskId); } } + +/*static*/ void sub_804E1DC(void) +{ + u8 i; + u8 numRibbons = 0; + for (i = 0; i < 12; i ++) + { + numRibbons += GetMonData(&gEnemyParty[gUnknown_020297D8[1] % 6], MON_DATA_CHAMPION_RIBBON + i); + } + if (numRibbons != 0) + FlagSet(SYS_RIBBON_GET); +} -- cgit v1.2.3 From 92f40d920b26a13dfc7a3756382cdf97aff08288 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 13:02:20 -0400 Subject: sub_804E22C --- src/trade.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 72f198511..db49b94e6 100644 --- a/src/trade.c +++ b/src/trade.c @@ -30,6 +30,7 @@ #include "save.h" #include "script.h" #include "field_fadetransition.h" +#include "decompress.h" #include "trade.h" #ifdef ENGLISH @@ -3407,3 +3408,16 @@ static void sub_804E1A0(u8 taskId) if (numRibbons != 0) FlagSet(SYS_RIBBON_GET); } + +void sub_804E22C(void) +{ + const u16 *src; + u16 *dest; + LZDecompressVram(gUnknown_08D00000, (u8 *)VRAM); + CpuCopy16(gUnknown_08D00524, ewram, 0x1000); + src = (const u16 *)ewram; + dest = (u16 *)(BG_SCREEN_ADDR(5)); + DmaCopy16(3, src, dest, 0x500) + LoadCompressedPalette(gUnknown_08D004E0, 0, 32); + REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5); +} -- cgit v1.2.3 From 86ac21e417dde4d4f33aff78714648517afc88fc Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 13:36:40 -0400 Subject: sub_804D948 --- src/trade.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index db49b94e6..d0be1b48b 100644 --- a/src/trade.c +++ b/src/trade.c @@ -31,6 +31,7 @@ #include "script.h" #include "field_fadetransition.h" #include "decompress.h" +#include "mail_data.h" #include "trade.h" #ifdef ENGLISH @@ -199,6 +200,7 @@ void sub_804A51C(u8, u8, u8, u8, u8, u8); static void sub_804E144(void); static void sub_804E1A0(u8); /*static*/ void sub_804B790(void); +static void sub_804DAD4(struct MailStruct *, const struct InGameTrade *); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3169,26 +3171,76 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); -/*static*/ void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { +void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade) +{ + const struct InGameTrade *inGameTrade = &gIngameTrades[whichInGameTrade]; + u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL); + + struct MailStruct mail; + u8 metLocation = 0xFE; + u8 isMail; + u8 *item; + struct Pokemon *pokemon = &gEnemyParty[0]; + + CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); + + SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); + SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); + SetMonData(pokemon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); + SetMonData(pokemon, MON_DATA_SPD_IV, &inGameTrade->ivs[3]); + SetMonData(pokemon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); + SetMonData(pokemon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); + SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->name); + SetMonData(pokemon, MON_DATA_OT_NAME, inGameTrade->otName); + SetMonData(pokemon, MON_DATA_OT_GENDER, &inGameTrade->otGender); + SetMonData(pokemon, MON_DATA_ALT_ABILITY, &inGameTrade->secondAbility); + SetMonData(pokemon, MON_DATA_BEAUTY, &inGameTrade->stats[1]); + SetMonData(pokemon, MON_DATA_CUTE, &inGameTrade->stats[2]); + SetMonData(pokemon, MON_DATA_COOL, &inGameTrade->stats[0]); + SetMonData(pokemon, MON_DATA_SMART, &inGameTrade->stats[3]); + SetMonData(pokemon, MON_DATA_TOUGH, &inGameTrade->stats[4]); + SetMonData(pokemon, MON_DATA_SHEEN, &inGameTrade->sheen); + SetMonData(pokemon, MON_DATA_MET_LOCATION, &metLocation); + + isMail = FALSE; + if (inGameTrade->heldItem != ITEM_NONE) + { + if (ItemIsMail(inGameTrade->heldItem)) + { + sub_804DAD4(&mail, inGameTrade); + gUnknown_02029700[0] = mail; + SetMonData(pokemon, MON_DATA_MAIL, &isMail); + SetMonData(pokemon, MON_DATA_HELD_ITEM, (u8 *)&inGameTrade->heldItem); + } + else + { + item = (u8 *)&inGameTrade->heldItem; + SetMonData(pokemon, MON_DATA_HELD_ITEM, item); + } + } + CalculateMonStats(&gEnemyParty[0]); +} + +static void sub_804DAD4(struct MailStruct *mail, const struct InGameTrade *trade) { s32 i; for (i = 0; i < 9; i++) { - arg0->words[i] = gIngameTradeMail[trade->mailNum][i]; + mail->words[i] = gIngameTradeMail[trade->mailNum][i]; } - StringCopy(arg0->string, trade->otName); + StringCopy(mail->playerName, trade->otName); #if GERMAN - PadNameString(arg0->string, CHAR_SPACE); + PadNameString(mail->string, CHAR_SPACE); #endif - arg0->otId[0] = trade->otId >> 24; - arg0->otId[1] = trade->otId >> 16; - arg0->otId[2] = trade->otId >> 8; - arg0->otId[3] = trade->otId; - arg0->species = trade->species; - arg0->heldItem = trade->heldItem; + mail->trainerId[0] = trade->otId >> 24; + mail->trainerId[1] = trade->otId >> 16; + mail->trainerId[2] = trade->otId >> 8; + mail->trainerId[3] = trade->otId; + mail->species = trade->species; + mail->itemId = trade->heldItem; } u16 sub_804DB2C(void) -- cgit v1.2.3 From 63e96ae515a35a184341965fd30a8bc48e434d81 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 13:48:45 -0400 Subject: sub_804D8E4 --- src/trade.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index d0be1b48b..592b3f3e8 100644 --- a/src/trade.c +++ b/src/trade.c @@ -190,7 +190,7 @@ void sub_804A33C(u8 *, u8, u8); static #endif void sub_804A51C(u8, u8, u8, u8, u8, u8); -/*static*/ void sub_804D948(u8, u8); + /*static*/ void sub_804BA94(u8, u8); /*static*/ bool8 sub_804C29C(void); /*static*/ void sub_804DC18(void); @@ -3171,7 +3171,16 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); -void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade) +/*static*/ void sub_804D8E4(void) +{ + u8 nickname[32]; + const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); +} + +static void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade) { const struct InGameTrade *inGameTrade = &gIngameTrades[whichInGameTrade]; u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL); -- cgit v1.2.3 From 1512aee2335dc7f47a4cbb822791f27351b6f1ef Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 14:08:51 -0400 Subject: sub_804D89C --- src/trade.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 592b3f3e8..960a1b6bc 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3171,6 +3171,14 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +u16 sub_804D89C(void) +{ + const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, gSpeciesNames[inGameTrade->playerSpecies]); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); + return inGameTrade->playerSpecies; +} + /*static*/ void sub_804D8E4(void) { u8 nickname[32]; -- cgit v1.2.3 From 168cfdab081db37a7b27ed1a2dee88983c84e13b Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 14:19:14 -0400 Subject: sub_804D80C --- src/trade.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 960a1b6bc..efafe278c 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3171,6 +3171,31 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804D80C(struct Sprite *sprite) +{ + if (sprite->data2 == 0) + { + if ((sprite->pos1.y += 4) > sprite->data3) + { + sprite->data2 ++; + sprite->data0 = 0x16; + PlaySE(SE_KON); + } + } + else + { + if (sprite->data0 == 0x42) + PlaySE(SE_KON2); + if (sprite->data0 == 0x5c) + PlaySE(SE_KON3); + if (sprite->data0 == 0x6b) + PlaySE(SE_KON4); + sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data0]; + if (++sprite->data0 == 0x6c) + sprite->callback = SpriteCallbackDummy; + } +} + u16 sub_804D89C(void) { const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; -- cgit v1.2.3 From 59574c5ab2c210c7d6158675c8cbe4fefda3ae81 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 14:27:41 -0400 Subject: sub_804D7AC --- src/trade.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index efafe278c..f09c077d6 100644 --- a/src/trade.c +++ b/src/trade.c @@ -135,6 +135,7 @@ struct TradeEwramSubstruct2 { /*0x00ba*/ u8 filler_00ba[3]; /*0x00bd*/ u8 unk_00bd; /*0x00c0*/ u32 unk_00c0; + /*0x00c4*/ u16 unk_00c4; }; struct TradeEwramStruct { @@ -3171,6 +3172,21 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804D7AC(struct Sprite *sprite) +{ + if (sprite->data1 == 20) + StartSpriteAffineAnim(sprite, 1); + if (++ sprite->data1 > 20) + { + sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data0]; + if (++ sprite->data0 == 23) + { + DestroySprite(sprite); + gUnknown_03004828->unk_00c4 = 14; + } + } +} + void sub_804D80C(struct Sprite *sprite) { if (sprite->data2 == 0) -- cgit v1.2.3 From fc135f6e97ff780f1aba4c5ce8d22f450a5cf5c4 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 14:43:52 -0400 Subject: sub_804D738 --- src/trade.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index f09c077d6..f48a5d902 100644 --- a/src/trade.c +++ b/src/trade.c @@ -191,7 +191,7 @@ void sub_804A33C(u8 *, u8, u8); static #endif void sub_804A51C(u8, u8, u8, u8, u8, u8); - +static void sub_804D7AC(struct Sprite *); /*static*/ void sub_804BA94(u8, u8); /*static*/ bool8 sub_804C29C(void); /*static*/ void sub_804DC18(void); @@ -3172,6 +3172,20 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804D738(struct Sprite *sprite) +{ + sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data0]; + if (sprite->data0 == 22) + PlaySE(SE_KON); + if (++ sprite->data0 == 44) + { + PlaySE(SE_W025); + sprite->callback = sub_804D7AC; + sprite->data0 = 0; + BeginNormalPaletteFade(1 << (16 + sprite->oam.paletteNum), -1, 0, 16, -1); + } +} + void sub_804D7AC(struct Sprite *sprite) { if (sprite->data1 == 20) -- cgit v1.2.3 From c3c645ceac878cf7f5c1a3d47b01770bb61cfe19 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 15:02:47 -0400 Subject: sub_804D6BC --- src/trade.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index f48a5d902..84640fbf0 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3172,6 +3172,27 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804D6BC(struct Sprite *sprite) +{ + sprite->pos1.y += sprite->data0 / 10; + sprite->data5 += sprite->data1; + sprite->pos1.x = sprite->data5 / 10; + if (sprite->pos1.y > 0x4c) + { + sprite->pos1.y = 0x4c; + sprite->data0 = -(sprite->data0 * sprite->data2) / 100; + sprite->data3 ++; + } + if (sprite->pos1.x == 0x78) + sprite->data1 = 0; + sprite->data0 += sprite->data4; + if (sprite->data3 == 4) + { + sprite->data7 = 1; + sprite->callback = SpriteCallbackDummy; + } +} + void sub_804D738(struct Sprite *sprite) { sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data0]; -- cgit v1.2.3 From 5a993f4acc8e10c75c563cfbbdd21d59df0dd0b9 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 15:32:51 -0400 Subject: sub_804D63C --- src/trade.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 84640fbf0..fc15da7f8 100644 --- a/src/trade.c +++ b/src/trade.c @@ -196,12 +196,12 @@ static void sub_804D7AC(struct Sprite *); /*static*/ bool8 sub_804C29C(void); /*static*/ void sub_804DC18(void); /*static*/ void sub_804BB78(void); -/*static*/ void sub_804D63C(void); /*static*/ bool8 sub_804B2B0(void); static void sub_804E144(void); static void sub_804E1A0(u8); /*static*/ void sub_804B790(void); static void sub_804DAD4(struct MailStruct *, const struct InGameTrade *); +void sub_804D588(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3172,6 +3172,33 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +static void sub_804D63C(void) +{ + u8 blockReceivedStatus; + sub_804B2B0(); + blockReceivedStatus = GetBlockReceivedStatus(); + if (blockReceivedStatus & 0x01) + { + if (gBlockRecvBuffer[0][0] == 0xdcba) + { + SetMainCallback2(sub_804D588); + } + if (gBlockRecvBuffer[0][0] == 0xabcd) + { + gUnknown_03004828->unk_009c = 1; + } + ResetBlockReceivedFlag(0); + } + if (blockReceivedStatus & 0x02) + { + if (gBlockRecvBuffer[1][0] == 0xabcd) + { + gUnknown_03004828->unk_009d = 1; + } + ResetBlockReceivedFlag(1); + } +} + void sub_804D6BC(struct Sprite *sprite) { sprite->pos1.y += sprite->data0 / 10; -- cgit v1.2.3 From 0c7472075bbf318711e5d7c84df17796af0ec0d5 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 3 Sep 2017 16:08:51 -0400 Subject: sub_804D588 --- src/trade.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index fc15da7f8..ee0ed96db 100644 --- a/src/trade.c +++ b/src/trade.c @@ -32,6 +32,7 @@ #include "field_fadetransition.h" #include "decompress.h" #include "mail_data.h" +#include "evolution_scene.h" #include "trade.h" #ifdef ENGLISH @@ -202,6 +203,7 @@ static void sub_804E1A0(u8); /*static*/ void sub_804B790(void); static void sub_804DAD4(struct MailStruct *, const struct InGameTrade *); void sub_804D588(void); +static void sub_804DC88(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3172,6 +3174,32 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804D588(void) +{ + u16 evoTarget; + switch (gMain.state) + { + case 0: + gMain.state = 4; + gSoftResetDisabled = TRUE; + break; + case 4: + gUnknown_03005E94 = sub_804DC88; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b9, gUnknown_020297D8[0]); + else + SetMainCallback2(sub_804DC88); + gUnknown_020297D8[0] = 255; + break; + } + if (!HasLinkErrorOccurred()) + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + static void sub_804D63C(void) { u8 blockReceivedStatus; @@ -3411,7 +3439,7 @@ void sub_804DC18(void) UpdatePaletteFade(); } -void sub_804DC88(void) +static void sub_804DC88(void) { switch (gMain.state) { -- cgit v1.2.3 From 9fe04d897f1c92ee9fb60d7ca526b54010464118 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 15:02:00 -0400 Subject: sub_804C29C --- src/egg_hatch.c | 6 +- src/trade.c | 781 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 779 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index aa3d45250..df54587af 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -19,6 +19,7 @@ #include "naming_screen.h" #include "trig.h" #include "rng.h" +#include "trade.h" extern u8 ewram[]; extern struct SpriteTemplate gUnknown_02024E8C; @@ -40,10 +41,7 @@ struct EggHatchData* gEggHatchData; extern const u32 gUnknown_08D00000[]; extern const u32 gUnknown_08D00524[]; -extern const u32 gUnknown_0820CA98[]; -extern const u32 gUnknown_0820F798[]; extern const u16 gUnknown_08D004E0[]; //palette -extern const u16 gUnknown_0820C9F8[]; //palette extern const struct SpriteSheet sUnknown_0820A3B0; extern const struct SpriteSheet sUnknown_0820A3B8; extern const struct SpritePalette sUnknown_0820A3C0; @@ -512,7 +510,7 @@ static void CB2_EggHatch_0(void) u32 size; REG_BG2CNT = 0x4C06; - LoadPalette(&gUnknown_0820C9F8, 0x10, 0xA0); + LoadPalette(gUnknown_0820C9F8, 0x10, 0xA0); offsetRead = (u32)(&gUnknown_0820CA98); offsetWrite = (VRAM + 0x4000); diff --git a/src/trade.c b/src/trade.c index ee0ed96db..3ec01246c 100644 --- a/src/trade.c +++ b/src/trade.c @@ -33,6 +33,7 @@ #include "decompress.h" #include "mail_data.h" #include "evolution_scene.h" +#include "pokeball.h" #include "trade.h" #ifdef ENGLISH @@ -131,12 +132,31 @@ struct TradeEwramSubstruct2 { /*0x009c*/ u8 unk_009c; /*0x009d*/ u8 unk_009d; /*0x009e*/ u16 linkData[13]; + // Sprite indices /*0x00b8*/ u8 unk_00b8; /*0x00b9*/ u8 unk_00b9; - /*0x00ba*/ u8 filler_00ba[3]; + /*0x00ba*/ u8 unk_00ba; + /*0x00bb*/ u8 unk_00bb; + /*0x00bc*/ u8 unk_00bc; /*0x00bd*/ u8 unk_00bd; + // Timer /*0x00c0*/ u32 unk_00c0; + // Scene index /*0x00c4*/ u16 unk_00c4; + /*0x00c6*/ u8 filler_00c6[0x3c]; + /*0x0102*/ u8 unk_0102; + /*0x0103*/ u8 unk_0103; + /*0x0104*/ u8 filler_0104[0x0c]; + /*0x0110*/ s16 unk_0110; + /*0x0112*/ u8 filler_0112[4]; + /*0x0116*/ s16 unk_0116; + /*0x0118*/ u16 unk_0118; + /*0x011a*/ u16 unk_011a; + /*0x011c*/ u8 filler_011c[2]; + /*0x011e*/ u8 unk_011e; + /*0x0120*/ u16 unk_0120; + /*0x0122*/ u16 unk_0122; + /*0x0124*/ u16 unk_0124; }; struct TradeEwramStruct { @@ -204,6 +224,22 @@ static void sub_804E1A0(u8); static void sub_804DAD4(struct MailStruct *, const struct InGameTrade *); void sub_804D588(void); static void sub_804DC88(void); +u8 sub_8047580(u8, u8, u8, u8, u8, u8, u8, u32); +void sub_804D6BC(struct Sprite *); +void sub_804D738(struct Sprite *); +void sub_804BBE8(u8); +void sub_804B128(void); +void sub_804B058(struct Sprite *); +void sub_804B07C(struct Sprite *); +void sub_804B0BC(struct Sprite *); +void sub_804B104(struct Sprite *); +void sub_804C0F8(u8); +bool8 sub_8040A3C(u16); +void sub_804B0E0(struct Sprite *); +void sub_804D80C(struct Sprite *); +void sub_804E1DC(void); +void sub_804BBCC(void); +void sub_804D8E4(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -565,10 +601,297 @@ const u8 unref_string_0820C3B5[] = _("こうかんせいりつ "); const u8 unref_string_0820C3C3[] = _("だめだたらしいよ "); const u8 gUnknown_0820C3D1[][2] = { { 4, 3}, - {19, 3} + {19, 3}, + { 0, 0} }; -asm(".section .rodata.igt"); +const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); +const u32 gTradeBallTiles[] = INCBIN_U32("graphics/trade/ball.4bpp"); +const u16 gUnknown_0820C9F8[][16] = { + INCBIN_U16("graphics/trade/unknown.gbapal"), + INCBIN_U16("graphics/trade/gba.gbapal"), + INCBIN_U16("graphics/trade/shadow.gbapal"), + {}, + INCBIN_U16("graphics/trade/misc.gbapal") +}; + +const u32 gUnknown_0820CA98[] = INCBIN_U32("graphics/trade/gba.4bpp"); +const u32 gUnknown_0820CA98_2[] = INCBIN_U32("graphics/trade/shadow.4bpp"); +const u32 gUnknown_0820DD98[] = INCBIN_U32("graphics/trade/pokeball_symbol.8bpp"); +const u16 gUnknown_0820F798[] = INCBIN_U16("graphics/trade/shadow_map.bin"); +const u16 gUnknown_08210798[] = INCBIN_U16("graphics/trade/gba_map.bin"); +const u16 gUnknown_08211798[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); +const u16 gUnknown_08211F98[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); +const u16 unused_08212098[] = INCBIN_U16("graphics/unused/unknown/8212098.gbapal"); +const u16 gTradeCableEndPalette[] = INCBIN_U16("graphics/trade/cable_end.gbapal"); +const u16 unused_082120D8[] = INCBIN_U16("graphics/unused/unknown/82120D8.gbapal"); +const u16 nullpal_082120F8[16] = {}; +const u16 gTradeGlowPalette[] = INCBIN_U16("graphics/trade/glow.gbapal"); +const u32 gTradeGlow1Tiles[] = INCBIN_U32("graphics/trade/glow1.4bpp"); +const u32 gTradeGlow2Tiles[] = INCBIN_U32("graphics/trade/glow2.4bpp"); +const u32 gTradeCableEndTiles[] = INCBIN_U32("graphics/trade/cable_end.4bpp"); +const u32 gTradeGBAScreenTiles[] = INCBIN_U32("graphics/trade/gba_screen.4bpp"); +const u32 gUnknown_08213738[] = INCBIN_U32("graphics/trade/gba_affine.8bpp"); +const u16 gUnknown_08215778[] = INCBIN_U16("graphics/trade/gba_affine_map.bin"); + +const struct OamData gOamData_8215878 = { + .affineMode = 1, + .size = 1 +}; + +const union AnimCmd gSpriteAnim_8215880[] = { + ANIMCMD_FRAME( 0, 3), + ANIMCMD_FRAME( 4, 3), + ANIMCMD_FRAME( 8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(20, 3), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(28, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(36, 3), + ANIMCMD_FRAME(40, 3), + ANIMCMD_FRAME(44, 3), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME( 0, 3), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_82158BC[] = { + ANIMCMD_FRAME( 0, 3), + ANIMCMD_FRAME( 4, 3), + ANIMCMD_FRAME( 8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(20, 3), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(28, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(36, 3), + ANIMCMD_FRAME(40, 3), + ANIMCMD_FRAME(44, 3), + ANIMCMD_LOOP(2), + ANIMCMD_FRAME( 0, 3), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_82158F8[] = { + gSpriteAnim_8215880, + gSpriteAnim_82158BC +}; + +const union AffineAnimCmd gSpriteAffineAnim_8215900[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_8215910[] = { + AFFINEANIMCMD_FRAME(-8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_8215920[] = { + AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0), + AFFINEANIMCMD_FRAME( 0, 0, 0, 5), + AFFINEANIMCMD_FRAME( 8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8215940[] = { + gSpriteAffineAnim_8215900, + gSpriteAffineAnim_8215910, + gSpriteAffineAnim_8215920 +}; + +const struct SpriteSheet gUnknown_0821594C = { + (const u8 *)gTradeBallTiles, 0x600, 5557 +}; + +const struct SpritePalette gUnknown_08215954 = { + gTradeBallPalette, 5558 +}; + +const struct SpriteTemplate gSpriteTemplate_821595C = { + 5557, + 5558, + &gOamData_8215878, + gSpriteAnimTable_82158F8, + NULL, + gSpriteAffineAnimTable_8215940, + sub_804D6BC +}; + +const struct OamData gOamData_8215974 = { + .affineMode = 1, + .objMode = 1, + .size = 2, + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_821597C[] = { + ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8215984[] = { + gSpriteAnim_821597C +}; + +const union AffineAnimCmd gSpriteAffineAnim_8215988[] = { + AFFINEANIMCMD_FRAME(-10, -10, 0, 5), + AFFINEANIMCMD_FRAME(10, 10, 0, 5), + AFFINEANIMCMD_JUMP(0) +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_82159A0[] = { + gSpriteAffineAnim_8215988 +}; + +const struct SpriteSheet gUnknown_082159A4 = { + (const u8 *)gTradeGlow1Tiles, 0x200, 5550 +}; + +const struct SpritePalette gUnknown_082159AC = { + gTradeGlowPalette, 5551 +}; + +const struct SpritePalette gUnknown_082159B4 = { + gTradeCableEndPalette, 5555 +}; + +const struct SpriteTemplate gSpriteTemplate_82159BC = { + 5550, + 5551, + &gOamData_8215974, + gSpriteAnimTable_8215984, + NULL, + gSpriteAffineAnimTable_82159A0, + sub_804B058 +}; + +const struct OamData gOamData_82159D4 = { + .shape = ST_OAM_V_RECTANGLE, + .size = 2, + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_82159DC[] = { + ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_82159E4[] = { + ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_82159EC[] = { + gSpriteAnim_82159DC, + gSpriteAnim_82159E4 +}; + +const struct SpriteSheet gUnknown_082159F4 = { + (const u8 *)gTradeGlow2Tiles, 0x300, 5552 +}; + +const struct SpriteTemplate gSpriteTemplate_82159FC = { + 5552, + 5551, + &gOamData_82159D4, + gSpriteAnimTable_82159EC, + NULL, + gDummySpriteAffineAnimTable, + sub_804B07C +}; + +const struct OamData gOamData_8215A14 = { + .shape = ST_OAM_V_RECTANGLE, + .size = 2, + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_8215A1C[] = { + ANIMCMD_FRAME(0, 10), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8215A24[] = { + gSpriteAnim_8215A1C +}; + +const struct SpriteSheet gUnknown_08215A28 = { + (const u8 *)gTradeCableEndTiles, 0x100, 5554 +}; + +const struct SpriteTemplate gSpriteTemplate_8215A30 = { + 5554, + 5555, + &gOamData_8215A14, + gSpriteAnimTable_8215A24, + NULL, + gDummySpriteAffineAnimTable, + sub_804B0BC +}; + +const struct OamData gOamData_8215A48 = { + .shape = ST_OAM_H_RECTANGLE, + .size = 3, + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_8215A50[] = { + ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_LOOP(8), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8215A74[] = { + gSpriteAnim_8215A50 +}; + +const struct SpriteSheet gUnknown_08215A78 = { + (const u8 *)gTradeGBAScreenTiles, 0x1000, 5556 +}; + +const struct SpriteTemplate gSpriteTemplate_8215A80 = { + 5556, + 5555, + &gOamData_8215A48, + gSpriteAnimTable_8215A74, + NULL, + gDummySpriteAffineAnimTable, + sub_804B104 +}; + +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), +}; + +const union AffineAnimCmd gSpriteAffineAnim_8215AB0[] = { + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_JUMP(0) +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8215AC0[] = { + gSpriteAffineAnim_8215AB0 +}; const struct InGameTrade gIngameTrades[] = { { @@ -3174,6 +3497,456 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +bool8 sub_804C29C(void) +{ + u16 evoTarget; + + switch (gUnknown_03004828->unk_00c4) + { + case 0: + gSprites[gUnknown_03004828->unk_00b8].invisible = FALSE; + gSprites[gUnknown_03004828->unk_00b8].pos2.x = -0xb4; + gSprites[gUnknown_03004828->unk_00b8].pos2.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120].y_offset; + gUnknown_03004828->unk_00c4 ++; + gUnknown_03004828->unk_0124 = GetCurrentMapMusic(); + PlayBGM(BGM_SHINKA); + break; + case 1: + if (gUnknown_03004828->unk_0116 > 0) + { + gSprites[gUnknown_03004828->unk_00b8].pos2.x += 3; + gUnknown_03004828->unk_0116 -= 3; + } + else + { + gSprites[gUnknown_03004828->unk_00b8].pos2.x = 0; + gUnknown_03004828->unk_0116 = 0; + gUnknown_03004828->unk_00c4 = 10; + } + break; + + case 10: + StringExpandPlaceholders(gStringVar4, gTradeText_WillBeSent); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + gUnknown_03004828->unk_00c4 = 11; + gUnknown_03004828->unk_00c0 = 0; + break; + case 11: + if (++gUnknown_03004828->unk_00c0 == 80) + { + gUnknown_03004828->unk_0102 = sub_8047580(gUnknown_03004828->unk_00b8, gSprites[gUnknown_03004828->unk_00b8].oam.paletteNum, 0x78, 0x20, 0x2, 0x1, 0x14, 0xfffff); + gUnknown_03004828->unk_00c4 ++; + ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); + StringExpandPlaceholders(gStringVar4, gTradeText_ByeBye); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + } + break; + case 12: + if (gSprites[gUnknown_03004828->unk_0102].callback == SpriteCallbackDummy && sub_80035AC(&gUnknown_03004828->window) == TRUE) + { + gUnknown_03004828->unk_0103 = CreateSprite(&gSpriteTemplate_821595C, 0x78, 0x20, 0); + gSprites[gUnknown_03004828->unk_0103].callback = sub_804D738; + DestroySprite(&gSprites[gUnknown_03004828->unk_0102]); + gUnknown_03004828->unk_00c4 ++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_03004828->unk_00c4 = 20; + break; + + case 20: + if (!gPaletteFade.active) + { + sub_804BBE8(4); + gUnknown_03004828->unk_00c4 ++; + } + break; + case 21: + BeginNormalPaletteFade(-1, -1, 16, 0, 0); + gUnknown_03004828->unk_00c4 ++; + break; + case 22: + if (!gPaletteFade.active) + { + gUnknown_03004828->unk_00c4 = 23; + } + break; + case 23: + if (gUnknown_03004828->unk_011a > 0x100) + { + gUnknown_03004828->unk_011a -= 0x34; + } + else + { + sub_804BBE8(1); + gUnknown_03004828->unk_011a = 0x80; + gUnknown_03004828->unk_00c4 ++; + gUnknown_03004828->unk_00c0 = 0; + } + gUnknown_03004828->unk_0118 = 0x8000 / gUnknown_03004828->unk_011a; + break; + case 24: + if (++ gUnknown_03004828->unk_00c0 > 20) + { + sub_804BBE8(3); + sub_804B128(); + gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_8215A80, 0x78, 0x50, 0); + gUnknown_03004828->unk_00c4 ++; + } + break; + case 25: + if (gSprites[gUnknown_03004828->unk_00bb].animEnded) + { + DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]); + REG_BLDCNT = 0x640; + REG_BLDALPHA = 0x40C; + gUnknown_03004828->unk_00c4 ++; + } + break; + case 26: + if (-- gUnknown_03004828->unk_0110 == 0x13C) + { + gUnknown_03004828->unk_00c4 ++; + } + if (gUnknown_03004828->unk_0110 == 0x148) + { + gUnknown_03004828->unk_00bc = CreateSprite(&gSpriteTemplate_8215A30, 0x80, 0x41, 0); + } + break; + case 27: + gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159BC, 0x80, 0x50, 3); + gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x80, 0x50, 0); + StartSpriteAnim(&gSprites[gUnknown_03004828->unk_00bb], 1); + gUnknown_03004828->unk_00c4 ++; + break; + case 28: + if ((gUnknown_03004828->unk_0110 -= 2) == 0xA6) + { + gUnknown_03004828->unk_00c4 = 200; + } + sub_804C0F8(0); + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + break; + case 200: + gSprites[gUnknown_03004828->unk_00ba].pos1.y -= 2; + gSprites[gUnknown_03004828->unk_00bb].pos1.y -= 2; + sub_804C0F8(0); + if (gSprites[gUnknown_03004828->unk_00ba].pos1.y < -8) + { + gUnknown_03004828->unk_00c4 = 29; + } + break; + case 29: + BeginNormalPaletteFade(-1, -1, 0, 16, 0); + gUnknown_03004828->unk_00c4 = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]); + DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]); + sub_804BBE8(2); + gUnknown_03004828->unk_00c4 ++; + } + break; + case 31: + BeginNormalPaletteFade(-1, -1, 16, 0, 0); + gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159FC, 0x6f, 0xaa, 0); + gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x81, -0xa, 0); + gUnknown_03004828->unk_00c4 ++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + gUnknown_03004828->unk_00c4 ++; + } + gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3; + gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3; + break; + case 33: + gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3; + gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3; + if (gSprites[gUnknown_03004828->unk_00ba].pos2.y <= -0x5a) + { + gSprites[gUnknown_03004828->unk_00ba].data1 = 1; + gSprites[gUnknown_03004828->unk_00bb].data1 = 1; + gUnknown_03004828->unk_00c4 ++; + } + break; + case 34: + BlendPalettes(1, 16, 0xffff); + gUnknown_03004828->unk_00c4 ++; + break; + case 35: + BlendPalettes(1, 0, 0xffff); + gUnknown_03004828->unk_00c4 ++; + break; + case 36: + BlendPalettes(1, 16, 0xffff); + gUnknown_03004828->unk_00c4 ++; + break; + case 37: + if (!sub_8040A3C(gUnknown_03004828->unk_0120)) + { + gSprites[gUnknown_03004828->unk_00b8].affineAnims = gSpriteAffineAnimTable_8215AC0; + gSprites[gUnknown_03004828->unk_00b8].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[gUnknown_03004828->unk_00b8], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8], 0); + } + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b9], 0); + gSprites[gUnknown_03004828->unk_00b8].pos1.x = 0x3c; + gSprites[gUnknown_03004828->unk_00b9].pos1.x = 0xb4; + gSprites[gUnknown_03004828->unk_00b8].pos1.y = 0xc0; + gSprites[gUnknown_03004828->unk_00b9].pos1.y = -0x20; + gSprites[gUnknown_03004828->unk_00b8].invisible = FALSE; + gSprites[gUnknown_03004828->unk_00b9].invisible = FALSE; + gUnknown_03004828->unk_00c4 ++; + break; + case 38: + gSprites[gUnknown_03004828->unk_00b8].pos2.y -= 3; + gSprites[gUnknown_03004828->unk_00b9].pos2.y += 3; + if (-0xa0 > gSprites[gUnknown_03004828->unk_00b8].pos2.y && gSprites[gUnknown_03004828->unk_00b8].pos2.y >= -0xa3) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[gUnknown_03004828->unk_00b8].pos2.y < -0xde) + { + gSprites[gUnknown_03004828->unk_00ba].data1 = 0; + gSprites[gUnknown_03004828->unk_00bb].data1 = 0; + gUnknown_03004828->unk_00c4 ++; + gSprites[gUnknown_03004828->unk_00b8].invisible = TRUE; + gSprites[gUnknown_03004828->unk_00b9].invisible = TRUE; + BlendPalettes(1, 0, 0xffff); + } + break; + case 39: + gSprites[gUnknown_03004828->unk_00ba].pos2.y -= 3; + gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3; + if (gSprites[gUnknown_03004828->unk_00ba].pos2.y <= -0xde) + { + BeginNormalPaletteFade(-1, -1, 0, 16, 0); + gUnknown_03004828->unk_00c4 ++; + DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]); + DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]); + } + break; + case 40: + if (!gPaletteFade.active) + { + gUnknown_03004828->unk_00c4 ++; + sub_804BBE8(1); + gUnknown_03004828->unk_0110 = 0xa6; + gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159BC, 0x80, -0x14, 3); + gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x80, -0x14, 0); + StartSpriteAnim(&gSprites[gUnknown_03004828->unk_00bb], 1); + } + break; + case 41: + BeginNormalPaletteFade(-1, -1, 16, 0, 0); + gUnknown_03004828->unk_00c4 ++; + break; + case 42: + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + sub_804C0F8(1); + if (!gPaletteFade.active) + { + gUnknown_03004828->unk_00c4 ++; + } + break; + case 43: + sub_804C0F8(1); + gSprites[gUnknown_03004828->unk_00ba].pos2.y += 3; + gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3; + if (gSprites[gUnknown_03004828->unk_00ba].pos2.y + gSprites[gUnknown_03004828->unk_00ba].pos1.y == 64) + { + gUnknown_03004828->unk_00c4 ++; + } + break; + case 44: + sub_804C0F8(1); + if ((gUnknown_03004828->unk_0110 += 2) > 0x13c) + { + gUnknown_03004828->unk_0110 = 0x13c; + gUnknown_03004828->unk_00c4 ++; + } + break; + case 45: + DestroySprite(&gSprites[gUnknown_03004828->unk_00ba]); + DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]); + gUnknown_03004828->unk_00c4 ++; + gUnknown_03004828->unk_00c0 = 0; + break; + case 46: + if (++ gUnknown_03004828->unk_00c0 == 10) + { + gUnknown_03004828->unk_00c4 ++; + } + break; + case 47: + if (++ gUnknown_03004828->unk_0110 > 0x15c) + { + gUnknown_03004828->unk_0110 = 0x15c; + gUnknown_03004828->unk_00c4 ++; + } + if (gUnknown_03004828->unk_0110 == 0x148) + gUnknown_03004828->unk_00bc = CreateSprite(&gSpriteTemplate_8215A30, 0x80, 0x41, 0); + gSprites[gUnknown_03004828->unk_00bc].callback = sub_804B0E0; + break; + case 48: + gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_8215A80, 0x78, 0x50, 0); + gUnknown_03004828->unk_00c4 = 50; + break; + + case 50: + if (gSprites[gUnknown_03004828->unk_00bb].animEnded) + { + DestroySprite(&gSprites[gUnknown_03004828->unk_00bb]); + sub_804BBE8(6); + gUnknown_03004828->unk_00c4 ++; + PlaySE(SE_W028); + } + break; + case 51: + if (gUnknown_03004828->unk_011a < 0x400) + { + gUnknown_03004828->unk_011a += 0x34; + } + else + { + gUnknown_03004828->unk_011a = 0x400; + gUnknown_03004828->unk_00c4 ++; + } + gUnknown_03004828->unk_0118 = 0x8000 / gUnknown_03004828->unk_011a; + break; + case 52: + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_03004828->unk_00c4 = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + sub_804BBE8(5); + sub_804BBE8(7); + gUnknown_03004828->unk_00c4 ++; + } + break; + case 61: + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gUnknown_03004828->unk_00c4 ++; + break; + case 62: + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + if (!gPaletteFade.active) + { + gUnknown_03004828->unk_00c4 ++; + } + break; + case 63: + gUnknown_03004828->unk_0103 = CreateSprite(&gSpriteTemplate_821595C, 0x78, -0x8, 0); + gSprites[gUnknown_03004828->unk_0103].data3 = 0x4a; + gSprites[gUnknown_03004828->unk_0103].callback = sub_804D80C; + StartSpriteAnim(&gSprites[gUnknown_03004828->unk_0103], 1); + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_0103], 2); + BlendPalettes(1 << (16 + gSprites[gUnknown_03004828->unk_0103].oam.paletteNum), 16, 0xffff); + gUnknown_03004828->unk_00c4 ++; + gUnknown_03004828->unk_00c0 = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_03004828->unk_0103].oam.paletteNum), 1, 16, 0, 0xffff); + gUnknown_03004828->unk_00c4 ++; + break; + case 65: + if (gSprites[gUnknown_03004828->unk_0103].callback == SpriteCallbackDummy) + { + gUnknown_03004828->unk_00c4 ++; + } + break; + case 66: + gSprites[gUnknown_03004828->unk_00b9].pos1.x = 0x78; + gSprites[gUnknown_03004828->unk_00b9].pos1.y = gMonFrontPicCoords[gUnknown_03004828->unk_0122].y_offset + 60; + gSprites[gUnknown_03004828->unk_00b9].pos2.x = 0; + gSprites[gUnknown_03004828->unk_00b9].pos2.y = 0; + CreatePokeballSprite(gUnknown_03004828->unk_00b9, gSprites[gUnknown_03004828->unk_00b9].oam.paletteNum, 0x78, 0x54, 2, 1, 0x14, 0xfffff); + FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_0103]); + DestroySprite(&gSprites[gUnknown_03004828->unk_0103]); + gUnknown_03004828->unk_00c4 ++; + break; + case 67: + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); + StringExpandPlaceholders(gStringVar4, gTradeText_SentOverPoke); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + gUnknown_03004828->unk_00c4 ++; + gUnknown_03004828->unk_00c0 = 0; + break; + case 68: + if (++ gUnknown_03004828->unk_00c0 == 4) + { + PlayFanfare(BGM_FANFA5); + } + if (gUnknown_03004828->unk_00c0 == 0xf0) + { + gUnknown_03004828->unk_00c4 ++; + ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); + StringExpandPlaceholders(gStringVar4, gTradeText_TakeGoodCare); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + gUnknown_03004828->unk_00c0 = 0; + } + break; + case 69: // OneHand + if (++ gUnknown_03004828->unk_00c0 == 60) + { + gUnknown_03004828->unk_00c4 ++; + } + break; + case 70: + sub_804E1DC(); + gUnknown_03004828->unk_00c4 ++; + break; + case 71: + if (gUnknown_03004828->unk_011e) + { + return TRUE; + } + else if (gMain.newKeys & A_BUTTON) + { + gUnknown_03004828->unk_00c4 ++; + } + break; + case 72: // Only if in-game trade + sub_804BA94(gSpecialVar_0x8005, 0); + gUnknown_03005E94 = sub_804BBCC; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b9, gUnknown_020297D8[0]); + gUnknown_03004828->unk_00c4 ++; + break; + case 73: + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_03004828->unk_00c4 ++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayBGM(gUnknown_03004828->unk_0124); + SetMainCallback2(c2_exit_to_overworld_2_switch); + sub_804D8E4(); + } + break; + } + return FALSE; +} + void sub_804D588(void) { u16 evoTarget; @@ -3272,7 +4045,7 @@ void sub_804D7AC(struct Sprite *sprite) if (++ sprite->data0 == 23) { DestroySprite(sprite); - gUnknown_03004828->unk_00c4 = 14; + gUnknown_03004828->unk_00c4 = 14; // Resume the master trade animation } } } -- cgit v1.2.3 From 446a95451d059d7b824086c53595736a5ce68d8e Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 15:14:24 -0400 Subject: sub_804C1A8 --- src/trade.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 3ec01246c..2443f1a57 100644 --- a/src/trade.c +++ b/src/trade.c @@ -153,7 +153,7 @@ struct TradeEwramSubstruct2 { /*0x0118*/ u16 unk_0118; /*0x011a*/ u16 unk_011a; /*0x011c*/ u8 filler_011c[2]; - /*0x011e*/ u8 unk_011e; + /*0x011e*/ u8 isLinkTrade; /*0x0120*/ u16 unk_0120; /*0x0122*/ u16 unk_0122; /*0x0124*/ u16 unk_0124; @@ -3497,6 +3497,30 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804C1A8(void) +{ + u8 mpId; + u8 string[20]; + const struct InGameTrade *ingameTrade; + if (gUnknown_03004828->isLinkTrade) + { + mpId = GetMultiplayerId(); + StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); + GetMonData(&gEnemyParty[gUnknown_020297D8[1] % 6], MON_DATA_NICKNAME, string); + StringCopy10(gStringVar3, string); + GetMonData(&gPlayerParty[gUnknown_020297D8[0]], MON_DATA_NICKNAME, string); + StringCopy10(gStringVar2, string); + } + else + { + ingameTrade = &gIngameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, ingameTrade->otName); + StringCopy10(gStringVar3, ingameTrade->name); + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, string); + StringCopy10(gStringVar2, string); + } +} + bool8 sub_804C29C(void) { u16 evoTarget; @@ -3914,7 +3938,7 @@ bool8 sub_804C29C(void) gUnknown_03004828->unk_00c4 ++; break; case 71: - if (gUnknown_03004828->unk_011e) + if (gUnknown_03004828->isLinkTrade) { return TRUE; } -- cgit v1.2.3 From e09012be02234e323e14493d14b8533bb74dfad8 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 15:16:52 -0400 Subject: sub_804C164 --- src/trade.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 2443f1a57..723b6e8f8 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3497,6 +3497,16 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804C164(void) +{ + LoadSpriteSheet(&gUnknown_082159A4); + LoadSpriteSheet(&gUnknown_082159F4); + LoadSpriteSheet(&gUnknown_08215A28); + LoadSpriteSheet(&gUnknown_08215A78); + LoadSpritePalette(&gUnknown_082159AC); + LoadSpritePalette(&gUnknown_082159B4); +} + void sub_804C1A8(void) { u8 mpId; -- cgit v1.2.3 From 058653a00b2855d6b8e25b24649667fe90316274 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 15:25:20 -0400 Subject: sub_804C0F8 --- src/trade.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 723b6e8f8..a1ca4a173 100644 --- a/src/trade.c +++ b/src/trade.c @@ -146,13 +146,16 @@ struct TradeEwramSubstruct2 { /*0x00c6*/ u8 filler_00c6[0x3c]; /*0x0102*/ u8 unk_0102; /*0x0103*/ u8 unk_0103; - /*0x0104*/ u8 filler_0104[0x0c]; + /*0x0104*/ u8 filler_0104[0x08]; + /*0x010c*/ u16 unk_010c; + /*0x010e*/ s16 unk_010e; /*0x0110*/ s16 unk_0110; - /*0x0112*/ u8 filler_0112[4]; + /*0x0112*/ u16 unk_0112; + /*0x0114*/ u16 unk_0114; /*0x0116*/ s16 unk_0116; /*0x0118*/ u16 unk_0118; /*0x011a*/ u16 unk_011a; - /*0x011c*/ u8 filler_011c[2]; + /*0x011c*/ u16 unk_011c; /*0x011e*/ u8 isLinkTrade; /*0x0120*/ u16 unk_0120; /*0x0122*/ u16 unk_0122; @@ -3497,6 +3500,26 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804C0F8(u8 a0) +{ + if (a0 == 0) + { + if (gUnknown_03004828->unk_0110 < 0x10a) + { + gUnknown_03004828->unk_010e ++; + gUnknown_03004828->unk_011c += 64; + } + } + else + { + if (gUnknown_03004828->unk_010e > -0x40) + { + gUnknown_03004828->unk_010e --; + gUnknown_03004828->unk_011c += 64; + } + } +} + void sub_804C164(void) { LoadSpriteSheet(&gUnknown_082159A4); -- cgit v1.2.3 From f2a6e0a58d9bef9b8d9b8d3db2198da488d36749 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 17:18:02 -0400 Subject: sub_804BBE8 and new DmaCopy macros --- src/trade.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index a1ca4a173..3da3e2d11 100644 --- a/src/trade.c +++ b/src/trade.c @@ -146,7 +146,9 @@ struct TradeEwramSubstruct2 { /*0x00c6*/ u8 filler_00c6[0x3c]; /*0x0102*/ u8 unk_0102; /*0x0103*/ u8 unk_0103; - /*0x0104*/ u8 filler_0104[0x08]; + /*0x0104*/ u16 unk_0104; + /*0x0106*/ u16 unk_0106; + /*0x0108*/ u8 filler_0108[0x04]; /*0x010c*/ u16 unk_010c; /*0x010e*/ s16 unk_010e; /*0x0110*/ s16 unk_0110; @@ -3500,6 +3502,95 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804BBE8(u8 a0) +{ + int i; + u16 *buffer; + switch (a0) + { + case 0: + LoadPalette(gUnknown_0820C9F8, 0x10, 0xa0); + DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(1), 0x1300, 0x1000); + DmaCopy16Defvars(3, gUnknown_0820F798, (void *)BG_SCREEN_ADDR(18), 0x1000); + gUnknown_03004828->unk_0114 = 0; + gUnknown_03004828->unk_0116 = 0xb4; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256; + break; + case 1: + gUnknown_03004828->unk_0112 = 0; + gUnknown_03004828->unk_0110 = 0x15c; + REG_BG1VOFS = 0x15c; + REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512; + + DmaCopy16Defvars(3, gUnknown_08210798, (void *)BG_SCREEN_ADDR(5), 0x1000); + DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(0), 0x1300, 0x1000); + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; + break; + case 2: + gUnknown_03004828->unk_0110 = 0; + gUnknown_03004828->unk_0112 = 0; + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; + DmaCopy16Defvars(3, gUnknown_08211798, (void *)BG_SCREEN_ADDR(5), 0x800); + break; + case 3: + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; + gUnknown_03004828->unk_0104 = 0x40; + gUnknown_03004828->unk_0106 = 0x40; + gUnknown_03004828->unk_010c = 0x78; + gUnknown_03004828->unk_010e = -0x46; + gUnknown_03004828->unk_011c = 0; + DmaCopyLarge16(3, gUnknown_0820DD98, (void *)BG_CHAR_ADDR(1), 0x1a00, 0x1000); + DmaCopy16Defvars(3, gUnknown_08211F98, (void *)BG_SCREEN_ADDR(18), 0x100); + break; + case 4: + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18); + gUnknown_03004828->unk_0104 = 0x40; + gUnknown_03004828->unk_0106 = 0x5c; + gUnknown_03004828->unk_0118 = 0x20; + gUnknown_03004828->unk_011a = 0x400; + gUnknown_03004828->unk_011c = 0; + DmaCopyLarge16(3, gUnknown_08213738, (void *)BG_CHAR_ADDR(1), 0x2040, 0x1000); + DmaCopy16Defvars(3, gUnknown_08215778, (void *)BG_SCREEN_ADDR(18), 0x100); + break; + case 5: + gUnknown_03004828->unk_0110 = 0; + gUnknown_03004828->unk_0112 = 0; + REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5); + LZDecompressVram(gUnknown_08D00000, (void *)BG_CHAR_ADDR(0)); + CpuCopy16(gUnknown_08D00524, buffer = (u16 *)ewram, 0x1000); + LoadCompressedPalette(gUnknown_08D004E0, 0x70, 0x20); + FillPalette(0, 0, 2); + for (i = 0; i < 0x280; i ++) + buffer[i] |= 0x7000; + DmaCopy16Defvars(3, ewram, (void *)BG_SCREEN_ADDR(5), 0x500); + MenuZeroFillWindowRect(2, 15, 27, 18); + break; + case 6: + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18); + gUnknown_03004828->unk_0104 = 0x40; + gUnknown_03004828->unk_0106 = 0x5c; + gUnknown_03004828->unk_0118 = 0x100; + gUnknown_03004828->unk_011a = 0x80; + gUnknown_03004828->unk_010c = 0x78; + gUnknown_03004828->unk_010e = 0x50; + gUnknown_03004828->unk_011c = 0; + DmaCopyLarge16(3, gUnknown_08213738, (void *)BG_CHAR_ADDR(1), 0x2040, 0x1000); + DmaCopy16Defvars(3, gUnknown_08215778, (void *)BG_SCREEN_ADDR(18), 0x100); + break; + case 7: + gUnknown_03004828->unk_0114 = 0; + gUnknown_03004828->unk_0116 = 0; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256; + LoadPalette(gUnknown_0820C9F8, 0x10, 0xa0); + DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(1), 0x1300, 0x1000); + DmaCopy16Defvars(3, gUnknown_0820F798, (void *)BG_SCREEN_ADDR(18), 0x1000); + break; + } +} + void sub_804C0F8(u8 a0) { if (a0 == 0) -- cgit v1.2.3 From e807ff370712511f4cb0997683892c2e3320518d Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 17:22:30 -0400 Subject: sub_804BB78 --- src/trade.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 3da3e2d11..ada0f5ace 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3502,6 +3502,32 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804BB78(void) +{ + switch (gUnknown_03004828->unk_00bd) + { + case 1: + if (sub_8007ECC()) + { + Trade_SendData(gUnknown_03004828); + gUnknown_03004828->unk_00bd ++; + } + // fallthrough + case 2: + gUnknown_03004828->unk_00bd = 0; + break; + } +} + +void sub_804BBCC(void) +{ + sub_804C29C(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + void sub_804BBE8(u8 a0) { int i; -- cgit v1.2.3 From c121c19a159d902fb697df71fc60dbbd511da567 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 17:36:04 -0400 Subject: sub_804BA94 --- src/trade.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index ada0f5ace..c3e8c6a6f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -128,7 +128,7 @@ struct TradeEwramSubstruct2 { /*0x0000*/ u8 filler_0000; /*0x0004*/ struct Window window; /*0x0034*/ u8 unk_0034; - /*0x0035*/ u8 filler_0035[0x67]; + /*0x0038*/ struct Pokemon pokemon; /*0x009c*/ u8 unk_009c; /*0x009d*/ u8 unk_009d; /*0x009e*/ u16 linkData[13]; @@ -245,6 +245,8 @@ void sub_804D80C(struct Sprite *); void sub_804E1DC(void); void sub_804BBCC(void); void sub_804D8E4(void); +void sub_804BA18(u8); +void sub_804BA64(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3502,6 +3504,35 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804BA94(u8 a0, u8 a1) +{ + u8 friendship; + struct Pokemon *playerPokemon = &gPlayerParty[a0]; + u16 playerMail = GetMonData(playerPokemon, MON_DATA_MAIL); + + struct Pokemon *friendPokemon = &gEnemyParty[a1]; + u16 friendMail = GetMonData(friendPokemon, MON_DATA_MAIL); + + if (playerMail != 0xff) + ClearMailStruct(&gSaveBlock1.mail[playerMail]); + + // This is where the actual trade happens!! + gUnknown_03004828->pokemon = *playerPokemon; + *playerPokemon = *friendPokemon; + *friendPokemon = gUnknown_03004828->pokemon; + + friendship = 70; + if (!GetMonData(playerPokemon, MON_DATA_IS_EGG)) + SetMonData(playerPokemon, MON_DATA_FRIENDSHIP, &friendship); + + if (friendMail != 0xff) + GiveMailToMon2(playerPokemon, &gUnknown_02029700[friendMail]); + + sub_804BA18(a0); + if (gReceivedRemoteLinkPlayers) + sub_804BA64(); +} + void sub_804BB78(void) { switch (gUnknown_03004828->unk_00bd) -- cgit v1.2.3 From ce7f9a1cab4ed09809aef9e550050cef7c62488f Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 17:42:33 -0400 Subject: sub_804BA18 --- src/trade.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index c3e8c6a6f..4e4903e51 100644 --- a/src/trade.c +++ b/src/trade.c @@ -34,6 +34,7 @@ #include "mail_data.h" #include "evolution_scene.h" #include "pokeball.h" +#include "pokedex.h" #include "trade.h" #ifdef ENGLISH @@ -245,8 +246,6 @@ void sub_804D80C(struct Sprite *); void sub_804E1DC(void); void sub_804BBCC(void); void sub_804D8E4(void); -void sub_804BA18(u8); -void sub_804BA64(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3504,6 +3503,24 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +static void sub_804BA18(u8 partyIdx) +{ + struct Pokemon *pokemon = &gPlayerParty[partyIdx]; + if (!GetMonData(pokemon, MON_DATA_IS_EGG)) + { + u16 species = SpeciesToNationalPokedexNum(GetMonData(pokemon, MON_DATA_SPECIES, NULL)); + GetNationalPokedexFlag(species, 2); + GetNationalPokedexFlag(species, 3); + } +} + +static void sub_804BA64(void) +{ + u8 mpId = GetMultiplayerId(); + if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000) + EnableNationalPokedex(); +} + void sub_804BA94(u8 a0, u8 a1) { u8 friendship; -- cgit v1.2.3 From f2675d17a7f7717f1f59fabf33225bec6c2a8826 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 18:29:35 -0400 Subject: sub_804B790 --- src/trade.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 4e4903e51..09c0ba4a1 100644 --- a/src/trade.c +++ b/src/trade.c @@ -149,7 +149,8 @@ struct TradeEwramSubstruct2 { /*0x0103*/ u8 unk_0103; /*0x0104*/ u16 unk_0104; /*0x0106*/ u16 unk_0106; - /*0x0108*/ u8 filler_0108[0x04]; + /*0x0108*/ u16 unk_0108; + /*0x010a*/ u16 unk_010a; /*0x010c*/ u16 unk_010c; /*0x010e*/ s16 unk_010e; /*0x0110*/ s16 unk_0110; @@ -246,6 +247,8 @@ void sub_804D80C(struct Sprite *); void sub_804E1DC(void); void sub_804BBCC(void); void sub_804D8E4(void); +void sub_804C164(void); +void sub_804C1A8(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3503,6 +3506,96 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804B210(void); + +void sub_804B228(void); + +void sub_804B2D0(u8, u8); + +void sub_804B790(void) +{ + u8 otName[11]; + switch (gMain.state) + { + case 0: + gUnknown_020297D8[0] = gSpecialVar_0x8005; + gUnknown_020297D8[1] = 6; + StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); + GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); + StringCopy(gLinkPlayers[1].name, otName); + REG_DISPCNT = 0; + ResetTasks(); + gUnknown_03004828 = &ewram_2010000.unk_0f000; + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(sub_804B210); + sub_804B228(); + SetUpWindowConfig(&gWindowConfig_81E717C); + InitWindowFromConfig(&gUnknown_03004828->window, &gWindowConfig_81E717C); + gUnknown_03004828->unk_0034 = SetTextWindowBaseTileNum(2); + LoadTextWindowGraphics(&gUnknown_03004828->window); + MenuZeroFillScreen(); + gLinkType = 0x1144; + gUnknown_03004828->isLinkTrade = FALSE; + gUnknown_03004828->linkData[12] = 0; + gUnknown_03004828->unk_00c4 = 0; + gUnknown_03004828->unk_0104 = 0x40; + gUnknown_03004828->unk_0106 = 0x40; + gUnknown_03004828->unk_0108 = 0; + gUnknown_03004828->unk_010a = 0; + gUnknown_03004828->unk_010c = 0x78; + gUnknown_03004828->unk_010e = 0x50; + gUnknown_03004828->unk_0118 = 0x100; + gUnknown_03004828->unk_011c = 0; + gUnknown_03004828->unk_00c0 = 0; + gMain.state = 5; + break; + case 5: + sub_804B2D0(0, 0); + gMain.state ++; + break; + case 6: + sub_804B2D0(0, 1); + gMain.state ++; + break; + case 7: + sub_804B2D0(1, 0); + gMain.state ++; + break; + case 8: + sub_804B2D0(1, 1); + gMain.state ++; + break; + case 9: + sub_804C164(); + LoadSpriteSheet(&gUnknown_0821594C); + LoadSpritePalette(&gUnknown_08215954); + REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5); + gMain.state ++; + break; + case 10: + gMain.state ++; + // fallthrough + case 11: + sub_804BBE8(5); + sub_804BBE8(0); + sub_804C1A8(); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gMain.state ++; + break; + case 12: + if (!gPaletteFade.active) + { + SetMainCallback2(sub_804BBCC); + } + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + static void sub_804BA18(u8 partyIdx) { struct Pokemon *pokemon = &gPlayerParty[partyIdx]; -- cgit v1.2.3 From d9058ba71efe5a6487c4817ed6d899514493a5a4 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 4 Sep 2017 19:22:28 -0400 Subject: nonmatching sub_804B41C --- src/trade.c | 524 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 514 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 09c0ba4a1..aa3296969 100644 --- a/src/trade.c +++ b/src/trade.c @@ -128,11 +128,12 @@ struct UnkStructF { struct TradeEwramSubstruct2 { /*0x0000*/ u8 filler_0000; /*0x0004*/ struct Window window; - /*0x0034*/ u8 unk_0034; + /*0x0034*/ u8 textWindowBaseTileNum; /*0x0038*/ struct Pokemon pokemon; /*0x009c*/ u8 unk_009c; /*0x009d*/ u8 unk_009d; - /*0x009e*/ u16 linkData[13]; + /*0x009e*/ u16 linkData[12]; + /*0x00b6*/ u16 unk_00b6; // Sprite indices /*0x00b8*/ u8 unk_00b8; /*0x00b9*/ u8 unk_00b9; @@ -249,6 +250,7 @@ void sub_804BBCC(void); void sub_804D8E4(void); void sub_804C164(void); void sub_804C1A8(void); +void sub_804DB84(void); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -3510,9 +3512,511 @@ void sub_804B210(void); void sub_804B228(void); +void sub_804B24C(void); + void sub_804B2D0(u8, u8); +#ifdef NONMATCHING +void sub_804B41C(void) +// Link trade init +{ + switch (gMain.state) + { + case 0: + REG_DISPCNT = 0; + ResetTasks(); + CloseLink(); + gUnknown_03004828 = &ewram_2010000.unk_0f000; + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(sub_804B210); + sub_804B228(); + SetUpWindowConfig(&gWindowConfig_81E6F84); + InitWindowFromConfig(&gUnknown_03004828->window, &gWindowConfig_81E6F84); + gUnknown_03004828->textWindowBaseTileNum = SetTextWindowBaseTileNum(2); + LoadTextWindowGraphics(&gUnknown_03004828->window); + MenuZeroFillScreen(); + gLinkType = 0x1144; + gMain.state ++; + LZDecompressVram(gUnknown_08D00000, (void *)VRAM); + CpuCopy16(gUnknown_08D00524, ewram, 0x1000); + DmaCopy16Defvars(3, ewram, (void *)BG_SCREEN_ADDR(5), 0x500); + LoadCompressedPalette(gUnknown_08D004E0, 0, 32); + gUnknown_03004828->unk_00b6 = 0; + gUnknown_03004828->unk_00c4 = 0; + gUnknown_03004828->isLinkTrade = TRUE; + gUnknown_03004828->unk_0104 = 0x40; + gUnknown_03004828->unk_0106 = 0x40; + gUnknown_03004828->unk_0108 = 0; + gUnknown_03004828->unk_010a = 0; + gUnknown_03004828->unk_010c = 0x78; + gUnknown_03004828->unk_010e = 0x50; + gUnknown_03004828->unk_0118 = 0x100; + gUnknown_03004828->unk_011c = 0; + break; + case 1: + OpenLink(); + gMain.state ++; + gUnknown_03004828->unk_00c0 = 0; + break; + case 2: + if (++ gUnknown_03004828->unk_00c0 > 60) + { + gUnknown_03004828->unk_00c0 = 0; + gMain.state ++; + } + break; + case 3: + if (IsLinkMaster()) + { + if (GetLinkPlayerCount_2() >= sub_800820C() && ++ gUnknown_03004828->unk_00c0 > 30) + { + sub_8007F4C(); + gMain.state ++; + } + } + else + { + gMain.state ++; + } + break; + case 4: + sub_804B24C(); + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) gMain.state ++; + break; + case 5: + gUnknown_03004828->unk_009c = 0; + gUnknown_03004828->unk_009d = 0; + gUnknown_03004828->unk_00bd = 0; + sub_804B2D0(0, 0); + gMain.state ++; + break; + case 6: + sub_804B2D0(0, 1); + gMain.state ++; + break; + case 7: + sub_804B2D0(1, 0); + gMain.state ++; + break; + case 8: + sub_804B2D0(1, 1); + gMain.state ++; + break; + case 9: + sub_804C164(); + LoadSpriteSheet(&gUnknown_0821594C); + LoadSpritePalette(&gUnknown_08215954); + REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5); + gMain.state ++; + break; + case 10: + gMain.state ++; + // fallthrough + case 11: + sub_804BBE8(5); + sub_804BBE8(0); + sub_804C1A8(); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gMain.state ++; + break; + case 12: + if (!gPaletteFade.active) + { + SetMainCallback2(sub_804DB84); + } + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} +#else +__attribute__((naked)) void sub_804B41C(void) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0x4\n" + "\tldr r1, _0804B43C @ =gMain\n" + "\tldr r2, _0804B440 @ =0x0000043c\n" + "\tadds r0, r1, r2\n" + "\tldrb r0, [r0]\n" + "\tadds r2, r1, 0\n" + "\tcmp r0, 0xC\n" + "\tbls _0804B430\n" + "\tb _0804B76E_break\n" + "_0804B430:\n" + "\tlsls r0, 2\n" + "\tldr r1, _0804B444 @ =_0804B448\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_0804B43C: .4byte gMain\n" + "_0804B440: .4byte 0x0000043c\n" + "_0804B444: .4byte _0804B448\n" + "\t.align 2, 0\n" + "_0804B448:\n" + "\t.4byte _0804B47C_case00\n" + "\t.4byte _0804B5AC_case01\n" + "\t.4byte _0804B5D4_case02\n" + "\t.4byte _0804B5FC_case03\n" + "\t.4byte _0804B648_case04\n" + "\t.4byte _0804B678_case05\n" + "\t.4byte _0804B6A8_case06\n" + "\t.4byte _0804B6B2_case07\n" + "\t.4byte _0804B6CC_case08\n" + "\t.4byte _0804B6E4_case09\n" + "\t.4byte _0804B71C_case10\n" + "\t.4byte _0804B726_case11\n" + "\t.4byte _0804B75C_case12\n" + "_0804B47C_case00:\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 19\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r1]\n" + "\tbl ResetTasks\n" + "\tbl CloseLink\n" + "\tldr r6, _0804B570 @ =gUnknown_03004828\n" + "\tldr r5, _0804B574 @ =0x0201f000\n" + "\tstr r5, [r6]\n" + "\tbl ResetSpriteData\n" + "\tbl FreeAllSpritePalettes\n" + "\tldr r0, _0804B578 @ =sub_804B210\n" + "\tbl SetVBlankCallback\n" + "\tbl sub_804B228\n" + "\tldr r4, _0804B57C @ =gWindowConfig_81E6F84\n" + "\tadds r0, r4, 0\n" + "\tbl SetUpWindowConfig\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x4\n" + "\tadds r1, r4, 0\n" + "\tbl InitWindowFromConfig\n" + "\tmovs r0, 0x2\n" + "\tbl SetTextWindowBaseTileNum\n" + "\tldr r1, [r6]\n" + "\tadds r1, 0x34\n" + "\tstrb r0, [r1]\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x4\n" + "\tbl LoadTextWindowGraphics\n" + "\tbl MenuZeroFillScreen\n" + "\tldr r1, _0804B580 @ =gLinkType\n" + "\tldr r4, _0804B584 @ =0x00001144\n" + "\tadds r0, r4, 0\n" + "\tstrh r0, [r1]\n" + "\tldr r1, _0804B588 @ =gMain\n" + "\tldr r0, _0804B58C @ =0x0000043c\n" + "\tadds r1, r0\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0804B590 @ =gUnknown_08D00000\n" + "\tmovs r1, 0xC0\n" + "\tlsls r1, 19\n" + "\tbl LZDecompressVram\n" + "\tldr r0, _0804B594 @ =gUnknown_08D00524\n" + "\tldr r1, _0804B598 @ =0xfffe1000\n" + "\tadds r5, r1\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 4\n" + "\tadds r1, r5, 0\n" + "\tbl CpuSet\n" + "\tldr r1, _0804B59C @ =0x06002800\n" + "\tldr r0, _0804B5A0 @ =0x040000d4\n" + "\tstr r5, [r0]\n" + "\tstr r1, [r0, 0x4]\n" + "\tldr r1, _0804B5A4 @ =0x80000280\n" + "\tstr r1, [r0, 0x8]\n" + "\tldr r0, [r0, 0x8]\n" + "\tldr r0, _0804B5A8 @ =gUnknown_08D004E0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x20\n" + "\tbl LoadCompressedPalette\n" + "\tldr r1, [r6]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0xB6\n" + "\tmovs r2, 0\n" + "\tstrh r2, [r0]\n" + "\tadds r0, 0xE\n" + "\tstrh r2, [r0]\n" + "\tmovs r4, 0x8F\n" + "\tlsls r4, 1\n" + "\tadds r1, r4\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tldr r3, [r6]\n" + "\tmovs r1, 0x82\n" + "\tlsls r1, 1\n" + "\tadds r0, r3, r1\n" + "\tmovs r1, 0x40\n" + "\tstrh r1, [r0]\n" + "\tsubs r4, 0x18\n" + "\tadds r0, r3, r4\n" + "\tstrh r1, [r0]\n" + "\tadds r1, 0xC8\n" + "\tadds r0, r3, r1\n" + "\tstrh r2, [r0]\n" + "\tadds r4, 0x4\n" + "\tadds r0, r3, r4\n" + "\tstrh r2, [r0]\n" + "\tmovs r0, 0x86\n" + "\tlsls r0, 1\n" + "\tadds r1, r3, r0\n" + "\tmovs r0, 0x78\n" + "\tstrh r0, [r1]\n" + "\tadds r4, 0x4\n" + "\tadds r1, r3, r4\n" + "\tmovs r0, 0x50\n" + "\tstrh r0, [r1]\n" + "\tadds r0, 0xC8\n" + "\tadds r1, r3, r0\n" + "\tsubs r0, 0x18\n" + "\tstrh r0, [r1]\n" + "\tmovs r1, 0x8E\n" + "\tlsls r1, 1\n" + "\tadds r0, r3, r1\n" + "\tstrh r2, [r0]\n" + "\tb _0804B76E_break\n" + "\t.align 2, 0\n" + "_0804B570: .4byte gUnknown_03004828\n" + "_0804B574: .4byte 0x0201f000\n" + "_0804B578: .4byte sub_804B210\n" + "_0804B57C: .4byte gWindowConfig_81E6F84\n" + "_0804B580: .4byte gLinkType\n" + "_0804B584: .4byte 0x00001144\n" + "_0804B588: .4byte gMain\n" + "_0804B58C: .4byte 0x0000043c\n" + "_0804B590: .4byte gUnknown_08D00000\n" + "_0804B594: .4byte gUnknown_08D00524\n" + "_0804B598: .4byte 0xfffe1000\n" + "_0804B59C: .4byte 0x06002800\n" + "_0804B5A0: .4byte 0x040000d4\n" + "_0804B5A4: .4byte 0x80000280\n" + "_0804B5A8: .4byte gUnknown_08D004E0\n" + "_0804B5AC_case01:\n" + "\tbl OpenLink\n" + "\tldr r1, _0804B5C8 @ =gMain\n" + "\tldr r2, _0804B5CC @ =0x0000043c\n" + "\tadds r1, r2\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tmovs r2, 0\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0804B5D0 @ =gUnknown_03004828\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0xC0\n" + "\tstr r2, [r0]\n" + "\tb _0804B76E_break\n" + "\t.align 2, 0\n" + "_0804B5C8: .4byte gMain\n" + "_0804B5CC: .4byte 0x0000043c\n" + "_0804B5D0: .4byte gUnknown_03004828\n" + "_0804B5D4_case02:\n" + "\tldr r0, _0804B5F4 @ =gUnknown_03004828\n" + "\tldr r0, [r0]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0xC0\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstr r0, [r1]\n" + "\tcmp r0, 0x3C\n" + "\tbhi _0804B5E8\n" + "\tb _0804B76E_break\n" + "_0804B5E8:\n" + "\tmovs r0, 0\n" + "\tstr r0, [r1]\n" + "\tldr r4, _0804B5F8 @ =0x0000043c\n" + "\tadds r1, r2, r4\n" + "\tb _0804B74C\n" + "\t.align 2, 0\n" + "_0804B5F4: .4byte gUnknown_03004828\n" + "_0804B5F8: .4byte 0x0000043c\n" + "_0804B5FC_case03:\n" + "\tbl IsLinkMaster\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0804B608\n" + "\tb _0804B746\n" + "_0804B608:\n" + "\tbl GetLinkPlayerCount_2\n" + "\tadds r4, r0, 0\n" + "\tbl sub_800820C\n" + "\tlsls r4, 24\n" + "\tlsls r0, 24\n" + "\tcmp r4, r0\n" + "\tbcs _0804B61C\n" + "\tb _0804B76E_break\n" + "_0804B61C:\n" + "\tldr r0, _0804B63C @ =gUnknown_03004828\n" + "\tldr r1, [r0]\n" + "\tadds r1, 0xC0\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstr r0, [r1]\n" + "\tcmp r0, 0x1E\n" + "\tbhi _0804B62E\n" + "\tb _0804B76E_break\n" + "_0804B62E:\n" + "\tbl sub_8007F4C\n" + "\tldr r1, _0804B640 @ =gMain\n" + "\tldr r0, _0804B644 @ =0x0000043c\n" + "\tadds r1, r0\n" + "\tb _0804B74C\n" + "\t.align 2, 0\n" + "_0804B63C: .4byte gUnknown_03004828\n" + "_0804B640: .4byte gMain\n" + "_0804B644: .4byte 0x0000043c\n" + "_0804B648_case04:\n" + "\tbl sub_804B24C\n" + "\tldr r0, _0804B66C @ =gReceivedRemoteLinkPlayers\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x1\n" + "\tbeq _0804B656\n" + "\tb _0804B76E_break\n" + "_0804B656:\n" + "\tbl IsLinkPlayerDataExchangeComplete\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbeq _0804B664\n" + "\tb _0804B76E_break\n" + "_0804B664:\n" + "\tldr r1, _0804B670 @ =gMain\n" + "\tldr r4, _0804B674 @ =0x0000043c\n" + "\tadds r1, r4\n" + "\tb _0804B74C\n" + "\t.align 2, 0\n" + "_0804B66C: .4byte gReceivedRemoteLinkPlayers\n" + "_0804B670: .4byte gMain\n" + "_0804B674: .4byte 0x0000043c\n" + "_0804B678_case05:\n" + "\tldr r2, _0804B69C @ =gUnknown_03004828\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0x9C\n" + "\tmovs r1, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0x9D\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0xBD\n" + "\tstrb r1, [r0]\n" + "\tmovs r0, 0\n" + "\tbl sub_804B2D0\n" + "\tldr r1, _0804B6A0 @ =gMain\n" + "\tldr r0, _0804B6A4 @ =0x0000043c\n" + "\tadds r1, r0\n" + "\tb _0804B74C\n" + "\t.align 2, 0\n" + "_0804B69C: .4byte gUnknown_03004828\n" + "_0804B6A0: .4byte gMain\n" + "_0804B6A4: .4byte 0x0000043c\n" + "_0804B6A8_case06:\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x1\n" + "\tbl sub_804B2D0\n" + "\tb _0804B746\n" + "_0804B6B2_case07:\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0\n" + "\tbl sub_804B2D0\n" + "\tldr r1, _0804B6C4 @ =gMain\n" + "\tldr r4, _0804B6C8 @ =0x0000043c\n" + "\tadds r1, r4\n" + "\tb _0804B74C\n" + "\t.align 2, 0\n" + "_0804B6C4: .4byte gMain\n" + "_0804B6C8: .4byte 0x0000043c\n" + "_0804B6CC_case08:\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x1\n" + "\tbl sub_804B2D0\n" + "\tldr r1, _0804B6DC @ =gMain\n" + "\tldr r0, _0804B6E0 @ =0x0000043c\n" + "\tadds r1, r0\n" + "\tb _0804B74C\n" + "\t.align 2, 0\n" + "_0804B6DC: .4byte gMain\n" + "_0804B6E0: .4byte 0x0000043c\n" + "_0804B6E4_case09:\n" + "\tbl sub_804C164\n" + "\tldr r0, _0804B704 @ =gUnknown_0821594C\n" + "\tbl LoadSpriteSheet\n" + "\tldr r0, _0804B708 @ =gUnknown_08215954\n" + "\tbl LoadSpritePalette\n" + "\tldr r1, _0804B70C @ =REG_BG1CNT\n" + "\tldr r2, _0804B710 @ =0x00000502\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tldr r1, _0804B714 @ =gMain\n" + "\tldr r4, _0804B718 @ =0x0000043c\n" + "\tadds r1, r4\n" + "\tb _0804B74C\n" + "\t.align 2, 0\n" + "_0804B704: .4byte gUnknown_0821594C\n" + "_0804B708: .4byte gUnknown_08215954\n" + "_0804B70C: .4byte REG_BG1CNT\n" + "_0804B710: .4byte 0x00000502\n" + "_0804B714: .4byte gMain\n" + "_0804B718: .4byte 0x0000043c\n" + "_0804B71C_case10:\n" + "\tldr r0, _0804B754 @ =0x0000043c\n" + "\tadds r1, r2, r0\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "_0804B726_case11:\n" + "\tmovs r0, 0x5\n" + "\tbl sub_804BBE8\n" + "\tmovs r0, 0\n" + "\tbl sub_804BBE8\n" + "\tbl sub_804C1A8\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0x10\n" + "\tmovs r3, 0\n" + "\tbl BeginNormalPaletteFade\n" + "_0804B746:\n" + "\tldr r1, _0804B758 @ =gMain\n" + "\tldr r2, _0804B754 @ =0x0000043c\n" + "\tadds r1, r2\n" + "_0804B74C:\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tb _0804B76E_break\n" + "\t.align 2, 0\n" + "_0804B754: .4byte 0x0000043c\n" + "_0804B758: .4byte gMain\n" + "_0804B75C_case12:\n" + "\tldr r0, _0804B788 @ =gPaletteFade\n" + "\tldrb r1, [r0, 0x7]\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _0804B76E_break\n" + "\tldr r0, _0804B78C @ =sub_804DB84\n" + "\tbl SetMainCallback2\n" + "_0804B76E_break:\n" + "\tbl RunTasks\n" + "\tbl AnimateSprites\n" + "\tbl BuildOamBuffer\n" + "\tbl UpdatePaletteFade\n" + "\tadd sp, 0x4\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804B788: .4byte gPaletteFade\n" + "_0804B78C: .4byte sub_804DB84"); +} +#endif + void sub_804B790(void) +// In-game trade init { u8 otName[11]; switch (gMain.state) @@ -3532,12 +4036,12 @@ void sub_804B790(void) sub_804B228(); SetUpWindowConfig(&gWindowConfig_81E717C); InitWindowFromConfig(&gUnknown_03004828->window, &gWindowConfig_81E717C); - gUnknown_03004828->unk_0034 = SetTextWindowBaseTileNum(2); + gUnknown_03004828->textWindowBaseTileNum = SetTextWindowBaseTileNum(2); LoadTextWindowGraphics(&gUnknown_03004828->window); MenuZeroFillScreen(); gLinkType = 0x1144; gUnknown_03004828->isLinkTrade = FALSE; - gUnknown_03004828->linkData[12] = 0; + gUnknown_03004828->unk_00b6 = 0; gUnknown_03004828->unk_00c4 = 0; gUnknown_03004828->unk_0104 = 0x40; gUnknown_03004828->unk_0106 = 0x40; @@ -3842,7 +4346,7 @@ bool8 sub_804C29C(void) case 10: StringExpandPlaceholders(gStringVar4, gTradeText_WillBeSent); - sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); gUnknown_03004828->unk_00c4 = 11; gUnknown_03004828->unk_00c0 = 0; break; @@ -3853,7 +4357,7 @@ bool8 sub_804C29C(void) gUnknown_03004828->unk_00c4 ++; ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); StringExpandPlaceholders(gStringVar4, gTradeText_ByeBye); - sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); } break; case 12: @@ -4200,7 +4704,7 @@ bool8 sub_804C29C(void) REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); StringExpandPlaceholders(gStringVar4, gTradeText_SentOverPoke); - sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); gUnknown_03004828->unk_00c4 ++; gUnknown_03004828->unk_00c0 = 0; break; @@ -4214,7 +4718,7 @@ bool8 sub_804C29C(void) gUnknown_03004828->unk_00c4 ++; ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); StringExpandPlaceholders(gStringVar4, gTradeText_TakeGoodCare); - sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); gUnknown_03004828->unk_00c0 = 0; } break; @@ -4536,7 +5040,7 @@ static void sub_804DC88(void) gMain.state ++; ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); StringExpandPlaceholders(gStringVar4, gOtherText_LinkStandby2); - sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->unk_0034, 2, 15); + sub_8003460(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); break; case 1: sub_80084A4(); @@ -4563,7 +5067,7 @@ static void sub_804DC88(void) case 2: gMain.state = 50; ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); - sub_8003460(&gUnknown_03004828->window, gSystemText_Saving, gUnknown_03004828->unk_0034, 2, 15); + sub_8003460(&gUnknown_03004828->window, gSystemText_Saving, gUnknown_03004828->textWindowBaseTileNum, 2, 15); break; case 50: SetSecretBase2Field_9_AndHideBG(); -- cgit v1.2.3 From 67f39a3b7363fc74539b15a023c340b45b91af14 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 19:44:44 -0400 Subject: Remove redundant declaration from pokedex.c --- src/pokedex.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/pokedex.c b/src/pokedex.c index c132635cb..26a9fdce4 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -150,7 +150,6 @@ extern const u8 gUnknown_08E96738[]; extern const u8 gUnknown_08E96888[]; extern const u8 gUnknown_08E96994[]; extern const u8 gUnknown_08E9C6DC[]; -extern const u8 gUnknown_08D00524[]; extern const u8 gUnknown_08E96BD4[]; extern const u8 gUnknown_08E96ACC[]; extern const u8 gUnknown_08E96B58[]; -- cgit v1.2.3 From 12c4614cc396830f62c02c65547a3465829be5c8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 20:27:26 -0400 Subject: sub_804B2D0 --- src/trade.c | 112 +++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 73 insertions(+), 39 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index aa3296969..2532e6e89 100644 --- a/src/trade.c +++ b/src/trade.c @@ -35,6 +35,7 @@ #include "evolution_scene.h" #include "pokeball.h" #include "pokedex.h" +#include "field_effect.h" #include "trade.h" #ifdef ENGLISH @@ -135,8 +136,7 @@ struct TradeEwramSubstruct2 { /*0x009e*/ u16 linkData[12]; /*0x00b6*/ u16 unk_00b6; // Sprite indices - /*0x00b8*/ u8 unk_00b8; - /*0x00b9*/ u8 unk_00b9; + /*0x00b8*/ u8 unk_00b8[2]; /*0x00ba*/ u8 unk_00ba; /*0x00bb*/ u8 unk_00bb; /*0x00bc*/ u8 unk_00bc; @@ -162,8 +162,7 @@ struct TradeEwramSubstruct2 { /*0x011a*/ u16 unk_011a; /*0x011c*/ u16 unk_011c; /*0x011e*/ u8 isLinkTrade; - /*0x0120*/ u16 unk_0120; - /*0x0122*/ u16 unk_0122; + /*0x0120*/ u16 unk_0120[2]; /*0x0124*/ u16 unk_0124; }; @@ -3514,7 +3513,42 @@ void sub_804B228(void); void sub_804B24C(void); -void sub_804B2D0(u8, u8); +void sub_804B2D0(u8 whichParty, u8 a1) +{ + u8 v0; + struct Pokemon *pokemon; + u16 species; + u32 personality; + + v0 = 0; + pokemon = NULL; + if (whichParty == 0) + { + pokemon = &gPlayerParty[gUnknown_020297D8[0]]; + v0 = 1; + } + if (whichParty == 1) + { + pokemon = &gEnemyParty[gUnknown_020297D8[1] % 6]; + v0 = 3; + } + switch (a1) + { + case 0: + species = GetMonData(pokemon, MON_DATA_SPECIES2); + personality = GetMonData(pokemon, MON_DATA_PERSONALITY); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)ewram, gUnknown_081FAF4C[whichParty * 2 + 1], species, personality); + LoadCompressedObjectPalette(sub_8040990(pokemon)); + gUnknown_03004828->unk_0120[whichParty] = species; + break; + case 1: + GetMonSpriteTemplate_803C56C(sub_8040990(pokemon)->tag, v0); + gUnknown_03004828->unk_00b8[whichParty] = CreateSprite(&gUnknown_02024E8C, 0x78, 0x3c, 0x6); + gSprites[gUnknown_03004828->unk_00b8[whichParty]].invisible = TRUE; + gSprites[gUnknown_03004828->unk_00b8[whichParty]].callback = SpriteCallbackDummy; + break; + } +} #ifdef NONMATCHING void sub_804B41C(void) @@ -4323,9 +4357,9 @@ bool8 sub_804C29C(void) switch (gUnknown_03004828->unk_00c4) { case 0: - gSprites[gUnknown_03004828->unk_00b8].invisible = FALSE; - gSprites[gUnknown_03004828->unk_00b8].pos2.x = -0xb4; - gSprites[gUnknown_03004828->unk_00b8].pos2.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120].y_offset; + gSprites[gUnknown_03004828->unk_00b8[0]].invisible = FALSE; + gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x = -0xb4; + gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120[0]].y_offset; gUnknown_03004828->unk_00c4 ++; gUnknown_03004828->unk_0124 = GetCurrentMapMusic(); PlayBGM(BGM_SHINKA); @@ -4333,12 +4367,12 @@ bool8 sub_804C29C(void) case 1: if (gUnknown_03004828->unk_0116 > 0) { - gSprites[gUnknown_03004828->unk_00b8].pos2.x += 3; + gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x += 3; gUnknown_03004828->unk_0116 -= 3; } else { - gSprites[gUnknown_03004828->unk_00b8].pos2.x = 0; + gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x = 0; gUnknown_03004828->unk_0116 = 0; gUnknown_03004828->unk_00c4 = 10; } @@ -4353,7 +4387,7 @@ bool8 sub_804C29C(void) case 11: if (++gUnknown_03004828->unk_00c0 == 80) { - gUnknown_03004828->unk_0102 = sub_8047580(gUnknown_03004828->unk_00b8, gSprites[gUnknown_03004828->unk_00b8].oam.paletteNum, 0x78, 0x20, 0x2, 0x1, 0x14, 0xfffff); + gUnknown_03004828->unk_0102 = sub_8047580(gUnknown_03004828->unk_00b8[0], gSprites[gUnknown_03004828->unk_00b8[0]].oam.paletteNum, 0x78, 0x20, 0x2, 0x1, 0x14, 0xfffff); gUnknown_03004828->unk_00c4 ++; ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); StringExpandPlaceholders(gStringVar4, gTradeText_ByeBye); @@ -4510,40 +4544,40 @@ bool8 sub_804C29C(void) gUnknown_03004828->unk_00c4 ++; break; case 37: - if (!sub_8040A3C(gUnknown_03004828->unk_0120)) + if (!sub_8040A3C(gUnknown_03004828->unk_0120[0])) { - gSprites[gUnknown_03004828->unk_00b8].affineAnims = gSpriteAffineAnimTable_8215AC0; - gSprites[gUnknown_03004828->unk_00b8].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[gUnknown_03004828->unk_00b8], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8], 0); + gSprites[gUnknown_03004828->unk_00b8[0]].affineAnims = gSpriteAffineAnimTable_8215AC0; + gSprites[gUnknown_03004828->unk_00b8[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[gUnknown_03004828->unk_00b8[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[0]], 0); } else { - StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8], 0); + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[0]], 0); } - StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b9], 0); - gSprites[gUnknown_03004828->unk_00b8].pos1.x = 0x3c; - gSprites[gUnknown_03004828->unk_00b9].pos1.x = 0xb4; - gSprites[gUnknown_03004828->unk_00b8].pos1.y = 0xc0; - gSprites[gUnknown_03004828->unk_00b9].pos1.y = -0x20; - gSprites[gUnknown_03004828->unk_00b8].invisible = FALSE; - gSprites[gUnknown_03004828->unk_00b9].invisible = FALSE; + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[1]], 0); + gSprites[gUnknown_03004828->unk_00b8[0]].pos1.x = 0x3c; + gSprites[gUnknown_03004828->unk_00b8[1]].pos1.x = 0xb4; + gSprites[gUnknown_03004828->unk_00b8[0]].pos1.y = 0xc0; + gSprites[gUnknown_03004828->unk_00b8[1]].pos1.y = -0x20; + gSprites[gUnknown_03004828->unk_00b8[0]].invisible = FALSE; + gSprites[gUnknown_03004828->unk_00b8[1]].invisible = FALSE; gUnknown_03004828->unk_00c4 ++; break; case 38: - gSprites[gUnknown_03004828->unk_00b8].pos2.y -= 3; - gSprites[gUnknown_03004828->unk_00b9].pos2.y += 3; - if (-0xa0 > gSprites[gUnknown_03004828->unk_00b8].pos2.y && gSprites[gUnknown_03004828->unk_00b8].pos2.y >= -0xa3) + gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y -= 3; + gSprites[gUnknown_03004828->unk_00b8[1]].pos2.y += 3; + if (-0xa0 > gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y && gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y >= -0xa3) { PlaySE(SE_TK_WARPIN); } - if (gSprites[gUnknown_03004828->unk_00b8].pos2.y < -0xde) + if (gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y < -0xde) { gSprites[gUnknown_03004828->unk_00ba].data1 = 0; gSprites[gUnknown_03004828->unk_00bb].data1 = 0; gUnknown_03004828->unk_00c4 ++; - gSprites[gUnknown_03004828->unk_00b8].invisible = TRUE; - gSprites[gUnknown_03004828->unk_00b9].invisible = TRUE; + gSprites[gUnknown_03004828->unk_00b8[0]].invisible = TRUE; + gSprites[gUnknown_03004828->unk_00b8[1]].invisible = TRUE; BlendPalettes(1, 0, 0xffff); } break; @@ -4691,11 +4725,11 @@ bool8 sub_804C29C(void) } break; case 66: - gSprites[gUnknown_03004828->unk_00b9].pos1.x = 0x78; - gSprites[gUnknown_03004828->unk_00b9].pos1.y = gMonFrontPicCoords[gUnknown_03004828->unk_0122].y_offset + 60; - gSprites[gUnknown_03004828->unk_00b9].pos2.x = 0; - gSprites[gUnknown_03004828->unk_00b9].pos2.y = 0; - CreatePokeballSprite(gUnknown_03004828->unk_00b9, gSprites[gUnknown_03004828->unk_00b9].oam.paletteNum, 0x78, 0x54, 2, 1, 0x14, 0xfffff); + gSprites[gUnknown_03004828->unk_00b8[1]].pos1.x = 0x78; + gSprites[gUnknown_03004828->unk_00b8[1]].pos1.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120[1]].y_offset + 60; + gSprites[gUnknown_03004828->unk_00b8[1]].pos2.x = 0; + gSprites[gUnknown_03004828->unk_00b8[1]].pos2.y = 0; + CreatePokeballSprite(gUnknown_03004828->unk_00b8[1], gSprites[gUnknown_03004828->unk_00b8[1]].oam.paletteNum, 0x78, 0x54, 2, 1, 0x14, 0xfffff); FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_0103]); DestroySprite(&gSprites[gUnknown_03004828->unk_0103]); gUnknown_03004828->unk_00c4 ++; @@ -4747,7 +4781,7 @@ bool8 sub_804C29C(void) gUnknown_03005E94 = sub_804BBCC; evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b9, gUnknown_020297D8[0]); + TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b8[1], gUnknown_020297D8[0]); gUnknown_03004828->unk_00c4 ++; break; case 73: @@ -4779,7 +4813,7 @@ void sub_804D588(void) gUnknown_03005E94 = sub_804DC88; evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b9, gUnknown_020297D8[0]); + TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b8[1], gUnknown_020297D8[0]); else SetMainCallback2(sub_804DC88); gUnknown_020297D8[0] = 255; @@ -4999,8 +5033,8 @@ void sub_804DB84(void) { if (sub_804C29C() == TRUE) { - DestroySprite(&gSprites[gUnknown_03004828->unk_00b8]); - FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_00b9]); + DestroySprite(&gSprites[gUnknown_03004828->unk_00b8[0]]); + FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_00b8[1]]); sub_804BA94(gUnknown_020297D8[0], gUnknown_020297D8[1] % 6); gUnknown_03004828->linkData[0] = 0xabcd; gUnknown_03004828->unk_00bd = 1; -- cgit v1.2.3 From 5c7bef25af764b3abe71ba421f603b092be6cb52 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 20:31:11 -0400 Subject: sub_804B2B0 --- src/trade.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 2532e6e89..c6933d8a0 100644 --- a/src/trade.c +++ b/src/trade.c @@ -224,7 +224,7 @@ static void sub_804D7AC(struct Sprite *); /*static*/ bool8 sub_804C29C(void); /*static*/ void sub_804DC18(void); /*static*/ void sub_804BB78(void); -/*static*/ bool8 sub_804B2B0(void); +static u8 sub_804B2B0(void); static void sub_804E144(void); static void sub_804E1A0(u8); /*static*/ void sub_804B790(void); @@ -3513,6 +3513,13 @@ void sub_804B228(void); void sub_804B24C(void); +static u8 sub_804B2B0(void) +{ + if (gReceivedRemoteLinkPlayers) + return GetMultiplayerId(); + return 0; +} + void sub_804B2D0(u8 whichParty, u8 a1) { u8 v0; @@ -5050,9 +5057,9 @@ void sub_804DB84(void) void sub_804DC18(void) { - u8 flag = sub_804B2B0(); + u8 mpId = sub_804B2B0(); sub_804D63C(); - if (!flag && gUnknown_03004828->unk_009c == 1 && gUnknown_03004828->unk_009d == 1) + if (mpId == 0 && gUnknown_03004828->unk_009c == 1 && gUnknown_03004828->unk_009d == 1) { gUnknown_03004828->linkData[0] = 0xdcba; Trade_SendData(gUnknown_03004828); -- cgit v1.2.3 From 3b274627db0af5edb2b37cdd84effff6358a4cf3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 20:36:12 -0400 Subject: sub_804B24C --- src/trade.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index c6933d8a0..72f149dfd 100644 --- a/src/trade.c +++ b/src/trade.c @@ -133,7 +133,10 @@ struct TradeEwramSubstruct2 { /*0x0038*/ struct Pokemon pokemon; /*0x009c*/ u8 unk_009c; /*0x009d*/ u8 unk_009d; - /*0x009e*/ u16 linkData[12]; + /*0x009e*/ u16 linkData[10]; + /*0x00b2*/ u8 unk_00b2; + /*0x00b3*/ u8 unk_00b3; + /*0x00b4*/ u16 unk_00b4; /*0x00b6*/ u16 unk_00b6; // Sprite indices /*0x00b8*/ u8 unk_00b8[2]; @@ -3511,7 +3514,24 @@ void sub_804B210(void); void sub_804B228(void); -void sub_804B24C(void); +void sub_804B24C(void) +{ + if (gUnknown_03004828->unk_00b2 == gUnknown_03004828->unk_00b3) + { + gUnknown_03004828->unk_00b4 ++; + } + else + { + gUnknown_03004828->unk_00b4 = 0; + } + if (gUnknown_03004828->unk_00b4 > 0xb4) + { + gUnknown_03004828->unk_00b4 = 0; + gUnknown_03004828->unk_00b3 = 0; + gUnknown_03004828->unk_00b2 = 0; + } + gUnknown_03004828->unk_00b3 = gUnknown_03004828->unk_00b2; +} static u8 sub_804B2B0(void) { -- cgit v1.2.3 From 83fe9cb4947301a0472628500ff9961a54d8c456 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 20:37:47 -0400 Subject: sub_804B210 and sub_804B228 --- src/trade.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 72f149dfd..777d37d27 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3510,9 +3510,22 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); -void sub_804B210(void); +void sub_804B1BC(void); -void sub_804B228(void); +void sub_804B210(void) +{ + sub_804B1BC(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_804B228(void) +{ + gUnknown_03004828->unk_00b4 = 0; + gUnknown_03004828->unk_00b2 = 0; + gUnknown_03004828->unk_00b3 = 0; +} void sub_804B24C(void) { -- cgit v1.2.3 From d4d324a41652abe19b6f24417713d8cd8efdb421 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 21:04:56 -0400 Subject: nonmatching sub_804B1BC --- src/trade.c | 196 +++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 128 insertions(+), 68 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 777d37d27..1554380bd 100644 --- a/src/trade.c +++ b/src/trade.c @@ -139,7 +139,7 @@ struct TradeEwramSubstruct2 { /*0x00b4*/ u16 unk_00b4; /*0x00b6*/ u16 unk_00b6; // Sprite indices - /*0x00b8*/ u8 unk_00b8[2]; + /*0x00b8*/ u8 pokePicSpriteIdxs[2]; /*0x00ba*/ u8 unk_00ba; /*0x00bb*/ u8 unk_00bb; /*0x00bc*/ u8 unk_00bc; @@ -157,15 +157,15 @@ struct TradeEwramSubstruct2 { /*0x010a*/ u16 unk_010a; /*0x010c*/ u16 unk_010c; /*0x010e*/ s16 unk_010e; - /*0x0110*/ s16 unk_0110; - /*0x0112*/ u16 unk_0112; - /*0x0114*/ u16 unk_0114; - /*0x0116*/ s16 unk_0116; + /*0x0110*/ s16 bg1vofs; + /*0x0112*/ s16 bg1hofs; + /*0x0114*/ s16 bg2vofs; + /*0x0116*/ s16 bg2hofs; /*0x0118*/ u16 unk_0118; /*0x011a*/ u16 unk_011a; /*0x011c*/ u16 unk_011c; /*0x011e*/ u8 isLinkTrade; - /*0x0120*/ u16 unk_0120[2]; + /*0x0120*/ u16 tradeSpecies[2]; /*0x0124*/ u16 unk_0124; }; @@ -3510,7 +3510,67 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); -void sub_804B1BC(void); +#ifdef NONMATCHING +void sub_804B1BC(void) +{ + REG_BG1VOFS = gUnknown_03004828->bg1vofs; + REG_BG1HOFS = gUnknown_03004828->bg1hofs; + if ((REG_DISPCNT & 7) == DISPCNT_MODE_0) + { + REG_BG2VOFS = gUnknown_03004828->bg2vofs; + REG_BG2HOFS = gUnknown_03004828->bg2hofs; + } + else + { + sub_804B128(); + } +} +#else +__attribute__((naked)) void sub_804B1BC(void) +{ + asm_unified("\tpush {lr}\n" + "\tldr r1, _0804B1FC @ =REG_BG1VOFS\n" + "\tldr r0, _0804B200 @ =gUnknown_03004828\n" + "\tldr r2, [r0]\n" + "\tmovs r3, 0x88\n" + "\tlsls r3, 1\n" + "\tadds r0, r2, r3\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r1]\n" + "\tsubs r1, 0x2\n" + "\tadds r3, 0x2\n" + "\tadds r0, r2, r3\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r1]\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 19\n" + "\tldrh r0, [r0]\n" + "\tmovs r1, 0x7\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _0804B208\n" + "\tldr r1, _0804B204 @ =REG_BG2VOFS\n" + "\tadds r3, 0x2\n" + "\tadds r0, r2, r3\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r1]\n" + "\tsubs r1, 0x2\n" + "\tadds r3, 0x2\n" + "\tadds r0, r2, r3\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r1]\n" + "\tb _0804B20C\n" + "\t.align 2, 0\n" + "_0804B1FC: .4byte REG_BG1VOFS\n" + "_0804B200: .4byte gUnknown_03004828\n" + "_0804B204: .4byte REG_BG2VOFS\n" + "_0804B208:\n" + "\tbl sub_804B128\n" + "_0804B20C:\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif void sub_804B210(void) { @@ -3579,13 +3639,13 @@ void sub_804B2D0(u8 whichParty, u8 a1) personality = GetMonData(pokemon, MON_DATA_PERSONALITY); HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)ewram, gUnknown_081FAF4C[whichParty * 2 + 1], species, personality); LoadCompressedObjectPalette(sub_8040990(pokemon)); - gUnknown_03004828->unk_0120[whichParty] = species; + gUnknown_03004828->tradeSpecies[whichParty] = species; break; case 1: GetMonSpriteTemplate_803C56C(sub_8040990(pokemon)->tag, v0); - gUnknown_03004828->unk_00b8[whichParty] = CreateSprite(&gUnknown_02024E8C, 0x78, 0x3c, 0x6); - gSprites[gUnknown_03004828->unk_00b8[whichParty]].invisible = TRUE; - gSprites[gUnknown_03004828->unk_00b8[whichParty]].callback = SpriteCallbackDummy; + gUnknown_03004828->pokePicSpriteIdxs[whichParty] = CreateSprite(&gUnknown_02024E8C, 0x78, 0x3c, 0x6); + gSprites[gUnknown_03004828->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; break; } } @@ -4257,14 +4317,14 @@ void sub_804BBE8(u8 a0) LoadPalette(gUnknown_0820C9F8, 0x10, 0xa0); DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(1), 0x1300, 0x1000); DmaCopy16Defvars(3, gUnknown_0820F798, (void *)BG_SCREEN_ADDR(18), 0x1000); - gUnknown_03004828->unk_0114 = 0; - gUnknown_03004828->unk_0116 = 0xb4; + gUnknown_03004828->bg2vofs = 0; + gUnknown_03004828->bg2hofs = 0xb4; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256; break; case 1: - gUnknown_03004828->unk_0112 = 0; - gUnknown_03004828->unk_0110 = 0x15c; + gUnknown_03004828->bg1hofs = 0; + gUnknown_03004828->bg1vofs = 0x15c; REG_BG1VOFS = 0x15c; REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512; @@ -4273,8 +4333,8 @@ void sub_804BBE8(u8 a0) REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; break; case 2: - gUnknown_03004828->unk_0110 = 0; - gUnknown_03004828->unk_0112 = 0; + gUnknown_03004828->bg1vofs = 0; + gUnknown_03004828->bg1hofs = 0; REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; DmaCopy16Defvars(3, gUnknown_08211798, (void *)BG_SCREEN_ADDR(5), 0x800); break; @@ -4300,8 +4360,8 @@ void sub_804BBE8(u8 a0) DmaCopy16Defvars(3, gUnknown_08215778, (void *)BG_SCREEN_ADDR(18), 0x100); break; case 5: - gUnknown_03004828->unk_0110 = 0; - gUnknown_03004828->unk_0112 = 0; + gUnknown_03004828->bg1vofs = 0; + gUnknown_03004828->bg1hofs = 0; REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5); LZDecompressVram(gUnknown_08D00000, (void *)BG_CHAR_ADDR(0)); CpuCopy16(gUnknown_08D00524, buffer = (u16 *)ewram, 0x1000); @@ -4326,8 +4386,8 @@ void sub_804BBE8(u8 a0) DmaCopy16Defvars(3, gUnknown_08215778, (void *)BG_SCREEN_ADDR(18), 0x100); break; case 7: - gUnknown_03004828->unk_0114 = 0; - gUnknown_03004828->unk_0116 = 0; + gUnknown_03004828->bg2vofs = 0; + gUnknown_03004828->bg2hofs = 0; REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256; LoadPalette(gUnknown_0820C9F8, 0x10, 0xa0); DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(1), 0x1300, 0x1000); @@ -4340,7 +4400,7 @@ void sub_804C0F8(u8 a0) { if (a0 == 0) { - if (gUnknown_03004828->unk_0110 < 0x10a) + if (gUnknown_03004828->bg1vofs < 0x10a) { gUnknown_03004828->unk_010e ++; gUnknown_03004828->unk_011c += 64; @@ -4397,23 +4457,23 @@ bool8 sub_804C29C(void) switch (gUnknown_03004828->unk_00c4) { case 0: - gSprites[gUnknown_03004828->unk_00b8[0]].invisible = FALSE; - gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x = -0xb4; - gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120[0]].y_offset; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.x = -0xb4; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[gUnknown_03004828->tradeSpecies[0]].y_offset; gUnknown_03004828->unk_00c4 ++; gUnknown_03004828->unk_0124 = GetCurrentMapMusic(); PlayBGM(BGM_SHINKA); break; case 1: - if (gUnknown_03004828->unk_0116 > 0) + if (gUnknown_03004828->bg2hofs > 0) { - gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x += 3; - gUnknown_03004828->unk_0116 -= 3; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.x += 3; + gUnknown_03004828->bg2hofs -= 3; } else { - gSprites[gUnknown_03004828->unk_00b8[0]].pos2.x = 0; - gUnknown_03004828->unk_0116 = 0; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.x = 0; + gUnknown_03004828->bg2hofs = 0; gUnknown_03004828->unk_00c4 = 10; } break; @@ -4427,7 +4487,7 @@ bool8 sub_804C29C(void) case 11: if (++gUnknown_03004828->unk_00c0 == 80) { - gUnknown_03004828->unk_0102 = sub_8047580(gUnknown_03004828->unk_00b8[0], gSprites[gUnknown_03004828->unk_00b8[0]].oam.paletteNum, 0x78, 0x20, 0x2, 0x1, 0x14, 0xfffff); + gUnknown_03004828->unk_0102 = sub_8047580(gUnknown_03004828->pokePicSpriteIdxs[0], gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].oam.paletteNum, 0x78, 0x20, 0x2, 0x1, 0x14, 0xfffff); gUnknown_03004828->unk_00c4 ++; ZeroFillWindowRect(&gUnknown_03004828->window, 0, 0, 29, 19); StringExpandPlaceholders(gStringVar4, gTradeText_ByeBye); @@ -4501,11 +4561,11 @@ bool8 sub_804C29C(void) } break; case 26: - if (-- gUnknown_03004828->unk_0110 == 0x13C) + if (-- gUnknown_03004828->bg1vofs == 0x13C) { gUnknown_03004828->unk_00c4 ++; } - if (gUnknown_03004828->unk_0110 == 0x148) + if (gUnknown_03004828->bg1vofs == 0x148) { gUnknown_03004828->unk_00bc = CreateSprite(&gSpriteTemplate_8215A30, 0x80, 0x41, 0); } @@ -4517,7 +4577,7 @@ bool8 sub_804C29C(void) gUnknown_03004828->unk_00c4 ++; break; case 28: - if ((gUnknown_03004828->unk_0110 -= 2) == 0xA6) + if ((gUnknown_03004828->bg1vofs -= 2) == 0xA6) { gUnknown_03004828->unk_00c4 = 200; } @@ -4584,40 +4644,40 @@ bool8 sub_804C29C(void) gUnknown_03004828->unk_00c4 ++; break; case 37: - if (!sub_8040A3C(gUnknown_03004828->unk_0120[0])) + if (!sub_8040A3C(gUnknown_03004828->tradeSpecies[0])) { - gSprites[gUnknown_03004828->unk_00b8[0]].affineAnims = gSpriteAffineAnimTable_8215AC0; - gSprites[gUnknown_03004828->unk_00b8[0]].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[gUnknown_03004828->unk_00b8[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[0]], 0); + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].affineAnims = gSpriteAffineAnimTable_8215AC0; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]], 0); } else { - StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[0]], 0); + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]], 0); } - StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_00b8[1]], 0); - gSprites[gUnknown_03004828->unk_00b8[0]].pos1.x = 0x3c; - gSprites[gUnknown_03004828->unk_00b8[1]].pos1.x = 0xb4; - gSprites[gUnknown_03004828->unk_00b8[0]].pos1.y = 0xc0; - gSprites[gUnknown_03004828->unk_00b8[1]].pos1.y = -0x20; - gSprites[gUnknown_03004828->unk_00b8[0]].invisible = FALSE; - gSprites[gUnknown_03004828->unk_00b8[1]].invisible = FALSE; + StartSpriteAffineAnim(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]], 0); + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos1.x = 0x3c; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos1.x = 0xb4; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos1.y = 0xc0; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos1.y = -0x20; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].invisible = FALSE; gUnknown_03004828->unk_00c4 ++; break; case 38: - gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y -= 3; - gSprites[gUnknown_03004828->unk_00b8[1]].pos2.y += 3; - if (-0xa0 > gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y && gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y >= -0xa3) + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos2.y += 3; + if (-0xa0 > gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y && gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y >= -0xa3) { PlaySE(SE_TK_WARPIN); } - if (gSprites[gUnknown_03004828->unk_00b8[0]].pos2.y < -0xde) + if (gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y < -0xde) { gSprites[gUnknown_03004828->unk_00ba].data1 = 0; gSprites[gUnknown_03004828->unk_00bb].data1 = 0; gUnknown_03004828->unk_00c4 ++; - gSprites[gUnknown_03004828->unk_00b8[0]].invisible = TRUE; - gSprites[gUnknown_03004828->unk_00b8[1]].invisible = TRUE; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].invisible = TRUE; BlendPalettes(1, 0, 0xffff); } break; @@ -4637,7 +4697,7 @@ bool8 sub_804C29C(void) { gUnknown_03004828->unk_00c4 ++; sub_804BBE8(1); - gUnknown_03004828->unk_0110 = 0xa6; + gUnknown_03004828->bg1vofs = 0xa6; gUnknown_03004828->unk_00ba = CreateSprite(&gSpriteTemplate_82159BC, 0x80, -0x14, 3); gUnknown_03004828->unk_00bb = CreateSprite(&gSpriteTemplate_82159FC, 0x80, -0x14, 0); StartSpriteAnim(&gSprites[gUnknown_03004828->unk_00bb], 1); @@ -4666,9 +4726,9 @@ bool8 sub_804C29C(void) break; case 44: sub_804C0F8(1); - if ((gUnknown_03004828->unk_0110 += 2) > 0x13c) + if ((gUnknown_03004828->bg1vofs += 2) > 0x13c) { - gUnknown_03004828->unk_0110 = 0x13c; + gUnknown_03004828->bg1vofs = 0x13c; gUnknown_03004828->unk_00c4 ++; } break; @@ -4685,12 +4745,12 @@ bool8 sub_804C29C(void) } break; case 47: - if (++ gUnknown_03004828->unk_0110 > 0x15c) + if (++ gUnknown_03004828->bg1vofs > 0x15c) { - gUnknown_03004828->unk_0110 = 0x15c; + gUnknown_03004828->bg1vofs = 0x15c; gUnknown_03004828->unk_00c4 ++; } - if (gUnknown_03004828->unk_0110 == 0x148) + if (gUnknown_03004828->bg1vofs == 0x148) gUnknown_03004828->unk_00bc = CreateSprite(&gSpriteTemplate_8215A30, 0x80, 0x41, 0); gSprites[gUnknown_03004828->unk_00bc].callback = sub_804B0E0; break; @@ -4765,11 +4825,11 @@ bool8 sub_804C29C(void) } break; case 66: - gSprites[gUnknown_03004828->unk_00b8[1]].pos1.x = 0x78; - gSprites[gUnknown_03004828->unk_00b8[1]].pos1.y = gMonFrontPicCoords[gUnknown_03004828->unk_0120[1]].y_offset + 60; - gSprites[gUnknown_03004828->unk_00b8[1]].pos2.x = 0; - gSprites[gUnknown_03004828->unk_00b8[1]].pos2.y = 0; - CreatePokeballSprite(gUnknown_03004828->unk_00b8[1], gSprites[gUnknown_03004828->unk_00b8[1]].oam.paletteNum, 0x78, 0x54, 2, 1, 0x14, 0xfffff); + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos1.x = 0x78; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[gUnknown_03004828->tradeSpecies[1]].y_offset + 60; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].pos2.y = 0; + CreatePokeballSprite(gUnknown_03004828->pokePicSpriteIdxs[1], gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].oam.paletteNum, 0x78, 0x54, 2, 1, 0x14, 0xfffff); FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_0103]); DestroySprite(&gSprites[gUnknown_03004828->unk_0103]); gUnknown_03004828->unk_00c4 ++; @@ -4821,7 +4881,7 @@ bool8 sub_804C29C(void) gUnknown_03005E94 = sub_804BBCC; evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b8[1], gUnknown_020297D8[0]); + TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->pokePicSpriteIdxs[1], gUnknown_020297D8[0]); gUnknown_03004828->unk_00c4 ++; break; case 73: @@ -4853,7 +4913,7 @@ void sub_804D588(void) gUnknown_03005E94 = sub_804DC88; evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_020297D8[0]], TRUE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->unk_00b8[1], gUnknown_020297D8[0]); + TradeEvolutionScene(&gPlayerParty[gUnknown_020297D8[0]], evoTarget, gUnknown_03004828->pokePicSpriteIdxs[1], gUnknown_020297D8[0]); else SetMainCallback2(sub_804DC88); gUnknown_020297D8[0] = 255; @@ -5073,8 +5133,8 @@ void sub_804DB84(void) { if (sub_804C29C() == TRUE) { - DestroySprite(&gSprites[gUnknown_03004828->unk_00b8[0]]); - FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->unk_00b8[1]]); + DestroySprite(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]]); + FreeSpriteOamMatrix(&gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]]); sub_804BA94(gUnknown_020297D8[0], gUnknown_020297D8[1] % 6); gUnknown_03004828->linkData[0] = 0xabcd; gUnknown_03004828->unk_00bd = 1; -- cgit v1.2.3 From 2aca208b0339ede43cca22b5aba257551c515783 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 22:24:56 -0400 Subject: sub_804B128 --- src/trade.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 1554380bd..06da2c333 100644 --- a/src/trade.c +++ b/src/trade.c @@ -36,6 +36,7 @@ #include "pokeball.h" #include "pokedex.h" #include "field_effect.h" +#include "util.h" #include "trade.h" #ifdef ENGLISH @@ -3510,6 +3511,18 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804B128(void) +{ + struct BgAffineDstData dest; + DoBgAffineSet(&dest, gUnknown_03004828->unk_0104 << 8, gUnknown_03004828->unk_0106 << 8, gUnknown_03004828->unk_010c, gUnknown_03004828->unk_010e, gUnknown_03004828->unk_0118, gUnknown_03004828->unk_0118, gUnknown_03004828->unk_011c); + REG_BG2PA = dest.pa; + REG_BG2PB = dest.pb; + REG_BG2PC = dest.pc; + REG_BG2PD = dest.pd; + REG_BG2X = dest.dx; + REG_BG2Y = dest.dy; +} + #ifdef NONMATCHING void sub_804B1BC(void) { -- cgit v1.2.3 From 7592de577a9d065d52e950a4e7f071623c233b6d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 22:32:44 -0400 Subject: A bunch of small sprite callbacks --- src/trade.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 06da2c333..13811336e 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3511,6 +3511,50 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804B058(struct Sprite *sprite) +{ + if (++ sprite->data0 == 10) + { + PlaySE(SE_BOWA); + sprite->data0 = 0; + } +} + +void sub_804B07C(struct Sprite *sprite) +{ + if (sprite->data1 == 0) + { + if (++ sprite->data0 == 12) + sprite->data0 = 0; + LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data0], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + } +} + +void sub_804B0BC(struct Sprite *sprite) +{ + sprite->data0 ++; + sprite->pos2.y ++; + if (sprite->data0 == 10) + DestroySprite(sprite); +} + +void sub_804B0E0(struct Sprite *sprite) +{ + sprite->data0 ++; + sprite->pos2.y --; + if (sprite->data0 == 10) + DestroySprite(sprite); +} + +void sub_804B104(struct Sprite *sprite) +{ + if (++ sprite->data0 == 15) + { + PlaySE(SE_W107); + sprite->data0 = 0; + } +} + void sub_804B128(void) { struct BgAffineDstData dest; -- cgit v1.2.3 From ef786e5c3067498a0628b58e914c8ce83c39b44b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 22:56:08 -0400 Subject: sub_804AFB8 --- src/text.c | 4 ++-- src/trade.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/text.c b/src/text.c index 1dc81df0c..35f74b339 100644 --- a/src/text.c +++ b/src/text.c @@ -2342,7 +2342,7 @@ u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 to void sub_80034D4(u8 *tileData, const u8 *text) { - sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6C74, tileData, text); + sub_8004E3C(&gWindowConfig_81E6C74, tileData, text); } u8 sub_80034EC(u8 *str) @@ -3645,7 +3645,7 @@ void sub_8004E28(struct Window *win, u8 *foreground, u8 *background, u8 *shadow) *shadow = win->shadowColor; } -void sub_8004E3C(struct WindowConfig *winConfig, u8 *tileData, const u8 *text) +void sub_8004E3C(const struct WindowConfig *winConfig, u8 *tileData, const u8 *text) { sTempWindow.config = winConfig; InitWindow(&sTempWindow, text, 0, 0, 0); diff --git a/src/trade.c b/src/trade.c index 13811336e..3cb292a1b 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3511,6 +3511,22 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804AFB8(const struct WindowConfig *windowConfig, u8 *dest, const u8 *src, u8 size) +{ + u8 i; + u8 *tileBuffer; + size = (size + 3) / 4; + tileBuffer = gTileBuffer; + CpuFill16(0, tileBuffer, size * 0x80); + CpuFill16(0, tileBuffer + windowConfig->width * 0x20, size * 0x80); + sub_8004E3C(windowConfig, tileBuffer, src); + for (i = 0; i < size; i ++) + { + CpuCopy16(&tileBuffer[32 * (i * 4)], &dest[32 * (i * 8)], 0x80); + CpuCopy16(&tileBuffer[32 * (i * 4 + windowConfig->width)], &dest[32 * (i * 8 + 4)], 0x80); + } +} + void sub_804B058(struct Sprite *sprite) { if (++ sprite->data0 == 10) -- cgit v1.2.3 From 1b2096556ae0dcbc31723e782cfec354a4a94117 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 23:05:24 -0400 Subject: sub_804AF10 and sub_804AF84 --- src/trade.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 3cb292a1b..f9922dcfb 100644 --- a/src/trade.c +++ b/src/trade.c @@ -95,7 +95,8 @@ struct TradeEwramSubstruct { /*0x0044*/ u8 tradeMenuOptionsActive[13]; /*0x0051*/ u8 unk_0051[6]; /*0x0057*/ u8 filler_0057[6]; - /*0x005d*/ u8 unk_005d[4][6]; + /*0x005d*/ u8 unk_005d[2][6]; + /*0x005d*/ u8 unk_0069[2][6]; /*0x0075*/ u8 unk_0075; /*0x0076*/ u8 filler_0076[4]; /*0x007a*/ u8 unk_007a; @@ -3511,6 +3512,26 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804AF10(void) +{ + int i, j; + for (i = 0; i < 2; i ++) + { + for (j = 0; j < gUnknown_03004824->partyCounts[i]; j ++) + { + sub_809D824(&gSprites[gUnknown_03004824->partyIcons[i][j]], 4 - gUnknown_03004824->unk_0069[i][j]); + } + } +} + +void sub_804AF84(void) +{ + int i; + for (i = 0; i < 11; i ++) + if (gSaveBlock1.giftRibbons[i] == 0 && gUnknown_03004824->unk_00b5[i] != 0) + gSaveBlock1.giftRibbons[i] = gUnknown_03004824->unk_00b5[i]; +} + void sub_804AFB8(const struct WindowConfig *windowConfig, u8 *dest, const u8 *src, u8 size) { u8 i; -- cgit v1.2.3 From fd131fb769e25037c2979b5648e29b18cc8f0f6c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 23:11:46 -0400 Subject: sub_804AE3C --- src/trade.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index f9922dcfb..877f24f9e 100644 --- a/src/trade.c +++ b/src/trade.c @@ -37,6 +37,7 @@ #include "pokedex.h" #include "field_effect.h" #include "util.h" +#include "battle_interface.h" #include "trade.h" #ifdef ENGLISH @@ -3512,6 +3513,32 @@ static bool8 sub_804ABF8(void) asm(".section .text.sub_804DAD4"); +void sub_804AE3C(u8 who) +{ + u16 i; + u16 curHp; + u16 maxHp; + switch (who) + { + case 0: + for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++) + { + curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + gUnknown_03004824->unk_0069[0][i] = GetHPBarLevel(curHp, maxHp); + } + break; + case 1: + for (i = 0; i < gUnknown_03004824->partyCounts[1]; i ++) + { + curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); + gUnknown_03004824->unk_0069[1][i] = GetHPBarLevel(curHp, maxHp); + } + break; + } +} + void sub_804AF10(void) { int i, j; -- cgit v1.2.3 From 1de75f32304d880d96f38778cd4b711ec5bc760b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 23:25:36 -0400 Subject: Final function (nonmatching) --- src/trade.c | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 229 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 877f24f9e..93a8957fd 100644 --- a/src/trade.c +++ b/src/trade.c @@ -94,8 +94,7 @@ struct TradeEwramSubstruct { /*0x0041*/ u8 tradeMenuCursorPosition; /*0x0042*/ u8 partyCounts[2]; /*0x0044*/ u8 tradeMenuOptionsActive[13]; - /*0x0051*/ u8 unk_0051[6]; - /*0x0057*/ u8 filler_0057[6]; + /*0x0051*/ u8 unk_0051[2][6]; /*0x005d*/ u8 unk_005d[2][6]; /*0x005d*/ u8 unk_0069[2][6]; /*0x0075*/ u8 unk_0075; @@ -2141,7 +2140,7 @@ static void sub_8049860(void) BeginNormalPaletteFade(-1, 0, 0, 16, 0); gUnknown_03004824->unk_007b = 2; } - else if (sub_80499F0(gUnknown_03004824->unk_0051, gUnknown_03004824->partyCounts[0], gUnknown_03004824->tradeMenuCursorPosition) == 0) + else if (sub_80499F0(gUnknown_03004824->unk_0051[0], gUnknown_03004824->partyCounts[0], gUnknown_03004824->tradeMenuCursorPosition) == 0) { sub_804AADC(3, 2); gUnknown_03004824->unk_007b = 8; @@ -2203,7 +2202,7 @@ static void sub_8049A20(void) int i; for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++) { - unk_0051[i] = gUnknown_03004824->unk_0051[i]; + unk_0051[i] = gUnknown_03004824->unk_0051[0][i]; } if (sub_80499F0(unk_0051, gUnknown_03004824->partyCounts[0], gUnknown_03004824->tradeMenuCursorPosition) == 0) { @@ -3511,7 +3510,232 @@ static bool8 sub_804ABF8(void) sub_804AFB8(&gWindowConfig_81E725C, dest, src, a2); } -asm(".section .text.sub_804DAD4"); +#ifdef NONMATCHING +void sub_804ACF4(u8 who) +{ + struct Pokemon *pokemon; + int i; + switch (who) + { + case 0: + for (i = 0; i < gUnknown_03004824->partyCounts[0]; i ++) + { + pokemon = &gPlayerParty[i]; + if (GetMonData(pokemon, MON_DATA_IS_EGG) == TRUE) + { + gUnknown_03004824->unk_0051[0][i] = 0; + gUnknown_03004824->unk_005d[0][i] = 1; + } + else if (GetMonData(pokemon, MON_DATA_HP) == 0) + { + gUnknown_03004824->unk_0051[0][i] = 0; + gUnknown_03004824->unk_005d[0][i] = 0; + } + else + { + gUnknown_03004824->unk_0051[0][i] = 1; + gUnknown_03004824->unk_005d[0][i] = 0; + } + } + break; + case 1: + for (i = 0; i < gUnknown_03004824->partyCounts[1]; i ++) + { + pokemon = &gEnemyParty[i]; + if (GetMonData(pokemon, MON_DATA_IS_EGG) == TRUE) + { + gUnknown_03004824->unk_0051[1][i] = 0; + gUnknown_03004824->unk_005d[1][i] = 1; + } + else if (GetMonData(pokemon, MON_DATA_HP) == 0) + { + gUnknown_03004824->unk_0051[1][i] = 0; + gUnknown_03004824->unk_005d[1][i] = 0; + } + else + { + gUnknown_03004824->unk_0051[1][i] = 1; + gUnknown_03004824->unk_005d[1][i] = 0; + } + } + break; + } +} +#else +__attribute__((naked)) void sub_804ACF4(u8 who) +{ + asm_unified("sub_804ACF4: @ 804ACF4\n" + "\tpush {r4-r7,lr}\n" + "\tmov r7, r9\n" + "\tmov r6, r8\n" + "\tpush {r6,r7}\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r8, r0\n" + "\tcmp r0, 0\n" + "\tbeq _0804AD0C\n" + "\tcmp r0, 0x1\n" + "\tbeq _0804ADA0\n" + "\tb _0804AE2C\n" + "_0804AD0C:\n" + "\tmovs r7, 0\n" + "\tldr r1, _0804AD4C @ =gUnknown_03004824\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x42\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tblt _0804AD1C\n" + "\tb _0804AE2C\n" + "_0804AD1C:\n" + "\tadds r6, r1, 0\n" + "\tmovs r5, 0\n" + "\tmov r9, r5\n" + "_0804AD22:\n" + "\tmovs r0, 0x64\n" + "\tadds r1, r7, 0\n" + "\tmuls r1, r0\n" + "\tldr r0, _0804AD50 @ =gPlayerParty\n" + "\tadds r4, r1, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x2D\n" + "\tbl GetMonData\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0x1\n" + "\tbne _0804AD54\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x51\n" + "\tadds r0, r5\n" + "\tmov r2, r9\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x5D\n" + "\tadds r0, r5\n" + "\tb _0804AD84\n" + "\t.align 2, 0\n" + "_0804AD4C: .4byte gUnknown_03004824\n" + "_0804AD50: .4byte gPlayerParty\n" + "_0804AD54:\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x39\n" + "\tbl GetMonData\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0\n" + "\tbne _0804AD72\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x51\n" + "\tadds r0, r5\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x5D\n" + "\tadds r0, r5\n" + "\tb _0804AD84\n" + "_0804AD72:\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x51\n" + "\tadds r0, r5\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x5D\n" + "\tadds r0, r5\n" + "\tmov r1, r9\n" + "_0804AD84:\n" + "\tstrb r1, [r0]\n" + "\tldr r0, _0804AD9C @ =gUnknown_03004824\n" + "\tadds r5, 0x1\n" + "\tadds r7, 0x1\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x42\n" + "\tadd r0, r8\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tblt _0804AD22\n" + "\tb _0804AE2C\n" + "\t.align 2, 0\n" + "_0804AD9C: .4byte gUnknown_03004824\n" + "_0804ADA0:\n" + "\tmovs r7, 0\n" + "\tldr r1, _0804ADE0 @ =gUnknown_03004824\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x43\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tbge _0804AE2C\n" + "\tadds r6, r1, 0\n" + "\tmovs r5, 0x6\n" + "\tmovs r2, 0\n" + "\tmov r9, r2\n" + "_0804ADB6:\n" + "\tmovs r0, 0x64\n" + "\tadds r1, r7, 0\n" + "\tmuls r1, r0\n" + "\tldr r0, _0804ADE4 @ =gEnemyParty\n" + "\tadds r4, r1, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x2D\n" + "\tbl GetMonData\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0x1\n" + "\tbne _0804ADE8\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x51\n" + "\tadds r0, r5\n" + "\tmov r2, r9\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x5D\n" + "\tadds r0, r5\n" + "\tb _0804AE18\n" + "\t.align 2, 0\n" + "_0804ADE0: .4byte gUnknown_03004824\n" + "_0804ADE4: .4byte gEnemyParty\n" + "_0804ADE8:\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x39\n" + "\tbl GetMonData\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0\n" + "\tbne _0804AE06\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x51\n" + "\tadds r0, r5\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x5D\n" + "\tadds r0, r5\n" + "\tb _0804AE18\n" + "_0804AE06:\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x51\n" + "\tadds r0, r5\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0x5D\n" + "\tadds r0, r5\n" + "\tmov r1, r9\n" + "_0804AE18:\n" + "\tstrb r1, [r0]\n" + "\tldr r0, _0804AE38 @ =gUnknown_03004824\n" + "\tadds r5, 0x1\n" + "\tadds r7, 0x1\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x42\n" + "\tadd r0, r8\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tblt _0804ADB6\n" + "_0804AE2C:\n" + "\tpop {r3,r4}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804AE38: .4byte gUnknown_03004824"); +} +#endif void sub_804AE3C(u8 who) { -- cgit v1.2.3 From 008a0504b5fd6a5e633e1be3bbe1f10e28bbe9d3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 4 Sep 2017 23:40:09 -0400 Subject: Make static labels static --- src/trade.c | 146 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 74 insertions(+), 72 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 93a8957fd..ad770fd76 100644 --- a/src/trade.c +++ b/src/trade.c @@ -182,26 +182,26 @@ struct TradeEwramStruct { }; static void sub_8047EC0(void); -/*static*/ void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8); -/*static*/ void sub_804ACD8(const u8 *, u8 *, u8); +static void sub_804AFB8(const struct WindowConfig *, u8 *, const u8 *, u8); +static void sub_804ACD8(const u8 *, u8 *, u8); static void nullsub_5(u8, u8); static void sub_804AA88(void); static void sub_804A964(struct UnkStructD *, void *); static void sub_80489F4(void); -/*static*/ void sub_804AA0C(u8); +static void sub_804AA0C(u8); static bool8 sub_8048D44(void); -/*static*/ void sub_804AF84(void); +static void sub_804AF84(void); static bool8 sub_804ABF8(void); -/*static*/ void sub_804ACF4(u8); +static void sub_804ACF4(u8); static void sub_804A41C(u8); static void sub_8048C70(void); static void sub_8048B0C(u8); -/*static*/ void sub_804AE3C(u8); -/*static*/ void sub_804AF10(void); +static void sub_804AE3C(u8); +static void sub_804AF10(void); static void sub_80494D8(void); static void sub_8048AB4(void); static void sub_804A940(struct UnkStructD *); -/*static*/ void sub_804B41C(void); +static void sub_804B41C(void); static void sub_8049DE0(void); static void sub_804AB30(void); static void sub_8049ED4(u8); @@ -211,11 +211,14 @@ static void sub_804A9F4(u8); static void sub_804AA00(u8); static void sub_8049E9C(u8); static void sub_804AADC(u16, u8); -/*static*/ void sub_804A80C(void); +static void sub_804A80C(void); static u8 sub_80499F0(const u8 *, u8, u8); static void sub_804A840(u8); -/*static*/ u8 sub_804A2B4(u8 *, u8, u8); -/*static*/ void sub_804A96C_alt(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16); +#ifdef NONMATCHING +static +#endif +u8 sub_804A2B4(u8 *, u8, u8); +static void sub_804A96C_alt(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16); #ifdef NONMATCHING static #endif @@ -225,35 +228,29 @@ static #endif void sub_804A51C(u8, u8, u8, u8, u8, u8); static void sub_804D7AC(struct Sprite *); -/*static*/ void sub_804BA94(u8, u8); -/*static*/ bool8 sub_804C29C(void); -/*static*/ void sub_804DC18(void); -/*static*/ void sub_804BB78(void); +static bool8 sub_804C29C(void); +static void sub_804DC18(void); static u8 sub_804B2B0(void); static void sub_804E144(void); static void sub_804E1A0(u8); -/*static*/ void sub_804B790(void); static void sub_804DAD4(struct MailStruct *, const struct InGameTrade *); -void sub_804D588(void); static void sub_804DC88(void); -u8 sub_8047580(u8, u8, u8, u8, u8, u8, u8, u32); -void sub_804D6BC(struct Sprite *); -void sub_804D738(struct Sprite *); -void sub_804BBE8(u8); -void sub_804B128(void); -void sub_804B058(struct Sprite *); -void sub_804B07C(struct Sprite *); -void sub_804B0BC(struct Sprite *); -void sub_804B104(struct Sprite *); -void sub_804C0F8(u8); -bool8 sub_8040A3C(u16); -void sub_804B0E0(struct Sprite *); -void sub_804D80C(struct Sprite *); -void sub_804E1DC(void); -void sub_804BBCC(void); -void sub_804D8E4(void); -void sub_804C164(void); -void sub_804C1A8(void); +static void sub_804D6BC(struct Sprite *); +static void sub_804D738(struct Sprite *); +static void sub_804BBE8(u8); +static void sub_804B058(struct Sprite *); +static void sub_804B07C(struct Sprite *); +static void sub_804B0BC(struct Sprite *); +static void sub_804B104(struct Sprite *); +static void sub_804D80C(struct Sprite *); +static void sub_804E1DC(void); +static void sub_804BBCC(void); +static void sub_804D8E4(void); +static void sub_804C164(void); +static void sub_804C1A8(void); +#ifdef NONMATCHING +static +#endif void sub_804DB84(void); extern u8 gUnknown_020297D8[2]; @@ -2977,6 +2974,9 @@ static void sub_8049ED4(u8 a0) } #endif +#ifdef NONMATCHING +static +#endif u8 sub_804A2B4(u8 *a0, u8 whichParty, u8 whichPokemon) { u8 string[11]; @@ -3319,7 +3319,7 @@ void sub_804A740(u8 whichParty) } } -void sub_804A80C(void) +static void sub_804A80C(void) { FillWindowRect_DefaultPalette(&gUnknown_03004824->window, 0, gUnknown_0820C330[1][0], 0, gUnknown_0820C330[1][1], 19); sub_804A41C(1); @@ -3370,7 +3370,7 @@ static void sub_804A964(struct UnkStructD *unkStructD, void *dest) unkStructD->vramAddr = dest; } -/*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { +static void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { int y, x; for (y = 0; y < height; y++) @@ -3388,7 +3388,7 @@ static void sub_804A964(struct UnkStructD *unkStructD, void *dest) } #if GERMAN -void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { +static void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { sub_804A96C(arg0, left, top, tilemap, width, height, sp8); arg0->unk_10 = 1; @@ -3405,7 +3405,7 @@ static void sub_804AA00(u8 unused) MenuZeroFillScreen(); } -/*static*/ void sub_804AA0C(u8 a0) +static void sub_804AA0C(u8 a0) { DrawTextWindow(&gUnknown_03004824->window, gTradeMessageWindowRects[a0][0], gTradeMessageWindowRects[a0][1], gTradeMessageWindowRects[a0][2], gTradeMessageWindowRects[a0][3]); sub_8003460(&gUnknown_03004824->window, gUnknown_0820C2F0[a0], 0x180 + gUnknown_03004824->unk_007a, gTradeMessageWindowRects[a0][0] + 1, gTradeMessageWindowRects[a0][1] + 1); @@ -3505,13 +3505,13 @@ static bool8 sub_804ABF8(void) } } -/*static*/ void sub_804ACD8(const u8 *src, u8 *dest, u8 a2) +static void sub_804ACD8(const u8 *src, u8 *dest, u8 a2) { sub_804AFB8(&gWindowConfig_81E725C, dest, src, a2); } #ifdef NONMATCHING -void sub_804ACF4(u8 who) +static void sub_804ACF4(u8 who) { struct Pokemon *pokemon; int i; @@ -3562,10 +3562,9 @@ void sub_804ACF4(u8 who) } } #else -__attribute__((naked)) void sub_804ACF4(u8 who) +static __attribute__((naked)) void sub_804ACF4(u8 who) { - asm_unified("sub_804ACF4: @ 804ACF4\n" - "\tpush {r4-r7,lr}\n" + asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r9\n" "\tmov r6, r8\n" "\tpush {r6,r7}\n" @@ -3737,7 +3736,7 @@ __attribute__((naked)) void sub_804ACF4(u8 who) } #endif -void sub_804AE3C(u8 who) +static void sub_804AE3C(u8 who) { u16 i; u16 curHp; @@ -3763,7 +3762,7 @@ void sub_804AE3C(u8 who) } } -void sub_804AF10(void) +static void sub_804AF10(void) { int i, j; for (i = 0; i < 2; i ++) @@ -3775,7 +3774,7 @@ void sub_804AF10(void) } } -void sub_804AF84(void) +static void sub_804AF84(void) { int i; for (i = 0; i < 11; i ++) @@ -3783,7 +3782,7 @@ void sub_804AF84(void) gSaveBlock1.giftRibbons[i] = gUnknown_03004824->unk_00b5[i]; } -void sub_804AFB8(const struct WindowConfig *windowConfig, u8 *dest, const u8 *src, u8 size) +static void sub_804AFB8(const struct WindowConfig *windowConfig, u8 *dest, const u8 *src, u8 size) { u8 i; u8 *tileBuffer; @@ -3799,7 +3798,7 @@ void sub_804AFB8(const struct WindowConfig *windowConfig, u8 *dest, const u8 *sr } } -void sub_804B058(struct Sprite *sprite) +static void sub_804B058(struct Sprite *sprite) { if (++ sprite->data0 == 10) { @@ -3808,7 +3807,7 @@ void sub_804B058(struct Sprite *sprite) } } -void sub_804B07C(struct Sprite *sprite) +static void sub_804B07C(struct Sprite *sprite) { if (sprite->data1 == 0) { @@ -3818,7 +3817,7 @@ void sub_804B07C(struct Sprite *sprite) } } -void sub_804B0BC(struct Sprite *sprite) +static void sub_804B0BC(struct Sprite *sprite) { sprite->data0 ++; sprite->pos2.y ++; @@ -3826,7 +3825,7 @@ void sub_804B0BC(struct Sprite *sprite) DestroySprite(sprite); } -void sub_804B0E0(struct Sprite *sprite) +static void sub_804B0E0(struct Sprite *sprite) { sprite->data0 ++; sprite->pos2.y --; @@ -3834,7 +3833,7 @@ void sub_804B0E0(struct Sprite *sprite) DestroySprite(sprite); } -void sub_804B104(struct Sprite *sprite) +static void sub_804B104(struct Sprite *sprite) { if (++ sprite->data0 == 15) { @@ -3843,7 +3842,7 @@ void sub_804B104(struct Sprite *sprite) } } -void sub_804B128(void) +static void sub_804B128(void) { struct BgAffineDstData dest; DoBgAffineSet(&dest, gUnknown_03004828->unk_0104 << 8, gUnknown_03004828->unk_0106 << 8, gUnknown_03004828->unk_010c, gUnknown_03004828->unk_010e, gUnknown_03004828->unk_0118, gUnknown_03004828->unk_0118, gUnknown_03004828->unk_011c); @@ -3996,7 +3995,7 @@ void sub_804B2D0(u8 whichParty, u8 a1) } #ifdef NONMATCHING -void sub_804B41C(void) +static void sub_804B41C(void) // Link trade init { switch (gMain.state) @@ -4112,7 +4111,7 @@ void sub_804B41C(void) UpdatePaletteFade(); } #else -__attribute__((naked)) void sub_804B41C(void) +static __attribute__((naked)) void sub_804B41C(void) { asm_unified("\tpush {r4-r6,lr}\n" "\tsub sp, 0x4\n" @@ -4494,7 +4493,7 @@ __attribute__((naked)) void sub_804B41C(void) } #endif -void sub_804B790(void) +static void sub_804B790(void) // In-game trade init { u8 otName[11]; @@ -4597,7 +4596,7 @@ static void sub_804BA64(void) EnableNationalPokedex(); } -void sub_804BA94(u8 a0, u8 a1) +static void sub_804BA94(u8 a0, u8 a1) { u8 friendship; struct Pokemon *playerPokemon = &gPlayerParty[a0]; @@ -4626,7 +4625,7 @@ void sub_804BA94(u8 a0, u8 a1) sub_804BA64(); } -void sub_804BB78(void) +static void sub_804BB78(void) { switch (gUnknown_03004828->unk_00bd) { @@ -4643,7 +4642,7 @@ void sub_804BB78(void) } } -void sub_804BBCC(void) +static void sub_804BBCC(void) { sub_804C29C(); RunTasks(); @@ -4652,7 +4651,7 @@ void sub_804BBCC(void) UpdatePaletteFade(); } -void sub_804BBE8(u8 a0) +static void sub_804BBE8(u8 a0) { int i; u16 *buffer; @@ -4741,7 +4740,7 @@ void sub_804BBE8(u8 a0) } } -void sub_804C0F8(u8 a0) +static void sub_804C0F8(u8 a0) { if (a0 == 0) { @@ -4761,7 +4760,7 @@ void sub_804C0F8(u8 a0) } } -void sub_804C164(void) +static void sub_804C164(void) { LoadSpriteSheet(&gUnknown_082159A4); LoadSpriteSheet(&gUnknown_082159F4); @@ -4771,7 +4770,7 @@ void sub_804C164(void) LoadSpritePalette(&gUnknown_082159B4); } -void sub_804C1A8(void) +static void sub_804C1A8(void) { u8 mpId; u8 string[20]; @@ -4795,7 +4794,7 @@ void sub_804C1A8(void) } } -bool8 sub_804C29C(void) +static bool8 sub_804C29C(void) { u16 evoTarget; @@ -5245,7 +5244,7 @@ bool8 sub_804C29C(void) return FALSE; } -void sub_804D588(void) +static void sub_804D588(void) { u16 evoTarget; switch (gMain.state) @@ -5298,7 +5297,7 @@ static void sub_804D63C(void) } } -void sub_804D6BC(struct Sprite *sprite) +static void sub_804D6BC(struct Sprite *sprite) { sprite->pos1.y += sprite->data0 / 10; sprite->data5 += sprite->data1; @@ -5319,7 +5318,7 @@ void sub_804D6BC(struct Sprite *sprite) } } -void sub_804D738(struct Sprite *sprite) +static void sub_804D738(struct Sprite *sprite) { sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data0]; if (sprite->data0 == 22) @@ -5348,7 +5347,7 @@ void sub_804D7AC(struct Sprite *sprite) } } -void sub_804D80C(struct Sprite *sprite) +static void sub_804D80C(struct Sprite *sprite) { if (sprite->data2 == 0) { @@ -5381,7 +5380,7 @@ u16 sub_804D89C(void) return inGameTrade->playerSpecies; } -/*static*/ void sub_804D8E4(void) +static void sub_804D8E4(void) { u8 nickname[32]; const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; @@ -5474,6 +5473,9 @@ void sub_804DB68(void) sub_804D948(gSpecialVar_0x8005, gSpecialVar_0x8004); } +#ifdef NONMATCHING +static +#endif void sub_804DB84(void) { if (sub_804C29C() == TRUE) @@ -5493,7 +5495,7 @@ void sub_804DB84(void) UpdatePaletteFade(); } -void sub_804DC18(void) +static void sub_804DC18(void) { u8 mpId = sub_804B2B0(); sub_804D63C(); @@ -5668,7 +5670,7 @@ static void sub_804E1A0(u8 taskId) } } -/*static*/ void sub_804E1DC(void) +static void sub_804E1DC(void) { u8 i; u8 numRibbons = 0; -- cgit v1.2.3 From 1b78a6e423a791d4f5248fd2b70bea9bf8e22e6c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 5 Sep 2017 00:05:50 -0400 Subject: Put all local functions in statis; feeble attempt to fix undefined reference errors in German --- src/trade.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index ad770fd76..42c4afe07 100644 --- a/src/trade.c +++ b/src/trade.c @@ -219,6 +219,7 @@ static #endif u8 sub_804A2B4(u8 *, u8, u8); static void sub_804A96C_alt(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16); +static void sub_804A96C(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16); #ifdef NONMATCHING static #endif @@ -5450,7 +5451,7 @@ static void sub_804DAD4(struct MailStruct *mail, const struct InGameTrade *trade StringCopy(mail->playerName, trade->otName); #if GERMAN - PadNameString(mail->string, CHAR_SPACE); + PadNameString(mail->playerName, CHAR_SPACE); #endif mail->trainerId[0] = trade->otId >> 24; -- cgit v1.2.3 From 113659ca87d944f2949d0cdb9e863101d040edc1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 5 Sep 2017 08:38:31 -0400 Subject: Remaining static decorators --- src/trade.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 42c4afe07..5a127c5dc 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1241,7 +1241,7 @@ static void sub_8047EC0(void) UpdatePaletteFade(); } -void sub_80484F4(void) +static void sub_80484F4(void) { int i; struct UnkStructF *unkStructF; @@ -3307,7 +3307,7 @@ static void sub_804A6DC(u8 whichParty) } #endif -void sub_804A740(u8 whichParty) +static void sub_804A740(u8 whichParty) { int i; for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++) @@ -3356,7 +3356,7 @@ static void sub_804A938(struct UnkStructD *unkStructD) unkStructD->unk_10 = 1; } -void sub_804A940(struct UnkStructD *unkStructD) +static void sub_804A940(struct UnkStructD *unkStructD) { if (unkStructD->unk_10) { @@ -3856,7 +3856,7 @@ static void sub_804B128(void) } #ifdef NONMATCHING -void sub_804B1BC(void) +static void sub_804B1BC(void) { REG_BG1VOFS = gUnknown_03004828->bg1vofs; REG_BG1HOFS = gUnknown_03004828->bg1hofs; @@ -3871,7 +3871,7 @@ void sub_804B1BC(void) } } #else -__attribute__((naked)) void sub_804B1BC(void) +__attribute__((naked)) static void sub_804B1BC(void) { asm_unified("\tpush {lr}\n" "\tldr r1, _0804B1FC @ =REG_BG1VOFS\n" @@ -3917,7 +3917,7 @@ __attribute__((naked)) void sub_804B1BC(void) } #endif -void sub_804B210(void) +static void sub_804B210(void) { sub_804B1BC(); LoadOam(); @@ -3925,13 +3925,16 @@ void sub_804B210(void) TransferPlttBuffer(); } -void sub_804B228(void) +static void sub_804B228(void) { gUnknown_03004828->unk_00b4 = 0; gUnknown_03004828->unk_00b2 = 0; gUnknown_03004828->unk_00b3 = 0; } +#ifdef NONMATCHING +static +#endif void sub_804B24C(void) { if (gUnknown_03004828->unk_00b2 == gUnknown_03004828->unk_00b3) @@ -3958,7 +3961,7 @@ static u8 sub_804B2B0(void) return 0; } -void sub_804B2D0(u8 whichParty, u8 a1) +static void sub_804B2D0(u8 whichParty, u8 a1) { u8 v0; struct Pokemon *pokemon; @@ -5333,7 +5336,7 @@ static void sub_804D738(struct Sprite *sprite) } } -void sub_804D7AC(struct Sprite *sprite) +static void sub_804D7AC(struct Sprite *sprite) { if (sprite->data1 == 20) StartSpriteAffineAnim(sprite, 1); -- cgit v1.2.3 From 97d2b14422fae0c8bc30440d136e86778a122964 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 1 Oct 2017 20:48:32 -0400 Subject: Fix DE --- src/engine/trade.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'src') diff --git a/src/engine/trade.c b/src/engine/trade.c index 19381f4ee..6e78ba3ce 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -864,6 +864,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_8215AC0[] = { }; const struct InGameTrade gIngameTrades[] = { +#if ENGLISH { _("MAKIT"), SPECIES_MAKUHITA, 5, 5, 4, 4, 4, 4, @@ -893,9 +894,41 @@ const struct InGameTrade gIngameTrades[] = { _("LANE"), FEMALE, 10, SPECIES_BELLOSSOM } +#elif GERMAN + { + _("MAKIT"), SPECIES_MAKUHITA, + 5, 5, 4, 4, 4, 4, + TRUE, 49562, + 5, 5, 5, 5, 30, + 0x9C40, + ITEM_X_ATTACK, -1, + _("MAIK"), MALE, 10, + SPECIES_SLAKOTH + }, { + _("CONEC"), SPECIES_SKITTY, + 5, 4, 4, 5, 4, 4, + FALSE, 2259, + 5, 5, 30, 5, 5, + 0x498A2E17, + ITEM_GLITTER_MAIL, 0, + _("MADINA"), FEMALE, 10, + SPECIES_PIKACHU + }, { + _("CORASO"), + SPECIES_CORSOLA, + 4, 4, 5, 4, 4, 5, + TRUE, 50183, + 5, 30, 5, 5, 5, + 0x4C970B7F, + ITEM_TROPIC_MAIL, 1, + _("LIANA"), FEMALE, 10, + SPECIES_BELLOSSOM + } +#endif }; const u16 gIngameTradeMail[][10] = { +#if ENGLISH { EC_POKEMON(PIKACHU), EC_WORD_THANK_YOU, @@ -919,6 +952,31 @@ const u16 gIngameTradeMail[][10] = { EC_WORD_PRETTY, 0 } +#elif GERMAN + { + EC_POKEMON(PIKACHU), + EC_WORD_THANK_YOU, + EC_WORD_EXCL, + EC_WORD_MY, + EC_POKEMON(SKITTY), + EC_WORD_EATS, + 0xFFFF, + EC_WORD_A_LOT, + EC_WORD_EXCL, + 0 + }, { + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_OF, + EC_MOVE2(PETAL_DANCE), + EC_WORD_WORKS, + EC_WORD_THE, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_PRETTY, + 0 + } +#endif }; const s8 gTradeBallVerticalVelocityTable[] = { -- cgit v1.2.3