Merge pull request #285 from hatal175/sub_08061464

Decompile sub_08061464
This commit is contained in:
notyourav 2022-01-11 19:48:55 -08:00 committed by GitHub
commit 0c6e21c4c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 294 deletions

View File

@ -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

View File

@ -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)
break;
this->field_0x6e.HALF.LO = uVar4;
_080615A4:
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;
case 0x18:
this->field_0x6e.HALF.LO = uVar5;
if ((s32)param_b < this->y.HALF.HI) {
}
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 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;