public override void WriteToStream(AwesomeWriter aw, ISerializable data) { var cam = data as Cam; // TODO: Add version check var version = Magic(); aw.Write(version); MiloSerializer.WriteToStream(aw.BaseStream, cam.Trans); MiloSerializer.WriteToStream(aw.BaseStream, cam.Draw); aw.Write((float)cam.NearPlane); aw.Write((float)cam.FarPlane); aw.Write((float)cam.FOV); // Write screen area aw.Write((float)cam.ScreenArea.X); aw.Write((float)cam.ScreenArea.Y); aw.Write((float)cam.ScreenArea.Width); aw.Write((float)cam.ScreenArea.Height); // Write z-range aw.Write((float)cam.ZRange.X); aw.Write((float)cam.ZRange.Y); aw.Write((string)cam.TargetTexture); }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)11); aw.Write((int)64); aw.Write((int)Events.Count); aw.Write((int)4); foreach (TabEntry ev in Events) { aw.Write((float)ev.Start); aw.Write((float)ev.End); aw.Write((int)ev.StringNumber); aw.Write((int)ev.FretNumber); aw.Write((int)ev.Finger); aw.Write((int)ev.NoteType); aw.Write((int)ev.BendType); aw.Write((float)ev.BendStrength); aw.Write((int)ev.VibratoType); aw.BaseStream.Position += 4; // Always 0 aw.Write((float)ev.Unknown1); aw.Write((float)ev.Unknown2); aw.Write((float)ev.Unknown3); aw.Write((float)ev.Unknown4); aw.Write((bool)ev.ExtendedNote); aw.Write((bool)ev.PalmMute); aw.Write((bool)ev.Tremelo); aw.BaseStream.Position += 1; // Always 0 aw.Write((int)ev.BassType); } }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)Entries.Count); aw.Write((int)4); Entries.ForEach(x => aw.Write((ulong)x)); }
public void ToStream(Stream output) { using (AwesomeWriter aw = new AwesomeWriter(output, false)) { WriteToStream(aw, 0); } }
public override void WriteToStream(AwesomeWriter aw, ISerializable data) { var env = data as Environ; // TODO: Add version check var version = Magic(); aw.Write(version); MiloSerializer.WriteToStream(aw.BaseStream, env.Draw); // Write lights aw.Write((int)env.Lights.Count); env.Lights.ForEach(x => aw.Write((string)x)); // Write ambient color aw.Write((float)env.AmbientColor.R); aw.Write((float)env.AmbientColor.G); aw.Write((float)env.AmbientColor.B); aw.Write((float)env.AmbientColor.A); // Write fog info aw.Write((float)env.FogStart); aw.Write((float)env.FogEnd); aw.Write((float)env.FogColor.R); aw.Write((float)env.FogColor.G); aw.Write((float)env.FogColor.B); aw.Write((float)env.FogColor.A); aw.Write((bool)env.EnableFog); }
public void WriteToStream(Stream stream, ISerializable obj) { var aw = new AwesomeWriter(stream, Info.BigEndian); var serializer = Serializers.FirstOrDefault(x => x.IsOfType(obj)); if (serializer == null) { throw new NotImplementedException($"Serialization of {obj.GetType().Name} is not supported yet!"); } serializer.WriteToStream(aw, obj); /* * switch (obj) * { * case Tex tex: * WriteToStream(aw, tex); * break; * case HMXBitmap bitmap: * WriteToStream(aw, bitmap); * break; * case MiloObjectBytes bytes: * WriteToStream(aw, bytes); * break; * default: * throw new NotImplementedException($"Serialization of {obj.GetType().Name} is not supported yet!"); * } */ }
public override void WriteToStream(AwesomeWriter aw, ISerializable data) { var propAnim = data as PropAnim; var version = Magic(); // Hacky way to support GDRB if (version == 11 && IsGRDRBAnim(propAnim)) { version = 12; } aw.Write(version); // Write meta aw.Write((int)2); aw.Write((string)propAnim.AnimName); aw.BaseStream.Position += 5; // Skip zeros aw.Write((int)4); aw.Write((float)propAnim.TotalTime); aw.Write((int)1); if (version >= 12) { aw.Write((byte)0x00); } // Write director groups aw.Write(propAnim.DirectorGroups.Count); foreach (var group in propAnim.DirectorGroups) { WriteGroupEvent(group, aw); } }
private byte[] CreateData() { var stringBlob = CreateStringBlob(out var stringOffsets); using (var ms = new MemoryStream()) { using (var aw = new AwesomeWriter(ms, true)) { // Writes entry count + blob size aw.Write((int)Entries.Count); aw.Write((int)stringBlob.Length); // Writes entries foreach (var entry in Entries) { aw.Write((float)entry.Start); aw.Write((int)entry.Modifier); aw.Write((float)entry.Length); aw.Write(stringOffsets.ContainsKey(entry.Text) ? stringOffsets[entry.Text] : entry.Data); } // Writes string blob aw.Write(stringBlob); } return(ms.ToArray()); } }
public void WriteToStream(Stream stream, bool noHeader) { AwesomeWriter aw = new AwesomeWriter(stream, true); if (!noHeader) { aw.Write(CHNK_MAGIC); aw.Write((int)255); aw.Write(Entries.Count); aw.Write(Entries.Max(x => x.Data.Length)); aw.Write((short)1); aw.Write((short)2); int currentIdx = 20 + (Entries.Count << 2); // Writes block details foreach (ChunkEntry entry in Entries) { aw.Write(entry.Data.Length); aw.Write(entry.Data.Length); aw.Write((int)(entry.Compressed ? 1 : 0)); aw.Write(currentIdx); currentIdx += entry.Data.Length; } } // Writes blocks Entries.ForEach(x => aw.Write(x.Data)); }
private void WriteToStream(Stream stream) { using (AwesomeWriter aw = new AwesomeWriter(stream)) { aw.BigEndian = BigEndian; aw.Write((int)MAGIC); aw.Write((ushort)Channels); aw.Write(Convert.ToUInt16(Encrypted)); aw.Write((uint)TotalSamples); aw.Write((uint)Bitrate); aw.Write((ushort)FrameSize); aw.Write((ushort)Unknown1); aw.Write((ushort)SampleRate); aw.Write((ushort)Unknown2); aw.Write((uint)ReckoningOffset); aw.Write((uint)ReckoningSize); aw.Write((uint)PacketStreamOffset); aw.Write((uint)PacketStreamSize); aw.Write(Reckoning); aw.Write(PacketStream); } }
private void WriteRiff(Stream output) { // Writes riff data to stream using (AwesomeWriter aw = new AwesomeWriter(output, this.BigEndian)) { } }
private byte[] CreateData() { using (AwesomeWriter aw = new AwesomeWriter(new MemoryStream(), BigEndian)) { aw.Write((int)_version); // TODO: Implement directory type + name writing aw.Write(Entries.Count); // Writes entry type + name foreach (AbstractEntry entry in Entries) { aw.Write(entry.Type); aw.Write(entry.Name); } if (_version == MiloVersion.V10) { aw.Write((int)0); } // Writes data from each entry foreach (AbstractEntry entry in Entries) { aw.Write(entry.Data); aw.Write(ADDE_PADDING); } return(((MemoryStream)(aw.BaseStream)).ToArray()); } }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)Version); aw.Write((int)Entries.Count); aw.Write((int)4); // Should always be 4 long nextPackageOffset = aw.BaseStream.Position + (Entries.Count * 24); // Writes index2 entries foreach (Index2Entry entry in Entries) { aw.Write((long)entry.FilePath.Key); aw.Write((long)entry.Type.Key); aw.Write((int)entry.PackageEntries.Count); aw.Write((int)(nextPackageOffset - aw.BaseStream.Position)); nextPackageOffset += entry.PackageEntries.Count * 248; } // Writes package entries foreach (var entry in Entries.SelectMany(x => x.PackageEntries)) { aw.Write((ulong)entry.Package); aw.WriteNullString(entry.ExternalFilePath, 240); } }
private void WriteItem(AwesomeWriter aw, DTBItem item, ref int lineNumber) { if (item is IntegerItem) { aw.Write((int)item.NumericValue); aw.Write((int)((IntegerItem)item).Integer); } else if (item is FloatItem) { aw.Write((int)item.NumericValue); aw.Write((float)((FloatItem)item).Float); } else if (item is StringItem) { aw.Write((int)item.NumericValue); aw.Write((string)((StringItem)item).String); } else if (item is ParentItem) { aw.Write((int)item.NumericValue); ParentItem parent = item as ParentItem; switch (Encoding) { default: case DTBEncoding.Classic: // 6 bytes (2 count, 4 id) aw.Write((short)parent.Count); aw.Write((int)lineNumber); break; case DTBEncoding.FME: // TODO: Verify unknown value is constant // 10 bytes (4 unk, 4 count, 2 id) aw.Write((int)1); aw.Write((int)parent.Count); aw.Write((short)lineNumber); break; case DTBEncoding.RBVR: // 8 bytes (4 unk, 2 count, 2 id) aw.Write((int)1); aw.Write((short)parent.Count); aw.Write((short)lineNumber); break; } lineNumber++; foreach (DTBItem sub in parent) { WriteItem(aw, sub, ref lineNumber); } } else { throw new Exception("Invalid DTB item type!"); } }
public void SaveToStream(AwesomeWriter aw) { var version = Embedded ? 0 : 1; aw.Write((byte)1); // Always 1 if (Encoding == DTBEncoding.FME) { aw.Write((int)0); // Always 0 } if (Encoding != DTBEncoding.RBVR) { aw.Write((short)Items.Count); aw.Write((int)version); } else { aw.Write((int)version); aw.Write((short)Items.Count); aw.Write((short)1); // Always 1? } int lineNumber = 1; foreach (DTBItem item in Items) { WriteItem(aw, item, ref lineNumber); } }
internal void WriteData(AwesomeWriter aw) { aw.Write((ulong)_filePath); aw.Write((ulong)_directoryPath); aw.Write((ulong)Type); aw.BaseStream.Position += 8; WriteObjectData(aw); }
public void SaveToFile(string path) { using (FileStream fs = File.OpenWrite(path)) { using (AwesomeWriter aw = new AwesomeWriter(fs)) { SaveToStream(aw); } } }
public override void WriteToStream(AwesomeWriter aw, ISerializable data) { var bytes = data as MiloObjectBytes; if (bytes.Data == null) { return; } aw.Write(bytes.Data); }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)Version); aw.WriteNullString(PackageName, 256); aw.Write((int)Entries.Count); aw.Write((int)4); foreach (string entry in Entries) { aw.WriteNullString(entry, 256); } }
internal void WriteData(AwesomeWriter aw) { aw.Write((int)Entries.Count); aw.Write((int)4); foreach (IndexEntry entry in Entries) { aw.Write((ulong)entry.FilePath); aw.Write((uint)entry.Offset); aw.BaseStream.Position += 4; } }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)10); aw.Write((int)8); aw.Write((int)Events.Count); aw.Write((int)4); foreach (TimeEvent ev in Events) { aw.Write((float)ev.Start); aw.Write((float)ev.End); } }
internal static void WriteData(AwesomeWriter aw, InstrumentTuning tuning) { // 40 bytes aw.Write((ulong)tuning.Name); aw.Write((int)(tuning.String1 << 8 | tuning.String1Alt)); aw.Write((int)(tuning.String2 << 8 | tuning.String2Alt)); aw.Write((int)(tuning.String3 << 8 | tuning.String3Alt)); aw.Write((int)(tuning.String4 << 8 | tuning.String4Alt)); aw.Write((int)(tuning.String5 << 8 | tuning.String5Alt)); aw.Write((int)(tuning.String6 << 8 | tuning.String6Alt)); aw.Write((int)(tuning.String7 << 8 | tuning.String7Alt)); aw.Write((int)(tuning.String8 << 8 | tuning.String8Alt)); }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)7); aw.Write((int)16); aw.Write((int)Events.Count); aw.Write((int)4); foreach (AudioEffectEntry ev in Events) { aw.Write((float)ev.Start); aw.Write((float)ev.End); aw.Write((ulong)ev.EffectPath); } }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)12); aw.Write((int)16); aw.Write((int)Events.Count); aw.Write((int)4); foreach (WhammyEntry ev in Events) { aw.Write((float)ev.Start); aw.Write((float)ev.End); aw.Write((long)0); } }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)4); aw.Write((int)12); aw.Write((int)Events.Count); aw.Write((int)4); foreach (MeasureEntry ev in Events) { aw.Write((float)ev.Start); aw.Write((float)ev.End); aw.Write((float)ev.Beat); } }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)3); aw.Write((int)16); aw.Write((int)Events.Count); aw.Write((int)4); foreach (TextEvent ev in Events) { aw.Write((float)ev.Start); aw.Write((float)ev.End); aw.Write((ulong)ev.EventName); } }
private static void PatchXPR2Header(byte[] header, int t, int tOffset, int h, int hOffset, int w, int wOffset) { using (AwesomeWriter aw = new AwesomeWriter(new MemoryStream(header), true)) { // Encodes texture size, height, and width aw.Seek(tOffset, SeekOrigin.Begin); aw.Write((int)t); aw.Seek(hOffset, SeekOrigin.Begin); aw.Write((short)((h >> 3) - 1)); aw.Seek(wOffset, SeekOrigin.Begin); aw.Write((short)((w - 1) | 0xE000)); } }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((ulong)InstrumentType); aw.Write((ulong)Difficulty); aw.BaseStream.Position += 8; // Should be zero'd InstrumentTuning.WriteData(aw, Tuning); aw.Write((int)TrackPaths.Count); aw.Write((int)4); foreach (HKey path in TrackPaths) { aw.Write((ulong)path); } }
protected override void WriteObjectData(AwesomeWriter aw) { aw.Write((int)13); aw.Write((int)24); aw.Write((int)Events.Count); aw.Write((int)4); foreach (EventEntry ev in Events) { aw.Write((float)ev.Start); aw.Write((float)ev.End); aw.Write((ulong)ev.EventName); aw.Write((int)0); aw.Write((int)ev.Index); } }
private byte[] CreateChunk(ZObject obj, bool bigEndian, ref long offset) { using (AwesomeWriter aw = new AwesomeWriter(new MemoryStream(), bigEndian)) { obj.WriteData(aw); // Ensures chunk size is always divisible by 4 if (aw.BaseStream.Position % 4 != 0) { aw.Write(new byte[4 - (aw.BaseStream.Position % 4)]); } offset += aw.BaseStream.Position + 8; // 8 = Chunk Magic + Size return(((MemoryStream)aw.BaseStream).ToArray()); } }