diff options
Diffstat (limited to 'src/field_map_obj.c')
-rw-r--r-- | src/field_map_obj.c | 2417 |
1 files changed, 2368 insertions, 49 deletions
diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 3530f5579..ade72923d 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -13,6 +13,9 @@ #include "rng.h" #include "rom4.h" #include "sprite.h" +#include "metatile_behavior.h" +#include "map_constants.h" +#include "trainer_see.h" extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; @@ -3158,17 +3161,217 @@ u8 sub_805F2B4(struct MapObject *mapObject, struct Sprite *sprite) return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); }; -void sub_805F2FC(struct Sprite *sprite); -void FieldObjectCB_TreeDisguise(struct Sprite *sprite); -void FieldObjectCB_MountainDisguise(struct Sprite *sprite); -void sub_805F8E0(struct Sprite *sprite); -void FieldObjectCB_Hidden1(struct Sprite *sprite); -void sub_805FB20(struct Sprite *sprite); -void sub_805FB90(struct Sprite *sprite); -void sub_805FC00(struct Sprite *sprite); -void sub_805FC70(struct Sprite *sprite); +fieldmap_object_cb(sub_805F2FC, sub_805F320, gUnknown_08375588); + +u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + if (mapObject->mapobj_unk_21 == 0) + { + mapObject->mapobj_unk_21 = player_get_direction_lower_nybble(); + } + sprite->data1 = 1; + return 1; +} + +extern u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8)); + +u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + { + return 0; + } + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), NULL); +} + +u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +#ifdef NONMATCHING + +u8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + return 0; +} + +u8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} + +u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + s16 x; + s16 y; + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectMoveDestCoords(mapObject, direction, &x, &y); + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(direction)); + if (!npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y)))) + { + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + } + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} +#endif + +asm(".section .text_fmocb2_c\n"); + +fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0); + +u8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + { + return 0; + } + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), MetatileBehavior_IsPokeGrass); +} + +u8 sub_805F9F8(struct MapObject *, struct Sprite *); + +void FieldObjectCB_TreeDisguise(struct Sprite *sprite) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[sprite->data0]; + if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) + { + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + mapObject->mapobj_unk_1A = FieldEffectStart(0x1c); + mapObject->mapobj_unk_21 = 1; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); +} + +u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + return 0; +} + +void FieldObjectCB_MountainDisguise(struct Sprite *sprite) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[sprite->data0]; + if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) + { + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + mapObject->mapobj_unk_1A = FieldEffectStart(0x1d); + mapObject->mapobj_unk_21 = 1; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); +} + +u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_083755CC[])(struct MapObject *, struct Sprite *); + +void FieldObjectCB_Hidden1(struct Sprite *sprite) +{ + if (sprite->data7 == 0) + { + gMapObjects[sprite->data0].mapobj_bit_26 = 1; + sprite->subspriteMode = 2; + sprite->oam.priority = 3; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805FAD8); +} + +u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083755CC[sprite->data1](mapObject, sprite); +} + +u8 sub_805FAF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + return 0; +} + +u8 sub_805FB04(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sprite->data1 = 0; + } + return 0; +} + +fieldmap_object_cb(sub_805FB20, sub_805FB44, gUnknown_083755D0); + +u8 sub_805FB64(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805FB90, sub_805FBB4, gUnknown_083755D8); + +u8 sub_805FBD4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay8AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805FC00, sub_805FC24, gUnknown_083755E0); + +u8 sub_805FC44(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} -asm(".section .text_b\n"); +fieldmap_object_cb(sub_805FC70, sub_805FC94, gUnknown_083755E8); + +u8 sub_805FCB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + mapObject->mapobj_bit_13 = 1; + sprite->data1 = 1; + return 1; +} + +u8 sub_805FCE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sprite->data1 = 2; + return 1; + } + return 0; +} + +u8 sub_805FD08(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 0; + return 0; +} + +void sub_805FC70(struct Sprite *sprite); void npc_reset(struct MapObject *mapObject, struct Sprite *sprite) { @@ -3658,7 +3861,7 @@ u8 FieldObjectGetSpecialAnim(struct MapObject *mapObject) extern void DoGroundEffects_OnSpawn(struct MapObject *mapObject, struct Sprite *sprite); extern void DoGroundEffects_OnBeginStep(struct MapObject *mapObject, struct Sprite *sprite); extern void DoGroundEffects_OnFinishStep(struct MapObject *mapObject, struct Sprite *sprite); -extern void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite); +void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite); void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite); void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite); void FieldObjectUpdateSubpriority(struct MapObject *mapObject, struct Sprite *sprite); @@ -4058,10 +4261,10 @@ int zffu_offset_calc(u8 a0, u8 a1) } #ifdef NONMATCHING -u8 state_to_direction(u8 a0, u8 a1, u8 a2) +int state_to_direction(u8 a0, u8 a1, u8 a2) { int zffuOffset; - asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call.") + asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call."); if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4) { return 0; @@ -4071,42 +4274,42 @@ u8 state_to_direction(u8 a0, u8 a1, u8 a2) } #else __attribute__((naked)) -u8 state_to_direction(u8 a0, u8 a1, u8 a2) +int state_to_direction(u8 a0, u8 a1, u8 a2) { asm(".syntax unified\n\ - push {r4,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r0, r1, 0\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - cmp r1, 0\n\ - beq _08060BFC\n\ - cmp r2, 0\n\ - beq _08060BFC\n\ - cmp r1, 0x4\n\ - bhi _08060BFC\n\ - cmp r2, 0x4\n\ - bls _08060C00\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r1, 0\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + cmp r1, 0\n\ + beq _08060BFC\n\ + cmp r2, 0\n\ + beq _08060BFC\n\ + cmp r1, 0x4\n\ + bhi _08060BFC\n\ + cmp r2, 0x4\n\ + bls _08060C00\n\ _08060BFC:\n\ - movs r0, 0\n\ - b _08060C12\n\ + movs r0, 0\n\ + b _08060C12\n\ _08060C00:\n\ - adds r1, r2, 0\n\ - bl zffu_offset_calc\n\ - ldr r2, _08060C18 @ =gUnknown_08375767\n\ - lsls r1, r4, 2\n\ - subs r1, 0x5\n\ - adds r0, r1\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ + adds r1, r2, 0\n\ + bl zffu_offset_calc\n\ + ldr r2, _08060C18 @ =gUnknown_08375767\n\ + lsls r1, r4, 2\n\ + subs r1, 0x5\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ _08060C12:\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ _08060C18: .4byte gUnknown_08375767\n\ .syntax divided\n"); } @@ -4170,7 +4373,7 @@ u8 sub_8060D10(struct MapObject *mapObject, struct Sprite *sprite) return 1; } -void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a2) +void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) { s16 x; s16 y; @@ -4179,7 +4382,7 @@ void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 directio FieldObjectSetDirection(mapObject, direction); MoveCoords(direction, &x, &y); npc_coords_shift(mapObject, x, y); - oamt_npc_ministep_reset(sprite, direction, a2); + oamt_npc_ministep_reset(sprite, direction, a3); sprite->animPaused = 0; mapObject->mapobj_bit_2 = 1; sprite->data2 = 1; @@ -4187,12 +4390,12 @@ void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 directio extern u8 (*const gUnknown_083759C0[5])(u8); -void do_go_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a2) +void do_go_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) { u8 (*functions[5])(u8); memcpy(functions, gUnknown_083759C0, sizeof(gUnknown_083759C0)); - sub_8060D20(mapObject, sprite, direction, a2); - sub_805FE28(mapObject, sprite, functions[a2](mapObject->mapobj_unk_18)); + sub_8060D20(mapObject, sprite, direction, a3); + sub_805FE28(mapObject, sprite, functions[a3](mapObject->mapobj_unk_18)); } void do_run_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) @@ -4392,3 +4595,2119 @@ bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite) return FALSE; } +extern const s16 gUnknown_08375A34[3]; +extern const s16 gUnknown_08375A3A[3]; + +void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) +{ + s16 vSPp4[3]; + s16 x; + s16 y; + memcpy(vSPp4, gUnknown_08375A34, sizeof gUnknown_08375A34); + x = 0; + y = 0; + FieldObjectSetDirection(mapObject, direction); + sub_8060320(direction, &x, &y, vSPp4[a4], vSPp4[a4]); + npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); + sub_80646E4(sprite, direction, a4, a5); + sprite->data2 = 1; + sprite->animPaused = 0; + mapObject->mapobj_bit_2 = 1; + mapObject->mapobj_bit_4 = 1; +} + +void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) +{ + sub_806113C(mapObject, sprite, direction, a4, a5); + sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + DoShadowFieldEffect(mapObject); +} + +u8 sub_806123C(struct MapObject *mapObject, struct Sprite *sprite, u8 (*const callback)(struct Sprite *)) +{ + s16 vSPp4[3]; + s16 x; + s16 y; + u8 retval; + memcpy(vSPp4, gUnknown_08375A3A, sizeof gUnknown_08375A3A); + retval = callback(sprite); + if (retval == 1 && vSPp4[sprite->data4] != 0) + { + x = 0; + y = 0; + sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data4], vSPp4[sprite->data4]); + npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); + mapObject->mapobj_bit_2 = 1; + mapObject->mapobj_bit_4 = 1; + } else if (retval == 0xff) + { + npc_coords_shift_still(mapObject); + mapObject->mapobj_bit_3 = 1; + mapObject->mapobj_bit_5 = 1; + sprite->animPaused = 1; + } + return retval; +} + +u8 sub_8061300(struct MapObject *mapObject, struct Sprite *sprite) +{ + return sub_806123C(mapObject, sprite, sub_8064704); +} + +u8 sub_8061314(struct MapObject *mapObject, struct Sprite *sprite) +{ + return sub_806123C(mapObject, sprite, sub_806478C); +} + +bool8 sub_8061328(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061300(mapObject, sprite) == 0xFF) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_8061340(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061314(mapObject, sprite) == 0xFF) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_8061358(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 retval; + + retval = sub_8061300(mapObject, sprite); + if (retval != 1) + { + if (retval == 0xFF) + { + return TRUE; + } + return FALSE; + } + FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); + sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + return FALSE; +} + +bool8 sub_80613D4(struct MapObject *, struct Sprite *); +bool8 sub_806142C(struct MapObject *, struct Sprite *); +bool8 sub_8061484(struct MapObject *, struct Sprite *); +bool8 sub_80614DC(struct MapObject *, struct Sprite *); + +bool8 sub_80613A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 2, 0); + return sub_80613D4(mapObject, sprite); +} + +bool8 sub_80613D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061400(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 2, 0); + return sub_806142C(mapObject, sprite); +} + +bool8 sub_806142C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061458(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 2, 0); + return sub_8061484(mapObject, sprite); +} + +bool8 sub_8061484(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80614B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 2, 0); + return sub_80614DC(mapObject, sprite); +} + +bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8061508(struct Sprite *sprite, u16 duration) +{ + sprite->data2 = 1; + sprite->data3 = duration; +} + +bool8 sub_8061510(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data3--; + if (!sprite->data3) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806152C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 1); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806154C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 2); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806156C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 4); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806158C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 8); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_80615AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 16); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80615CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 1); + return sub_80615EC(mapObject, sprite); +} + +bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806160C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 1); + return sub_806162C(mapObject, sprite); +} + +bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806164C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 1); + return sub_806166C(mapObject, sprite); +} + +bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806168C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 1); + return sub_80616AC(mapObject, sprite); +} + +bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_80616CC(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 animId, u16 duration) +{ + FieldObjectSetDirection(mapObject, direction); + sub_805FE28(mapObject, sprite, animId); + sprite->animPaused = 0; + sprite->data2 = 1; + sprite->data3 = duration; +} + +bool8 sub_8061714(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data3--; + if (sprite->data3 == 0) + { + sprite->data2 = 2; + sprite->animPaused = 1; + return TRUE; + } + return FALSE; +} + +bool8 sub_806173C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sprite->data3 & 1) + { + sprite->animDelayCounter++; + } + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061778(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_image_anim_num(DIR_SOUTH), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_80617B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_image_anim_num(DIR_NORTH), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_80617E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_image_anim_num(DIR_WEST), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_8061820(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_image_anim_num(DIR_EAST), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_8061858(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_image_anim_num(DIR_SOUTH), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061890(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_image_anim_num(DIR_NORTH), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80618C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_image_anim_num(DIR_WEST), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061900(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_image_anim_num(DIR_EAST), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061938(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_fast_image_anim_num(DIR_SOUTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061970(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_fast_image_anim_num(DIR_NORTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80619A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_fast_image_anim_num(DIR_WEST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80619E0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_fast_image_anim_num(DIR_EAST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A18(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_faster_image_anim_num(DIR_SOUTH), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A50(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_faster_image_anim_num(DIR_NORTH), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A88(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_faster_image_anim_num(DIR_WEST), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061AC0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_faster_image_anim_num(DIR_EAST), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061B18(struct MapObject *, struct Sprite *); + +bool8 sub_8061AF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 2); + return sub_8061B18(mapObject, sprite); +} + +bool8 sub_8061B18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061B58(struct MapObject *, struct Sprite *); + +bool8 sub_8061B38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 2); + return sub_8061B58(mapObject, sprite); +} + +bool8 sub_8061B58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061B98(struct MapObject *, struct Sprite *); + +bool8 sub_8061B78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 2); + return sub_8061B98(mapObject, sprite); +} + +bool8 sub_8061B98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061BD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061BB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 2); + return sub_8061BD8(mapObject, sprite); +} + +bool8 sub_8061BD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061C18(struct MapObject *, struct Sprite *); + +bool8 sub_8061BF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 3); + return sub_8061C18(mapObject, sprite); +} + +bool8 sub_8061C18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061C58(struct MapObject *, struct Sprite *); + +bool8 sub_8061C38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 3); + return sub_8061C58(mapObject, sprite); +} + +bool8 sub_8061C58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061C98(struct MapObject *, struct Sprite *); + +bool8 sub_8061C78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 3); + return sub_8061C98(mapObject, sprite); +} + +bool8 sub_8061C98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061CD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061CB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 3); + return sub_8061CD8(mapObject, sprite); +} + +bool8 sub_8061CD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061D18(struct MapObject *, struct Sprite *); + +bool8 sub_8061CF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 4); + return sub_8061D18(mapObject, sprite); +} + +bool8 sub_8061D18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061D58(struct MapObject *, struct Sprite *); + +bool8 sub_8061D38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 4); + return sub_8061D58(mapObject, sprite); +} + +bool8 sub_8061D58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061D98(struct MapObject *, struct Sprite *); + +bool8 sub_8061D78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 4); + return sub_8061D98(mapObject, sprite); +} + +bool8 sub_8061D98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061DD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061DB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 4); + return sub_8061DD8(mapObject, sprite); +} + +bool8 sub_8061DD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E18(struct MapObject *, struct Sprite *); + +bool8 do_run_south_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_SOUTH); + return sub_8061E18(mapObject, sprite); +} + +bool8 sub_8061E18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E58(struct MapObject *, struct Sprite *); + +bool8 do_run_north_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_NORTH); + return sub_8061E58(mapObject, sprite); +} + +bool8 sub_8061E58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E98(struct MapObject *, struct Sprite *); + +bool8 do_run_west_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_WEST); + return sub_8061E98(mapObject, sprite); +} + +bool8 sub_8061E98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061ED8(struct MapObject *, struct Sprite *); + +bool8 do_run_east_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_EAST); + return sub_8061ED8(mapObject, sprite); +} + +bool8 sub_8061ED8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void npc_set_direction_and_anim__an_proceed(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 animNum) +{ + obj_anim_image_set_and_seek(sprite, animNum, 0); + FieldObjectSetDirection(mapObject, direction); + sprite->data2 = 1; +} + +bool8 sub_8061F24(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, mapObject->placeholder18, sprite->animNum); + return FALSE; +} + +bool8 sub_8064864(struct Sprite *); + +bool8 sub_8061F3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8061F5C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + sub_806113C(mapObject, sprite, direction, 1, 0); + StartSpriteAnim(sprite, sub_805FD88(direction)); +} + +bool8 sub_8061FB0(struct MapObject *, struct Sprite *); + +bool8 sub_8061F90(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_SOUTH); + return sub_8061FB0(mapObject, sprite); +} + +bool8 sub_8061FB0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061FF8(struct MapObject *, struct Sprite *); + +bool8 sub_8061FD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_NORTH); + return sub_8061FF8(mapObject, sprite); +} + +bool8 sub_8061FF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062040(struct MapObject *, struct Sprite *); + +bool8 sub_8062020(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_WEST); + return sub_8062040(mapObject, sprite); +} + +bool8 sub_8062040(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062088(struct MapObject *, struct Sprite *); + +bool8 sub_8062068(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_EAST); + return sub_8062088(mapObject, sprite); +} + +bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 objectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) + { + an_look_any(mapObject, sprite, sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y)); + } + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806210C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 objectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) + { + an_look_any(mapObject, sprite, GetOppositeDirection(sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y))); + } + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062170(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_9 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062180(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_9 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062190(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 1, 2); + return sub_80621BC(mapObject, sprite); +} + +bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80621E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 1, 2); + return sub_8062214(mapObject, sprite); +} + +bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062240(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 1, 2); + return sub_806226C(mapObject, sprite); +} + +bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062298(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 1, 2); + return sub_80622C4(mapObject, sprite); +} + +bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80622F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 0, 0); + return sub_806231C(mapObject, sprite); +} + +bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062348(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 0, 0); + return sub_8062374(mapObject, sprite); +} + +bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80623A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 0, 0); + return sub_80623CC(mapObject, sprite); +} + +bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80623F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 0, 0); + return sub_8062424(mapObject, sprite); +} + +bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062450(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 0, 2); + return sub_806247C(mapObject, sprite); +} + +bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80624A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 0, 2); + return sub_80624D4(mapObject, sprite); +} + +bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062500(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 0, 2); + return sub_806252C(mapObject, sprite); +} + +bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062558(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 0, 2); + return sub_8062584(mapObject, sprite); +} + +bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80625B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, gUnknown_0836DC09[mapObject->animPattern]); + return TRUE; +} + +bool8 sub_80625C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, 0x14); + return FALSE; +} + +bool8 sub_80625D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_25 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80625E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_25 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80625F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_12 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062608(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_12 = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->inanimate; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062634(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldEffectStart(0x0); + sprite->data2 = 1; + return TRUE; +} + +bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldEffectStart(0x21); + sprite->data2 = 1; + return TRUE; +} + +bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldEffectStart(0x2e); + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062704(struct MapObject *, struct Sprite *); + +bool8 sub_80626C0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->animPattern == 0x3F) + { + sub_8084794(mapObject); + return FALSE; + } + else if (mapObject->animPattern != 0x39 && mapObject->animPattern != 0x3A) + { + sprite->data2 = 2; + return TRUE; + } + else + { + sub_812869C(mapObject); + sprite->data2 = 1; + return sub_8062704(mapObject, sprite); + } +} + +bool8 sub_8062704(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_81286C4(mapObject)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062724(struct MapObject *mapObject, struct Sprite *sprite) +{ + obj_anim_image_set_and_seek(sprite, 1, 0); + sprite->data2 = 1; + return FALSE; +} + +bool8 sub_8062740(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sub_8064820(sprite, 0x20); + sprite->data2 = 2; + } + return FALSE; +} + +bool8 sub_8062764(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 ^= 1; + if (sub_8064824(sprite)) + { + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 3; + } + return FALSE; +} + +bool8 sub_80627A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + obj_anim_image_set_and_seek(sprite, 1, 0); + sprite->data2 = 1; + return FALSE; +} + +bool8 sub_80627BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sub_8064820(sprite, 0x20); + sprite->data2 = 2; + } + return FALSE; +} + +bool8 sub_80627E0(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 ^= 1; + if (sub_8064824(sprite)) + { + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 3; + } + return FALSE; +} + +bool8 sub_806281C(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_26 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806282C(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_26 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806283C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->oam.affineMode = 3; + InitSpriteAffineAnim(sprite); + sprite->affineAnimPaused = 1; + sprite->subspriteMode = 0; + return TRUE; +} + +bool8 sub_806286C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + return TRUE; +} + +bool8 sub_80628D0(struct MapObject *, struct Sprite *); + +bool8 sub_806289C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_SOUTH); + sprite->affineAnimPaused = 0; + StartSpriteAffineAnimIfDifferent(sprite, 0); + return sub_80628D0(mapObject, sprite); +} + +bool8 sub_80628D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->affineAnimPaused = 1; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062930(struct MapObject *, struct Sprite *); + +bool8 sub_80628FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_SOUTH); + sprite->affineAnimPaused = 0; + ChangeSpriteAffineAnimIfDifferent(sprite, 1); + return sub_8062930(mapObject, sprite); +} + +bool8 sub_8062930(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->affineAnimPaused = 1; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_806295C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + FieldObjectSetDirection(mapObject, direction); + npc_coords_shift_still(mapObject); + sub_805FE64(mapObject, sprite, sub_805FDD8(direction)); + sprite->animPaused = 1; + sprite->data2 = 1; +} + +bool8 sub_806299C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_SOUTH); + return TRUE; +} + +bool8 sub_80629AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_NORTH); + return TRUE; +} + +bool8 sub_80629BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_WEST); + return TRUE; +} + +bool8 sub_80629CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_EAST); + return TRUE; +} + +bool8 sub_80629DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FD98(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062A00(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FD98(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062A24(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FD98(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062A48(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FD98(DIR_EAST)); + return FALSE; +} + +bool8 sub_8062A6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FDB8(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062A90(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FDB8(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062AB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FDB8(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062AD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FDB8(DIR_EAST)); + return FALSE; +} + +bool8 sub_8062AFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FDC8(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062B20(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FDC8(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062B44(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FDC8(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062B68(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FDC8(DIR_EAST)); + return FALSE; +} + +void sub_8062B8C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3, u8 a4) +{ + sub_806113C(mapObject, sprite, direction, a3, a4); + StartSpriteAnimIfDifferent(sprite, sub_805FD98(direction)); + DoShadowFieldEffect(mapObject); +} + +bool8 sub_8062BFC(struct MapObject *, struct Sprite *); + +bool8 sub_8062BD0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 0, 1); + return sub_8062BFC(mapObject, sprite); +} + +bool8 sub_8062BFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062C54(struct MapObject *, struct Sprite *); + +bool8 sub_8062C28(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 0, 1); + return sub_8062C54(mapObject, sprite); +} + +bool8 sub_8062C54(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062CAC(struct MapObject *, struct Sprite *); + +bool8 sub_8062C80(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 0, 1); + return sub_8062CAC(mapObject, sprite); +} + +bool8 sub_8062CAC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062D04(struct MapObject *, struct Sprite *); + +bool8 sub_8062CD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 0, 1); + return sub_8062D04(mapObject, sprite); +} + +bool8 sub_8062D04(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062D5C(struct MapObject *, struct Sprite *); + +bool8 sub_8062D30(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 1, 1); + return sub_8062D5C(mapObject, sprite); +} + +bool8 sub_8062D5C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062DB4(struct MapObject *, struct Sprite *); + +bool8 sub_8062D88(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 1, 1); + return sub_8062DB4(mapObject, sprite); +} + +bool8 sub_8062DB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062E0C(struct MapObject *, struct Sprite *); + +bool8 sub_8062DE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 1, 1); + return sub_8062E0C(mapObject, sprite); +} + +bool8 sub_8062E0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062E64(struct MapObject *, struct Sprite *); + +bool8 sub_8062E38(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 1, 1); + return sub_8062E64(mapObject, sprite); +} + +bool8 sub_8062E64(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062EBC(struct MapObject *, struct Sprite *); + +bool8 sub_8062E90(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 2, 0); + return sub_8062EBC(mapObject, sprite); +} + +bool8 sub_8062EBC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062F14(struct MapObject *, struct Sprite *); + +bool8 sub_8062EE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 2, 0); + return sub_8062F14(mapObject, sprite); +} + +bool8 sub_8062F14(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062F6C(struct MapObject *, struct Sprite *); + +bool8 sub_8062F40(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 2, 0); + return sub_8062F6C(mapObject, sprite); +} + +bool8 sub_8062F6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062FC4(struct MapObject *, struct Sprite *); + +bool8 sub_8062F98(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 2, 0); + return sub_8062FC4(mapObject, sprite); +} + +bool8 sub_8062FC4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062FF0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, sub_805FDD8(DIR_SOUTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063028(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, sub_805FDD8(DIR_NORTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063060(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, sub_805FDD8(DIR_WEST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063098(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, sub_805FDD8(DIR_EAST), 8); + return sub_8061714(mapObject, sprite); +} + +void sub_80630D0(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + StartSpriteAnim(sprite, sub_805FD98(mapObject->mapobj_unk_18)); + SeekSpriteAnim(sprite, 0); +} + +bool8 sub_8063128(struct MapObject *, struct Sprite *); + +bool8 sub_8063108(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063128(mapObject, sprite); +} + +bool8 sub_8063128(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063168(struct MapObject *, struct Sprite *); + +bool8 sub_8063148(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_NORTH, 1); + return sub_8063168(mapObject, sprite); +} + +bool8 sub_8063168(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80631A8(struct MapObject *, struct Sprite *); + +bool8 sub_8063188(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_WEST, 1); + return sub_80631A8(mapObject, sprite); +} + +bool8 sub_80631A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80631E8(struct MapObject *, struct Sprite *); + +bool8 sub_80631C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_EAST, 1); + return sub_80631E8(mapObject, sprite); +} + +bool8 sub_80631E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8063208(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + sub_805FE28(mapObject, sprite, sub_805FDD8(mapObject->mapobj_unk_18)); +} + +bool8 sub_8063258(struct MapObject *, struct Sprite *); + +bool8 sub_8063238(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063258(mapObject, sprite); +} + +bool8 sub_8063258(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063298(struct MapObject *, struct Sprite *); + +bool8 sub_8063278(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_NORTH, 1); + return sub_8063298(mapObject, sprite); +} + +bool8 sub_8063298(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80632D8(struct MapObject *, struct Sprite *); + +bool8 sub_80632B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_WEST, 1); + return sub_80632D8(mapObject, sprite); +} + +bool8 sub_80632D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063318(struct MapObject *, struct Sprite *); + +bool8 sub_80632F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_EAST, 1); + return sub_8063318(mapObject, sprite); +} + +bool8 sub_8063318(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8063338(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + StartSpriteAnim(sprite, sub_805FDB8(mapObject->mapobj_unk_18)); + SeekSpriteAnim(sprite, 0); +} + +bool8 sub_8063390(struct MapObject *, struct Sprite *); + +bool8 sub_8063370(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063390(mapObject, sprite); +} + +bool8 sub_8063390(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80633D0(struct MapObject *, struct Sprite *); + +bool8 sub_80633B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_NORTH, 1); + return sub_80633D0(mapObject, sprite); +} + +bool8 sub_80633D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063410(struct MapObject *, struct Sprite *); + +bool8 sub_80633F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_WEST, 1); + return sub_8063410(mapObject, sprite); +} + +bool8 sub_8063410(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063450(struct MapObject *, struct Sprite *); + +bool8 sub_8063430(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_EAST, 1); + return sub_8063450(mapObject, sprite); +} + +bool8 sub_8063450(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063470(struct MapObject *mapObject, struct Sprite *sprite) +{ + return TRUE; +} + +bool8 sub_8063474(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->animPaused = 1; + return TRUE; +} + +void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->mapobj_bit_10) + { + sprite->animPaused = 1; + } +} + +void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->mapobj_bit_11) + { + sprite->animPaused = 0; + mapObject->mapobj_bit_10 = 0; + mapObject->mapobj_bit_11 = 0; + } +} + +void sub_80634E8(struct MapObject *, struct Sprite *); +void npc_update_obj_anim_flag(struct MapObject *, struct Sprite *); + +void sub_80634D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80634E8(mapObject, sprite); + npc_update_obj_anim_flag(mapObject, sprite); +} + +#ifdef NONMATCHING +void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + u16 x; + u16 y; + s16 x2; + s16 y2; + const struct MapObjectGraphicsInfo *graphicsInfo; + mapObject->mapobj_bit_14 = 0; + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + if (sprite->coordOffsetEnabled) + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + } else + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + } + x2 = graphicsInfo->width + x; // offending line + y2 = graphicsInfo->height + y; // similarly offending line + if ((s16)x >= 0x100 || x2 < -0x10) + { + mapObject->mapobj_bit_14 = 1; + } + if ((s16)y >= 0xB0 || y2 < -0x10) + { + mapObject->mapobj_bit_14 = 1; + } +} +#else +__attribute__((naked)) +void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) { + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + adds r5, r0, 0\n\ + adds r4, r1, 0\n\ + ldrb r1, [r5, 0x1]\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r5, 0x1]\n\ + ldrb r0, [r5, 0x5]\n\ + bl GetFieldObjectGraphicsInfo\n\ + adds r6, r0, 0\n\ + adds r0, r4, 0\n\ + adds r0, 0x3E\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0806354C\n\ + ldrh r1, [r4, 0x24]\n\ + ldrh r0, [r4, 0x20]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + ldr r2, _08063544 @ =gSpriteCoordOffsetX\n\ + adds r0, r1\n\ + ldrh r2, [r2]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldrh r1, [r4, 0x26]\n\ + ldrh r0, [r4, 0x22]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x29\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + ldr r2, _08063548 @ =gSpriteCoordOffsetY\n\ + adds r0, r1\n\ + ldrh r2, [r2]\n\ + adds r0, r2\n\ + b _08063574\n\ + .align 2, 0\n\ +_08063544: .4byte gSpriteCoordOffsetX\n\ +_08063548: .4byte gSpriteCoordOffsetY\n\ +_0806354C:\n\ + ldrh r1, [r4, 0x24]\n\ + ldrh r0, [r4, 0x20]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldrh r1, [r4, 0x26]\n\ + ldrh r0, [r4, 0x22]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x29\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + adds r0, r1\n\ +_08063574:\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + ldrh r0, [r6, 0x8]\n\ + adds r0, r3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + ldrh r0, [r6, 0xA]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xFF\n\ + bgt _0806359C\n\ + lsls r0, r1, 16\n\ + asrs r0, 16\n\ + movs r1, 0x10\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080635A4\n\ +_0806359C:\n\ + ldrb r0, [r5, 0x1]\n\ + movs r1, 0x40\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1]\n\ +_080635A4:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xAF\n\ + bgt _080635B8\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + movs r1, 0x10\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080635C0\n\ +_080635B8:\n\ + ldrb r0, [r5, 0x1]\n\ + movs r1, 0x40\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1]\n\ +_080635C0:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ +.syntax divided\n"); +} +#endif + +void npc_update_obj_anim_flag(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->invisible = 0; + if (mapObject->mapobj_bit_13 || mapObject->mapobj_bit_14) + { + sprite->invisible = 1; + } +} |