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);
        }