diff --git a/src/scrcmd.c b/src/scrcmd.c index 6ec06cced9..ae2cbfc335 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1032,7 +1032,15 @@ bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx) static bool8 WaitForMovementFinish(void) { - return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapNum, sMovingNpcMapGroup); + if (ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapNum, sMovingNpcMapGroup)) { + struct ObjectEvent *objEvent = GetFollowerObject(); + // If the follower is still entering the pokeball, wait for it to finish too + // This prevents a `release` after this script command from getting the follower stuck in an intermediate state + if (sMovingNpcId != OBJ_EVENT_ID_FOLLOWER && objEvent && ObjectEventGetHeldMovementActionId(objEvent) == MOVEMENT_ACTION_ENTER_POKEBALL) + return ScriptMovement_IsObjectMovementFinished(objEvent->localId, objEvent->mapNum, objEvent->mapGroup); + return TRUE; + } + return FALSE; } bool8 ScrCmd_waitmovement(struct ScriptContext *ctx)