Tridirectional spinners

This commit is contained in:
scnorton 2017-09-15 16:08:01 -04:00
parent f6840ba7e7
commit 2e1ecdb877
3 changed files with 216 additions and 672 deletions

View File

@ -5,678 +5,6 @@
.text
thumb_func_start FieldObjectCB_RandomlyLookNorthOrSouthOrWest
FieldObjectCB_RandomlyLookNorthOrSouthOrWest: @ 80907D0
push {lr}
adds r1, r0, 0
movs r0, 0x2E
ldrsh r2, [r1, r0]
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80907F4
bl FieldObjectStep
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectCB_RandomlyLookNorthOrSouthOrWest
thumb_func_start sub_80907F4
sub_80907F4: @ 80907F4
push {r4,lr}
ldr r3, =gUnknown_0850D83C
movs r4, 0x30
ldrsh r2, [r1, r4]
lsls r2, 2
adds r2, r3
ldr r2, [r2]
bl _call_via_r2
lsls r0, 24
lsrs r0, 24
pop {r4}
pop {r1}
bx r1
.pool
thumb_func_end sub_80907F4
thumb_func_start sub_8090814
sub_8090814: @ 8090814
push {r4,lr}
adds r4, r1, 0
bl npc_reset
movs r0, 0x1
strh r0, [r4, 0x30]
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8090814
thumb_func_start sub_8090828
sub_8090828: @ 8090828
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x18]
lsls r0, 28
lsrs r0, 28
bl GetFaceDirectionAnimId
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
adds r0, r4, 0
adds r1, r5, 0
bl FieldObjectSetRegularAnim
movs r0, 0x2
strh r0, [r5, 0x30]
movs r0, 0x1
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8090828
thumb_func_start sub_8090854
sub_8090854: @ 8090854
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
bl FieldObjectExecRegularAnim
lsls r0, 24
cmp r0, 0
beq _0809088A
ldr r4, =gUnknown_0850D6EC
bl Random
movs r5, 0x3
adds r1, r5, 0
ands r1, r0
lsls r1, 1
adds r1, r4
movs r0, 0
ldrsh r1, [r1, r0]
adds r0, r7, 0
bl SetFieldObjectStepTimer
ldrb r1, [r6]
movs r0, 0x3
negs r0, r0
ands r0, r1
strb r0, [r6]
strh r5, [r7, 0x30]
_0809088A:
movs r0, 0
pop {r4-r7}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090854
thumb_func_start sub_8090898
sub_8090898: @ 8090898
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r0, r5, 0
bl RunFieldObjectStepTimer
lsls r0, 24
cmp r0, 0
bne _080908B6
adds r0, r4, 0
bl FieldObjectIsTrainerAndCloseToPlayer
lsls r0, 24
cmp r0, 0
beq _080908BE
_080908B6:
movs r0, 0x4
strh r0, [r5, 0x30]
movs r0, 0x1
b _080908C0
_080908BE:
movs r0, 0
_080908C0:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8090898
thumb_func_start sub_80908C8
sub_80908C8: @ 80908C8
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
adds r5, r1, 0
ldr r1, =gUnknown_0850D850
mov r0, sp
movs r2, 0x4
bl memcpy
adds r0, r4, 0
movs r1, 0x7
bl GetRunningPastFacingDirection
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
bne _080908F8
bl Random
movs r1, 0x3
ands r1, r0
mov r2, sp
adds r0, r2, r1
ldrb r1, [r0]
_080908F8:
adds r0, r4, 0
bl FieldObjectSetDirection
movs r0, 0x1
strh r0, [r5, 0x30]
add sp, 0x4
pop {r4,r5}
pop {r1}
bx r1
.pool
thumb_func_end sub_80908C8
thumb_func_start FieldObjectCB_RandomlyLookNorthOrSouthOrEast
FieldObjectCB_RandomlyLookNorthOrSouthOrEast: @ 8090910
push {lr}
adds r1, r0, 0
movs r0, 0x2E
ldrsh r2, [r1, r0]
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090934
bl FieldObjectStep
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectCB_RandomlyLookNorthOrSouthOrEast
thumb_func_start sub_8090934
sub_8090934: @ 8090934
push {r4,lr}
ldr r3, =gUnknown_0850D854
movs r4, 0x30
ldrsh r2, [r1, r4]
lsls r2, 2
adds r2, r3
ldr r2, [r2]
bl _call_via_r2
lsls r0, 24
lsrs r0, 24
pop {r4}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090934
thumb_func_start sub_8090954
sub_8090954: @ 8090954
push {r4,lr}
adds r4, r1, 0
bl npc_reset
movs r0, 0x1
strh r0, [r4, 0x30]
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8090954
thumb_func_start sub_8090968
sub_8090968: @ 8090968
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x18]
lsls r0, 28
lsrs r0, 28
bl GetFaceDirectionAnimId
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
adds r0, r4, 0
adds r1, r5, 0
bl FieldObjectSetRegularAnim
movs r0, 0x2
strh r0, [r5, 0x30]
movs r0, 0x1
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8090968
thumb_func_start sub_8090994
sub_8090994: @ 8090994
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
bl FieldObjectExecRegularAnim
lsls r0, 24
cmp r0, 0
beq _080909CA
ldr r4, =gUnknown_0850D6EC
bl Random
movs r5, 0x3
adds r1, r5, 0
ands r1, r0
lsls r1, 1
adds r1, r4
movs r0, 0
ldrsh r1, [r1, r0]
adds r0, r7, 0
bl SetFieldObjectStepTimer
ldrb r1, [r6]
movs r0, 0x3
negs r0, r0
ands r0, r1
strb r0, [r6]
strh r5, [r7, 0x30]
_080909CA:
movs r0, 0
pop {r4-r7}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090994
thumb_func_start sub_80909D8
sub_80909D8: @ 80909D8
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r0, r5, 0
bl RunFieldObjectStepTimer
lsls r0, 24
cmp r0, 0
bne _080909F6
adds r0, r4, 0
bl FieldObjectIsTrainerAndCloseToPlayer
lsls r0, 24
cmp r0, 0
beq _080909FE
_080909F6:
movs r0, 0x4
strh r0, [r5, 0x30]
movs r0, 0x1
b _08090A00
_080909FE:
movs r0, 0
_08090A00:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_80909D8
thumb_func_start sub_8090A08
sub_8090A08: @ 8090A08
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
adds r5, r1, 0
ldr r1, =gUnknown_0850D868
mov r0, sp
movs r2, 0x4
bl memcpy
adds r0, r4, 0
movs r1, 0x8
bl GetRunningPastFacingDirection
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
bne _08090A38
bl Random
movs r1, 0x3
ands r1, r0
mov r2, sp
adds r0, r2, r1
ldrb r1, [r0]
_08090A38:
adds r0, r4, 0
bl FieldObjectSetDirection
movs r0, 0x1
strh r0, [r5, 0x30]
add sp, 0x4
pop {r4,r5}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090A08
thumb_func_start FieldObjectCB_RandomlyLookNorthOrEastOrWest
FieldObjectCB_RandomlyLookNorthOrEastOrWest: @ 8090A50
push {lr}
adds r1, r0, 0
movs r0, 0x2E
ldrsh r2, [r1, r0]
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090A74
bl FieldObjectStep
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectCB_RandomlyLookNorthOrEastOrWest
thumb_func_start sub_8090A74
sub_8090A74: @ 8090A74
push {r4,lr}
ldr r3, =gUnknown_0850D86C
movs r4, 0x30
ldrsh r2, [r1, r4]
lsls r2, 2
adds r2, r3
ldr r2, [r2]
bl _call_via_r2
lsls r0, 24
lsrs r0, 24
pop {r4}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090A74
thumb_func_start sub_8090A94
sub_8090A94: @ 8090A94
push {r4,lr}
adds r4, r1, 0
bl npc_reset
movs r0, 0x1
strh r0, [r4, 0x30]
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8090A94
thumb_func_start sub_8090AA8
sub_8090AA8: @ 8090AA8
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x18]
lsls r0, 28
lsrs r0, 28
bl GetFaceDirectionAnimId
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
adds r0, r4, 0
adds r1, r5, 0
bl FieldObjectSetRegularAnim
movs r0, 0x2
strh r0, [r5, 0x30]
movs r0, 0x1
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8090AA8
thumb_func_start sub_8090AD4
sub_8090AD4: @ 8090AD4
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
bl FieldObjectExecRegularAnim
lsls r0, 24
cmp r0, 0
beq _08090B0A
ldr r4, =gUnknown_0850D6EC
bl Random
movs r5, 0x3
adds r1, r5, 0
ands r1, r0
lsls r1, 1
adds r1, r4
movs r0, 0
ldrsh r1, [r1, r0]
adds r0, r7, 0
bl SetFieldObjectStepTimer
ldrb r1, [r6]
movs r0, 0x3
negs r0, r0
ands r0, r1
strb r0, [r6]
strh r5, [r7, 0x30]
_08090B0A:
movs r0, 0
pop {r4-r7}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090AD4
thumb_func_start sub_8090B18
sub_8090B18: @ 8090B18
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r0, r5, 0
bl RunFieldObjectStepTimer
lsls r0, 24
cmp r0, 0
bne _08090B36
adds r0, r4, 0
bl FieldObjectIsTrainerAndCloseToPlayer
lsls r0, 24
cmp r0, 0
beq _08090B3E
_08090B36:
movs r0, 0x4
strh r0, [r5, 0x30]
movs r0, 0x1
b _08090B40
_08090B3E:
movs r0, 0
_08090B40:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8090B18
thumb_func_start sub_8090B48
sub_8090B48: @ 8090B48
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
adds r5, r1, 0
ldr r1, =gUnknown_0850D880
mov r0, sp
movs r2, 0x4
bl memcpy
adds r0, r4, 0
movs r1, 0x9
bl GetRunningPastFacingDirection
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
bne _08090B78
bl Random
movs r1, 0x3
ands r1, r0
mov r2, sp
adds r0, r2, r1
ldrb r1, [r0]
_08090B78:
adds r0, r4, 0
bl FieldObjectSetDirection
movs r0, 0x1
strh r0, [r5, 0x30]
add sp, 0x4
pop {r4,r5}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090B48
thumb_func_start FieldObjectCB_RandomlyLookSouthOrEastOrWest
FieldObjectCB_RandomlyLookSouthOrEastOrWest: @ 8090B90
push {lr}
adds r1, r0, 0
movs r0, 0x2E
ldrsh r2, [r1, r0]
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090BB4
bl FieldObjectStep
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectCB_RandomlyLookSouthOrEastOrWest
thumb_func_start sub_8090BB4
sub_8090BB4: @ 8090BB4
push {r4,lr}
ldr r3, =gUnknown_0850D884
movs r4, 0x30
ldrsh r2, [r1, r4]
lsls r2, 2
adds r2, r3
ldr r2, [r2]
bl _call_via_r2
lsls r0, 24
lsrs r0, 24
pop {r4}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090BB4
thumb_func_start sub_8090BD4
sub_8090BD4: @ 8090BD4
push {r4,lr}
adds r4, r1, 0
bl npc_reset
movs r0, 0x1
strh r0, [r4, 0x30]
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8090BD4
thumb_func_start sub_8090BE8
sub_8090BE8: @ 8090BE8
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldrb r0, [r4, 0x18]
lsls r0, 28
lsrs r0, 28
bl GetFaceDirectionAnimId
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
adds r0, r4, 0
adds r1, r5, 0
bl FieldObjectSetRegularAnim
movs r0, 0x2
strh r0, [r5, 0x30]
movs r0, 0x1
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8090BE8
thumb_func_start sub_8090C14
sub_8090C14: @ 8090C14
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
bl FieldObjectExecRegularAnim
lsls r0, 24
cmp r0, 0
beq _08090C4A
ldr r4, =gUnknown_0850D6EC
bl Random
movs r5, 0x3
adds r1, r5, 0
ands r1, r0
lsls r1, 1
adds r1, r4
movs r0, 0
ldrsh r1, [r1, r0]
adds r0, r7, 0
bl SetFieldObjectStepTimer
ldrb r1, [r6]
movs r0, 0x3
negs r0, r0
ands r0, r1
strb r0, [r6]
strh r5, [r7, 0x30]
_08090C4A:
movs r0, 0
pop {r4-r7}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090C14
thumb_func_start sub_8090C58
sub_8090C58: @ 8090C58
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r0, r5, 0
bl RunFieldObjectStepTimer
lsls r0, 24
cmp r0, 0
bne _08090C76
adds r0, r4, 0
bl FieldObjectIsTrainerAndCloseToPlayer
lsls r0, 24
cmp r0, 0
beq _08090C7E
_08090C76:
movs r0, 0x4
strh r0, [r5, 0x30]
movs r0, 0x1
b _08090C80
_08090C7E:
movs r0, 0
_08090C80:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8090C58
thumb_func_start sub_8090C88
sub_8090C88: @ 8090C88
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
adds r5, r1, 0
ldr r1, =gUnknown_0850D898
mov r0, sp
movs r2, 0x4
bl memcpy
adds r0, r4, 0
movs r1, 0xA
bl GetRunningPastFacingDirection
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
bne _08090CB8
bl Random
movs r1, 0x3
ands r1, r0
mov r2, sp
adds r0, r2, r1
ldrb r1, [r0]
_08090CB8:
adds r0, r4, 0
bl FieldObjectSetDirection
movs r0, 0x1
strh r0, [r5, 0x30]
add sp, 0x4
pop {r4,r5}
pop {r1}
bx r1
.pool
thumb_func_end sub_8090C88
thumb_func_start FieldObjectCB_LookAroundCounterclockwise
FieldObjectCB_LookAroundCounterclockwise: @ 8090CD0
push {lr}

View File

@ -26,5 +26,9 @@ extern const u8 gUnknown_0850D7F0[2]; // {DIR_NORTH, DIR_WEST}
extern const u8 gUnknown_0850D808[2]; // {DIR_NORTH, DIR_EAST}
extern const u8 gUnknown_0850D820[2]; // {DIR_SOUTH, DIR_WEST}
extern const u8 gUnknown_0850D838[2]; // {DIR_SOUTH, DIR_EAST}
extern const u8 gUnknown_0850D850[4];
extern const u8 gUnknown_0850D868[4];
extern const u8 gUnknown_0850D880[4];
extern const u8 gUnknown_0850D898[4];
#endif //POKEEMERALD_DATA3_H

View File

@ -2698,3 +2698,215 @@ bool8 sub_8090788 (struct MapObject *mapObject, struct Sprite *sprite)
sprite->data1 = 1;
return TRUE;
}
field_object_step(RandomlyLookNorthOrSouthOrWest, gUnknown_0850D83C)
bool8 sub_8090814 (struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
sprite->data1 = 1;
return TRUE;
}
bool8 sub_8090828 (struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
sprite->data1 = 2;
return TRUE;
}
bool8 sub_8090854 (struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
SetFieldObjectStepTimer(sprite, gUnknown_0850D6EC[Random() & 0x03]);
mapObject->mapobj_bit_1 = FALSE;
sprite->data1 = 3;
}
return FALSE;
}
bool8 sub_8090898 (struct MapObject *mapObject, struct Sprite *sprite)
{
if (RunFieldObjectStepTimer(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
sprite->data1 = 4;
return TRUE;
}
return FALSE;
}
bool8 sub_80908C8 (struct MapObject *mapObject, struct Sprite *sprite)
{
u8 directions[4];
u8 direction;
memcpy(directions, gUnknown_0850D850, sizeof gUnknown_0850D850);
direction = GetRunningPastFacingDirection(mapObject, RUNFOLLOW_NORTH_SOUTH_WEST);
if (direction == 0)
{
direction = directions[Random() & 0x03];
}
FieldObjectSetDirection(mapObject, direction);
sprite->data1 = 1;
return TRUE;
}
field_object_step(RandomlyLookNorthOrSouthOrEast, gUnknown_0850D854)
bool8 sub_8090954 (struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
sprite->data1 = 1;
return TRUE;
}
bool8 sub_8090968 (struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
sprite->data1 = 2;
return TRUE;
}
bool8 sub_8090994 (struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
SetFieldObjectStepTimer(sprite, gUnknown_0850D6EC[Random() & 0x03]);
mapObject->mapobj_bit_1 = FALSE;
sprite->data1 = 3;
}
return FALSE;
}
bool8 sub_80909D8 (struct MapObject *mapObject, struct Sprite *sprite)
{
if (RunFieldObjectStepTimer(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
sprite->data1 = 4;
return TRUE;
}
return FALSE;
}
bool8 sub_8090A08 (struct MapObject *mapObject, struct Sprite *sprite)
{
u8 directions[4];
u8 direction;
memcpy(directions, gUnknown_0850D868, sizeof gUnknown_0850D868);
direction = GetRunningPastFacingDirection(mapObject, RUNFOLLOW_NORTH_SOUTH_EAST);
if (direction == 0)
{
direction = directions[Random() & 0x03];
}
FieldObjectSetDirection(mapObject, direction);
sprite->data1 = 1;
return TRUE;
}
field_object_step(RandomlyLookNorthOrEastOrWest, gUnknown_0850D86C)
bool8 sub_8090A94 (struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
sprite->data1 = 1;
return TRUE;
}
bool8 sub_8090AA8 (struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
sprite->data1 = 2;
return TRUE;
}
bool8 sub_8090AD4 (struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
SetFieldObjectStepTimer(sprite, gUnknown_0850D6EC[Random() & 0x03]);
mapObject->mapobj_bit_1 = FALSE;
sprite->data1 = 3;
}
return FALSE;
}
bool8 sub_8090B18 (struct MapObject *mapObject, struct Sprite *sprite)
{
if (RunFieldObjectStepTimer(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
sprite->data1 = 4;
return TRUE;
}
return FALSE;
}
bool8 sub_8090B48 (struct MapObject *mapObject, struct Sprite *sprite)
{
u8 directions[4];
u8 direction;
memcpy(directions, gUnknown_0850D880, sizeof gUnknown_0850D880);
direction = GetRunningPastFacingDirection(mapObject, RUNFOLLOW_NORTH_EAST_WEST);
if (direction == 0)
{
direction = directions[Random() & 0x03];
}
FieldObjectSetDirection(mapObject, direction);
sprite->data1 = 1;
return TRUE;
}
field_object_step(RandomlyLookSouthOrEastOrWest, gUnknown_0850D884)
bool8 sub_8090BD4 (struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
sprite->data1 = 1;
return TRUE;
}
bool8 sub_8090BE8 (struct MapObject *mapObject, struct Sprite *sprite)
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
sprite->data1 = 2;
return TRUE;
}
bool8 sub_8090C14 (struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
SetFieldObjectStepTimer(sprite, gUnknown_0850D6EC[Random() & 0x03]);
mapObject->mapobj_bit_1 = FALSE;
sprite->data1 = 3;
}
return FALSE;
}
bool8 sub_8090C58 (struct MapObject *mapObject, struct Sprite *sprite)
{
if (RunFieldObjectStepTimer(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
sprite->data1 = 4;
return TRUE;
}
return FALSE;
}
bool8 sub_8090C88 (struct MapObject *mapObject, struct Sprite *sprite)
{
u8 directions[4];
u8 direction;
memcpy(directions, gUnknown_0850D898, sizeof gUnknown_0850D898);
direction = GetRunningPastFacingDirection(mapObject, RUNFOLLOW_SOUTH_EAST_WEST);
if (direction == 0)
{
direction = directions[Random() & 0x03];
}
FieldObjectSetDirection(mapObject, direction);
sprite->data1 = 1;
return TRUE;
}