diff --git a/asm/kinstone.s b/asm/kinstone.s index 1f666fd2..feb23266 100644 --- a/asm/kinstone.s +++ b/asm/kinstone.s @@ -220,29 +220,3 @@ _0801868C: pop {r4, r5, pc} .align 2, 0 - thumb_func_start sub_08018690 -sub_08018690: @ 0x08018690 - push {r4, r5, r6, lr} - adds r6, r1, #0 - subs r4, r0, #1 - cmp r4, #0 - beq _080186BC - lsls r0, r4, #1 - adds r5, r0, r6 -_0801869E: - bl Random - adds r1, r4, #1 - bl __modsi3 - ldrh r2, [r5] - lsls r0, r0, #1 - adds r0, r0, r6 - ldrh r1, [r0] - strh r1, [r5] - strh r2, [r0] - subs r5, #2 - subs r4, #1 - cmp r4, #0 - bne _0801869E -_080186BC: - pop {r4, r5, r6, pc} - .align 2, 0 diff --git a/src/kinstone.c b/src/kinstone.c index 0d4ee14e..c11ac3e2 100644 --- a/src/kinstone.c +++ b/src/kinstone.c @@ -7,6 +7,7 @@ #include "kinstone.h" #include "area.h" #include "manager.h" +#include "asm.h" extern EntityData gUnk_080FEC28[]; extern EntityData gUnk_080FEBE8[]; @@ -28,6 +29,30 @@ void sub_080189EC(int); void sub_0801876C(int, int); void sub_08018738(u32, int); +void sub_08018690(int param_1, u16* param_2) { + u32 uVar1; + s32 uVar4; + s32 uVar2; + s32 iVar3; + u16* puVar4; + u16* puVar5; + + uVar4 = param_1 - 1; + if (uVar4 != 0) { + puVar5 = (u16*)(uVar4 * 2 + (int)param_2); + do { + uVar2 = Random(); + iVar3 = uVar2 % (uVar4 + 1); + uVar1 = *puVar5; + puVar4 = (u16*)(iVar3 * 2 + (int)param_2); + *puVar5 = *puVar4; + *puVar4 = uVar1; + puVar5--; + uVar4--; + } while (uVar4 != 0); + } +} + void sub_080186C0(u32 param_1) { gArea.inventoryGfxIdx = 0xff; gArea.unk2C = param_1;