static void ActorRestoredProcess(CORO_PARAM, const void *param) { // COROUTINE CORO_BEGIN_CONTEXT; INT_CONTEXT *pic; CORO_END_CONTEXT(_ctx); // get the stuff copied to process when it was created const RATP_INIT *r = (const RATP_INIT *)param; bool isSavegame = r->pic->resumeState == RES_SAVEGAME; CORO_BEGIN_CODE(_ctx); _ctx->pic = RestoreInterpretContext(r->pic); // The newly added check here specially sets the process to RES_NOT when loading a savegame. // This is needed particularly for the Psychiatrist scene in Discworld 1 - otherwise Rincewind // can't go upstairs without leaving the building and returning. If this patch causes problems // in other scenes, an added check for the hCode == 1174490602 could be added. if (isSavegame && TinselV1) _ctx->pic->resumeState = RES_NOT; CORO_INVOKE_1(Interpret, _ctx->pic); // If it gets here, actor's code has run to completion actorInfo[r->id - 1].completed = true; CORO_END_CODE; }
/** * The code for for restored scene processes. */ static void RestoredProcessProcess(CORO_PARAM, const void *param) { CORO_BEGIN_CONTEXT; INT_CONTEXT *pic; CORO_END_CONTEXT(_ctx); CORO_BEGIN_CODE(_ctx); // get the stuff copied to process when it was created _ctx->pic = *(const PINT_CONTEXT *)param; _ctx->pic = RestoreInterpretContext(_ctx->pic); AttachInterpret(_ctx->pic, g_scheduler->getCurrentProcess()); CORO_INVOKE_1(Interpret, _ctx->pic); CORO_END_CODE; }
static void ActorRestoredProcess(CORO_PARAM, const void *param) { // COROUTINE CORO_BEGIN_CONTEXT; INT_CONTEXT *pic; CORO_END_CONTEXT(_ctx); // get the stuff copied to process when it was created const RATP_INIT *r = (const RATP_INIT *)param; CORO_BEGIN_CODE(_ctx); _ctx->pic = RestoreInterpretContext(r->pic); CORO_INVOKE_1(Interpret, _ctx->pic); // If it gets here, actor's code has run to completion actorInfo[r->id - 1].completed = true; CORO_END_CODE; }
static void RestoredProcess(CORO_PARAM, const void *param) { // COROUTINE CORO_BEGIN_CONTEXT; INT_CONTEXT *pic; bool bConverse; CORO_END_CONTEXT(_ctx); CORO_BEGIN_CODE(_ctx); // get the stuff copied to process when it was created _ctx->pic = *((INT_CONTEXT * const *)param); _ctx->pic = RestoreInterpretContext(_ctx->pic); _ctx->bConverse = TinselV2 && (_ctx->pic->event == CONVERSE); CORO_INVOKE_1(Interpret, _ctx->pic); // Restore control after CallScene() from a conversation icon if (_ctx->bConverse) ControlOn(); CORO_END_CODE; }