Improved follower pokemon animation code.
This commit is contained in:
parent
beb282a359
commit
a59564fc1e
5 changed files with 10 additions and 12 deletions
|
@ -439,6 +439,7 @@ bool8 CopyablePlayerMovement_Jump(struct ObjectEvent *, struct Sprite *, u8, boo
|
|||
u8 MovementType_FollowPlayer_Shadow(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_FollowPlayer_Active(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_FollowPlayer_Moving(struct ObjectEvent *, struct Sprite *);
|
||||
void StartSpriteAnimInDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 animNum);
|
||||
|
||||
bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
bool8 FollowablePlayerMovement_FaceDirection(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
|
||||
|
|
|
@ -4981,7 +4981,6 @@ bool8 MovementType_FollowPlayer_Active(struct ObjectEvent *objectEvent, struct S
|
|||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_ENTER_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
sprite->animCmdIndex = 0; // Needed for animCmdIndex weirdness
|
||||
sprite->sTypeFuncId = 2; // movement action sets state to 0
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -5051,7 +5050,6 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
|||
MoveObjectEventToMapCoords(objectEvent, targetX, targetY);
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_EXIT_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
sprite->animCmdIndex = 0; // Needed because of weird animCmdIndex stuff
|
||||
sprite->sTypeFuncId = 2;
|
||||
return TRUE;
|
||||
} else if (x == targetX && y == targetY) { // don't move if already in the player's last position
|
||||
|
@ -6654,11 +6652,13 @@ bool8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *objectEvent, struct
|
|||
u8 direction = gObjectEvents[gPlayerAvatar.objectEventId].facingDirection;
|
||||
objectEvent->invisible = FALSE;
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) { // If player is dashing, the pokemon must come out faster
|
||||
InitMoveInPlace(objectEvent, sprite, direction, GetMoveDirectionFastestAnimNum(direction) + 4, 8);
|
||||
sprite->data[6] = 0; // fast speed
|
||||
StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFastestAnimNum(direction) + 4);
|
||||
sprite->data[3] = 8; // duration
|
||||
sprite->data[6] = 0; // fast speed
|
||||
} else {
|
||||
InitMoveInPlace(objectEvent, sprite, direction, GetMoveDirectionFastestAnimNum(direction), 16);
|
||||
sprite->data[6] = 1; // slow speed
|
||||
StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFastestAnimNum(direction));
|
||||
sprite->data[3] = 16; // duration
|
||||
sprite->data[6] = 1; // slow speed
|
||||
}
|
||||
sprite->data[6] |= (direction == DIR_EAST ? 1 : 0) << 4;
|
||||
ObjectEventSetGraphicsId(objectEvent, OBJ_EVENT_GFX_ANIMATED_BALL);
|
||||
|
@ -6741,7 +6741,8 @@ bool8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *objectEvent, struct
|
|||
|
||||
bool8 MovementAction_EnterPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) {
|
||||
u8 direction = objectEvent->facingDirection;
|
||||
InitMoveInPlace(objectEvent, sprite, direction, GetMoveDirectionFasterAnimNum(direction), 16);
|
||||
StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFasterAnimNum(direction));
|
||||
sprite->data[3] = 16; // duration
|
||||
sprite->data[6] = direction == DIR_EAST ? 3 : 2; // affine animation number
|
||||
EndFollowerTransformEffect(objectEvent, sprite);
|
||||
return MovementAction_EnterPokeball_Step1(objectEvent, sprite);
|
||||
|
|
|
@ -1567,7 +1567,6 @@ static void HideFollowerForFieldEffect(void) {
|
|||
if (!followerObj || followerObj->invisible)
|
||||
return;
|
||||
ClearObjectEventMovement(followerObj, &gSprites[followerObj->spriteId]);
|
||||
gSprites[followerObj->spriteId].animCmdIndex = 0; // Avoids a visual glitch with follower's animation frame
|
||||
ObjectEventSetHeldMovement(followerObj, MOVEMENT_ACTION_ENTER_POKEBALL);
|
||||
}
|
||||
|
||||
|
|
|
@ -689,7 +689,6 @@ static void Task_DoDoorWarp(u8 taskId)
|
|||
PlaySE(GetDoorSoundEffect(*x, *y - 1));
|
||||
if (followerObject) { // Put follower into pokeball
|
||||
ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]);
|
||||
gSprites[followerObject->spriteId].animCmdIndex = 0; // Needed because of weird animCmdIndex stuff
|
||||
ObjectEventSetHeldMovement(followerObject, MOVEMENT_ACTION_ENTER_POKEBALL);
|
||||
}
|
||||
task->data[1] = FieldAnimateDoorOpen(*x, *y - 1);
|
||||
|
|
|
@ -1013,11 +1013,9 @@ bool8 ScrCmd_applymovement(struct ScriptContext *ctx)
|
|||
if (localId != OBJ_EVENT_ID_FOLLOWER && !FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT)) { // Force follower into pokeball
|
||||
objEvent = GetFollowerObject();
|
||||
// return early if no follower or in shadowing state
|
||||
if (objEvent == NULL || gSprites[objEvent->spriteId].data[1] == 0) {
|
||||
if (objEvent == NULL || gSprites[objEvent->spriteId].data[1] == 0)
|
||||
return FALSE;
|
||||
}
|
||||
ClearObjectEventMovement(objEvent, &gSprites[objEvent->spriteId]);
|
||||
gSprites[objEvent->spriteId].animCmdIndex = 0; // Needed to set start frame of animation
|
||||
ScriptMovement_StartObjectMovementScript(OBJ_EVENT_ID_FOLLOWER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, EnterPokeballMovement);
|
||||
}
|
||||
return FALSE;
|
||||
|
|
Loading…
Reference in a new issue