diff options
-rw-r--r-- | asm/trade.s | 123 | ||||
-rwxr-xr-x | ld_script.txt | 4 | ||||
-rw-r--r-- | src/trade.c | 88 |
3 files changed, 94 insertions, 121 deletions
diff --git a/asm/trade.s b/asm/trade.s index e4d45ec73..4ed8edea7 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5462,81 +5462,7 @@ sub_804A964: @ 804A964 bx lr thumb_func_end sub_804A964 - thumb_func_start sub_804A96C -sub_804A96C: @ 804A96C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r0, [sp] - mov r10, r3 - ldr r0, [sp, 0x24] - ldr r3, [sp, 0x28] - ldr r4, [sp, 0x2C] - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r3, 24 - lsrs r3, 24 - mov r12, r3 - lsls r4, 16 - lsrs r7, r4, 16 - movs r2, 0 - cmp r2, r12 - bge _0804A9DE - ldr r0, [sp] - adds r0, 0x12 - mov r9, r0 - lsls r0, r6, 5 - adds r0, r1 - mov r8, r0 -_0804A9AA: - movs r4, 0 - adds r6, r2, 0x1 - cmp r4, r5 - bge _0804A9D8 - lsls r1, r2, 5 - add r1, r8 - adds r0, r5, 0 - muls r0, r2 - lsls r0, 1 - mov r2, r10 - adds r3, r0, r2 - lsls r1, 1 - mov r0, r9 - adds r2, r1, r0 -_0804A9C6: - ldrh r1, [r3] - adds r0, r7, 0 - orrs r0, r1 - strh r0, [r2] - adds r3, 0x2 - adds r2, 0x2 - adds r4, 0x1 - cmp r4, r5 - blt _0804A9C6 -_0804A9D8: - adds r2, r6, 0 - cmp r2, r12 - blt _0804A9AA -_0804A9DE: - movs r0, 0x1 - ldr r1, [sp] - strb r0, [r1, 0x10] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804A96C +.section .text.sub_804A9F4 thumb_func_start sub_804A9F4 sub_804A9F4: @ 804A9F4 @@ -11309,52 +11235,7 @@ _0804DAC0: _0804DAD0: .4byte gEnemyParty thumb_func_end sub_804D948 - thumb_func_start sub_804DAD4 -sub_804DAD4: @ 804DAD4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r2, _0804DB28 @ =gIngameTradeMail - adds r0, r5, 0 - adds r0, 0x2A - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, r0, r2 - adds r1, r4, 0 - movs r3, 0x8 -_0804DAEE: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _0804DAEE - adds r0, r4, 0 - adds r0, 0x12 - adds r1, r5, 0 - adds r1, 0x2B - bl StringCopy - ldr r1, [r5, 0x18] - lsrs r0, r1, 24 - strb r0, [r4, 0x1A] - lsrs r0, r1, 16 - strb r0, [r4, 0x1B] - lsrs r0, r1, 8 - strb r0, [r4, 0x1C] - strb r1, [r4, 0x1D] - ldrh r0, [r5, 0xC] - strh r0, [r4, 0x1E] - ldrh r0, [r5, 0x28] - strh r0, [r4, 0x20] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804DB28: .4byte gIngameTradeMail - thumb_func_end sub_804DAD4 +.section .text.sub_804DB2C thumb_func_start sub_804DB2C sub_804DB2C: @ 804DB2C diff --git a/ld_script.txt b/ld_script.txt index 071c9c54c..d9cf9bf7d 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -82,6 +82,10 @@ SECTIONS { src/pokeball.o(.text); src/load_save.o(.text); asm/trade.o(.text); + src/trade.o(.text); + asm/trade.o(.text.sub_804A9F4); + src/trade.o(.text.sub_804DAD4); + asm/trade.o(.text.sub_804DB2C); asm/berry_blender.o(.text); src/play_time.o(.text); src/new_game.o(.text); diff --git a/src/trade.c b/src/trade.c new file mode 100644 index 000000000..533a5b5cf --- /dev/null +++ b/src/trade.c @@ -0,0 +1,88 @@ +#include "global.h" +#include "name_string_util.h" +#include "string_util.h" +#include "text.h" + +struct InGameTrade { + /*0x00*/ u8 name[11]; + /*0x0C*/ u16 species; + /*0x0E*/ u8 ivs[6]; + /*0x14*/ bool8 secondAbility; + /*0x18*/ u32 otId; + /*0x1C*/ u8 stats[5]; + /*0x24*/ u32 personality; + /*0x28*/ u16 heldItem; + /*0x2A*/ u8 mailNum; + /*0x2B*/ u8 otName[11]; + /*0x36*/ u8 otGender; + /*0x37*/ u8 sheen; + /*0x38*/ u16 playerSpecies; +}; + +struct UnkStructC { + /*0x00*/ u16 words[9]; + /*0x10*/ u8 string[8]; + /*0x1A*/ u8 otId[4]; + /*0x1E*/ u16 species; + /*0x20*/ u16 heldItem; +}; + +struct UnkStructD { + /*0x00*/ u8 pad00[0x10]; + /*0x10*/ u8 var10; + /*0x11*/ u8 pad11[1]; + /*0x12*/ u16 var12[1]; +}; + +extern const struct InGameTrade gIngameTrades[]; +extern const u16 gIngameTradeMail[][10]; + + +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++) + { + + for (x = 0; x < width; x++) + { + arg0->var12[(top * 32 + left) + y * 32 + x] = tilemap[width * y + x] | sp8; + } + } + +#if ENGLISH + arg0->var10 = 1; +#endif +} + +#if GERMAN +void sub_804AD20(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { + sub_804A96C(arg0, left, top, tilemap, width, height, sp8); + + arg0->var10 = 1; +} +#endif + +asm(".section .text.sub_804DAD4"); + +void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { + s32 i; + + for (i = 0; i < 9; i++) + { + arg0->words[i] = gIngameTradeMail[trade->mailNum][i]; + } + + StringCopy(arg0->string, trade->otName); + +#if GERMAN + PadNameString(arg0->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; +} |