diff --git a/asm/non_matching/common/sub_0801E82C.inc b/asm/non_matching/common/sub_0801E82C.inc deleted file mode 100644 index 661d31ca..00000000 --- a/asm/non_matching/common/sub_0801E82C.inc +++ /dev/null @@ -1,69 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r1, _0801E8AC @ =gSave+0x114 - movs r5, #0 - adds r2, r1, #4 -_0801E83C: - ldrb r0, [r2, #0x13] - adds r3, r1, #4 - mov sl, r3 - cmp r0, #0 - bne _0801E848 - strb r0, [r2] -_0801E848: - adds r2, #1 - adds r5, #1 - cmp r5, #0x12 - bls _0801E83C - movs r0, #0 - strb r0, [r1, #0x16] - adds r2, r1, #0 - adds r2, #0x29 - strb r0, [r2] - movs r5, #0 - movs r0, #0x17 - adds r0, r0, r1 - mov sb, r0 - movs r3, #0x18 - adds r3, r3, r1 - mov r8, r3 - adds r7, r1, #4 - adds r6, r1, #5 -_0801E86C: - mov r1, sl - adds r0, r1, r5 - ldrb r0, [r0] - subs r0, #0x65 - cmp r0, #0x10 - bls _0801E890 - movs r4, #0x12 - subs r4, r4, r5 - adds r0, r6, #0 - adds r1, r7, #0 - adds r2, r4, #0 - bl MemCopy - mov r0, r8 - mov r1, sb - adds r2, r4, #0 - bl MemCopy -_0801E890: - movs r3, #1 - add sb, r3 - add r8, r3 - adds r7, #1 - adds r6, #1 - adds r5, #1 - cmp r5, #0x11 - bls _0801E86C - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801E8AC: .4byte gSave+0x114 - .syntax divided diff --git a/src/common.c b/src/common.c index 8cbddd2b..e343aa98 100644 --- a/src/common.c +++ b/src/common.c @@ -824,16 +824,72 @@ bool32 sub_0801E810(u32 kinstoneId) { return ReadBit(&gSave.unk24E, kinstoneId); } -ASM_FUNC("asm/non_matching/common/sub_0801E82C.inc", void sub_0801E82C(void)); +void sub_0801E82C(void) { +#ifdef NON_MATCHING + u32 r5; -s32 sub_0801E8B0(u32 idx) { - u32 i; - - for (i = 0; i < 18; ++i) { - if (idx == gSave.unk118[i]) - return i; + for (r5 = 0; r5 < 0x13; r5++) { + if (gSave.unk12B[r5] == 0) { + gSave.unk118[r5] = gSave.unk12B[r5]; + } } - return -1; + + gSave.unk118[0x12] = 0; + gSave.unk12B[0x12] = 0; + + for (r5 = 0; r5 < 0x12; r5++) { + if ((gSave.unk118[r5] - 0x65) > 0x10) { + MemCopy(&gSave.unk118[r5 + 1], &gSave.unk118[r5], 0x12 - r5); + MemCopy(&gSave.unk12B[r5 + 1], &gSave.unk12B[r5], 0x12 - r5); + } + } +#else + u32 r0, r4, r5; + u32 new_var; + u8 *r1, *r2, *r3, *r6, *r7, *r8, *r9, *r10; + + new_var = 4; + r1 = &gSave.inventory[34]; + r5 = 0; + r2 = gSave.unk118; +code0_0: + r0 = r2[0x13]; + r3 = &r1[4]; + r10 = r3; + if (r0 == 0) { + *r2 = r0; + } + r2++; + r5++; + if (r5 <= 0x12) + goto code0_0; + + r1[0x16] = 0; + r1[0x29] = 0; + r5 = 0; + r9 = &r1[0x17]; + r3 = &r1[0x18]; + r8 = r3; + r7 = &r1[new_var]; + r6 = &r1[5]; +code0_2: + r0 = r10[r5] - 0x65; + if (r0 > 0x10) { + MemCopy(r6, r7, 0x12 - r5); + MemCopy(r8, r9, 0x12 - r5); + } + r9++; + r8++; + r7++; + r6++; + r5++; + if (r5 <= 0x11) + goto code0_2; +#endif +} +return i; +} +return -1; } // Check conditions, something with kinstones