diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index aca4a4a292..6da9ca071a 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -1,8 +1,6 @@ #ifndef GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H #define GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H -#define MOVEMENT_TYPE_WANDER_AROUND_SLOWER MOVEMENT_TYPE_WANDER_AROUND - #define MOVEMENT_TYPE_NONE 0x0 #define MOVEMENT_TYPE_LOOK_AROUND 0x1 @@ -86,7 +84,8 @@ #define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT 0x4F #define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT 0x50 #define MOVEMENT_TYPE_FOLLOW_PLAYER 0x51 -#define NUM_MOVEMENT_TYPES 0x52 +#define MOVEMENT_TYPE_WANDER_AROUND_SLOWER 0x52 +#define NUM_MOVEMENT_TYPES 0x53 #define MOVEMENT_ACTION_FACE_DOWN 0x0 #define MOVEMENT_ACTION_FACE_UP 0x1 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 9241e161a7..d6ddac1c4f 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -270,6 +270,7 @@ void CopyObjectGraphicsInfoToSpriteTemplate(u16 graphicsId, void (*callback)(str void MovementType_None(struct Sprite *sprite); void MovementType_LookAround(struct Sprite *sprite); void MovementType_WanderAround(struct Sprite *sprite); +void MovementType_WanderAroundSlower(struct Sprite *sprite); void MovementType_WanderUpAndDown(struct Sprite *sprite); void MovementType_WanderLeftAndRight(struct Sprite *sprite); void MovementType_FaceDirection(struct Sprite *sprite); @@ -335,6 +336,7 @@ u8 MovementType_WanderAround_Step2(struct ObjectEvent *objectEvent, struct Sprit u8 MovementType_Wander_Step3(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementType_WanderAround_Step4(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementType_WanderAround_Step5(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementType_WanderAround_Step5Slower(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementType_WanderAround_Step6(struct ObjectEvent *objectEvent, struct Sprite *sprite); enum Direction GetVectorDirection(s16 dx, s16 dy, s16 absdx, s16 absdy); enum Direction GetLimitedVectorDirection_SouthNorth(s16 dx, s16 dy, s16 absdx, s16 absdy); diff --git a/src/data/object_events/movement_type_func_tables.h b/src/data/object_events/movement_type_func_tables.h index 72fd7557ff..3c81369aa1 100755 --- a/src/data/object_events/movement_type_func_tables.h +++ b/src/data/object_events/movement_type_func_tables.h @@ -8,6 +8,16 @@ u8 (*const gMovementTypeFuncs_WanderAround[])(struct ObjectEvent *, struct Sprit MovementType_WanderAround_Step6, }; +u8 (*const gMovementTypeFuncs_WanderAroundSlower[])(struct ObjectEvent *, struct Sprite *) = { + MovementType_WanderAround_Step0, + MovementType_WanderAround_Step1, + MovementType_WanderAround_Step2, + MovementType_Wander_Step3, + MovementType_WanderAround_Step4, + MovementType_WanderAround_Step5Slower, + MovementType_WanderAround_Step6, +}; + const enum Direction gStandardDirections[] = {DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST}; enum Direction (*const gGetVectorDirectionFuncs[])(s16, s16, s16, s16) = { diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 5b7601e9cf..faadea63c5 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -266,6 +266,7 @@ static void (*const sMovementTypeCallbacks[])(struct Sprite *) = [MOVEMENT_TYPE_NONE] = MovementType_None, [MOVEMENT_TYPE_LOOK_AROUND] = MovementType_LookAround, [MOVEMENT_TYPE_WANDER_AROUND] = MovementType_WanderAround, + [MOVEMENT_TYPE_WANDER_AROUND_SLOWER] = MovementType_WanderAroundSlower, [MOVEMENT_TYPE_WANDER_UP_AND_DOWN] = MovementType_WanderUpAndDown, [MOVEMENT_TYPE_WANDER_DOWN_AND_UP] = MovementType_WanderUpAndDown, [MOVEMENT_TYPE_WANDER_LEFT_AND_RIGHT] = MovementType_WanderLeftAndRight, @@ -3874,6 +3875,7 @@ u16 GetObjectPaletteTag(u8 palSlot) movement_type_empty_callback(MovementType_None) movement_type_def(MovementType_WanderAround, gMovementTypeFuncs_WanderAround) +movement_type_def(MovementType_WanderAroundSlower, gMovementTypeFuncs_WanderAroundSlower) bool8 MovementType_WanderAround_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { @@ -3938,6 +3940,14 @@ bool8 MovementType_WanderAround_Step5(struct ObjectEvent *objectEvent, struct Sp return TRUE; } +bool8 MovementType_WanderAround_Step5Slower(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(objectEvent->movementDirection)); + objectEvent->singleMovementActive = TRUE; + sprite->data[1] = 6; + return TRUE; +} + bool8 MovementType_WanderAround_Step6(struct ObjectEvent *objectEvent, struct Sprite *sprite) { if (ObjectEventExecSingleMovementAction(objectEvent, sprite))