protected internal override void ProcessInput() { var cutsceneExitKeyEnabled = (!VariableCutSceneExitKey.HasValue || Variables[VariableCutSceneExitKey.Value] != 0); // VAR_VERSION_KEY (usually ctrl-v) is used in COMI, Dig and FT to trigger // a version dialog, unless VAR_VERSION_KEY is set to 0. However, the COMI // version string is hard coded in the engine, hence we don't invoke // versionDialog for it. Dig/FT version strings are partly hard coded, too. // if (Game.GameId != GameId.CurseOfMonkeyIsland && 0 != Variables[VariableVersionKey] && // _inputManager.IsKeyDown(KeyCode.V) && _inputManager.IsKeyDown(KeyCode.Control)) { // VersionDialog(); // // } else if (cutsceneExitKeyEnabled && _inputState.IsKeyDown(KeyCode.Escape)) { // Skip cutscene (or active SMUSH video). if (SmushActive) { if (Game.GameId == GameId.FullThrottle) { Insane.EscapeKeyHandler(); } else { SmushVideoShouldFinish = true; } _skipVideo = true; } else { AbortCutscene(); } mouseAndKeyboardStat = KeyCode.Escape; } else { base.ProcessInput(); } if (_skipVideo && !SmushActive) { AbortCutscene(); mouseAndKeyboardStat = KeyCode.Escape; _skipVideo = false; } }
protected override void KernelSetFunctions() { var args = GetStackList(30); switch (args[0]) { case 4: GrabCursor(args[1], args[2], args[3], args[4]); break; case 6: { // SMUSH movie playback if (args[1] == 0 && !_skipVideo) { var videoname = GetStringAddressVar(VariableVideoName).GetText(); // TODO: vs // Correct incorrect smush filename in Macintosh FT demo // if ((_game.id == GID_FT) && (_game.features & GF_DEMO) && (_game.platform == Common::kPlatformMacintosh) && // (!strcmp(videoname, "jumpgorge.san"))) // _splayer.play("jumpgorg.san", _smushFrameRate); // WORKAROUND: A faster frame rate is required, to keep audio/video in sync in this video // else if (Game.GameId == GameId.Dig && videoname == "sq3.san") { SmushPlayer.Play(videoname, 14); } else { SmushPlayer.Play(videoname, _smushFrameRate); } if (Game.GameId == GameId.Dig) { _disableFadeInEffect = true; } } else if (Game.GameId == GameId.FullThrottle && !_skipVideo) { var insaneVarNum = (Game.Features.HasFlag(GameFeatures.Demo) /* && (Game.Platform == Common::kPlatformDOS)*/) ? (uint)232 : 233; Insane.SetSmushParams(_smushFrameRate); Insane.RunScene(insaneVarNum); } } break; case 12: SetCursorFromImg(args[1], -1, args[2]); break; case 13: Actors[args[1]].RemapActorPalette(args[2], args[3], args[4], -1); break; case 14: Actors[args[1]].RemapActorPalette(args[2], args[3], args[4], args[5]); break; case 15: _smushFrameRate = args[1]; break; case 16: case 17: EnqueueText(GetStringAddressVar(VariableString2Draw), args[3], args[4], (byte)args[2], (byte)args[1], (args[0] == 16)); break; case 20: IMuseDigital.RadioChatterSFX = args[1] != 0; break; case 107: Actors[args[1]].SetScale(args[2], -1); break; case 108: SetShadowPalette(args[1], args[2], args[3], args[4], args[5], args[6]); break; case 109: SetShadowPalette(0, args[1], args[2], args[3], args[4], args[5]); break; case 117: FreezeScripts(2); break; case 118: EnqueueObject(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], 3); break; case 119: EnqueueObject(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], 0); break; case 124: _saveSound = args[1] != 0; break; default: // Console.Error.WriteLine("KernelSetFunctions: default case {0} (param count {1})", args[0], args.Length); break; } }