feat: added OW_MON_WANDER_WALK
config option
This commit is contained in:
parent
839cf2e790
commit
42d9f24c84
4 changed files with 37 additions and 37 deletions
|
@ -293,6 +293,9 @@
|
|||
// If true, follower pokemon will bob up and down
|
||||
// during their idle & walking animations
|
||||
#define OW_MON_BOBBING TRUE
|
||||
// If true, OW pokemon with `MOVEMENT_TYPE_WANDER*`
|
||||
// will walk-in-place in between steps
|
||||
#define OW_MON_WANDER_WALK TRUE
|
||||
|
||||
// If true, adds a small amount of overhead
|
||||
// to OW code so that large (48x48, 64x64) OWs
|
||||
|
|
|
@ -295,7 +295,7 @@ u8 CreateCopySpriteAt(struct Sprite *sprite, s16 x, s16 y, u8 subpriority);
|
|||
u8 MovementType_WanderAround_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step1(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step2(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step3(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_Wander_Step3(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step4(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step5(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step6(struct ObjectEvent *, struct Sprite *);
|
||||
|
@ -318,14 +318,12 @@ u8 MovementType_LookAround_Step4(struct ObjectEvent *, struct Sprite *);
|
|||
u8 MovementType_WanderUpAndDown_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderUpAndDown_Step1(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderUpAndDown_Step2(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderUpAndDown_Step3(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderUpAndDown_Step4(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderUpAndDown_Step5(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderUpAndDown_Step6(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderLeftAndRight_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderLeftAndRight_Step1(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderLeftAndRight_Step2(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderLeftAndRight_Step3(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderLeftAndRight_Step4(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderLeftAndRight_Step5(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderLeftAndRight_Step6(struct ObjectEvent *, struct Sprite *);
|
||||
|
|
|
@ -2,7 +2,7 @@ u8 (*const gMovementTypeFuncs_WanderAround[])(struct ObjectEvent *, struct Sprit
|
|||
MovementType_WanderAround_Step0,
|
||||
MovementType_WanderAround_Step1,
|
||||
MovementType_WanderAround_Step2,
|
||||
MovementType_WanderAround_Step3,
|
||||
MovementType_Wander_Step3,
|
||||
MovementType_WanderAround_Step4,
|
||||
MovementType_WanderAround_Step5,
|
||||
MovementType_WanderAround_Step6,
|
||||
|
@ -36,7 +36,7 @@ u8 (*const gMovementTypeFuncs_WanderUpAndDown[])(struct ObjectEvent *, struct Sp
|
|||
MovementType_WanderUpAndDown_Step0,
|
||||
MovementType_WanderUpAndDown_Step1,
|
||||
MovementType_WanderUpAndDown_Step2,
|
||||
MovementType_WanderUpAndDown_Step3,
|
||||
MovementType_Wander_Step3,
|
||||
MovementType_WanderUpAndDown_Step4,
|
||||
MovementType_WanderUpAndDown_Step5,
|
||||
MovementType_WanderUpAndDown_Step6,
|
||||
|
@ -48,7 +48,7 @@ u8 (*const gMovementTypeFuncs_WanderLeftAndRight[])(struct ObjectEvent *, struct
|
|||
MovementType_WanderLeftAndRight_Step0,
|
||||
MovementType_WanderLeftAndRight_Step1,
|
||||
MovementType_WanderLeftAndRight_Step2,
|
||||
MovementType_WanderLeftAndRight_Step3,
|
||||
MovementType_Wander_Step3,
|
||||
MovementType_WanderLeftAndRight_Step4,
|
||||
MovementType_WanderLeftAndRight_Step5,
|
||||
MovementType_WanderLeftAndRight_Step6,
|
||||
|
|
|
@ -103,6 +103,7 @@ static EWRAM_DATA struct LockedAnimObjectEvents *sLockedAnimObjectEvents = {0};
|
|||
|
||||
static void MoveCoordsInDirection(u32, s16 *, s16 *, s16, s16);
|
||||
static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *, struct Sprite *);
|
||||
static bool32 UpdateMonMoveInPlace(struct ObjectEvent *, struct Sprite *);
|
||||
static void SetMovementDelay(struct Sprite *, s16);
|
||||
static bool8 WaitForMovementDelay(struct Sprite *);
|
||||
static u8 GetCollisionInDirection(struct ObjectEvent *, u8);
|
||||
|
@ -3436,12 +3437,20 @@ bool8 MovementType_WanderAround_Step2(struct ObjectEvent *objectEvent, struct Sp
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 MovementType_WanderAround_Step3(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
// common; used by all MovementType_Wander*_Step3
|
||||
bool8 MovementType_Wander_Step3(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (WaitForMovementDelay(sprite))
|
||||
{
|
||||
// resets a mid-movement sprite
|
||||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
sprite->sTypeFuncId = 4;
|
||||
return TRUE;
|
||||
} else if (
|
||||
OW_MON_WANDER_WALK == TRUE
|
||||
&& IS_OW_MON_OBJ(objectEvent))
|
||||
{
|
||||
UpdateMonMoveInPlace(objectEvent, sprite);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -3768,16 +3777,6 @@ bool8 MovementType_WanderUpAndDown_Step2(struct ObjectEvent *objectEvent, struct
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 MovementType_WanderUpAndDown_Step3(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (WaitForMovementDelay(sprite))
|
||||
{
|
||||
sprite->sTypeFuncId = 4;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MovementType_WanderUpAndDown_Step4(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
u8 direction;
|
||||
|
@ -3836,16 +3835,6 @@ bool8 MovementType_WanderLeftAndRight_Step2(struct ObjectEvent *objectEvent, str
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 MovementType_WanderLeftAndRight_Step3(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (WaitForMovementDelay(sprite))
|
||||
{
|
||||
sprite->sTypeFuncId = 4;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MovementType_WanderLeftAndRight_Step4(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
u8 direction;
|
||||
|
@ -5328,19 +5317,27 @@ bool8 MovementType_FollowPlayer_Moving(struct ObjectEvent *objectEvent, struct S
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
|
||||
{
|
||||
// single function for updating an OW mon's walk-in-place movements
|
||||
static bool32 UpdateMonMoveInPlace(struct ObjectEvent *objectEvent, struct Sprite *sprite) {
|
||||
if (!objectEvent->singleMovementActive) {
|
||||
// walk in place
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection));
|
||||
sprite->sTypeFuncId = 1;
|
||||
objectEvent->singleMovementActive = TRUE;
|
||||
return TRUE;
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection));
|
||||
objectEvent->singleMovementActive = TRUE;
|
||||
return TRUE;
|
||||
} else if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) {
|
||||
// finish movement action
|
||||
objectEvent->singleMovementActive = FALSE;
|
||||
} else if (OW_MON_BOBBING == TRUE && (sprite->data[3] & 7) == 2)
|
||||
sprite->y2 ^= -1;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
|
||||
{
|
||||
if (UpdateMonMoveInPlace(objectEvent, sprite)) {
|
||||
sprite->sTypeFuncId = 1;
|
||||
return TRUE;
|
||||
}
|
||||
UpdateFollowerTransformEffect(objectEvent, sprite);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -5611,7 +5608,7 @@ bool8 MovementType_MoveInPlace_Step1(struct ObjectEvent *objectEvent, struct Spr
|
|||
{
|
||||
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
|
||||
sprite->sTypeFuncId = 0;
|
||||
// similar to FollowablePlayerMovement_Idle
|
||||
// similar to UpdateMonMoveInPlace
|
||||
else if (
|
||||
OW_MON_BOBBING == TRUE
|
||||
&& IS_OW_MON_OBJ(objectEvent)
|
||||
|
@ -10058,14 +10055,16 @@ static u8 DoJumpSpecialSpriteMovement(struct Sprite *sprite)
|
|||
|
||||
static void SetMovementDelay(struct Sprite *sprite, s16 timer)
|
||||
{
|
||||
sprite->data[3] = timer;
|
||||
sprite->data[3] = timer; // kept for legacy reasons
|
||||
sprite->data[7] = timer; // actual timer
|
||||
}
|
||||
|
||||
static bool8 WaitForMovementDelay(struct Sprite *sprite)
|
||||
{
|
||||
if (--sprite->data[3] == 0)
|
||||
if (--sprite->data[7] == 0) {
|
||||
sprite->data[3] = 0; // reset animation timer
|
||||
return TRUE;
|
||||
else
|
||||
} else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue