diff options
author | Diegoisawesome <diego@domoreaweso.me> | 2018-12-24 20:18:06 -0600 |
---|---|---|
committer | Diegoisawesome <diego@domoreaweso.me> | 2018-12-24 20:18:06 -0600 |
commit | dea41e1a7e6e73789431153d6c28dac3a3a73ac6 (patch) | |
tree | 1d6c950c379cbe6aad03d7a15a43befe5bb6cefa /src | |
parent | 2bca45bcf5460724770e8f0ef42200dba88299ae (diff) |
trade.c up to sub_807A7E0
Diffstat (limited to 'src')
-rw-r--r-- | src/trade.c | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/trade.c b/src/trade.c index c0a3bda89..f409e0206 100644 --- a/src/trade.c +++ b/src/trade.c @@ -3196,6 +3196,7 @@ u32 sub_807A5F4(struct Pokemon *a0, int a1, int a2) } } +#ifdef NONMATCHING s32 sub_807A728(void) { int val; @@ -3242,3 +3243,163 @@ s32 sub_807A728(void) } return 0; } +#else +NAKED +s32 sub_807A728(void) +{ + asm_unified("push {r4-r7,lr}\n\ + ldr r0, =gReceivedRemoteLinkPlayers\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _0807A7B4\n\ + movs r4, 0\n\ + bl GetMultiplayerId\n\ + ldr r5, =gLinkPlayers\n\ + movs r7, 0x1\n\ + eors r0, r7\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r1, [r1]\n\ + subs r0, r1, 0x1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x2\n\ + bls _0807A7B4\n\ + subs r0, r1, 0x4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1\n\ + bhi _0807A762\n\ + movs r4, 0x2\n\ +_0807A762:\n\ + cmp r4, 0\n\ + ble _0807A7B4\n\ + bl GetMultiplayerId\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r1, [r1, 0x12]\n\ + movs r6, 0xF0\n\ + adds r0, r6, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0807A7B0\n\ + cmp r4, 0x2\n\ + bne _0807A7B4\n\ + bl GetMultiplayerId\n\ + eors r0, r7\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r1, [r1, 0x12]\n\ + adds r0, r6, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0807A7B4\n\ + movs r0, 0x2\n\ + b _0807A7B6\n\ + .pool\n\ +_0807A7B0:\n\ + movs r0, 0x1\n\ + b _0807A7B6\n\ +_0807A7B4:\n\ + movs r0, 0\n\ +_0807A7B6:\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1"); +} +#endif // NONMATCHING + +bool32 sub_807A7BC(u16 a0, u8 a1) +{ + if (a0 == SPECIES_DEOXYS || a0 == SPECIES_MEW) + { + if (!a1) + { + return TRUE; + } + } + return FALSE; +} + +u32 sub_807A7E0(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 a2, u16 a3, u8 a4, u16 a5, u8 a6) +{ + u8 r9 = a0.unk_01_0; + u8 r2 = a0.unk_00_7; + u8 r10 = a1.unk_01_0; + u8 r0 = a1.unk_00_7; + u8 r1 = a1.unk_01_2; + + if (r1 != 3) + { + if (!r2) + { + return 8; + } + else if (!r0) + { + return 9; + } + } + + if (sub_807A7BC(a5, a6)) + { + return 4; + } + + if (a3 == SPECIES_EGG) + { + if (a2 != a3) + { + return 2; + } + } + else + { + if (gBaseStats[a2].type1 != a4 && gBaseStats[a2].type2 != a4) + { + return 1; + } + } + + if (a2 == SPECIES_EGG && a2 != a3) + { + return 3; + } + + if (!r9) + { + if (a2 == SPECIES_EGG) + { + return 6; + } + + if (!IsSpeciesInHoennDex(a2)) + { + return 4; + } + + if (!IsSpeciesInHoennDex(a3)) + { + return 5; + } + } + + if (!r10 && !IsSpeciesInHoennDex(a2)) + { + return 7; + } + + return 0; +} |