public CDMD(byte[] Data) { EndianBinaryReaderEx er = new EndianBinaryReaderEx(new MemoryStream(Data), Endianness.LittleEndian); try { Header = new CDMDHeader(er); foreach (var v in Header.SectionOffsets) { er.BaseStream.Position = Header.HeaderSize + v; String sig = er.ReadString(Encoding.ASCII, 4); er.BaseStream.Position -= 4; switch (sig) { case "TPTK": KartPoint = new KTPT(er); break; case "TPNE": EnemyPoint = new ENPT(er); break; case "HPNE": EnemyPointPath = new ENPH(er); break; case "TPTI": ItemPoint = new ITPT(er); break; case "HPTI": ItemPointPath = new ITPH(er); break; case "TPKC": CheckPoint = new CKPT(er); break; case "HPKC": CheckPointPath = new CKPH(er); break; case "JBOG": GlobalObject = new GOBJ(er); break; case "ITOP": PointInfo = new POTI(er); break; case "AERA": Area = new AREA(er); break; case "EMAC": Camera = new CAME(er); break; case "TPGJ": JugemPoint = new JGPT(er); break; case "TPLG": GliderPoint = new GLPT(er); break; case "HPLG": GliderPointPath = new GLPH(er); break; default: //throw new Exception("Unknown Section: " + sig); continue; //goto cont; } } cont: ; } catch (SignatureNotCorrectException e) { MessageBox.Show(e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { er.Close(); } }
public CMSN(byte[] Data) { Sections = new List <BaseSection>(); EndianBinaryReaderEx er = new EndianBinaryReaderEx(new MemoryStream(Data), Endianness.LittleEndian); Header = new CMSNHeader(er); er.BaseStream.Position = Header.SectionTableOffset; uint sections = er.ReadUInt32(); for (int i = 0; i < sections; i++) { uint sectionType = er.ReadUInt32(); uint sectionOffset = er.ReadUInt32(); long prevPos = er.BaseStream.Position; er.BaseStream.Position = sectionOffset + Header.SectionsOffset; switch ((BaseSection.SectionType)sectionType) { case BaseSection.SectionType.DriverOptions: Sections.Add(new DriverOptionsSection(er)); break; case BaseSection.SectionType.MissionFlags: Sections.Add(new MissionFlagsSection(er)); break; case BaseSection.SectionType.ItemOptions: Sections.Add(new ItemOptionsSection(er)); break; default: throw new NotImplementedException("Section " + sectionType + " not implemented!"); } er.BaseStream.Position = prevPos; } }
public static Vector3 ToVector3(uint vec, int intPart = 0, int fracPart = 9) { var buffer = new byte[] { 0x00, 0x00 }; var coords = new[] { (ushort)(vec & 0x3FF), (ushort)((vec >> 10) & 0x3FF), (ushort)((vec >> 20) & 0x3FF) }; var m = new MemoryStream(buffer); var ew = new EndianBinaryWriterEx(m, Endianness.LittleEndian); var er = new EndianBinaryReaderEx(m, Endianness.LittleEndian); ew.Write(coords[0]); m.Position = 0; float x = er.ReadFixedPoint(true, intPart, fracPart); m.Position = 0; ew.Write(coords[1]); m.Position = 0; float y = er.ReadFixedPoint(true, intPart, fracPart); m.Position = 0; ew.Write(coords[2]); m.Position = 0; float z = er.ReadFixedPoint(true, intPart, fracPart); m.Close(); return(x, y, z); }
public INFO(EndianBinaryReaderEx er) { /*Signature = er.ReadString(Encoding.ASCII, 4); * if (Signature != "INFO") throw new SignatureNotCorrectException(Signature, "INFO", er.BaseStream.Position - 4); * SectionSize = er.ReadUInt32(); * long basepos = er.BaseStream.Position; * SoundInfoSignature = er.ReadUInt32(); * SoundInfoOffset = er.ReadUInt32(); * SoundGroupInfoSignature = er.ReadUInt32(); * SoundGroupInfoOffset = er.ReadUInt32(); * BankInfoSignature = er.ReadUInt32(); * BankInfoOffset = er.ReadUInt32(); * WaveArchiveInfoSignature = er.ReadUInt32(); * WaveArchiveInfoOffset = er.ReadUInt32(); * GroupInfoSignature = er.ReadUInt32(); * GroupInfoOffset = er.ReadUInt32(); * PlayerInfoSignature = er.ReadUInt32(); * PlayerInfoOffset = er.ReadUInt32(); * FileInfoSignature = er.ReadUInt32(); * FileInfoOffset = er.ReadUInt32(); * SoundArchivePlayerInfoSignature = er.ReadUInt32(); * SoundArchivePlayerInfoOffset = er.ReadUInt32();*/ long basepos = er.BaseStream.Position + 8; er.ReadObject(this); er.BaseStream.Position = basepos + SoundInfoOffset; SoundInfo = new INFOInfoBlock <INFOSoundInfoEntry>(er); }
public MissionFlagsSection(EndianBinaryReaderEx er) : this() { CourseID = er.ReadUInt32(); Class = er.ReadByte(); CPUDifficulty = er.ReadByte(); er.ReadPadding(4); }
public ThemeIconPlateBGColor(EndianBinaryReaderEx er) { Dark = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Main = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Light = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); er.ReadPadding(0x10); }
public ThemeLRButtonArrowColor(EndianBinaryReaderEx er) { Dark = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Main = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Expand = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); er.ReadPadding(0x10); }
public Map(EndianBinaryReaderEx er) { BottomLeftX = er.ReadSingle(); BottomLeftZ = er.ReadSingle(); TopRightX = er.ReadSingle(); TopRightZ = er.ReadSingle(); }
public static uint FromVector3(Vector3 vec, int intPart = 0, int fracPart = 9) { var buffer = new byte[] { 0x00, 0x00 }; var coords = new ushort[3]; var m = new MemoryStream(buffer); var ew = new EndianBinaryWriterEx(m, Endianness.LittleEndian); var er = new EndianBinaryReaderEx(m, Endianness.LittleEndian); ew.WriteFixedPoint(vec.X, true, intPart, fracPart); m.Position = 0; coords[0] = er.ReadUInt16(); m.Position = 0; ew.WriteFixedPoint(vec.Y, true, intPart, fracPart); m.Position = 0; coords[1] = er.ReadUInt16(); m.Position = 0; ew.WriteFixedPoint(vec.Z, true, intPart, fracPart); m.Position = 0; coords[2] = er.ReadUInt16(); m.Close(); var res = (uint)(coords[0] | (coords[1] << 10) | (coords[2] << 20)); return(res); }
public KMP(byte[] Data) { EndianBinaryReaderEx er = new EndianBinaryReaderEx(new MemoryStream(Data), Endianness.LittleEndian); try { Header = new KMPHeader(er); foreach (var v in Header.SectionOffsets) { er.BaseStream.Position = Header.HeaderSize + v; String sig = er.ReadString(Encoding.ASCII, 4); er.BaseStream.Position -= 4; switch (sig) { case "TPTK": KartPoint = new KTPT(er); break; case "TPNE": EnemyPoint = new ENPT(er); break; case "HPNE": EnemyPointPath = new ENPH(er); break; case "TPTI": ItemPoint = new ITPT(er); break; case "HPTI": ItemPointPath = new ITPH(er); break; case "TPKC": CheckPoint = new CKPT(er); break; case "HPKC": CheckPointPath = new CKPH(er); break; case "JBOG": GlobalObject = new GOBJ(er); break; case "ITOP": PointInfo = new POTI(er); break; case "AERA": Area = new AREA(er); break; case "EMAC": Camera = new CAME(er); break; case "TPGJ": JugemPoint = new JGPT(er); break; case "TPNC": CannonPoint = new CNPT(er); break; case "TPSM": MissionPoint = new MSPT(er); break; case "IGTS": StageInfo = new STGI(er); break; case "SROC": CourseSect = new CORS(er); break; case "TPLG": GliderPoint = new GLPT(er); break; case "HPLG": GliderPointPath = new GLPH(er); break; default: continue; } } } finally { er.Close(); } }
public ThemeTextWithBGColor(EndianBinaryReaderEx er) { Main = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Light = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Shadow = er.ReadColor8(); TextMain = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); er.ReadPadding(0x10); }
public ThemeColorShadowAlpha(EndianBinaryReaderEx er) { Dark = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Main = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Light = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Shadow = er.ReadColor8(); er.ReadPadding(0x10); }
public ThemeFolderColor(EndianBinaryReaderEx er) { Dark = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Main = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Light = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Shadow = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); er.ReadPadding(0x10); }
public ThemeSelectorColor(EndianBinaryReaderEx er) { Dark = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Main = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Light = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); Expand = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); er.ReadPadding(0x10); }
public SMDHHeader(EndianBinaryReaderEx er) { er.ReadObject(this); //Signature = er.ReadString(Encoding.ASCII, 4); //if (Signature != "SMDH") throw new SignatureNotCorrectException(Signature, "SMDH", er.BaseStream.Position - 4); //Version = er.ReadUInt16(); //Reserved = er.ReadUInt16(); }
public STRMEntry(EndianBinaryReaderEx er) { minX = er.ReadSingle(); minZ = er.ReadSingle(); maxX = er.ReadSingle(); maxZ = er.ReadSingle(); area = (maxX - minX) * (maxZ - minZ); }
public STRMEntry(EndianBinaryReaderEx er) { er.ReadObject(this); //Unknown1 = er.ReadSingle(); //Unknown2 = er.ReadSingle(); //Unknown3 = er.ReadSingle(); //Unknown4 = er.ReadSingle(); }
public BSEQFlowEntry(EndianBinaryReaderEx er, BSEQSequenceID seqID) { srcSubSeq = er.ReadInt16(); srcID = er.ReadUInt16(); dstSubSeq = er.ReadInt16(); dstID = er.ReadUInt16(); OwnSequenceID = seqID; }
public SHAP(EndianBinaryReaderEx er) { Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "PAHS") { throw new FormatException("Invalid signature: " + Signature); } NrStreams = er.ReadUInt32(); }
public STRM(EndianBinaryReaderEx er) { er.ReadObject(this); Entries = new STRMEntry[NrEntries]; for (int i = 0; i < NrEntries; i++) { Entries[i] = new STRMEntry(er); } }
public ThemeTopBGColor(EndianBinaryReaderEx er) { BGColor = Color.FromArgb(er.ReadByte(), er.ReadByte(), er.ReadByte()); GradientAlpha = er.ReadByte(); PatternAlpha = er.ReadByte(); Unknown1 = er.ReadByte(); Unknown2 = er.ReadByte(); er.ReadPadding(0x10); }
public static SbcCommand Read(EndianBinaryReaderEx er) { var byteCmd = er.ReadByte(); var cmd = (Commands)(byteCmd & 0x1F); var opt = (byte)((byteCmd & 0xE0) >> 5); //var cmdItem = new SbcCommand { Type = cmd, Operator = opt }; switch (cmd) { case Commands.Nop: return(new SbcNop()); case Commands.Ret: return(new SbcRet()); case Commands.Node: return(new SbcNode(er)); case Commands.Mtx: return(new SbcMtx(er)); case Commands.Mat: return(new SbcMat(opt, er)); case (Commands)5: //Commands.Shp: return(new SbcShape(er)); case Commands.Nodedesc: return(new SbcNodeDesc(opt, er)); case Commands.BB: return(new SbcBillboard(opt, er)); case Commands.BBY: return(new SbcBillboardY(opt, er)); case Commands.Nodemix: return(new SbcNodeMix(er)); case Commands.CallDl: return(new SbcCallDl(er)); case Commands.Posscale: return(new SbcPosScale(opt, er)); case Commands.Envmap: return(new SbcEnvMap(er)); case Commands.Prjmap: return(new SbcPrjMap(er)); default: return(null); } }
public SFNT(EndianBinaryReaderEx er) { Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "SFNT") { throw new SignatureNotCorrectException(Signature, "SFNT", er.BaseStream.Position - 4); } HeaderSize = er.ReadUInt16(); Unknown1 = er.ReadUInt16(); }
static public UInt16 GetBlockType(EndianBinaryReaderEx er) { long prevPosition = er.BaseStream.Position; er.BaseStream.Position += 0xE; UInt16 ret = er.ReadUInt16(); er.BaseStream.Position = prevPosition; return(ret); }
public CORS(EndianBinaryReaderEx er) { Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "SROC") { throw new SignatureNotCorrectException(Signature, "SROC", er.BaseStream.Position - 4); } NrEntries = er.ReadUInt32(); //for (int i = 0; i < NrEntries; i++) Entries.Add(new AREAEntry(er)); }
public override void Read(EndianBinaryReaderEx er) { FileID = er.ReadUInt32(); PlayerID = er.ReadUInt32(); Volume = er.ReadByte(); Padding = er.ReadBytes(3); SpecificInfoSignature = er.ReadUInt32(); SpecificInfoOffset = er.ReadUInt32(); }
public IPOIEntry(EndianBinaryReaderEx er, UInt16 Version) { this.Version = Version; Position = er.ReadVecFx32(); PointSize = er.ReadFx32(); if (Version >= 34) { Unknown2 = er.ReadUInt32(); } }
public STRGPatriciaTree(EndianBinaryReaderEx er) { RootNodeIndex = er.ReadUInt32(); NrNodes = er.ReadUInt32(); Nodes = new PatriciaTreeNode[NrNodes]; for (int i = 0; i < NrNodes; i++) { Nodes[i] = new PatriciaTreeNode(er); } }
public Sbc(byte[] sbc) { using (var er = new EndianBinaryReaderEx(new MemoryStream(sbc), Endianness.LittleEndian)) { while (er.BaseStream.Position < er.BaseStream.Length) { CommandList.Add(SbcCommand.Read(er)); } } }
public BSEQSceneSequenceProxyBlock(EndianBinaryReaderEx er, BSEQNameTable nameTable) { Count = er.ReadUInt16(); if (Count != 1) { throw new InvalidDataException("ProxyBlock Count not 1: (" + Count + ")"); } UnknownName = new BSEQNameOffset(er, nameTable); SceneName = new BSEQNameOffset(er, nameTable); Unknown = er.ReadUInt16(); }