public ScummEngine7(GameSettings game, IGraphicsManager graphicsManager, IInputManager inputManager, IMixer mixer) : base(game, graphicsManager, inputManager, mixer) { if (Game.GameId == GameId.Dig && (Game.Features.HasFlag(GameFeatures.Demo))) { _smushFrameRate = 15; } else { _smushFrameRate = (Game.GameId == GameId.FullThrottle) ? 10 : 12; } for (int i = 0; i < _subtitleQueue.Length; i++) { _subtitleQueue[i] = new SubtitleText(); } int dimuseTempo = 10; MusicEngine = IMuseDigital = new IMuseDigital(this, mixer, dimuseTempo); IMuseDigital.SetAudioNames(ResourceManager.AudioNames); // Create FT INSANE object if (Game.GameId == GameId.FullThrottle) { Insane = new Insane.Insane(this); } SmushMixer = new SmushMixer(Mixer); SmushPlayer = new SmushPlayer(this); }
void Codec1(byte[] dst, int dstPos, byte[] src, int srcfOffset, int width, int height, int pitch) { SmushPlayer.SmushDecodeCodec1(dst, dstPos, src, srcfOffset, 0, 0, width, height, pitch); for (var i = 0; i < width * height; i++) { _paletteMap[dst[dstPos + i]] = 1; } }
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; } }