public void Run() { _keyPressed = new ScummInputState(); ushort result = 0; // TODO: configuration //if (ConfMan.hasKey("save_slot")) //{ // var saveSlot = (int)ConfigurationManager["save_slot"]; // if (saveSlot >= 0 && saveSlot <= 999) // result = _skyControl.QuickXRestore((int)ConfigurationManager["save_slot"]); //} if (result != Control.GameRestored) { bool introSkipped = false; if (SystemVars.Instance.GameVersion.Version.Minor > 272) { // don't do intro for floppydemos using (var skyIntro = new Intro(_skyDisk, _skyScreen, _skyMusic, _skySound, _skyText, _mixer, _system)) { // TODO: configuration //var floppyIntro = (bool)ConfigurationManager["alt_intro"]; var floppyIntro = false; introSkipped = !skyIntro.DoIntro(floppyIntro); } } if (!HasToQuit) { // restartGame() takes us to the first scene, without showing the // initial animation where Foster is being chased. initScreen0() // shows the first scene together with that animation. We can't // call both, as they both load the same scene. if (introSkipped) _skyControl.RestartGame(); else _skyLogic.InitScreen0(); } } _lastSaveTime = Environment.TickCount; var delayCount = Environment.TickCount; while (!HasToQuit) { // TODO: _debugger.onFrame(); if (ShouldPerformAutoSave(_lastSaveTime)) { if (_skyControl.LoadSaveAllowed()) { _lastSaveTime = Environment.TickCount; _skyControl.DoAutoSave(); } else _lastSaveTime += 30 * 1000; // try again in 30 secs } _skySound.CheckFxQueue(); _skyMouse.MouseEngine(); HandleKey(); if (SystemVars.Instance.Paused) { do { _system.GraphicsManager.UpdateScreen(); Delay(50); HandleKey(); } while (SystemVars.Instance.Paused); delayCount = Environment.TickCount; } _skyLogic.Engine(); _skyScreen.ProcessSequence(); _skyScreen.Recreate(); _skyScreen.SpriteEngine(); // TODO: debugger //if (_debugger.showGrid()) //{ // var grid = _skyLogic.Grid.GiveGrid(_skyLogic.ScriptVariables[Logic.SCREEN]); // if (grid != null) // { // _skyScreen.ShowGrid(grid); // _skyScreen.ForceRefresh(); // } //} _skyScreen.Flip(); if ((_fastMode & 2) != 0) Delay(0); else if ((_fastMode & 1) != 0) Delay(10); else { delayCount += SystemVars.Instance.GameSpeed; int needDelay = delayCount - Environment.TickCount; if ((needDelay < 0) || (needDelay > SystemVars.Instance.GameSpeed)) { needDelay = 0; delayCount = Environment.TickCount; } Delay(needDelay); } } _skyControl.ShowGameQuitMsg(); _skyMusic.StopMusic(); // TODO: configuration //ConfMan.flushToDisk(); Delay(1500); }
public void Run() { _keyPressed = new ScummInputState(); ushort result = 0; // TODO: configuration //if (ConfMan.hasKey("save_slot")) //{ // var saveSlot = (int)ConfigurationManager["save_slot"]; // if (saveSlot >= 0 && saveSlot <= 999) // result = _skyControl.QuickXRestore((int)ConfigurationManager["save_slot"]); //} if (result != Control.GameRestored) { bool introSkipped = false; if (SystemVars.Instance.GameVersion.Version.Minor > 272) { // don't do intro for floppydemos using (var skyIntro = new Intro(_skyDisk, _skyScreen, _skyMusic, _skySound, _skyText, _mixer, _system)) { // TODO: configuration //var floppyIntro = (bool)ConfigurationManager["alt_intro"]; var floppyIntro = false; introSkipped = !skyIntro.DoIntro(floppyIntro); } } if (!HasToQuit) { // restartGame() takes us to the first scene, without showing the // initial animation where Foster is being chased. initScreen0() // shows the first scene together with that animation. We can't // call both, as they both load the same scene. if (introSkipped) { _skyControl.RestartGame(); } else { _skyLogic.InitScreen0(); } } } _lastSaveTime = Environment.TickCount; var delayCount = Environment.TickCount; while (!HasToQuit) { // TODO: _debugger.onFrame(); if (ShouldPerformAutoSave(_lastSaveTime)) { if (_skyControl.LoadSaveAllowed()) { _lastSaveTime = Environment.TickCount; _skyControl.DoAutoSave(); } else { _lastSaveTime += 30 * 1000; // try again in 30 secs } } _skySound.CheckFxQueue(); _skyMouse.MouseEngine(); HandleKey(); if (SystemVars.Instance.Paused) { do { _system.GraphicsManager.UpdateScreen(); Delay(50); HandleKey(); } while (SystemVars.Instance.Paused); delayCount = Environment.TickCount; } _skyLogic.Engine(); _skyScreen.ProcessSequence(); _skyScreen.Recreate(); _skyScreen.SpriteEngine(); // TODO: debugger //if (_debugger.showGrid()) //{ // var grid = _skyLogic.Grid.GiveGrid(_skyLogic.ScriptVariables[Logic.SCREEN]); // if (grid != null) // { // _skyScreen.ShowGrid(grid); // _skyScreen.ForceRefresh(); // } //} _skyScreen.Flip(); if ((_fastMode & 2) != 0) { Delay(0); } else if ((_fastMode & 1) != 0) { Delay(10); } else { delayCount += SystemVars.Instance.GameSpeed; int needDelay = delayCount - Environment.TickCount; if ((needDelay < 0) || (needDelay > SystemVars.Instance.GameSpeed)) { needDelay = 0; delayCount = Environment.TickCount; } Delay(needDelay); } } _skyControl.ShowGameQuitMsg(); _skyMusic.StopMusic(); // TODO: configuration //ConfMan.flushToDisk(); Delay(1500); }