diff options
-rw-r--r-- | asm/trade.s | 285 | ||||
-rw-r--r-- | include/graphics.h | 5 | ||||
-rw-r--r-- | src/trade.c | 132 |
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; + } +} |