private void LoadSemiStaticData()
        {
            logicPtrVal = MemoryReader.ReadIntPtr(EngineAddr + logicOffset);
            if (logicPtrVal == IntPtr.Zero)
            {
                throw new InconsistentDataException();
            }

            string logicName = RttiReader.GetMangledClassNameFromObjPtr(logicPtrVal);

            switch (logicName)
            {
            case ".?AVLogicGame@Queen@@":
                logicMode = LogicMode.Game;
                break;

            case ".?AVLogicDemo@Queen@@":
                logicMode = LogicMode.Demo;
                break;

            case ".?AVLogicInterview@Queen@@":
                logicMode = LogicMode.Interview;
                break;

            default:
                throw new InvalidDataException("Unrecognized logic type");
            }
        }
        private VideoState?ReadVmdDecoder(IntPtr decoderAddr)
        {
            var coktelDecoderAddr = MemoryReader.ReadIntPtr(decoderAddr + vmdAdvancedDecoderDecoderOffset);

            var curFrame = MemoryReader.ReadInt32(coktelDecoderAddr + coktelDecoderCurFrameOffset);

            if (curFrame <= -1)
            {
                return(null);
            }

            var state = new VideoState();

            state.CurrentFrame = (uint)curFrame;
            state.FrameCount   = MemoryReader.ReadUInt32(coktelDecoderAddr + coktelDecoderFrameCountOffset);
            state.FrameRate    = ReadRational(coktelDecoderAddr + coktelDecoderFrameRateOffset);

            if (RttiReader.HasBaseClass(coktelDecoderAddr, ".?AVVMDDecoder@Video@@"))
            {
                var streamPtrVal = MemoryReader.ReadIntPtr(coktelDecoderAddr + vmdDecoderStreamOffset);
                state.FileName = ReadFileName(streamPtrVal);
            }

            return(state);
        }
        public VideoState?ReadDecoder(IntPtr decoderAddr)
        {
            if (decoderAddr == IntPtr.Zero)
            {
                return(null);
            }

            if (RttiReader.HasBaseClass(decoderAddr, ".?AVSmackerDecoder@Video@@"))
            {
                return(ReadSmkDecoder(decoderAddr));
            }
            if (RttiReader.HasBaseClass(decoderAddr, ".?AVAVIDecoder@Video@@"))
            {
                return(ReadAviDecoder(decoderAddr));
            }
            if (RttiReader.HasBaseClass(decoderAddr, ".?AVAdvancedVMDDecoder@Video@@"))
            {
                return(ReadVmdDecoder(decoderAddr));
            }
            throw new NotSupportedException("No support for the decoder");
        }
Example #4
0
        internal UnknownEngineAccessor(ScummVMConnector connector, IntPtr engineAddr) : base(connector, engineAddr)
        {
            string mangledName = RttiReader.GetMangledClassNameFromObjPtr(engineAddr);

            Debug.WriteLine($"Unknown engine class name \"{mangledName}\"");
        }