Merge branch 'followers' into followers-expanded-id
This commit is contained in:
commit
394b4cb3a5
3 changed files with 43 additions and 20 deletions
Binary file not shown.
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 7.9 KiB |
|
@ -283,6 +283,10 @@
|
|||
#define OW_SPECIES(x) (((x)->graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE)
|
||||
#define OW_FORM(x) ((x)->graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS)
|
||||
|
||||
// If true, follower pokemon will bob up and down
|
||||
// during their idle & walking animations
|
||||
#define OW_MON_BOBBING TRUE
|
||||
|
||||
#define SHADOW_SIZE_S 0
|
||||
#define SHADOW_SIZE_M 1
|
||||
#define SHADOW_SIZE_L 2
|
||||
|
|
|
@ -4993,19 +4993,17 @@ bool8 MovementType_FollowPlayer_Shadow(struct ObjectEvent *objectEvent, struct S
|
|||
|
||||
bool8 MovementType_FollowPlayer_Active(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (gPlayerAvatar.tileTransitionState == T_NOT_MOVING && !gObjectEvents[gPlayerAvatar.objectEventId].heldMovementActive ) { // do nothing if player is stationary
|
||||
return FALSE;
|
||||
} else if (!IsFollowerVisible()) {
|
||||
if (objectEvent->invisible) { // Return to shadowing state
|
||||
sprite->sTypeFuncId = 0;
|
||||
return FALSE;
|
||||
}
|
||||
// Animate entering pokeball
|
||||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_ENTER_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
sprite->sTypeFuncId = 2; // movement action sets state to 0
|
||||
return TRUE;
|
||||
if (!IsFollowerVisible()) {
|
||||
if (objectEvent->invisible) { // Return to shadowing state
|
||||
sprite->sTypeFuncId = 0;
|
||||
return FALSE;
|
||||
}
|
||||
// Animate entering pokeball
|
||||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_ENTER_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
sprite->sTypeFuncId = 2; // movement action sets state to 0
|
||||
return TRUE;
|
||||
}
|
||||
// TODO: Remove dependence on PlayerGetCopyableMovement
|
||||
return gFollowPlayerMovementFuncs[PlayerGetCopyableMovement()](objectEvent, sprite, GetPlayerMovementDirection(), NULL);
|
||||
|
@ -5025,23 +5023,33 @@ bool8 MovementType_FollowPlayer_Moving(struct ObjectEvent *objectEvent, struct S
|
|||
if (sprite->sTypeFuncId) { // restore nonzero state
|
||||
sprite->sTypeFuncId = 1;
|
||||
}
|
||||
} else if (objectEvent->movementActionId != MOVEMENT_ACTION_EXIT_POKEBALL) {
|
||||
} else if (objectEvent->movementActionId < MOVEMENT_ACTION_EXIT_POKEBALL) {
|
||||
UpdateFollowerTransformEffect(objectEvent, sprite);
|
||||
#if OW_MON_BOBBING == TRUE
|
||||
if ((sprite->data[5] & 7) == 2)
|
||||
sprite->y2 ^= -1;
|
||||
#endif
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
|
||||
{
|
||||
u8 direction;
|
||||
if (!objectEvent->singleMovementActive) { // walk in place
|
||||
if (!objectEvent->singleMovementActive)
|
||||
{ // walk in place
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection));
|
||||
sprite->sTypeFuncId = 1;
|
||||
objectEvent->singleMovementActive = 1;
|
||||
return TRUE;
|
||||
} else if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { // finish movement action
|
||||
}
|
||||
else if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
|
||||
{ // finish movement action
|
||||
objectEvent->singleMovementActive = 0;
|
||||
}
|
||||
#if OW_MON_BOBBING == TRUE
|
||||
else if ((sprite->data[3] & 7) == 2)
|
||||
sprite->y2 ^= -1;
|
||||
#endif
|
||||
UpdateFollowerTransformEffect(objectEvent, sprite);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -5054,7 +5062,7 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
|||
s16 targetX;
|
||||
s16 targetY;
|
||||
#ifdef MB_SIDEWAYS_STAIRS_RIGHT_SIDE
|
||||
u8 playerAction = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId;
|
||||
u32 playerAction = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId;
|
||||
#endif
|
||||
|
||||
targetX = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x;
|
||||
|
@ -5079,6 +5087,9 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
|||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_EXIT_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
sprite->sTypeFuncId = 2;
|
||||
#if OW_MON_BOBBING == TRUE
|
||||
sprite->y2 = 0;
|
||||
#endif
|
||||
return TRUE;
|
||||
} else if (x == targetX && y == targetY) { // don't move if already in the player's last position
|
||||
return FALSE;
|
||||
|
@ -5102,8 +5113,12 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
|||
} else {
|
||||
if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_RIGHT)
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
|
||||
else
|
||||
else {
|
||||
objectEvent->movementActionId = GetWalkNormalMovementAction(direction);
|
||||
#if OW_MON_BOBBING == TRUE
|
||||
sprite->y2 = -1;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
sprite->sActionFuncId = 0;
|
||||
#else
|
||||
|
@ -5114,8 +5129,12 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
|||
// If *player* jumps, make step take twice as long
|
||||
else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2)
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
|
||||
else
|
||||
else {
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(direction));
|
||||
#if OW_MON_BOBBING == TRUE
|
||||
sprite->y2 = -1;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
objectEvent->singleMovementActive = 1;
|
||||
sprite->sTypeFuncId = 2;
|
||||
|
|
Loading…
Reference in a new issue