through sub_801A3D0

This commit is contained in:
PikalaxALT 2019-04-01 14:09:56 -04:00
parent 1fe5208560
commit ce89cf6f75
3 changed files with 151 additions and 452 deletions

View File

@ -5,457 +5,6 @@
.text .text
thumb_func_start sub_801A064
sub_801A064: @ 801A064
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x8
adds r7, r0, 0
mov r8, r1
mov r6, sp
adds r6, 0x2
mov r0, sp
adds r1, r6, 0
bl PlayerGetDestCoords
add r4, sp, 0x4
mov r5, sp
adds r5, 0x6
adds r0, r4, 0
adds r1, r5, 0
bl player_get_pos_including_state_based_drift
lsls r0, r7, 2
adds r0, r7
subs r0, 0x38
lsls r0, 24
lsrs r0, 24
bl sub_8097C8C
mov r10, r6
mov r9, r4
adds r6, r5, 0
cmp r0, 0x1
bne _0801A0F0
mov r0, sp
movs r1, 0
ldrsh r2, [r0, r1]
mov r0, r10
movs r1, 0
ldrsh r3, [r0, r1]
adds r0, r7, 0
movs r1, 0
bl sub_80199E0
cmp r0, 0x1
beq _0801A15C
movs r0, 0
ldrsh r2, [r4, r0]
movs r1, 0
ldrsh r3, [r6, r1]
adds r0, r7, 0
movs r1, 0
bl sub_80199E0
cmp r0, 0x1
beq _0801A15C
mov r2, r8
ldrb r0, [r2, 0xB]
lsls r0, 31
lsrs r0, 31
ldrb r1, [r2, 0x2]
bl sub_8019978
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
adds r0, r7, 0
movs r1, 0
mov r3, r8
bl sub_8019FA4
_0801A0F0:
movs r5, 0x1
mov r4, r8
adds r4, 0x4
_0801A0F6:
ldrb r0, [r4]
cmp r0, 0
bne _0801A106
adds r0, r7, 0
adds r1, r5, 0
bl sub_801A02C
b _0801A154
_0801A106:
mov r0, sp
movs r1, 0
ldrsh r2, [r0, r1]
mov r0, r10
movs r1, 0
ldrsh r3, [r0, r1]
adds r0, r7, 0
adds r1, r5, 0
bl sub_80199E0
cmp r0, 0
bne _0801A154
mov r0, r9
movs r1, 0
ldrsh r2, [r0, r1]
movs r0, 0
ldrsh r3, [r6, r0]
adds r0, r7, 0
adds r1, r5, 0
bl sub_80199E0
cmp r0, 0
bne _0801A154
ldrb r2, [r4]
lsrs r0, r2, 3
movs r1, 0x1
ands r0, r1
movs r1, 0x7
ands r1, r2
bl sub_8019978
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
adds r0, r7, 0
adds r1, r5, 0
mov r3, r8
bl sub_8019FA4
_0801A154:
adds r4, 0x1
adds r5, 0x1
cmp r5, 0x4
ble _0801A0F6
_0801A15C:
add sp, 0x8
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_801A064
thumb_func_start sub_801A16C
sub_801A16C: @ 801A16C
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
ldrb r0, [r4, 0xA]
lsls r0, 25
lsrs r0, 25
subs r0, 0x40
cmp r0, 0x14
bhi _0801A20E
lsls r0, 2
ldr r1, =_0801A18C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.pool
.align 2, 0
_0801A18C:
.4byte _0801A1E0
.4byte _0801A200
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A200
.4byte _0801A200
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A200
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A20E
.4byte _0801A200
.4byte _0801A200
.4byte _0801A200
.4byte _0801A1E0
_0801A1E0:
ldrb r1, [r4, 0xB]
lsls r1, 31
lsrs r1, 31
ldrb r2, [r4, 0x2]
adds r0, r5, 0
bl sub_8019CF0
movs r4, 0
_0801A1F0:
adds r0, r5, 0
adds r1, r4, 0
bl sub_801A02C
adds r4, 0x1
cmp r4, 0x4
bls _0801A1F0
b _0801A20E
_0801A200:
adds r0, r5, 0
bl sub_8019D20
adds r0, r5, 0
adds r1, r4, 0
bl sub_801A064
_0801A20E:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_801A16C
thumb_func_start sub_801A214
sub_801A214: @ 801A214
push {r4,r5,lr}
adds r5, r0, 0
bl sub_8019D20
movs r4, 0
_0801A21E:
adds r0, r5, 0
adds r1, r4, 0
bl sub_801A02C
adds r4, 0x1
cmp r4, 0x4
ble _0801A21E
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_801A214
thumb_func_start sub_801A234
sub_801A234: @ 801A234
push {r4,r5,lr}
ldr r2, =gUnknown_02022C68
movs r1, 0
str r1, [r2]
movs r5, 0
ldr r4, [r0]
_0801A240:
ldrb r0, [r4, 0x1A]
movs r1, 0x3
ands r1, r0
cmp r1, 0x1
bne _0801A258
adds r0, r5, 0
adds r1, r4, 0
bl sub_801A16C
b _0801A264
.pool
_0801A258:
cmp r1, 0x2
bne _0801A264
adds r0, r5, 0
adds r1, r4, 0
bl sub_801A214
_0801A264:
adds r4, 0x20
adds r5, 0x1
cmp r5, 0x7
ble _0801A240
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_801A234
thumb_func_start sub_801A274
sub_801A274: @ 801A274
ldr r1, =gUnknown_02022C68
movs r0, 0x96
lsls r0, 1
str r0, [r1]
bx lr
.pool
thumb_func_end sub_801A274
thumb_func_start sub_801A284
sub_801A284: @ 801A284
push {lr}
adds r2, r0, 0
ldr r0, =gUnknown_02022C68
ldr r1, [r0]
adds r1, 0x1
str r1, [r0]
movs r0, 0x96
lsls r0, 1
cmp r1, r0
bls _0801A29E
adds r0, r2, 0
bl sub_801A234
_0801A29E:
pop {r0}
bx r0
.pool
thumb_func_end sub_801A284
thumb_func_start sub_801A2A8
sub_801A2A8: @ 801A2A8
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x18
adds r5, r0, 0
str r1, [sp, 0x4]
str r2, [sp, 0x8]
bl is_walking_or_running
cmp r0, 0
bne _0801A2F0
b _0801A396
_0801A2C4:
ldr r4, =gUnknown_082F076A
bl GetPlayerFacingDirection
lsls r0, 24
lsrs r0, 24
adds r0, r4
ldrb r2, [r0]
adds r0, r6, 0
ldr r1, [sp, 0xC]
bl sub_801A3B0
ldr r0, [sp, 0x4]
strh r6, [r0]
mov r1, sp
ldrh r2, [r1, 0xC]
ldr r1, [sp, 0x8]
strh r2, [r1]
movs r0, 0x1
b _0801A398
.pool
_0801A2F0:
mov r4, sp
adds r4, 0x2
mov r0, sp
adds r1, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer
movs r0, 0
str r0, [sp, 0xC]
ldr r0, =gUnknown_082F0740
adds r7, r5, 0
movs r1, 0
mov r10, r1
adds r2, r0, 0x2
str r2, [sp, 0x10]
str r0, [sp, 0x14]
_0801A30E:
movs r6, 0
ldr r4, [sp, 0x14]
movs r0, 0
ldrsh r4, [r4, r0]
mov r9, r4
ldr r1, [sp, 0x10]
mov r8, r1
ldr r5, =gUnknown_082F0760
_0801A31E:
mov r2, r10
adds r3, r2, r6
mov r0, sp
movs r4, 0
ldrsh r1, [r0, r4]
movs r0, 0
ldrsb r0, [r5, r0]
add r0, r9
adds r0, 0x7
cmp r1, r0
bne _0801A372
mov r1, sp
movs r2, 0x2
ldrsh r0, [r1, r2]
mov r4, r8
movs r2, 0
ldrsh r1, [r4, r2]
movs r2, 0x1
ldrsb r2, [r5, r2]
adds r1, r2
adds r1, 0x7
cmp r0, r1
bne _0801A372
adds r0, r3, 0
subs r0, 0x38
lsls r0, 24
lsrs r4, r0, 24
adds r0, r4, 0
bl sub_8097C8C
cmp r0, 0
bne _0801A372
adds r0, r4, 0
bl sub_8097D9C
cmp r0, 0
bne _0801A372
ldrb r1, [r7, 0x1A]
movs r0, 0x3
ands r0, r1
cmp r0, 0x1
beq _0801A2C4
_0801A372:
adds r5, 0x2
adds r6, 0x1
cmp r6, 0x4
ble _0801A31E
adds r7, 0x20
movs r4, 0x5
add r10, r4
ldr r0, [sp, 0x10]
adds r0, 0x4
str r0, [sp, 0x10]
ldr r1, [sp, 0x14]
adds r1, 0x4
str r1, [sp, 0x14]
ldr r2, [sp, 0xC]
adds r2, 0x1
str r2, [sp, 0xC]
cmp r2, 0x7
ble _0801A30E
_0801A396:
movs r0, 0
_0801A398:
add sp, 0x18
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.pool
thumb_func_end sub_801A2A8
thumb_func_start sub_801A3B0
sub_801A3B0: @ 801A3B0
push {r4,lr}
adds r4, r0, 0
adds r3, r1, 0
lsls r1, r2, 24
lsrs r1, 24
lsls r0, r3, 2
adds r0, r3
subs r0, 0x38
adds r0, r4
lsls r0, 24
lsrs r0, 24
bl sub_8097B78
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_801A3B0
thumb_func_start sub_801A3D0
sub_801A3D0: @ 801A3D0
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
lsls r3, r4, 5
adds r3, r2
adds r2, r3, 0
bl sub_8019F64
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
adds r0, r5, 0
adds r1, r4, 0
bl sub_801A3B0
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_801A3D0
thumb_func_start sub_801A3F4 thumb_func_start sub_801A3F4
sub_801A3F4: @ 801A3F4 sub_801A3F4: @ 801A3F4
push {lr} push {lr}

View File

@ -417,5 +417,6 @@ void sub_8097C44(u8 var, bool32 var2);
bool32 sub_8097C8C(u8 var); bool32 sub_8097C8C(u8 var);
void sub_8097BB4(u8 var1, u8 graphicsId); void sub_8097BB4(u8 var1, u8 graphicsId);
void sub_8097CC4(u8 var1, u8 var2); void sub_8097CC4(u8 var1, u8 var2);
bool32 sub_8097D9C(u8 var);
#endif //GUARD_FIELD_EVENT_OBJ_H #endif //GUARD_FIELD_EVENT_OBJ_H

View File

@ -14,7 +14,7 @@ EWRAM_DATA u32 gUnknown_02022C68 = 0;
u8 sub_8019DF4(void); u8 sub_8019DF4(void);
bool32 sub_8019F8C(u32 playerIdx, u32 arg1); bool32 sub_8019F8C(u32 playerIdx, u32 arg1);
void sub_801A3B0(u32 arg0, u32 arg1, u8 arg2); void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2);
ALIGNED(4) const u8 gUnknown_082F072C[][10] = { ALIGNED(4) const u8 gUnknown_082F072C[][10] = {
{0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42}, {0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42},
@ -460,3 +460,152 @@ void sub_801A02C(u32 a0, u32 a1)
sub_8019990(a0, a1, &x, &y); sub_8019990(a0, a1, &x, &y);
sub_8088B94(x, y, 0); sub_8088B94(x, y, 0);
} }
void sub_801A064(u32 r7, struct UnkLinkRfuStruct_02022B14 * r8)
{
s16 x, y, x2, y2;
s32 i;
PlayerGetDestCoords(&x, &y);
player_get_pos_including_state_based_drift(&x2, &y2);
if (sub_8097C8C(5 * r7 - 0x38) == 1)
{
if (sub_80199E0(r7, 0, x, y) == 1 || sub_80199E0(r7, 0, x2, y2) == 1)
{
return;
}
sub_8019FA4(r7, 0, sub_8019978(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8);
}
for (i = 1; i < 5; i++)
{
if (r8->unk_04[i - 1] == 0)
{
sub_801A02C(r7, i);
}
else if (sub_80199E0(r7, i, x, y) == 0 && sub_80199E0(r7, i, x2, y2) == 0)
{
sub_8019FA4(r7, i, sub_8019978((r8->unk_04[i - 1] >> 3) & 1, r8->unk_04[i - 1] & 7), r8);
}
}
}
void sub_801A16C(u32 r5, struct UnkLinkRfuStruct_02022B14 * r4)
{
u32 i;
switch (r4->unk_0a_0)
{
case 0x40:
case 0x54:
sub_8019CF0(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]);
for (i = 0; i < 5; i++)
{
sub_801A02C(r5, i);
}
break;
case 0x41:
case 0x44:
case 0x45:
case 0x48:
case 0x51:
case 0x52:
case 0x53:
sub_8019D20(r5);
sub_801A064(r5, r4);
break;
}
}
void sub_801A214(u32 r5, struct UnkLinkRfuStruct_02022B14 * unused)
{
s32 i;
sub_8019D20(r5);
for (i = 0; i < 5; i++)
{
sub_801A02C(r5, i);
}
}
void sub_801A234(struct UnkStruct_URoom *r0)
{
s32 i;
struct UnkStruct_x20 * r4;
gUnknown_02022C68 = 0;
for (i = 0, r4 = r0->field_0->arr; i < 8; i++)
{
if (r4[i].field_1A_0 == 1)
{
sub_801A16C(i, &r4[i].unk.field_0);
}
else if (r4[i].field_1A_0 == 2)
{
sub_801A214(i, &r4[i].unk.field_0);
}
}
}
void sub_801A274(void)
{
gUnknown_02022C68 = 300;
}
void sub_801A284(struct UnkStruct_URoom *r2)
{
if (++gUnknown_02022C68 > 300)
{
sub_801A234(r2);
}
}
bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
{
s16 x, y;
s32 i, j;
struct UnkStruct_x20 * r4;
if (!is_walking_or_running())
{
return FALSE;
}
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
for (i = 0, r4 = arg0->arr; i < 8; i++)
{
for (j = 0; j < 5; j++)
{
s32 r3 = 5 * i + j;
if (x != gUnknown_082F0740[i][0] + gUnknown_082F0760[j][0] + 7)
{
continue;
}
if (y != gUnknown_082F0740[i][1] + gUnknown_082F0760[j][1] + 7)
{
continue;
}
if (sub_8097C8C(r3 - 0x38) != 0)
{
continue;
}
if (sub_8097D9C(r3 - 0x38) != 0)
{
continue;
}
if (r4[i].field_1A_0 != 1)
{
continue;
}
sub_801A3B0(j, i, gUnknown_082F076A[GetPlayerFacingDirection()]);
*arg1 = j;
*arg2 = i;
return TRUE;
}
}
return FALSE;
}
void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2)
{
sub_8097B78(5 * arg1 - 0x38 + arg0, arg2);
}
void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2)
{
return sub_801A3B0(arg0, arg1, sub_8019F64(arg0, arg1, &arg2->arr[arg1].unk.field_0));
}