summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/trade.s285
-rw-r--r--include/graphics.h5
-rw-r--r--src/trade.c132
3 files changed, 130 insertions, 292 deletions
diff --git a/asm/trade.s b/asm/trade.s
index 15c93e83d..7d47a0a2d 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -5,291 +5,6 @@
.text
- thumb_func_start sub_804D4F8
-sub_804D4F8: @ 804D4F8
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_804D4F8
-
- thumb_func_start sub_804D50C
-sub_804D50C: @ 804D50C
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _0804D544 @ =gUnknown_2031DA8
- ldr r1, [r4]
- adds r1, 0xA8
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xF
- bls _0804D53C
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, [r4]
- adds r0, 0x6F
- movs r1, 0xA
- strb r1, [r0]
-_0804D53C:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804D544: .4byte gUnknown_2031DA8
- thumb_func_end sub_804D50C
-
- thumb_func_start sub_804D548
-sub_804D548: @ 804D548
- push {r4,lr}
- ldr r0, _0804D580 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0804D59E
- ldr r1, _0804D584 @ =gUnknown_2031DA4
- ldr r4, _0804D588 @ =gUnknown_2031DA8
- ldr r2, [r4]
- adds r0, r2, 0
- adds r0, 0x35
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0
- adds r0, 0x7E
- ldrb r0, [r0]
- strb r0, [r1, 0x1]
- ldr r0, _0804D58C @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _0804D590
- adds r1, r2, 0
- adds r1, 0x6F
- movs r0, 0x10
- strb r0, [r1]
- b _0804D59E
- .align 2, 0
-_0804D580: .4byte gPaletteFade
-_0804D584: .4byte gUnknown_2031DA4
-_0804D588: .4byte gUnknown_2031DA8
-_0804D58C: .4byte gWirelessCommType
-_0804D590:
- movs r0, 0x20
- bl sub_800AA80
- ldr r0, [r4]
- adds r0, 0x6F
- movs r1, 0xD
- strb r1, [r0]
-_0804D59E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_804D548
-
- thumb_func_start sub_804D5A4
-sub_804D5A4: @ 804D5A4
- push {r4,r5,lr}
- ldr r5, _0804D5E4 @ =gMain
- ldr r0, _0804D5E8 @ =sub_804C718
- str r0, [r5, 0x8]
- ldr r0, _0804D5EC @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _0804D5FC
- bl IsLinkRfuTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _0804D620
- ldr r0, _0804D5F0 @ =gUnknown_2031C90
- ldr r0, [r0]
- bl Free
- bl FreeAllWindowBuffers
- ldr r0, _0804D5F4 @ =gUnknown_2031DA8
- ldr r0, [r0]
- bl Free
- movs r0, 0
- str r0, [r5]
- bl DestroyWirelessStatusIndicatorSprite
- ldr r0, _0804D5F8 @ =sub_8050138
- bl SetMainCallback2
- b _0804D620
- .align 2, 0
-_0804D5E4: .4byte gMain
-_0804D5E8: .4byte sub_804C718
-_0804D5EC: .4byte gWirelessCommType
-_0804D5F0: .4byte gUnknown_2031C90
-_0804D5F4: .4byte gUnknown_2031DA8
-_0804D5F8: .4byte sub_8050138
-_0804D5FC:
- ldr r0, _0804D628 @ =gReceivedRemoteLinkPlayers
- ldrb r4, [r0]
- cmp r4, 0
- bne _0804D620
- ldr r0, _0804D62C @ =gUnknown_2031C90
- ldr r0, [r0]
- bl Free
- bl FreeAllWindowBuffers
- ldr r0, _0804D630 @ =gUnknown_2031DA8
- ldr r0, [r0]
- bl Free
- str r4, [r5]
- ldr r0, _0804D634 @ =sub_8050138
- bl SetMainCallback2
-_0804D620:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0804D628: .4byte gReceivedRemoteLinkPlayers
-_0804D62C: .4byte gUnknown_2031C90
-_0804D630: .4byte gUnknown_2031DA8
-_0804D634: .4byte sub_8050138
- thumb_func_end sub_804D5A4
-
- thumb_func_start sub_804D638
-sub_804D638: @ 804D638
- push {r4,lr}
- bl sub_804E9E4
- bl sub_804F4DC
- movs r0, 0
- bl sub_804EAE4
- movs r0, 0x1
- bl sub_804EAE4
- ldr r4, _0804D690 @ =gUnknown_2031DA8
- ldr r2, [r4]
- ldrb r1, [r2]
- adds r0, r1, 0x1
- strb r0, [r2]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x18
- bl SetGpuReg
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- adds r0, r1, 0
- adds r0, 0xFF
- strb r0, [r2, 0x1]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1C
- bl SetGpuReg
- bl RunTextPrinters_CheckPrinter0Active
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804D690: .4byte gUnknown_2031DA8
- thumb_func_end sub_804D638
-
- thumb_func_start sub_804D694
-sub_804D694: @ 804D694
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- beq _0804D700
- cmp r4, 0x1
- bgt _0804D6AA
- cmp r4, 0
- beq _0804D6B0
- b _0804D75A
-_0804D6AA:
- cmp r4, 0x2
- beq _0804D728
- b _0804D75A
-_0804D6B0:
- ldr r0, _0804D6F0 @ =gUnknown_8E9CEDC
- movs r1, 0
- movs r2, 0x60
- bl LoadPalette
- ldr r1, _0804D6F4 @ =gUnknown_8E9CF5C
- movs r2, 0x94
- lsls r2, 5
- movs r0, 0x1
- movs r3, 0
- bl LoadBgTiles
- ldr r1, _0804D6F8 @ =gUnknown_8E9E9FC
- movs r0, 0x20
- str r0, [sp]
- movs r0, 0x14
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBufferRect_ChangePalette
- ldr r1, _0804D6FC @ =gUnknown_8260C30
- movs r2, 0x80
- lsls r2, 4
- movs r0, 0x2
- movs r3, 0
- bl LoadBgTilemap
- b _0804D75A
- .align 2, 0
-_0804D6F0: .4byte gUnknown_8E9CEDC
-_0804D6F4: .4byte gUnknown_8E9CF5C
-_0804D6F8: .4byte gUnknown_8E9E9FC
-_0804D6FC: .4byte gUnknown_8260C30
-_0804D700:
- ldr r1, _0804D724 @ =gUnknown_8261430
- movs r2, 0x80
- lsls r2, 4
- movs r0, 0x3
- movs r3, 0
- bl LoadBgTilemap
- movs r0, 0
- bl sub_804F284
- movs r0, 0x1
- bl sub_804F284
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- b _0804D75A
- .align 2, 0
-_0804D724: .4byte gUnknown_8261430
-_0804D728:
- movs r5, 0x80
- lsls r5, 21
- movs r4, 0x3
-_0804D72E:
- lsrs r0, r5, 24
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x80
- lsls r0, 18
- adds r5, r0
- subs r4, 0x1
- cmp r4, 0
- bge _0804D72E
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
-_0804D75A:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_804D694
-
thumb_func_start sub_804D764
sub_804D764: @ 804D764
push {r4-r7,lr}
diff --git a/include/graphics.h b/include/graphics.h
index 638351be4..740818cd8 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4214,4 +4214,9 @@ extern const u8 gMonIcon_Unown_ExclamationMark[];
extern const u8 gMonIcon_Unown_QuestionMark[];
extern const u8 gMonIcon_QuestionMark[];
+// trade
+extern const u16 gUnknown_8E9CEDC[];
+extern const u16 gUnknown_8E9CF5C[];
+extern const u16 gUnknown_8E9E9FC[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/src/trade.c b/src/trade.c
index e816d773f..a84cce7f4 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -17,6 +17,7 @@
#include "party_menu.h"
#include "pokemon_summary_screen.h"
#include "pokemon_storage_system.h"
+#include "new_menu_helpers.h"
#include "constants/species.h"
#include "constants/items.h"
#include "constants/easy_chat.h"
@@ -67,25 +68,33 @@ IWRAM_DATA vu16 gUnknown_3000E78;
EWRAM_DATA u8 *gUnknown_2031C90 = NULL;
EWRAM_DATA u8 *gUnknown_2031C94[14] = {};
+EWRAM_DATA u8 gUnknown_2031DA4[2] = {0};
EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL;
void sub_804C728(void);
void sub_804D4F8(void);
+void sub_804D638(void);
+void sub_804D694(u8 state);
+void sub_804D764(void);
+void sub_804DFF0(void);
+void sub_804E9E4(void);
+void sub_804EAE4(u8 side);
u8 shedinja_maker_maybe(void);
+void sub_804F020(u8 side);
+void sub_804F284(u8 side);
+void sub_804F4DC(void);
void sub_804F5BC(u8 str_idx);
-void sub_804F9D8(void);
bool8 sub_804F610(void);
+void sub_804F728(const u8 *name, u8 *a1, u8 unused);
void sub_804F748(u8 side);
-void sub_804F020(u8 side);
-void sub_804D764(void);
-void sub_804D694(u8 imgIdx);
void sub_804F890(u8 side);
void sub_804F964(void);
-void sub_804DFF0(void);
-void sub_804D638(void);
+void sub_804F9D8(void);
void LoadHeldItemIcons(void);
-void sub_804F728(const u8 *name, u8 *a1, u8 unused);
+void sub_8050138(void);
+extern const u16 gUnknown_8260C30[];
+extern const u16 gUnknown_8261430[];
extern const struct BgTemplate gUnknown_8261F1C[4];
extern const struct WindowTemplate gUnknown_8261F2C[18];
extern const u8 gTradeMonSpriteCoords[][2];
@@ -2201,3 +2210,112 @@ void sub_804CF14(void)
"_0804D4F4: .4byte sub_804D638");
}
#endif //NONMATCHING
+
+void sub_804D4F8(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void sub_804D50C(void)
+{
+ if (++gUnknown_2031DA8->unk_A8 >= 16)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gUnknown_2031DA8->unk_6F = 10;
+ }
+}
+
+void sub_804D548(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gUnknown_2031DA4[0] = gUnknown_2031DA8->tradeMenuCursorPosition;
+ gUnknown_2031DA4[1] = gUnknown_2031DA8->unk_7E;
+ if (gWirelessCommType != 0)
+ {
+ gUnknown_2031DA8->unk_6F = 16;
+ }
+ else
+ {
+ sub_800AA80(32);
+ gUnknown_2031DA8->unk_6F = 13;
+ }
+ }
+}
+
+void sub_804D5A4(void)
+{
+ gMain.savedCallback = sub_804C718;
+ if (gWirelessCommType != 0)
+ {
+ if (IsLinkRfuTaskFinished())
+ {
+ Free(gUnknown_2031C90);
+ FreeAllWindowBuffers();
+ Free(gUnknown_2031DA8);
+ gMain.callback1 = NULL;
+ DestroyWirelessStatusIndicatorSprite();
+ SetMainCallback2(sub_8050138);
+ }
+ }
+ else
+ {
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ Free(gUnknown_2031C90);
+ FreeAllWindowBuffers();
+ Free(gUnknown_2031DA8);
+ gMain.callback1 = NULL;
+ SetMainCallback2(sub_8050138);
+ }
+ }
+}
+
+void sub_804D638(void)
+{
+ sub_804E9E4();
+ sub_804F4DC();
+ sub_804EAE4(0);
+ sub_804EAE4(1);
+ SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DA8->unk_0++);
+ SetGpuReg(REG_OFFSET_BG3HOFS, gUnknown_2031DA8->unk_1--);
+ RunTextPrinters_CheckPrinter0Active();
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_804D694(u8 state)
+{
+ int i;
+
+ switch (state)
+ {
+ case 0:
+ LoadPalette(gUnknown_8E9CEDC, 0x00, 0x60);
+ LoadBgTiles(1, gUnknown_8E9CF5C, 0x1280, 0);
+ CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9E9FC, 0, 0, 32, 20, 0);
+ LoadBgTilemap(2, gUnknown_8260C30, 0x800, 0);
+ break;
+ case 1:
+ LoadBgTilemap(3, gUnknown_8261430, 0x800, 0);
+ sub_804F284(0);
+ sub_804F284(1);
+ CopyBgTilemapBufferToVram(1);
+ break;
+ case 2:
+ for (i = 0; i < 4; i++)
+ {
+ // BG0 and BG1 coords only
+ SetGpuReg(REG_OFFSET_BG0HOFS + 2 * i, 0);
+ }
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ break;
+ }
+}