diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-09-02 20:06:47 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-09-02 20:06:47 -0400 |
commit | e32ae86756636812ab899b543ebe4c943459cd49 (patch) | |
tree | 2f96d38627cf112b67e38af42366cf24186fff66 | |
parent | e36682b776b03c69b7d6dc3f2bfce5e97c255830 (diff) |
sub_804A51C
-rw-r--r-- | asm/trade.s | 358 | ||||
-rw-r--r-- | include/daycare.h | 1 | ||||
-rw-r--r-- | include/graphics.h | 1 | ||||
-rw-r--r-- | src/trade.c | 218 |
4 files changed, 216 insertions, 362 deletions
diff --git a/asm/trade.s b/asm/trade.s index 5930eff3d..032a31051 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -495,364 +495,6 @@ _0804A2B0: .4byte gUnknown_03004824 .section .text.sub_804A33C - thumb_func_start sub_804A41C -sub_804A41C: @ 804A41C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x44 - lsls r0, 24 - lsrs r5, r0, 24 - add r3, sp, 0x1C - movs r2, 0 - movs r1, 0xFC - strb r1, [r3] - movs r0, 0x6 - strb r0, [r3, 0x1] - movs r0, 0x4 - strb r0, [r3, 0x2] - strb r1, [r3, 0x3] - movs r0, 0x11 - strb r0, [r3, 0x4] - strb r2, [r3, 0x5] - movs r6, 0 - ldr r1, _0804A470 @ =gUnknown_03004824 - ldr r0, [r1] - adds r0, 0x42 - adds r0, r5 - ldrb r0, [r0] - cmp r6, r0 - bcs _0804A504 - mov r8, r3 - adds r7, r1, 0 - ldr r0, _0804A474 @ =gTradeMonSpriteCoords - mov r9, r0 - movs r4, 0x1 - add r4, r9 - mov r10, r4 -_0804A462: - cmp r5, 0 - bne _0804A47C - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804A478 @ =gPlayerParty - b _0804A484 - .align 2, 0 -_0804A470: .4byte gUnknown_03004824 -_0804A474: .4byte gTradeMonSpriteCoords -_0804A478: .4byte gPlayerParty -_0804A47C: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804A514 @ =gEnemyParty -_0804A484: - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x2 - add r2, sp, 0x4 - bl GetMonData - mov r0, sp - adds r0, 0x22 - add r1, sp, 0x4 - bl StringCopy10 - adds r0, r4, 0 - bl GetMonGender - mov r1, sp - adds r1, 0x22 - ldr r0, _0804A518 @ =gWindowConfig_81E7294 - bl GetStringWidthGivenWindowConfig - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x32 - subs r1, r0 - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - mov r0, r8 - strb r1, [r0, 0x5] - ldr r1, [r7] - adds r0, r1, 0x4 - adds r1, 0x7A - lsls r2, r5, 5 - adds r2, r5 - lsls r2, 2 - ldrb r1, [r1] - adds r2, r1 - movs r1, 0x16 - muls r1, r6 - adds r2, r1 - lsls r2, 16 - lsrs r2, 16 - lsls r1, r5, 1 - adds r1, r5 - lsls r1, 1 - adds r1, r6, r1 - lsls r1, 1 - mov r4, r9 - adds r3, r1, r4 - ldrb r3, [r3] - add r1, r10 - ldrb r1, [r1] - str r1, [sp] - mov r1, r8 - bl sub_8003460 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, [r7] - adds r0, 0x42 - adds r0, r5 - ldrb r0, [r0] - cmp r6, r0 - bcc _0804A462 -_0804A504: - add sp, 0x44 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804A514: .4byte gEnemyParty -_0804A518: .4byte gWindowConfig_81E7294 - thumb_func_end sub_804A41C - - thumb_func_start sub_804A51C -sub_804A51C: @ 804A51C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - ldr r4, [sp, 0x48] - ldr r5, [sp, 0x4C] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x24] - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _0804A59C @ =gUnknown_03004824 - ldr r0, [r0] - adds r0, 0xC8 - ldr r3, _0804A5A0 @ =gTradeMonBoxTilemap - movs r1, 0x6 - str r1, [sp] - movs r1, 0x3 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_804A96C - mov r0, r8 - cmp r0, 0 - bne _0804A5A8 - movs r0, 0x64 - mov r4, r9 - muls r4, r0 - ldr r0, _0804A5A4 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r4, 0 - movs r1, 0x2 - add r2, sp, 0xC - bl GetMonData - b _0804A5D4 - .align 2, 0 -_0804A59C: .4byte gUnknown_03004824 -_0804A5A0: .4byte gTradeMonBoxTilemap -_0804A5A4: .4byte gPlayerParty -_0804A5A8: - movs r0, 0x64 - mov r4, r9 - muls r4, r0 - ldr r0, _0804A65C @ =gEnemyParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r4, 0 - movs r1, 0x2 - add r2, sp, 0xC - bl GetMonData -_0804A5D4: - ldr r1, _0804A660 @ =gUnknown_03004824 - ldr r5, [r1] - mov r3, r8 - lsls r0, r3, 1 - add r0, r8 - lsls r0, 1 - add r0, r9 - adds r1, r5, 0 - adds r1, 0x5D - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0 - bne _0804A690 - adds r0, r6, 0 - movs r1, 0xA - bl __udivsi3 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, [sp, 0x24] - lsls r2, r0, 5 - cmp r4, 0 - beq _0804A614 - mov r1, r10 - adds r0, r1, r2 - lsls r0, 1 - adds r1, r5, 0 - adds r1, 0xDA - adds r1, r0 - adds r0, r4, 0 - adds r0, 0x60 - strh r0, [r1] -_0804A614: - ldr r3, _0804A660 @ =gUnknown_03004824 - ldr r4, [r3] - mov r0, r10 - adds r5, r0, r2 - adds r0, r5, 0x1 - lsls r0, 1 - adds r4, 0xDA - adds r4, r0 - adds r0, r6, 0 - movs r1, 0xA - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x70 - strh r0, [r4] - cmp r7, 0 - bne _0804A664 - add r0, sp, 0xC - movs r1, 0 - bl NameHasGenderSymbol - lsls r0, 24 - cmp r0, 0 - bne _0804A6CC - ldr r3, _0804A660 @ =gUnknown_03004824 - ldr r1, [r3] - adds r0, r5, 0 - subs r0, 0x1F - lsls r0, 1 - adds r1, 0xDA - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x1 - b _0804A6CA - .align 2, 0 -_0804A65C: .4byte gEnemyParty -_0804A660: .4byte gUnknown_03004824 -_0804A664: - cmp r7, 0xFE - bne _0804A6CC - add r0, sp, 0xC - movs r1, 0xFE - bl NameHasGenderSymbol - lsls r0, 24 - cmp r0, 0 - bne _0804A6CC - ldr r0, _0804A68C @ =gUnknown_03004824 - ldr r1, [r0] - adds r0, r5, 0 - subs r0, 0x1F - lsls r0, 1 - adds r1, 0xDA - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x2 - b _0804A6CA - .align 2, 0 -_0804A68C: .4byte gUnknown_03004824 -_0804A690: - ldr r1, [sp, 0x24] - lsls r0, r1, 5 - mov r1, r10 - adds r3, r1, r0 - adds r1, r3, 0 - subs r1, 0x20 - lsls r1, 1 - adds r2, r5, 0 - adds r2, 0xDA - adds r1, r2, r1 - adds r0, r3, 0 - subs r0, 0x21 - lsls r0, 1 - adds r0, r2, r0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, r3, 0 - subs r1, 0x1F - lsls r1, 1 - adds r1, r2, r1 - adds r0, r3, 0 - subs r0, 0x24 - lsls r0, 1 - adds r2, r0 - ldrh r2, [r2] - movs r3, 0x80 - lsls r3, 3 - adds r0, r3, 0 - orrs r0, r2 -_0804A6CA: - strh r0, [r1] -_0804A6CC: -.ifdef GERMAN - ldr r0, _0804A6E8 @ =gUnknown_03004824 - ldr r0, [r0] - adds r0, 0xD8 - movs r1, 0x1 - strb r1, [r0] -.endif - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 -.ifdef GERMAN - .align 2, 0 -_0804A6E8: .4byte gUnknown_03004824 -.endif - thumb_func_end sub_804A51C - thumb_func_start sub_804A6DC sub_804A6DC: @ 804A6DC push {r4-r7,lr} diff --git a/include/daycare.h b/include/daycare.h index b90c50610..7963d911a 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -10,5 +10,6 @@ void sub_8041950(void); void sub_8042044(struct Pokemon *mon, u16, u8); u8 sub_80422A0(void); u8 daycare_relationship_score_from_savegame(void); +bool8 NameHasGenderSymbol(const u8 *, u8); #endif // GUARD_DAYCARE_H diff --git a/include/graphics.h b/include/graphics.h index 09ef5343c..b196cfe1c 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2569,4 +2569,5 @@ extern const u16 gUnknown_08EA0328[]; extern const u16 gUnknown_08EA02C8[]; extern const u16 gUnknown_08EA0348[]; extern const u16 gUnknown_08EA15C8[]; +extern const u16 gTradeMonBoxTilemap[]; #endif // GUARD_GRAPHICS_H diff --git a/src/trade.c b/src/trade.c index ad97b0ca7..412e52102 100644 --- a/src/trade.c +++ b/src/trade.c @@ -22,8 +22,9 @@ #include "data2.h" #include "pokemon_summary_screen.h" #include "rom4.h" -#include "trade.h" #include "rom_8077ABC.h" +#include "daycare.h" +#include "trade.h" #ifdef ENGLISH #define sub_804A96C_alt sub_804A96C @@ -145,6 +146,7 @@ static void sub_8049E9C(u8); static u8 sub_80499F0(const u8 *, u8, u8); /*static*/ void sub_804A840(u8); /*static*/ u8 sub_804A2B4(u8 *, u8, u8); +/*static*/ void sub_804A96C_alt(struct UnkStructD *, u8, u8, const u16 *, u8, u8, u16); extern u8 gUnknown_020297D8[2]; extern u8 *gUnknown_020296CC[13]; @@ -2027,7 +2029,7 @@ static void sub_8049E9C(u8 a0) // u8 sp_plus_6c = temp0 < PARTY_SIZE ? 1 : 0; // u8 r8 = temp0 % 6; // s8 stringLength; -// u8 string[10]; +// u8 string[50]; // // switch (gUnknown_03004824->unk_0080[a0]) // { @@ -2063,13 +2065,13 @@ static void sub_8049E9C(u8 a0) // gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos1.y = gTradeMonSpriteCoords[sp_plus_6c][1] * 8 - 12; // gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos2.x = 0; // gSprites[gUnknown_03004824->partyIcons[sp_plus_6c][r8]].pos2.y = 0; -// stringLength = sub_804A2B4(&pokemon, sp_plus_6c, r8); +// stringLength = sub_804A2B4(&string[6], sp_plus_6c, r8); // string[0] = 0xFC; // string[1] = 0x06; // string[2] = 0x04; // string[3] = 0xFC; // string[4] = 0x11; -// string[5] = (64 - stringLength + (stringLength > 64 ? 1 : 0)) / 2; +// string[5] = (64 - stringLength) / 2; // sub_8003460(&gUnknown_03004824->window, string, sp_plus_6c * 192 + gUnknown_03004824->unk_007a, gUnknown_0820C334[sp_plus_6c][0], gUnknown_0820C334[sp_plus_6c][1]); // sub_804A33C() // break; @@ -2130,6 +2132,214 @@ void sub_804A33C(u8 *a0, u8 whichParty, u8 whichPokemon) } } +#ifdef NONMATCHING +void sub_804A41C(u8 whichParty) +{ + u8 i; + u8 nickname[22]; + u8 string[40]; + struct Pokemon *pokemon; + + string[0] = 0xFC; + string[1] = 0x06; + string[2] = 0x04; + string[3] = 0xFC; + string[4] = 0x11; + string[5] = 0x00; + + for (i = 0; i < gUnknown_03004824->partyCounts[whichParty]; i ++) + { + pokemon = whichParty == 0 ? &gPlayerParty[i] : &gEnemyParty[i]; + GetMonData(pokemon, MON_DATA_NICKNAME, nickname); + StringCopy10(string + 6, nickname); + GetMonGender(pokemon); + string[5] = (50 - GetStringWidthGivenWindowConfig(&gWindowConfig_81E7294, string + 6)) / 2; + sub_8003460(&gUnknown_03004824->window, string, gUnknown_03004824->unk_007a + 22 * 6 * whichParty + 22 * i, gTradeMonSpriteCoords[i + 6 * whichParty][0], gTradeMonSpriteCoords[i + 6 * whichParty][1]); + } +} +#else +__attribute__((naked)) +void sub_804A41C(u8 whichParty) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x44\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadd r3, sp, 0x1C\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0xFC\n" + "\tstrb r1, [r3]\n" + "\tmovs r0, 0x6\n" + "\tstrb r0, [r3, 0x1]\n" + "\tmovs r0, 0x4\n" + "\tstrb r0, [r3, 0x2]\n" + "\tstrb r1, [r3, 0x3]\n" + "\tmovs r0, 0x11\n" + "\tstrb r0, [r3, 0x4]\n" + "\tstrb r2, [r3, 0x5]\n" + "\tmovs r6, 0\n" + "\tldr r1, _0804A470 @ =gUnknown_03004824\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x42\n" + "\tadds r0, r5\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tbcs _0804A504\n" + "\tmov r8, r3\n" + "\tadds r7, r1, 0\n" + "\tldr r0, _0804A474 @ =gTradeMonSpriteCoords\n" + "\tmov r9, r0\n" + "\tmovs r4, 0x1\n" + "\tadd r4, r9\n" + "\tmov r10, r4\n" + "_0804A462:\n" + "\tcmp r5, 0\n" + "\tbne _0804A47C\n" + "\tmovs r0, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r0\n" + "\tldr r0, _0804A478 @ =gPlayerParty\n" + "\tb _0804A484\n" + "\t.align 2, 0\n" + "_0804A470: .4byte gUnknown_03004824\n" + "_0804A474: .4byte gTradeMonSpriteCoords\n" + "_0804A478: .4byte gPlayerParty\n" + "_0804A47C:\n" + "\tmovs r0, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r0\n" + "\tldr r0, _0804A514 @ =gEnemyParty\n" + "_0804A484:\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x2\n" + "\tadd r2, sp, 0x4\n" + "\tbl GetMonData\n" + "\tmov r0, sp\n" + "\tadds r0, 0x22\n" + "\tadd r1, sp, 0x4\n" + "\tbl StringCopy10\n" + "\tadds r0, r4, 0\n" + "\tbl GetMonGender\n" + "\tmov r1, sp\n" + "\tadds r1, 0x22\n" + "\tldr r0, _0804A518 @ =gWindowConfig_81E7294\n" + "\tbl GetStringWidthGivenWindowConfig\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmovs r1, 0x32\n" + "\tsubs r1, r0\n" + "\tlsrs r0, r1, 31\n" + "\tadds r1, r0\n" + "\tasrs r1, 1\n" + "\tmov r0, r8\n" + "\tstrb r1, [r0, 0x5]\n" + "\tldr r1, [r7]\n" + "\tadds r0, r1, 0x4\n" + "\tadds r1, 0x7A\n" + "\tlsls r2, r5, 5\n" + "\tadds r2, r5\n" + "\tlsls r2, 2\n" + "\tldrb r1, [r1]\n" + "\tadds r2, r1\n" + "\tmovs r1, 0x16\n" + "\tmuls r1, r6\n" + "\tadds r2, r1\n" + "\tlsls r2, 16\n" + "\tlsrs r2, 16\n" + "\tlsls r1, r5, 1\n" + "\tadds r1, r5\n" + "\tlsls r1, 1\n" + "\tadds r1, r6, r1\n" + "\tlsls r1, 1\n" + "\tmov r4, r9\n" + "\tadds r3, r1, r4\n" + "\tldrb r3, [r3]\n" + "\tadd r1, r10\n" + "\tldrb r1, [r1]\n" + "\tstr r1, [sp]\n" + "\tmov r1, r8\n" + "\tbl sub_8003460\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tldr r0, [r7]\n" + "\tadds r0, 0x42\n" + "\tadds r0, r5\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tbcc _0804A462\n" + "_0804A504:\n" + "\tadd sp, 0x44\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804A514: .4byte gEnemyParty\n" + "_0804A518: .4byte gWindowConfig_81E7294"); +} +#endif + +void sub_804A51C(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4, u8 a5) +{ + u8 nickname[24]; + u8 level; + u8 gender; + u8 lv_div_10; + sub_804A96C(&gUnknown_03004824->unk_00c8, a4, a5, gTradeMonBoxTilemap, 6, 3, 0); + if (a0 == 0) + { + level = GetMonData(&gPlayerParty[a1], MON_DATA_LEVEL, NULL); + gender = GetMonGender(&gPlayerParty[a1]); + GetMonData(&gPlayerParty[a1], MON_DATA_NICKNAME, nickname); + } + else + { + level = GetMonData(&gEnemyParty[a1], MON_DATA_LEVEL, NULL); + gender = GetMonGender(&gEnemyParty[a1]); + GetMonData(&gEnemyParty[a1], MON_DATA_NICKNAME, nickname); + } + if (gUnknown_03004824->unk_005d[a0][a1] == 0) + { + lv_div_10 = level / 10; + if (lv_div_10 != 0) + { + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3] = lv_div_10 + 0x60; + } + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 + 1] = (u8)(level % 10) + 0x70; + if (gender == MON_MALE) + { + if (!NameHasGenderSymbol(nickname, MON_MALE)) + { + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] += 1; + } + } + else if (gender == MON_FEMALE) + { + if (!NameHasGenderSymbol(nickname, MON_FEMALE)) + { + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] += 2; + } + } + } + else + { + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 32] = gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 33]; + gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 31] = gUnknown_03004824->unk_00c8.unk_12[a2 + 32 * a3 - 36] | 0x400; + } +#ifdef GERMAN + gUnknown_03004824->unk_00c8.unk_10 = 1; +#endif +} + asm(".section .text.sub_804A96C"); /*static*/ void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, const u16 *tilemap, u8 width, u8 height, u16 sp8) { |