summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/trade.s273
-rw-r--r--src/trade.c95
2 files changed, 94 insertions, 274 deletions
diff --git a/asm/trade.s b/asm/trade.s
index b8377897f..845b9df6f 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -1345,277 +1345,4 @@ _0804B788: .4byte gPaletteFade
_0804B78C: .4byte sub_804DB84
thumb_func_end sub_804B41C
- thumb_func_start sub_804B790
-sub_804B790: @ 804B790
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x10
- ldr r1, _0804B7B4 @ =gMain
- ldr r2, _0804B7B8 @ =0x0000043c
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0xC
- bls _0804B7A8
- b _0804B9F2
-_0804B7A8:
- lsls r0, 2
- ldr r1, _0804B7BC @ =_0804B7C0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0804B7B4: .4byte gMain
-_0804B7B8: .4byte 0x0000043c
-_0804B7BC: .4byte _0804B7C0
- .align 2, 0
-_0804B7C0:
- .4byte _0804B7F4
- .4byte _0804B9F2
- .4byte _0804B9F2
- .4byte _0804B9F2
- .4byte _0804B9F2
- .4byte _0804B914
- .4byte _0804B92C
- .4byte _0804B944
- .4byte _0804B94E
- .4byte _0804B968
- .4byte _0804B9A0
- .4byte _0804B9AA
- .4byte _0804B9E0
-_0804B7F4:
- ldr r1, _0804B8E0 @ =gUnknown_020297D8
- ldr r0, _0804B8E4 @ =gSpecialVar_0x8005
- ldrh r0, [r0]
- movs r6, 0
- strb r0, [r1]
- movs r0, 0x6
- strb r0, [r1, 0x1]
- ldr r4, _0804B8E8 @ =gLinkPlayers + 0x8
- ldr r1, _0804B8EC @ =gSaveBlock2
- adds r0, r4, 0
- bl StringCopy
- ldr r0, _0804B8F0 @ =gEnemyParty
- movs r1, 0x7
- add r2, sp, 0x4
- bl GetMonData
- adds r4, 0x1C
- adds r0, r4, 0
- add r1, sp, 0x4
- bl StringCopy
- movs r0, 0x80
- lsls r0, 19
- movs r3, 0
- mov r8, r3
- strh r6, [r0]
- bl ResetTasks
- ldr r5, _0804B8F4 @ =gUnknown_03004828
- ldr r0, _0804B8F8 @ =0x0201f000
- str r0, [r5]
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r0, _0804B8FC @ =sub_804B210
- bl SetVBlankCallback
- bl sub_804B228
- ldr r4, _0804B900 @ =gWindowConfig_81E717C
- adds r0, r4, 0
- bl SetUpWindowConfig
- ldr r0, [r5]
- adds r0, 0x4
- adds r1, r4, 0
- bl InitWindowFromConfig
- movs r0, 0x2
- bl SetTextWindowBaseTileNum
- ldr r1, [r5]
- adds r1, 0x34
- strb r0, [r1]
- ldr r0, [r5]
- adds r0, 0x4
- bl LoadTextWindowGraphics
- bl MenuZeroFillScreen
- ldr r1, _0804B904 @ =gLinkType
- ldr r2, _0804B908 @ =0x00001144
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, [r5]
- movs r3, 0x8F
- lsls r3, 1
- adds r0, r3
- mov r1, r8
- strb r1, [r0]
- ldr r2, [r5]
- adds r0, r2, 0
- adds r0, 0xB6
- strh r6, [r0]
- adds r0, 0xE
- strh r6, [r0]
- subs r3, 0x1A
- adds r0, r2, r3
- movs r1, 0x40
- strh r1, [r0]
- adds r3, 0x2
- adds r0, r2, r3
- strh r1, [r0]
- adds r1, 0xC8
- adds r0, r2, r1
- strh r6, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- strh r6, [r0]
- movs r0, 0x86
- lsls r0, 1
- adds r1, r2, r0
- movs r0, 0x78
- strh r0, [r1]
- adds r3, 0x4
- adds r1, r2, r3
- movs r0, 0x50
- strh r0, [r1]
- adds r0, 0xC8
- adds r1, r2, r0
- subs r0, 0x18
- strh r0, [r1]
- movs r1, 0x8E
- lsls r1, 1
- adds r0, r2, r1
- strh r6, [r0]
- adds r0, r2, 0
- adds r0, 0xC0
- str r6, [r0]
- ldr r0, _0804B90C @ =gMain
- ldr r2, _0804B910 @ =0x0000043c
- adds r0, r2
- movs r1, 0x5
- strb r1, [r0]
- b _0804B9F2
- .align 2, 0
-_0804B8E0: .4byte gUnknown_020297D8
-_0804B8E4: .4byte gSpecialVar_0x8005
-_0804B8E8: .4byte gLinkPlayers + 0x8
-_0804B8EC: .4byte gSaveBlock2
-_0804B8F0: .4byte gEnemyParty
-_0804B8F4: .4byte gUnknown_03004828
-_0804B8F8: .4byte 0x0201f000
-_0804B8FC: .4byte sub_804B210
-_0804B900: .4byte gWindowConfig_81E717C
-_0804B904: .4byte gLinkType
-_0804B908: .4byte 0x00001144
-_0804B90C: .4byte gMain
-_0804B910: .4byte 0x0000043c
-_0804B914:
- movs r0, 0
- movs r1, 0
- bl sub_804B2D0
- ldr r1, _0804B924 @ =gMain
- ldr r3, _0804B928 @ =0x0000043c
- adds r1, r3
- b _0804B9D0
- .align 2, 0
-_0804B924: .4byte gMain
-_0804B928: .4byte 0x0000043c
-_0804B92C:
- movs r0, 0
- movs r1, 0x1
- bl sub_804B2D0
- ldr r1, _0804B93C @ =gMain
- ldr r0, _0804B940 @ =0x0000043c
- adds r1, r0
- b _0804B9D0
- .align 2, 0
-_0804B93C: .4byte gMain
-_0804B940: .4byte 0x0000043c
-_0804B944:
- movs r0, 0x1
- movs r1, 0
- bl sub_804B2D0
- b _0804B9CA
-_0804B94E:
- movs r0, 0x1
- movs r1, 0x1
- bl sub_804B2D0
- ldr r1, _0804B960 @ =gMain
- ldr r3, _0804B964 @ =0x0000043c
- adds r1, r3
- b _0804B9D0
- .align 2, 0
-_0804B960: .4byte gMain
-_0804B964: .4byte 0x0000043c
-_0804B968:
- bl sub_804C164
- ldr r0, _0804B988 @ =gUnknown_0821594C
- bl LoadSpriteSheet
- ldr r0, _0804B98C @ =gUnknown_08215954
- bl LoadSpritePalette
- ldr r1, _0804B990 @ =REG_BG1CNT
- ldr r2, _0804B994 @ =0x00000502
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _0804B998 @ =gMain
- ldr r3, _0804B99C @ =0x0000043c
- adds r1, r3
- b _0804B9D0
- .align 2, 0
-_0804B988: .4byte gUnknown_0821594C
-_0804B98C: .4byte gUnknown_08215954
-_0804B990: .4byte REG_BG1CNT
-_0804B994: .4byte 0x00000502
-_0804B998: .4byte gMain
-_0804B99C: .4byte 0x0000043c
-_0804B9A0:
- ldr r0, _0804B9D8 @ =0x0000043c
- adds r1, r2, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0804B9AA:
- movs r0, 0x5
- bl sub_804BBE8
- movs r0, 0
- bl sub_804BBE8
- bl sub_804C1A8
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0804B9CA:
- ldr r1, _0804B9DC @ =gMain
- ldr r2, _0804B9D8 @ =0x0000043c
- adds r1, r2
-_0804B9D0:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0804B9F2
- .align 2, 0
-_0804B9D8: .4byte 0x0000043c
-_0804B9DC: .4byte gMain
-_0804B9E0:
- ldr r0, _0804BA10 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0804B9F2
- ldr r0, _0804BA14 @ =sub_804BBCC
- bl SetMainCallback2
-_0804B9F2:
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0804BA10: .4byte gPaletteFade
-_0804BA14: .4byte sub_804BBCC
- thumb_func_end sub_804B790
-
.align 2, 0 @ Don't pad with nop.
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];