/** * Unhide an actor if it's a moving actor. * @param ano Actor Id */ void unHideMovingActor(int ano) { PMOVER pActor; assert((ano > 0 && ano <= NumActors) || ano == LEAD_ACTOR); // illegal actor // Get moving actor involved pActor = GetMover(ano); assert(pActor); // not a moving actor UnHideMover(pActor); }
/** * Get actor to adopt its appropriate walking reel. */ void SetMoverWalkReel(PMOVER pMover, DIRECTION reel, int scale, bool force) { SCNHANDLE whichReel; const FILM *pfilm; // Kill off any play that may be going on for this actor // and restore the real actor storeActorReel(pMover->actorID, NULL, 0, NULL, 0, 0, 0); UnHideMover(pMover); // Don't do it if using a special walk reel if (pMover->bWalkReel) return; if (force || pMover->scale != scale || pMover->direction != reel) { assert(reel >= 0 && reel <= 3 && scale > 0 && scale <= TOTAL_SCALES); // out of range scale or reel // If scale change and both are regular scales // and there's a scaling reel in the right direction if (pMover->scale != scale && scale <= NUM_MAINSCALES && pMover->scale <= NUM_MAINSCALES && (whichReel = ScalingReel(pMover->actorID, pMover->scale, scale, reel)) != 0) { // error("Cripes"); ; // Use what is now in 'whichReel' } else { whichReel = pMover->walkReels[scale-1][reel]; assert(whichReel); // no reel } pfilm = (const FILM *)LockMem(whichReel); assert(pfilm != NULL); // no film InitStepAnimScript(&pMover->actorAnim, pMover->actorObj, FROM_32(pfilm->reels[0].script), 1); // Synchronised walking reels assert(pMover->stepCount >= 0); SkipFrames(&pMover->actorAnim, pMover->stepCount); pMover->scale = scale; pMover->direction = reel; } }
/** * Shows the given actor */ void ShowActor(CORO_PARAM, int ano) { PMOVER pMover; RANGE_CHECK(ano); CORO_BEGIN_CONTEXT; CORO_END_CONTEXT(_ctx); CORO_BEGIN_CODE(_ctx); // reset hidden flag actorInfo[ano - 1].bHidden = false; // Send event to tagged actors if (IsTaggedActor(ano)) CORO_INVOKE_ARGS(ActorEvent, (CORO_SUBCTX, ano, SHOWEVENT, true, 0)); // If moving actor involved, un-hide it pMover = GetMover(ano); if (pMover) UnHideMover(pMover); CORO_END_CODE; }