public byte[] NJGetBytes(uint imageBase, bool DX, Dictionary <string, uint> labels, List <uint> njOffsets, out uint address) { List <byte> result = new List <byte>(); ObjectFlags flags = GetFlags(); FixSiblings(); int attachAddressAddress = result.Count + 0x4; int childAddressAddress = result.Count + 0x2C; int siblingAddressAddress = result.Count + 0x30; address = 0; result.AddRange(ByteConverter.GetBytes((int)flags)); result.AddRange(ByteConverter.GetBytes(0)); //Attach placeholder result.AddRange(Position.GetBytes()); result.AddRange(Rotation.GetBytes()); result.AddRange(Scale.GetBytes()); result.AddRange(ByteConverter.GetBytes(0)); //Child placeholder result.AddRange(ByteConverter.GetBytes(0)); //Sibling placeholder result.Align(4); int currentEnd = result.Count; if (Attach != null) { if (labels.ContainsKey(Attach.Name)) { int attachAddress = (int)labels[Attach.Name]; result.SetByteListInt(attachAddressAddress, attachAddress); } else { result.AddRange(Attach.GetBytes((uint)(imageBase + result.Count), DX, labels, njOffsets, out uint attachAddress)); result.SetByteListInt(attachAddressAddress, (int)(imageBase + currentEnd + attachAddress)); njOffsets.Add((uint)(imageBase + attachAddressAddress)); result.Align(4); currentEnd = result.Count; } } if (Children.Count > 0) { if (labels.ContainsKey(Children[0].Name)) { int childAddress = (int)labels[Children[0].Name]; result.SetByteListInt(childAddressAddress, childAddress); } else { result.AddRange(Children[0].NJGetBytes((uint)(imageBase + result.Count), DX, labels, njOffsets, out uint childAddress)); result.SetByteListInt(childAddressAddress, (int)(imageBase + currentEnd + childAddress)); njOffsets.Add((uint)(imageBase + childAddressAddress)); result.Align(4); currentEnd = result.Count; } } if (Sibling != null) { if (labels.ContainsKey(Sibling.Name)) { int siblingAddress = (int)labels[Sibling.Name]; result.SetByteListInt(siblingAddressAddress, siblingAddress); } else { result.AddRange(Sibling.NJGetBytes((uint)(imageBase + result.Count), DX, labels, njOffsets, out uint siblingAddress)); result.SetByteListInt(siblingAddressAddress, (int)(imageBase + currentEnd + siblingAddress)); njOffsets.Add((uint)(imageBase + siblingAddressAddress)); result.Align(4); } } labels.Add(Name, address + imageBase); return(result.ToArray()); }