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"); }
internal UnknownEngineAccessor(ScummVMConnector connector, IntPtr engineAddr) : base(connector, engineAddr) { string mangledName = RttiReader.GetMangledClassNameFromObjPtr(engineAddr); Debug.WriteLine($"Unknown engine class name \"{mangledName}\""); }