@@ -102,15 +102,54 @@ public void Write(BinaryObjectWriter writer, Family? family)
102102 writer . Write ( BottomRight ) ;
103103
104104 writer . Write ( Field2C ) ;
105- writer . WriteObjectOffset ( Info ) ;
105+
106+ // Info is written after the sprite indices, despite appearing in the struct earlier.
107+ long infoOffset = writer . Position ;
108+ writer . OffsetHandler . RegisterOffsetPosition ( infoOffset ) ;
109+ writer . WriteOffsetValue ( 0 ) ;
110+
106111 writer . Write ( InheritanceFlags ) ;
107112 writer . Write ( MaterialFlags ) ;
108113
109114 writer . Write ( SpriteIndices . Length ) ;
110- writer . WriteArrayOffset ( SpriteIndices ) ;
115+ writer . WriteOffset ( ( ) =>
116+ {
117+ writer . WriteArray ( SpriteIndices ) ;
118+
119+ long offset = writer . Position ;
120+ using ( SeekToken token = writer . At ( infoOffset , SeekOrigin . Begin ) )
121+ {
122+ writer . WriteOffsetValue ( writer . OffsetHandler . CalculateOffset ( offset , writer . OffsetHandler . OffsetOrigin ) ) ;
123+ }
124+
125+ writer . WriteObject ( Info ) ;
126+ } ) ;
127+
128+ if ( Text != null )
129+ {
130+ writer . WriteOffset ( ( ) =>
131+ {
132+ writer . WriteString ( StringBinaryFormat . NullTerminated , Text ) ;
133+ writer . Write < byte > ( 0 ) ;
134+ } ) ;
135+ }
136+ else
137+ {
138+ writer . WriteOffsetValue ( 0 ) ;
139+ }
111140
112- writer . WriteStringOffset ( StringBinaryFormat . NullTerminated , Text ) ;
113- writer . WriteStringOffset ( StringBinaryFormat . NullTerminated , FontName ) ;
141+ if ( FontName != null )
142+ {
143+ writer . WriteOffset ( ( ) =>
144+ {
145+ writer . WriteString ( StringBinaryFormat . NullTerminated , FontName ) ;
146+ writer . Write < byte > ( 0 ) ;
147+ } ) ;
148+ }
149+ else
150+ {
151+ writer . WriteOffsetValue ( 0 ) ;
152+ }
114153
115154 writer . Write ( FontKerning ) ;
116155
0 commit comments