diff options
author | scnorton <scnorton@biociphers.org> | 2017-08-31 13:46:14 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-08-31 13:46:14 -0400 |
commit | d3dca02924bc19bff355feb74a667707751bcc8f (patch) | |
tree | 3465c7931b0b3b9174d0df5ed375febe4d165d1c | |
parent | b636d3cafa2a1b3314fddb3c7bde2bdb94c1e2c2 (diff) |
Nonmatching sub_8047D58
-rw-r--r-- | asm/trade.s | 116 | ||||
-rw-r--r-- | data/trade.s | 263 | ||||
-rw-r--r-- | include/graphics.h | 3 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/trade.c | 487 |
5 files changed, 460 insertions, 412 deletions
diff --git a/asm/trade.s b/asm/trade.s index b5cdf211e..8faba39dd 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -10,122 +10,6 @@ .set sub_804A96C_alt, sub_804A96C .endif - thumb_func_start sub_8047D58 -sub_8047D58: @ 8047D58 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x18 - ldr r0, _08047E30 @ =gSaveBlock2 - bl StringLength - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - cmp r0, 0x5 - bls _08047D72 - movs r1, 0x1 -_08047D72: - movs r5, 0 - lsls r2, r1, 2 - mov r6, sp - ldr r0, _08047E34 @ =gTradeUnknownSpriteCoords - adds r1, r0, 0x1 - adds r1, r2 - mov r8, r1 - adds r0, r2, r0 - ldrb r0, [r0] - lsls r4, r0, 16 -_08047D86: - mov r1, sp - ldr r0, _08047E38 @ =gSpriteTemplate_820C0EC - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldrh r0, [r6] - adds r0, r5 - strh r0, [r6] - asrs r1, r4, 16 - mov r0, sp - mov r3, r8 - ldrb r2, [r3] - movs r3, 0x1 - bl CreateSprite - movs r7, 0x80 - lsls r7, 14 - adds r4, r7 - adds r5, 0x1 - cmp r5, 0x2 - ble _08047D86 - bl GetMultiplayerId - lsls r0, 24 - movs r1, 0x80 - lsls r1, 17 - eors r1, r0 - lsrs r1, 24 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _08047E3C @ =gLinkPlayers + 0x8 - adds r0, r1 - bl StringLength - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - cmp r0, 0x5 - bls _08047DDA - movs r1, 0x1 -_08047DDA: - movs r5, 0 - lsls r2, r1, 2 - mov r6, sp - ldr r0, _08047E40 @ =gTradeUnknownSpriteCoords + 0x3 - adds r1, r2, r0 - mov r8, r1 - subs r0, 0x1 - adds r0, r2, r0 - ldrb r0, [r0] - lsls r4, r0, 16 -_08047DEE: - mov r1, sp - ldr r0, _08047E38 @ =gSpriteTemplate_820C0EC - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r0, r5, 0x3 - ldrh r1, [r6] - adds r0, r1 - strh r0, [r6] - asrs r1, r4, 16 - mov r0, sp - mov r3, r8 - ldrb r2, [r3] - movs r3, 0x1 - bl CreateSprite - movs r7, 0x80 - lsls r7, 14 - adds r4, r7 - adds r5, 0x1 - cmp r5, 0x2 - ble _08047DEE - movs r0, 0x5 - movs r1, 0 - bl nullsub_5 - add sp, 0x18 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08047E30: .4byte gSaveBlock2 -_08047E34: .4byte gTradeUnknownSpriteCoords -_08047E38: .4byte gSpriteTemplate_820C0EC -_08047E3C: .4byte gLinkPlayers + 0x8 -_08047E40: .4byte gTradeUnknownSpriteCoords + 0x3 - thumb_func_end sub_8047D58 - thumb_func_start sub_8047E44 sub_8047E44: @ 8047E44 push {r4-r7,lr} diff --git a/data/trade.s b/data/trade.s index 48919ca5f..fcfbd8187 100644 --- a/data/trade.s +++ b/data/trade.s @@ -3,140 +3,6 @@ .section .rodata - .align 2 - .byte 0x90, 0x08, 0x00, 0x00 - .byte 0xC0, 0x3A, 0x00, 0x00 - .byte 0x1C, 0x00, 0x00, 0x00 - .byte 0x30, 0x05, 0x00, 0x00 - .byte 0x24, 0x00, 0x00, 0x00 - .byte 0x64, 0x00, 0x00, 0x00 - .byte 0xD8, 0x04, 0x00, 0x00 - - .align 1 -gTradeMovesBoxTilemap:: @ 820ABF0 - .incbin "graphics/trade/moves_box_map.bin" - - .align 1 -gTradePartyBoxTilemap:: @ 820ADEE - .incbin "graphics/trade/party_box_map.bin" - - .align 2 -gTradeStripesBG2Tilemap:: @ 820AFEC - .incbin "graphics/trade/stripes_bg2_map.bin" - - .align 2 -gTradeStripesBG3Tilemap:: @ 820B7EC - .incbin "graphics/trade/stripes_bg3_map.bin" - - .align 2 -gOamData_820BFEC:: @ 820BFEC - .2byte 0x4000 - .2byte 0x8000 - .2byte 0x0400 - - .align 2 -gSpriteAnim_820BFF4:: @ 820BFF4 - obj_image_anim_frame 0, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_820BFFC:: @ 820BFFC - obj_image_anim_frame 8, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_820C004:: @ 820C004 - obj_image_anim_frame 16, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_820C00C:: @ 820C00C - obj_image_anim_frame 24, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_820C014:: @ 820C014 - obj_image_anim_frame 32, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_820C01C:: @ 820C01C - obj_image_anim_frame 40, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_820C024:: @ 820C024 - .4byte gSpriteAnim_820BFF4 - .4byte gSpriteAnim_820BFFC - .4byte gSpriteAnim_820C004 - .4byte gSpriteAnim_820C00C - .4byte gSpriteAnim_820C014 - .4byte gSpriteAnim_820C01C - - .align 2 -TradeScreenTextPalette: @ 820C03C - .incbin "graphics/trade/text1.gbapal" - .incbin "graphics/trade/text2.gbapal" @ unused? - - .align 2 -gUnknown_0820C07C:: @ 820C07C - obj_tiles 0x0201d000, 256, 0x00c8 - obj_tiles 0x0201d100, 256, 0x00c9 - obj_tiles 0x0201d200, 256, 0x00ca - obj_tiles 0x0201d300, 256, 0x00cb - obj_tiles 0x0201d400, 256, 0x00cc - obj_tiles 0x0201d500, 256, 0x00cd - obj_tiles 0x0201d600, 256, 0x00ce - obj_tiles 0x0201d700, 256, 0x00cf - obj_tiles 0x0201d800, 256, 0x00d0 - obj_tiles 0x0201d900, 256, 0x00d1 - obj_tiles 0x0201da00, 256, 0x00d2 - obj_tiles 0x0201db00, 256, 0x00d3 - obj_tiles 0x0201dc00, 256, 0x00d4 - - .align 2 -gSpritePalette_TradeScreenText:: @ 820C0E4 - obj_pal TradeScreenTextPalette, 4925 - - .align 2 -gSpriteTemplate_820C0EC:: @ 820C0EC - spr_template 200, 4925, gOamData_820BFEC, gSpriteAnimTable_820C024, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gOamData_820C104:: @ 820C104 - .2byte 0x4000 - .2byte 0xC000 - .2byte 0x0400 - - .align 2 -gSpriteAnim_820C10C:: @ 820C10C - obj_image_anim_frame 0, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_820C114:: @ 820C114 - obj_image_anim_frame 32, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_820C11C:: @ 820C11C - .4byte gSpriteAnim_820C10C - .4byte gSpriteAnim_820C114 - - .align 2 -gUnknown_0820C124:: @ 820C124 - obj_tiles gUnknown_08EA1DEC, 0x800, 300 - - .align 2 -gUnknown_0820C12C:: @ 820C12C - obj_pal gUnknown_08EA0328, 2345 - - .align 2 -gSpriteTemplate_820C134:: @ 820C134 - spr_template 300, 2345, gOamData_820C104, gSpriteAnimTable_820C11C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .section .rodata.820C164 - @ 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. @@ -146,135 +12,6 @@ gSpriteTemplate_820C134:: @ 820C134 @ 2 3 8 9 @ 4 5 10 11 @ 12 -gTradeNextSelectedMonTable:: @ 820C164 - @ 0 - .byte 4, 2, 12, 12, 0, 0 @ up - .byte 2, 4, 12, 12, 0, 0 @ down - .byte 7, 6, 1, 0, 0, 0 @ left - .byte 1, 6, 7, 0, 0, 0 @ right - @ 1 - .byte 5, 3, 12, 12, 0, 0 @ up - .byte 3, 5, 12, 12, 0, 0 @ down - .byte 0, 7, 6, 1, 0, 0 @ left - .byte 6, 7, 0, 1, 0, 0 @ right - @ 2 - .byte 0, 0, 0, 0, 0, 0 @ up - .byte 4, 0, 0, 0, 0, 0 @ down - .byte 9, 8, 7, 6, 0, 0 @ left - .byte 3, 1, 0, 0, 0, 0 @ right - @ 3 - .byte 1, 1, 1, 1, 0, 0 @ up - .byte 5, 1, 1, 1, 0, 0 @ down - .byte 2, 9, 8, 7, 0, 0 @ left - .byte 8, 9, 6, 6, 0, 0 @ right - @ 4 - .byte 2, 2, 2, 2, 0, 0 @ up - .byte 0, 0, 0, 0, 0, 0 @ down - .byte 11, 10, 9, 8, 7, 6 @ left - .byte 5, 3, 1, 0, 0, 0 @ right - @ 5 - .byte 3, 3, 3, 3, 0, 0 @ up - .byte 1, 1, 1, 1, 0, 0 @ down - .byte 4, 4, 4, 4, 0, 0 @ left - .byte 10, 8, 6, 0, 0, 0 @ right - @ 6 - .byte 10, 8, 12, 0, 0, 0 @ up - .byte 8, 10, 12, 0, 0, 0 @ down - .byte 1, 0, 0, 0, 0, 0 @ left - .byte 7, 0, 1, 0, 0, 0 @ right - @ 7 - .byte 12, 0, 0, 0, 0, 0 @ up - .byte 9, 12, 0, 0, 0, 0 @ down - .byte 6, 0, 0, 0, 0, 0 @ left - .byte 0, 0, 0, 0, 0, 0 @ right - @ 8 - .byte 6, 0, 0, 0, 0, 0 @ up - .byte 10, 6, 0, 0, 0, 0 @ down - .byte 3, 2, 1, 0, 0, 0 @ left - .byte 9, 7, 0, 0, 0, 0 @ right - @ 9 - .byte 7, 0, 0, 0, 0, 0 @ up - .byte 11, 12, 0, 0, 0, 0 @ down - .byte 8, 0, 0, 0, 0, 0 @ left - .byte 2, 1, 0, 0, 0, 0 @ right - @ 10 - .byte 8, 0, 0, 0, 0, 0 @ up - .byte 6, 0, 0, 0, 0, 0 @ down - .byte 5, 4, 3, 2, 1, 0 @ left - .byte 11, 9, 7, 0, 0, 0 @ right - @ 11 - .byte 9, 0, 0, 0, 0, 0 @ up - .byte 12, 0, 0, 0, 0, 0 @ down - .byte 10, 0, 0, 0, 0, 0 @ left - .byte 4, 2, 0, 0, 0, 0 @ right - @ 12 - .byte 11, 9, 7, 6, 0, 0 @ up - .byte 7, 6, 0, 0, 0, 0 @ down - .byte 12, 0, 0, 0, 0, 0 @ left - .byte 12, 0, 0, 0, 0, 0 @ right - -@ The coordinates are in units of tiles. -@ These are used for both mon icons and the selected mon cursor, -@ but the origins of the coordinates differ. -gTradeMonSpriteCoords:: @ 820C29C - @ left-side party - .byte 1, 5 - .byte 8, 5 - .byte 1, 10 - .byte 8, 10 - .byte 1, 15 - .byte 8, 15 - - @ right-side party - .byte 16, 5 - .byte 23, 5 - .byte 16, 10 - .byte 23, 10 - .byte 16, 15 - .byte 23, 15 - - @ cancel button - .byte 23, 18 - -gTradeLevelDisplayCoords:: @ 820C2B6 - @ left-side party - .byte 5, 4 - .byte 12, 4 - .byte 5, 9 - .byte 12, 9 - .byte 5, 14 - .byte 12, 14 - - @ right-side party - .byte 20, 4 - .byte 27, 4 - .byte 20, 9 - .byte 27, 9 - .byte 20, 14 - .byte 27, 14 - -gTradeMonBoxCoords:: @ 820C2CE - @ left-side party - .byte 1, 3 - .byte 8, 3 - .byte 1, 8 - .byte 8, 8 - .byte 1, 13 - .byte 8, 13 - - @ right-side party - .byte 16, 3 - .byte 23, 3 - .byte 16, 8 - .byte 23, 8 - .byte 16, 13 - .byte 23, 13 - -gTradeUnknownSpriteCoords:: @ 820C2E6 - .byte 59, 10 - .byte 179, 10 - .byte 59, 10 - .byte 179, 10 .align 2 gUnknown_0820C2F0:: @ 820C2F0 diff --git a/include/graphics.h b/include/graphics.h index 5632cb831..72688ec44 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2564,4 +2564,7 @@ extern const u8 gUnknown_08E8CFC0[]; extern const u8 gUnknown_08E8D4C0[]; extern const u8 gUnknown_08E8D9C0[]; +extern const u8 gUnknown_08EA1DEC[]; +extern const u16 gUnknown_08EA0328[]; + #endif // GUARD_GRAPHICS_H diff --git a/ld_script.txt b/ld_script.txt index 81f92bfaa..98af35582 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -346,9 +346,8 @@ SECTIONS { src/egg_hatch.o(.rodata); data/battle_interface.o(.rodata); src/pokeball.o(.rodata); - data/trade.o(.rodata); src/trade.o(.rodata); - data/trade.o(.rodata.820C164); + data/trade.o(.rodata); src/trade.o(.rodata.igt); src/berry_blender.o(.rodata); src/new_game.o(.rodata); 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) { |