public override byte[] GetAsBytes() { byte[] bytes = base.GetAsBytes(); if (IsCompressed) { return(bytes); } Array.Copy(LevelHeader.GetAsBytes(), 0, bytes, _levelHeaderOffset, LevelHeader.Size); int levelObjectOffset = _levelInfoOffset; for (int i = 0; i < LevelObjects.Count; i++) { ByteHelper.WriteFloat(LevelObjects[i].LvlPos, bytes, levelObjectOffset); ByteHelper.WriteShort(LevelObjects[i].Z, bytes, levelObjectOffset + 0x4); ByteHelper.WriteShort(LevelObjects[i].X, bytes, levelObjectOffset + 0x6); ByteHelper.WriteShort(LevelObjects[i].Y, bytes, levelObjectOffset + 0x8); ByteHelper.WriteShort(LevelObjects[i].XRot, bytes, levelObjectOffset + 0xA); ByteHelper.WriteShort(LevelObjects[i].YRot, bytes, levelObjectOffset + 0xC); ByteHelper.WriteShort(LevelObjects[i].ZRot, bytes, levelObjectOffset + 0xE); ByteHelper.WriteUShort(LevelObjects[i].ID, bytes, levelObjectOffset + 0x10); ByteHelper.WriteUShort(LevelObjects[i].Unk, bytes, levelObjectOffset + 0x12); levelObjectOffset += SFLevelObject.Size; } //Make the final level ending entry ByteHelper.WriteUShort(0xFFFF, bytes, _levelHeaderOffset + LevelHeader.Size - 2); return(bytes); }