@@ -159,7 +159,7 @@ public static BasicAttach Read(EndianStackReader reader, uint address, bool DX,
159
159
{
160
160
BasicAttach onRead ( )
161
161
{
162
- ILabeledArray < T > readArray < T > ( uint arrayOffset , uint countOffset , string genPrefix , bool shortCount , uint elementSize , EndianIOExtensions . ReadValueDelegate < T > read )
162
+ ILabeledArray < T > readArray < T > ( uint arrayOffset , uint countOffset , string genPrefix , bool shortCount , uint elementSize , EndianIOExtensions . ReadValueDelegate < T > read , bool allowNull = false , T ? nullDefault = default )
163
163
{
164
164
uint itemCount = shortCount
165
165
? reader . ReadUShort ( address + countOffset )
@@ -177,14 +177,31 @@ ILabeledArray<T> readArray<T>(uint arrayOffset, uint countOffset, string genPref
177
177
return new LabeledArray < T > ( 0 ) ;
178
178
}
179
179
180
+ /* Same thing for null arrays. Only happens to normals though, fortunately */
181
+
180
182
uint itemAddr = reader . ReadPointer ( address + arrayOffset ) ;
181
- return reader . ReadLabeledArray ( itemAddr , itemCount , elementSize , read , genPrefix , lut ) ;
183
+ if ( itemAddr == 0 && allowNull )
184
+ {
185
+ LabeledArray < T > result = new ( itemCount ) ;
186
+
187
+ for ( int i = 0 ; i < itemCount ; i ++ )
188
+ {
189
+ result [ i ] = nullDefault ! ;
190
+ }
191
+
192
+ return result ;
193
+ }
194
+ else
195
+ {
196
+ return reader . ReadLabeledArray ( itemAddr , itemCount , elementSize , read , genPrefix , lut ) ;
197
+ }
198
+
182
199
}
183
200
184
201
uint meshSize = DX ? BasicMesh . StructSizeDX : BasicMesh . StructSize ;
185
202
186
203
ILabeledArray < Vector3 > positions /***/ = readArray ( 0x00 , 0x08 , "vertex_" , false , 12 , /*******************/ ( r , p ) => r . ReadVector3 ( p ) ) ;
187
- ILabeledArray < Vector3 > normals /*****/ = readArray ( 0x04 , 0x08 , "normal_" , false , 12 , /*******************/ ( r , p ) => r . ReadVector3 ( p ) ) ;
204
+ ILabeledArray < Vector3 > normals /*****/ = readArray ( 0x04 , 0x08 , "normal_" , false , 12 , /*******************/ ( r , p ) => r . ReadVector3 ( p ) , true , BufferMesh . DefaultNormal ) ;
188
205
ILabeledArray < BasicMesh > meshes /****/ = readArray ( 0x0C , 0x14 , "meshlist_" , true , meshSize , /************/ ( r , p ) => BasicMesh . Read ( r , p , lut ) ) ;
189
206
ILabeledArray < BasicMaterial > materials = readArray ( 0x10 , 0x16 , "matlist_" , true , BasicMaterial . StructSize , ( r , p ) => BasicMaterial . Read ( r , p ) ) ;
190
207
0 commit comments