diff --git a/asm/non_matching/npc5/sub_08061464.inc b/asm/non_matching/npc5/sub_08061464.inc deleted file mode 100644 index aaba9f38..00000000 --- a/asm/non_matching/npc5/sub_08061464.inc +++ /dev/null @@ -1,230 +0,0 @@ - .syntax unified - .text - - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - mov r8, r1 - adds r5, r2, #0 - movs r0, #0x2e - ldrsh r7, [r4, r0] - movs r1, #0x32 - ldrsh r6, [r4, r1] - adds r0, r7, #0 - adds r1, r6, #0 - mov r2, r8 - adds r3, r5, #0 - bl sub_080045D4 - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - lsrs r0, r0, #2 - cmp r0, #7 - bls _08061494 - b _08061612 -_08061494: - lsls r0, r0, #2 - ldr r1, _080614A0 @ =_080614A4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080614A0: .4byte _080614A4 -_080614A4: @ jump table - .4byte _080614C4 @ case 0 - .4byte _080614E2 @ case 1 - .4byte _08061514 @ case 2 - .4byte _08061544 @ case 3 - .4byte _08061566 @ case 4 - .4byte _08061584 @ case 5 - .4byte _080615B4 @ case 6 - .4byte _080615E4 @ case 7 -_080614C4: - adds r0, r4, #0 - adds r0, #0x6e - strh r5, [r0] - movs r1, #0x2e - ldrsh r0, [r4, r1] - cmp r0, r8 - ble _08061504 - adds r2, r6, #0 - subs r2, #8 - adds r0, r4, #0 - adds r1, r7, #0 - mov r3, r8 - bl sub_08061630 - b _08061612 -_080614E2: - movs r0, #0x6e - adds r0, r0, r4 - mov sb, r0 - mov r1, r8 - strh r1, [r0] - adds r1, r7, #0 - adds r1, #8 - adds r0, r4, #0 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08061720 - cmp r0, #0 - beq _08061500 - b _08061612 -_08061500: - mov r0, sb - strh r5, [r0] -_08061504: - adds r2, r6, #0 - subs r2, #8 - adds r0, r4, #0 - adds r1, r7, #0 - mov r3, r8 - bl sub_080616A8 - b _08061612 -_08061514: - adds r0, r4, #0 - adds r0, #0x6e - mov r1, r8 - strh r1, [r0] - movs r1, #0x32 - ldrsh r0, [r4, r1] - cmp r0, r5 - ble _08061534 - adds r1, r7, #0 - adds r1, #8 - adds r0, r4, #0 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08061720 - b _08061612 -_08061534: - adds r1, r7, #0 - adds r1, #8 - adds r0, r4, #0 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08061798 - b _08061612 -_08061544: - movs r0, #0x6e - adds r0, r0, r4 - mov sb, r0 - mov r1, r8 - strh r1, [r0] - adds r1, r7, #0 - adds r1, #8 - adds r0, r4, #0 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08061798 - cmp r0, #0 - bne _08061612 - mov r0, sb - strh r5, [r0] - b _08061574 -_08061566: - adds r0, r4, #0 - adds r0, #0x6e - strh r5, [r0] - movs r1, #0x2e - ldrsh r0, [r4, r1] - cmp r0, r8 - bgt _080615A4 -_08061574: - adds r2, r6, #0 - adds r2, #8 - adds r0, r4, #0 - adds r1, r7, #0 - mov r3, r8 - bl sub_08061888 - b _08061612 -_08061584: - movs r0, #0x6e - adds r0, r0, r4 - mov sb, r0 - mov r1, r8 - strh r1, [r0] - adds r1, r7, #0 - subs r1, #8 - adds r0, r4, #0 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08061978 - cmp r0, #0 - bne _08061612 - mov r0, sb - strh r5, [r0] -_080615A4: - adds r2, r6, #0 - adds r2, #8 - adds r0, r4, #0 - adds r1, r7, #0 - mov r3, r8 - bl sub_08061810 - b _08061612 -_080615B4: - adds r0, r4, #0 - adds r0, #0x6e - mov r1, r8 - strh r1, [r0] - movs r1, #0x32 - ldrsh r0, [r4, r1] - cmp r0, r5 - ble _080615D4 - adds r1, r7, #0 - subs r1, #8 - adds r0, r4, #0 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08061900 - b _08061612 -_080615D4: - adds r1, r7, #0 - subs r1, #8 - adds r0, r4, #0 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08061978 - b _08061612 -_080615E4: - movs r0, #0x6e - adds r0, r0, r4 - mov sb, r0 - mov r1, r8 - strh r1, [r0] - adds r1, r7, #0 - subs r1, #8 - adds r0, r4, #0 - adds r2, r6, #0 - adds r3, r5, #0 - bl sub_08061900 - cmp r0, #0 - bne _08061612 - mov r0, sb - strh r5, [r0] - adds r2, r6, #0 - subs r2, #8 - adds r0, r4, #0 - adds r1, r7, #0 - mov r3, r8 - bl sub_08061630 -_08061612: - ldr r0, [r4, #0x64] - ldrb r1, [r0] - movs r0, #8 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _08061628 - movs r0, #3 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] -_08061628: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - - .syntax divided diff --git a/src/npc/npc5.c b/src/npc/npc5.c index 9fee31ab..3c2f89b3 100644 --- a/src/npc/npc5.c +++ b/src/npc/npc5.c @@ -556,100 +556,81 @@ NONMATCH("asm/non_matching/npc5/sub_08061358.inc", void sub_08061358(Entity* thi } END_NONMATCH -NONMATCH("asm/non_matching/npc5/sub_08061464.inc", void sub_08061464(Entity* this, u32 param_a, u32 param_b)) { - u8 bVar1; - s16 sVar2; - s16 sVar3; - u16 uVar4; - u32 uVar6; - u32 uVar7; - s32 iVar8; - s32 iVar9; +void sub_08061464(Entity* this, u32 param_a, u32 param_b) { s32 iVar10; - u16 uVar5; + s32 iVar9; + u32 bVar1; - sVar2 = this->x.HALF.HI; - iVar10 = (s32)sVar2; - sVar3 = this->y.HALF.HI; - iVar9 = (s32)sVar3; - uVar6 = sub_080045D4(sVar2, sVar3, param_a, param_b); - // uVar7 = (uVar6 + 2) & 0x1c; - // if (7 < uVar7 >> 2) - // goto _08061612; - // uVar4 = (u16)param_b; - // uVar5 = (u16)param_a; - // asm("----"); - switch (uVar7) { + iVar10 = this->x.HALF.HI; + iVar9 = this->y.HALF.HI; + + switch (((sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b) + 2) & 0x1c) >> 2) { case 0: - this->field_0x6e.HALF.LO = uVar4; - if ((s32)param_a < this->x.HALF.HI) { + this->field_0x6e.HWORD = param_b; + if (this->x.HALF.HI > (s32)param_a) { sub_08061630(this, iVar10, iVar9 + -8, param_a); break; } - goto _08061504; - case 4: - this->field_0x6e.HALF.LO = uVar5; - iVar8 = sub_08061720(this, iVar10 + 8, iVar9, param_b); - if (iVar8 != 0) - break; - this->field_0x6e.HALF.LO = uVar4; - _08061504: sub_080616A8(this, iVar10, iVar9 + -8, param_a); break; - case 8: - this->field_0x6e.HALF.LO = uVar5; - if ((s32)param_b < this->y.HALF.HI) { + case 1: + this->field_0x6e.HWORD = param_a; + if (sub_08061720(this, iVar10 + 8, iVar9, param_b) != 0) + break; + this->field_0x6e.HWORD = param_b; + sub_080616A8(this, iVar10, iVar9 + -8, param_a); + break; + case 2: + this->field_0x6e.HWORD = param_a; + if (this->y.HALF.HI > (s32)param_b) { sub_08061720(this, iVar10 + 8, iVar9, param_b); } else { sub_08061798(this, iVar10 + 8, iVar9, param_b); } break; - case 0xc: - this->field_0x6e.HALF.LO = uVar5; - iVar8 = sub_08061798(this, iVar10 + 8, iVar9, param_b); - if (iVar8 != 0) + case 3: + this->field_0x6e.HWORD = param_a; + if (sub_08061798(this, iVar10 + 8, iVar9, param_b) != 0) break; - this->field_0x6e.HALF.LO = uVar4; - goto _08061574; - case 0x10: - this->field_0x6e.HALF.LO = uVar4; - if ((s32)param_a < this->x.HALF.HI) - goto _080615A4; - _08061574: + this->field_0x6e.HWORD = param_b; sub_08061888(this, iVar10, iVar9 + 8, param_a); break; - case 0x14: - this->field_0x6e.HALF.LO = uVar5; - iVar8 = sub_08061978(this, iVar10 + -8, iVar9, param_b); - if (iVar8 != 0) + case 4: + this->field_0x6e.HWORD = param_b; + if (this->x.HALF.HI > (s32)param_a) { + sub_08061810(this, iVar10, iVar9 + 8, param_a); break; - this->field_0x6e.HALF.LO = uVar4; - _080615A4: + } + sub_08061888(this, iVar10, iVar9 + 8, param_a); + break; + case 5: + this->field_0x6e.HWORD = param_a; + if (sub_08061978(this, iVar10 + -8, iVar9, param_b) != 0) + break; + this->field_0x6e.HWORD = param_b; sub_08061810(this, iVar10, iVar9 + 8, param_a); break; - case 0x18: - this->field_0x6e.HALF.LO = uVar5; - if ((s32)param_b < this->y.HALF.HI) { + case 6: + this->field_0x6e.HWORD = param_a; + if (this->y.HALF.HI > (s32)param_b) { sub_08061900(this, iVar10 + -8, iVar9, param_b); } else { sub_08061978(this, iVar10 + -8, iVar9, param_b); } break; - case 0x1c: - this->field_0x6e.HALF.LO = uVar5; - iVar8 = sub_08061900(this, iVar10 + -8, iVar9, param_b); - if (iVar8 == 0) { - this->field_0x6e.HALF.LO = uVar4; + case 7: + this->field_0x6e.HWORD = param_a; + if (sub_08061900(this, iVar10 + -8, iVar9, param_b) == 0) { + this->field_0x6e.HWORD = param_b; sub_08061630(this, iVar10, iVar9 + -8, param_a); } } - bVar1 = ((UnkHeap*)this->myHeap)->unk_0; - if ((bVar1 & 8) == 0) { + bVar1 = ((UnkHeap*)this->myHeap)->unk_0 & 8; + if (bVar1 == 0) { this->action = 3; - this->subAction = bVar1 & 8; + this->subAction = bVar1; } } -END_NONMATCH bool32 sub_08061630(Entity* this, s32 x, s32 y, s32 param) { u32 param_y = y;