/** * Restart the game */ void TinselEngine::RestartGame(void) { HoldItem(INV_NOICON); // Holding nothing DropBackground(); // No background // Ditches existing infrastructure background PrimeBackground(); // Next scene change won't need to fade out // -> reset the count used by ChangeScene CountOut = 1; RebootCursor(); RebootDeadTags(); RebootMovers(); RebootTimers(); RebootScalingReels(); DelayedScene.scene = HookScene.scene = 0; // remove keyboard, mouse and joystick drivers ChopDrivers(); // Init palette and object managers, scheduler, keyboard and mouse RestartDrivers(); // Actors, globals and inventory icons LoadBasicChunks(); // Continuous game processes CreateConstProcesses(); }
/** * Wrap up the last scene. */ void EndScene() { if (SceneHandle != 0) { UnlockScene(SceneHandle); SceneHandle = 0; } KillInventory(); // Close down any open inventory DropPolygons(); // No polygons DropScroll(); // No no-scrolls DropBackground(); // No background DropMovers(); // No moving actors DropCursor(); // No cursor DropActors(); // No actor reels running FreeAllTokens(); // No-one has tokens FreeMostInterpretContexts(); // Only master script still interpreting if (TinselV2) { SetSysVar(ISV_DIVERT_ACTOR, 0); SetSysVar(ISV_GHOST_ACTOR, 0); SetSysVar(SV_MinimumXoffset, 0); SetSysVar(SV_MaximumXoffset, 0); SetSysVar(SV_MinimumYoffset, 0); SetSysVar(SV_MaximumYoffset, 0); ResetFontHandles(); NoSoundReels(); } _vm->_sound->stopAllSamples(); // Kill off any still-running sample //_vm->_mixer->stopAll(); // init the palette manager ResetPalAllocator(); // init the object manager KillAllObjects(); // kill all destructable process g_scheduler->killMatchingProcess(PID_DESTROY, PID_DESTROY); }