mirror of https://github.com/zeldaret/tmc.git
Decompile the rest of npc5
This commit is contained in:
parent
caa11c47ef
commit
5d7fec7f2d
|
|
@ -1,103 +0,0 @@
|
|||
.syntax unified
|
||||
.text
|
||||
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
sub sp, #8
|
||||
adds r4, r0, #0
|
||||
mov sb, r1
|
||||
mov r8, r2
|
||||
movs r0, #0x2e
|
||||
ldrsh r7, [r4, r0]
|
||||
movs r1, #0x32
|
||||
ldrsh r6, [r4, r1]
|
||||
mov r2, sb
|
||||
subs r0, r2, r7
|
||||
mov r5, r8
|
||||
subs r1, r5, r6
|
||||
bl sub_080045DA
|
||||
lsls r7, r7, #8
|
||||
lsls r6, r6, #8
|
||||
ldr r3, _08061058 @ =gSineTable
|
||||
lsls r1, r0, #1
|
||||
adds r1, r1, r3
|
||||
movs r5, #0
|
||||
ldrsh r2, [r1, r5]
|
||||
lsls r1, r2, #1
|
||||
adds r1, r1, r2
|
||||
lsls r1, r1, #1
|
||||
str r1, [sp]
|
||||
adds r0, #0x40
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r3
|
||||
movs r2, #0
|
||||
ldrsh r1, [r0, r2]
|
||||
lsls r0, r1, #1
|
||||
adds r0, r0, r1
|
||||
lsls r0, r0, #1
|
||||
str r0, [sp, #4]
|
||||
adds r4, #0x38
|
||||
ldrb r0, [r4]
|
||||
ldr r5, _0806105C @ =gUnk_0200D654
|
||||
mov sl, r5
|
||||
cmp r0, #2
|
||||
beq _0806102E
|
||||
ldr r0, _08061060 @ =gUnk_02027EB4
|
||||
mov sl, r0
|
||||
_0806102E:
|
||||
adds r1, r7, #0
|
||||
cmp r7, #0
|
||||
bge _08061036
|
||||
adds r1, #0xff
|
||||
_08061036:
|
||||
asrs r5, r1, #8
|
||||
adds r2, r6, #0
|
||||
cmp r6, #0
|
||||
bge _08061040
|
||||
adds r2, #0xff
|
||||
_08061040:
|
||||
asrs r4, r2, #8
|
||||
mov r0, sl
|
||||
adds r1, r5, #0
|
||||
adds r2, r4, #0
|
||||
movs r3, #6
|
||||
bl IsTileCollision
|
||||
cmp r0, #0
|
||||
beq _08061064
|
||||
movs r0, #0
|
||||
b _08061084
|
||||
.align 2, 0
|
||||
_08061058: .4byte gSineTable
|
||||
_0806105C: .4byte gUnk_0200D654
|
||||
_08061060: .4byte gUnk_02027EB4
|
||||
_08061064:
|
||||
mov r1, sb
|
||||
subs r0, r1, r5
|
||||
adds r0, #6
|
||||
cmp r0, #0xc
|
||||
bhi _08061078
|
||||
mov r2, r8
|
||||
subs r0, r2, r4
|
||||
adds r0, #6
|
||||
cmp r0, #0xc
|
||||
bls _08061082
|
||||
_08061078:
|
||||
ldr r5, [sp]
|
||||
adds r7, r7, r5
|
||||
ldr r0, [sp, #4]
|
||||
subs r6, r6, r0
|
||||
b _0806102E
|
||||
_08061082:
|
||||
movs r0, #1
|
||||
_08061084:
|
||||
add sp, #8
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
|
||||
.syntax divided
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
.syntax unified
|
||||
.text
|
||||
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r4, #0
|
||||
bl ProcessMovement6
|
||||
cmp r0, #0
|
||||
bne _080611CA
|
||||
adds r0, r4, #0
|
||||
bl sub_080611D4
|
||||
adds r5, r0, #0
|
||||
cmp r5, #0xff
|
||||
beq _080611C6
|
||||
movs r0, #6
|
||||
strb r0, [r4, #0xc]
|
||||
adds r0, r4, #0
|
||||
movs r1, #1
|
||||
bl sub_08079FD4
|
||||
lsls r0, r0, #4
|
||||
subs r0, #4
|
||||
lsls r0, r0, #0xc
|
||||
str r0, [r4, #0x20]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #1
|
||||
strh r1, [r4, #0x24]
|
||||
strb r5, [r4, #0x15]
|
||||
lsrs r1, r5, #2
|
||||
strb r1, [r4, #0x14]
|
||||
lsrs r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
beq _080611BE
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x14
|
||||
bl sub_08060E70
|
||||
b _080611C6
|
||||
_080611BE:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x18
|
||||
bl sub_08060E70
|
||||
_080611C6:
|
||||
movs r0, #0
|
||||
b _080611D2
|
||||
_080611CA:
|
||||
adds r0, r4, #0
|
||||
bl sub_08016AD2
|
||||
movs r0, #1
|
||||
_080611D2:
|
||||
pop {r4, r5, pc}
|
||||
|
||||
.syntax divided
|
||||
|
|
@ -1,138 +0,0 @@
|
|||
.syntax unified
|
||||
.text
|
||||
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r5, [r4, #0xd]
|
||||
cmp r5, #1
|
||||
beq _0806139C
|
||||
cmp r5, #1
|
||||
bgt _0806136C
|
||||
cmp r5, #0
|
||||
beq _08061376
|
||||
b _08061460
|
||||
_0806136C:
|
||||
cmp r5, #2
|
||||
beq _080613D0
|
||||
cmp r5, #3
|
||||
beq _0806141E
|
||||
b _08061460
|
||||
_08061376:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08061460
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xd]
|
||||
movs r0, #0xf
|
||||
strb r0, [r4, #0xe]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
bl sub_08060E70
|
||||
b _08061460
|
||||
_0806139C:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _08061460
|
||||
bl Random
|
||||
adds r6, r0, #0
|
||||
ands r5, r6
|
||||
cmp r5, #0
|
||||
beq _080613FA
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xd]
|
||||
ldr r3, _080613CC @ =gUnk_0810AC5D
|
||||
ldrb r0, [r4, #0x14]
|
||||
lsls r0, r0, #1
|
||||
lsrs r1, r6, #4
|
||||
movs r2, #3
|
||||
ands r1, r2
|
||||
adds r0, r0, r1
|
||||
adds r0, r0, r3
|
||||
b _0806143A
|
||||
.align 2, 0
|
||||
_080613CC: .4byte gUnk_0810AC5D
|
||||
_080613D0:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08061460
|
||||
movs r0, #0x18
|
||||
ands r0, r1
|
||||
lsrs r0, r0, #2
|
||||
strb r0, [r4, #0x14]
|
||||
bl Random
|
||||
adds r1, r0, #0
|
||||
movs r0, #1
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
beq _08061412
|
||||
_080613FA:
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xd]
|
||||
movs r0, #0x18
|
||||
ands r6, r0
|
||||
adds r0, r6, #0
|
||||
adds r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
adds r0, r4, #0
|
||||
movs r1, #4
|
||||
bl sub_08060E70
|
||||
b _08061460
|
||||
_08061412:
|
||||
strb r1, [r4, #0xd]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x10
|
||||
bl sub_08060E70
|
||||
b _08061460
|
||||
_0806141E:
|
||||
adds r0, r4, #0
|
||||
bl sub_08061170
|
||||
cmp r0, #0
|
||||
bne _08061448
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xd]
|
||||
ldr r2, _08061444 @ =gUnk_0810AC5D
|
||||
ldrb r0, [r4, #0x14]
|
||||
lsls r0, r0, #1
|
||||
lsrs r1, r6, #4
|
||||
ands r1, r5
|
||||
adds r0, r0, r1
|
||||
adds r0, r0, r2
|
||||
_0806143A:
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl InitAnimationForceUpdate
|
||||
b _08061460
|
||||
.align 2, 0
|
||||
_08061444: .4byte gUnk_0810AC5D
|
||||
_08061448:
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _08061460
|
||||
strb r0, [r4, #0xd]
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x10
|
||||
bl sub_08060E70
|
||||
_08061460:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
|
||||
.syntax divided
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
.syntax unified
|
||||
.text
|
||||
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x39
|
||||
movs r0, #0
|
||||
ldrsb r0, [r1, r0]
|
||||
cmp r0, #0
|
||||
beq _08061B54
|
||||
cmp r0, #1
|
||||
bne _08061B54
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl sub_08061AFC
|
||||
ldr r2, [r4, #0x68]
|
||||
ldrb r0, [r4, #0xe]
|
||||
adds r1, r0, #1
|
||||
strb r1, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x17
|
||||
adds r2, r2, r0
|
||||
ldrh r0, [r2, #2]
|
||||
cmp r0, #0
|
||||
bne _08061B4C
|
||||
strb r0, [r4, #0xe]
|
||||
_08061B4C:
|
||||
ldrh r0, [r2]
|
||||
adds r1, r4, #0
|
||||
bl MessageNoOverlap
|
||||
_08061B54:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
.syntax divided
|
||||
|
|
@ -35492,21 +35492,6 @@
|
|||
"start": 1095262,
|
||||
"size": 2
|
||||
},
|
||||
{
|
||||
"path": "npc5/gUnk_0810AC4C.bin",
|
||||
"start": 1092684,
|
||||
"size": 8
|
||||
},
|
||||
{
|
||||
"path": "npc5/gUnk_0810AC54.bin",
|
||||
"start": 1092692,
|
||||
"size": 9
|
||||
},
|
||||
{
|
||||
"path": "npc5/gUnk_0810AC5D.bin",
|
||||
"start": 1092701,
|
||||
"size": 19
|
||||
},
|
||||
{
|
||||
"path": "animations/gSpriteAnimations_Townsperson_0.bin",
|
||||
"start": 1096960,
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_0810AC1C:: @ 0810AC1C
|
||||
.4byte sub_08060A00
|
||||
.4byte sub_08061AA0
|
||||
.4byte sub_08061AA8
|
||||
.4byte sub_08061B58
|
||||
|
||||
gUnk_0810AC2C:: @ 0810AC2C
|
||||
.4byte sub_08060AE0
|
||||
.4byte sub_08060B5C
|
||||
.4byte sub_08060BA0
|
||||
.4byte sub_08060D78
|
||||
.4byte sub_08060DD0
|
||||
.4byte sub_08060DF4
|
||||
.4byte sub_08060DFC
|
||||
.4byte sub_08060E34
|
||||
|
||||
gUnk_0810AC4C:: @ 0810AC4C
|
||||
.incbin "npc5/gUnk_0810AC4C.bin"
|
||||
|
||||
gUnk_0810AC54:: @ 0810AC54
|
||||
.incbin "npc5/gUnk_0810AC54.bin"
|
||||
|
||||
gUnk_0810AC5D:: @ 0810AC5D
|
||||
.incbin "npc5/gUnk_0810AC5D.bin"
|
||||
|
||||
gUnk_0810AC70:: @ 0810AC70
|
||||
.4byte sub_08061ACC
|
||||
.4byte sub_08061B18
|
||||
|
|
@ -1188,7 +1188,7 @@ SECTIONS {
|
|||
data/animations/npc/forestMinish.o(.rodata);
|
||||
data/const/npc/postman.o(.rodata);
|
||||
data/animations/npc/postman.o(.rodata);
|
||||
data/const/npc/npc5.o(.rodata);
|
||||
src/npc/npc5.o(.rodata);
|
||||
data/animations/npc/npc5.o(.rodata);
|
||||
data/const/npc/townsperson.o(.rodata);
|
||||
data/animations/npc/townsperson.o(.rodata);
|
||||
|
|
|
|||
191
src/npc/npc5.c
191
src/npc/npc5.c
|
|
@ -2,10 +2,6 @@
|
|||
#include "message.h"
|
||||
#include "npc.h"
|
||||
|
||||
extern void (*const gUnk_0810AC1C[])(Entity*);
|
||||
|
||||
extern void (*const gUnk_0810AC2C[])(Entity*);
|
||||
|
||||
typedef struct {
|
||||
u8 unk_0; // u8
|
||||
u8 unk_0b; // u8
|
||||
|
|
@ -34,8 +30,21 @@ void sub_08061120(Entity*, u32, u32, u32);
|
|||
bool32 sub_08061170(Entity*);
|
||||
|
||||
void sub_08061358(Entity*);
|
||||
|
||||
void sub_08060E94(Entity*);
|
||||
void sub_08060A00(Entity*);
|
||||
void sub_08061AA0(Entity*);
|
||||
void sub_08061AA8(Entity*);
|
||||
void sub_08061B58(Entity*);
|
||||
void sub_08060AE0(Entity*);
|
||||
void sub_08060B5C(Entity*);
|
||||
void sub_08060BA0(Entity*);
|
||||
void sub_08060D78(Entity*);
|
||||
void sub_08060DD0(Entity*);
|
||||
void sub_08060DF4(Entity*);
|
||||
void sub_08060DFC(Entity*);
|
||||
void sub_08060E34(Entity*);
|
||||
void sub_08061ACC(Entity*);
|
||||
void sub_08061B18(Entity*);
|
||||
|
||||
u32 PointInsideRadius(s32, s32, s32);
|
||||
|
||||
|
|
@ -46,14 +55,6 @@ u32 sub_080611D4(Entity*);
|
|||
extern u32 sub_08079FD4(Entity*, u32);
|
||||
extern void sub_08016AD2(Entity*);
|
||||
|
||||
extern struct {
|
||||
s8 unk_0;
|
||||
s8 unk_1;
|
||||
} gUnk_0810AC4C[];
|
||||
extern u8 gUnk_0810AC54[8];
|
||||
|
||||
extern u8 gUnk_0810AC5D;
|
||||
|
||||
bool32 sub_08061630(Entity*, s32, s32, s32);
|
||||
bool32 sub_08061720(Entity*, s32, s32, s32);
|
||||
bool32 sub_080616A8(Entity*, s32, s32, s32);
|
||||
|
|
@ -71,8 +72,6 @@ bool32 sub_080619F0(u8*, s32, s32, s32);
|
|||
|
||||
bool32 sub_08061A48(u8*, s32, s32, s32);
|
||||
|
||||
extern void (*const gUnk_0810AC70[])(Entity*);
|
||||
|
||||
void sub_08061AFC(Entity*);
|
||||
|
||||
extern u16* gUnk_0810B660[8];
|
||||
|
|
@ -91,10 +90,19 @@ void CreateZeldaFollower(void) {
|
|||
|
||||
// UNUSED zelda follower, probably because it was too resource heavy
|
||||
void NPC5(Entity* this) {
|
||||
static void (*const gUnk_0810AC1C[])(Entity*) = {
|
||||
sub_08060A00,
|
||||
sub_08061AA0,
|
||||
sub_08061AA8,
|
||||
sub_08061B58,
|
||||
};
|
||||
gUnk_0810AC1C[this->type](this);
|
||||
}
|
||||
|
||||
void sub_08060A00(Entity* this) {
|
||||
static void (*const Npc5_Actions[])(Entity*) = {
|
||||
sub_08060AE0, sub_08060B5C, sub_08060BA0, sub_08060D78, sub_08060DD0, sub_08060DF4, sub_08060DFC, sub_08060E34,
|
||||
};
|
||||
u32 tmp;
|
||||
|
||||
if ((gPlayerState.jump_status & 0x80) != 0) {
|
||||
|
|
@ -108,7 +116,7 @@ void sub_08060A00(Entity* this) {
|
|||
}
|
||||
|
||||
if ((this->action == 0) || (this->spriteSettings.draw != 0)) {
|
||||
gUnk_0810AC2C[this->action](this);
|
||||
Npc5_Actions[this->action](this);
|
||||
}
|
||||
|
||||
if (this->action != 0) {
|
||||
|
|
@ -351,7 +359,40 @@ u32 sub_08060F80(Entity* this) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/npc5/sub_08060FD0.inc", bool32 sub_08060FD0(Entity* this, u32 a, u32 b))
|
||||
bool32 sub_08060FD0(Entity* this, u32 a, u32 b) {
|
||||
s32 sVar1;
|
||||
s32 sVar2;
|
||||
int iVar3;
|
||||
int x;
|
||||
int y;
|
||||
u8* puVar8;
|
||||
|
||||
x = this->x.HALF.HI;
|
||||
y = this->y.HALF.HI;
|
||||
iVar3 = sub_080045DA(a - x, b - y);
|
||||
x <<= 8;
|
||||
y <<= 8;
|
||||
sVar1 = gSineTable[iVar3] * 6;
|
||||
sVar2 = gSineTable[(iVar3 + 0x40)] * 6;
|
||||
|
||||
if (this->collisionLayer != 2) {
|
||||
puVar8 = gUnk_02027EB4;
|
||||
} else {
|
||||
puVar8 = gUnk_0200D654;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
if (IsTileCollision(puVar8, x / 0x100, y / 0x100, 6)) {
|
||||
return 0;
|
||||
}
|
||||
if (((a - (x / 0x100)) + 6 >= 0xd) || ((b - (y / 0x100)) + 6 >= 0xd)) {
|
||||
x += sVar1;
|
||||
y -= sVar2;
|
||||
continue;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08061090(Entity* this, u32 a, u32 b) {
|
||||
s32 xDist;
|
||||
|
|
@ -389,7 +430,7 @@ void sub_08061120(Entity* this, u32 param_a, u32 param_b, u32 param_c) {
|
|||
}
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/npc5/sub_08061170.inc", bool32 sub_08061170(Entity* this)) {
|
||||
bool32 sub_08061170(Entity* this) {
|
||||
u32 direction;
|
||||
u32 tmp;
|
||||
|
||||
|
|
@ -398,8 +439,10 @@ NONMATCH("asm/non_matching/npc5/sub_08061170.inc", bool32 sub_08061170(Entity* t
|
|||
direction = sub_080611D4(this);
|
||||
if (direction != 0xff) {
|
||||
this->action = 6;
|
||||
tmp = (sub_08079FD4(this, 1) * 0x10 - 4);
|
||||
// tmp <<= 0xc;
|
||||
tmp = (sub_08079FD4(this, 1));
|
||||
tmp <<= 4;
|
||||
tmp -= 4;
|
||||
tmp = tmp << 0xc;
|
||||
this->zVelocity = tmp;
|
||||
this->speed = 0x100;
|
||||
this->direction = direction;
|
||||
|
|
@ -416,16 +459,28 @@ NONMATCH("asm/non_matching/npc5/sub_08061170.inc", bool32 sub_08061170(Entity* t
|
|||
return TRUE;
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
u32 sub_080611D4(Entity* this) {
|
||||
u32 uVar2;
|
||||
static const struct {
|
||||
s8 unk_0;
|
||||
s8 unk_1;
|
||||
} PACKED gUnk_0810AC4C[] = {
|
||||
{ 0, -8 },
|
||||
{ 8, 0 },
|
||||
{ 0, 3 },
|
||||
{ -8, 0 },
|
||||
};
|
||||
|
||||
static const u8 gUnk_0810AC54[] = {
|
||||
0x2b, 0x10, 0x2a, 0x0, 0x2d, 0x8, 0x2c, 0x18, 0x0,
|
||||
};
|
||||
|
||||
u32 uVar2;
|
||||
u32 x;
|
||||
s32 a;
|
||||
s32 b;
|
||||
s8* ptr;
|
||||
u8* ptr2;
|
||||
const u8* ptr2;
|
||||
x = this->animationState & 6;
|
||||
ptr = (s8*)gUnk_0810AC4C;
|
||||
a = ptr[x];
|
||||
|
|
@ -487,13 +542,12 @@ u32 sub_08061230(Entity* this) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/npc5/sub_08061358.inc", void sub_08061358(Entity* this)) {
|
||||
void sub_08061358(Entity* this) {
|
||||
static const u8 gUnk_0810AC5D[] = {
|
||||
0x30, 0x31, 0x38, 0x39, 0x32, 0x33, 0x3a, 0x3b, 0x34, 0x35, 0x3c, 0x3d, 0x36, 0x37, 0x3e, 0x3f, 0x0, 0x0, 0x0,
|
||||
};
|
||||
u32 uVar2;
|
||||
s32 iVar3;
|
||||
u8 bVar4;
|
||||
u32 unaff_r6;
|
||||
|
||||
bVar4 = (u8)unaff_r6;
|
||||
u32 bVar4;
|
||||
|
||||
switch (this->subAction) {
|
||||
case 0:
|
||||
|
|
@ -504,57 +558,54 @@ NONMATCH("asm/non_matching/npc5/sub_08061358.inc", void sub_08061358(Entity* thi
|
|||
this->subAction = 1;
|
||||
this->actionDelay = 0xf;
|
||||
sub_08060E70(this, 0);
|
||||
return;
|
||||
break;
|
||||
case 1:
|
||||
this->actionDelay -= 1;
|
||||
asm("x");
|
||||
if (this->actionDelay != 0) {
|
||||
return;
|
||||
}
|
||||
uVar2 = Random();
|
||||
// bVar4 = (u8)uVar2;
|
||||
if ((uVar2 & 1) == 0)
|
||||
goto _080613FA;
|
||||
bVar4 = uVar2;
|
||||
if ((uVar2 & 1) == 0) {
|
||||
this->subAction = 3;
|
||||
this->actionDelay = (bVar4 & 0x18) + 0x1e;
|
||||
sub_08060E70(this, 4);
|
||||
return;
|
||||
}
|
||||
this->subAction = 2;
|
||||
iVar3 = (u32)this->animationState * 2 + (uVar2 >> 4 & 3);
|
||||
InitAnimationForceUpdate(this, (u32)(u8)(&gUnk_0810AC5D)[iVar3 + 1]);
|
||||
InitAnimationForceUpdate(this, gUnk_0810AC5D[(u32)this->animationState * 2 + ((uVar2 >> 4) & 3)]);
|
||||
break;
|
||||
case 2:
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if ((this->frame & 0x80) == 0) {
|
||||
return;
|
||||
}
|
||||
this->animationState = (u8)(((u8)this->frame & 0x18) >> 2);
|
||||
uVar2 = Random();
|
||||
if ((uVar2 & 1) == 0) {
|
||||
this->subAction = 0;
|
||||
sub_08060E70(this, 0x10);
|
||||
this->animationState = ((this->frame & 0x18) >> 2);
|
||||
if ((Random() & 1)) {
|
||||
this->subAction = 3;
|
||||
this->actionDelay = (bVar4 & 0x18) + 0x1e;
|
||||
sub_08060E70(this, 4);
|
||||
return;
|
||||
}
|
||||
_080613FA:
|
||||
this->subAction = 3;
|
||||
this->actionDelay = (bVar4 & 0x18) + 0x1e;
|
||||
sub_08060E70(this, 4);
|
||||
return;
|
||||
this->subAction = 0;
|
||||
sub_08060E70(this, 0x10);
|
||||
break;
|
||||
case 3:
|
||||
iVar3 = sub_08061170(this);
|
||||
if (iVar3 != 0) {
|
||||
this->subAction = this->actionDelay - 1;
|
||||
this->actionDelay = this->subAction;
|
||||
if (this->subAction != 0) {
|
||||
return;
|
||||
}
|
||||
this->subAction = 0;
|
||||
sub_08060E70(this, 0x10);
|
||||
if (sub_08061170(this) == 0) {
|
||||
this->subAction = 2;
|
||||
|
||||
//! @bug bVar4 (r6) is uninitialized.
|
||||
InitAnimationForceUpdate(this, gUnk_0810AC5D[this->animationState * 2 + (bVar4 >> 4 & 3)]);
|
||||
return;
|
||||
}
|
||||
this->subAction = 2;
|
||||
iVar3 = (u32)this->animationState * 2 + (unaff_r6 >> 4 & 3);
|
||||
InitAnimationForceUpdate(this, (u32)(u8)(&gUnk_0810AC5D)[iVar3 + 1]);
|
||||
if (--this->actionDelay != 0) {
|
||||
return;
|
||||
}
|
||||
this->subAction = 0;
|
||||
sub_08060E70(this, 0x10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_08061464(Entity* this, u32 param_a, u32 param_b) {
|
||||
s32 iVar10;
|
||||
|
|
@ -808,11 +859,15 @@ bool32 sub_08061A74(u8* layer, s32 x, s32 y, s32 param) {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_08061AA0(void) {
|
||||
void sub_08061AA0(Entity* this) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_08061AA8(Entity* this) {
|
||||
static void (*const gUnk_0810AC70[])(Entity*) = {
|
||||
sub_08061ACC,
|
||||
sub_08061B18,
|
||||
};
|
||||
gUnk_0810AC70[this->action](this);
|
||||
CopyPosition(this->parent, this);
|
||||
}
|
||||
|
|
@ -836,30 +891,24 @@ void sub_08061AFC(Entity* this) {
|
|||
}
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/npc5/sub_08061B18.inc", void sub_08061B18(Entity* this)) {
|
||||
void sub_08061B18(Entity* this) {
|
||||
u16* puVar2;
|
||||
|
||||
typedef struct {
|
||||
u16 unk_0;
|
||||
u16 unk_2;
|
||||
} Tmp;
|
||||
|
||||
switch (this->interactType) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
this->interactType = 0;
|
||||
sub_08061AFC(this);
|
||||
// puVar2 = (u16*)(*(int*)&this->field_0x68 + (((u32)this->actionDelay << 0x18) >> 0x17));
|
||||
// if puVar2[1] == 0
|
||||
if ((((Tmp**)&this->field_0x68))[++this->actionDelay]->unk_2 == 0) {
|
||||
puVar2 = *(u16**)&this->field_0x68;
|
||||
puVar2 += (this->actionDelay++);
|
||||
if (puVar2[1] == 0) {
|
||||
this->actionDelay = 0;
|
||||
}
|
||||
MessageNoOverlap((u32)*puVar2, this);
|
||||
MessageNoOverlap(puVar2[0], this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_08061B58(Entity* this) {
|
||||
if (this->action == 0) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue