@@ -121,7 +121,7 @@ namespace ZoneTool
121
121
return xmodelsurfs;
122
122
}
123
123
124
- template < typename T> void write_xsurfaces (IZone* zone, ZoneBuffer* buf, T * data, T* dest, std::uint16_t count, bool is_console )
124
+ void IXSurface:: write_xsurfaces (IZone* zone, ZoneBuffer* buf, XSurface * data, std::uint16_t count)
125
125
{
126
126
assert (sizeof XSurface, 64 );
127
127
assert (sizeof Face, 6 );
@@ -133,57 +133,25 @@ namespace ZoneTool
133
133
assert (sizeof GfxPackedVertex, 32 );
134
134
assert (sizeof XSurfaceVertexInfo, 12 );
135
135
136
+ auto * dest = buf->write (data, count);
137
+
136
138
for (auto surf = 0u ; surf < count; surf++)
137
139
{
138
140
if (data[surf].vertexInfo .vertsBlend )
139
141
{
140
- unsigned __int16* destverts = nullptr ;
141
- const auto vertcount = data[surf].vertexInfo .vertCount [0 ] +
142
- (data[surf].vertexInfo .vertCount [1 ] * 3 ) +
143
- (data[surf].vertexInfo .vertCount [2 ] * 5 ) +
144
- (data[surf].vertexInfo .vertCount [3 ] * 7 );
145
-
146
- dest[surf].vertexInfo .vertsBlend = buf->write_s (1 , data[surf].vertexInfo .vertsBlend , count, sizeof (unsigned __int16), &destverts);
147
-
148
- if (is_console && dest[surf].vertexInfo .vertsBlend == reinterpret_cast <unsigned __int16*>(-1 ))
149
- {
150
- for (auto a = 0u ; a < vertcount; a++)
151
- {
152
- endian_convert (&destverts[a]);
153
- }
154
- }
142
+ dest[surf].vertexInfo .vertsBlend = buf->write_s (1 , data[surf].vertexInfo .vertsBlend ,
143
+ data[surf].vertexInfo .vertCount [0 ] +
144
+ (data[surf].vertexInfo .vertCount [1 ] * 3 ) + (data[
145
+ surf].vertexInfo .vertCount [2 ] * 5 ) + (data[
146
+ surf].vertexInfo .vertCount [3 ] * 7 ));
155
147
}
156
148
157
- if (!is_console)
158
- {
159
- buf->push_stream (6 );
160
- }
161
-
149
+ buf->push_stream (6 );
162
150
if (data[surf].verticies )
163
151
{
164
- GfxPackedVertex* destverticies = nullptr ;
165
- dest[surf].verticies = buf->write_s (15 , data[surf].verticies , data[surf].vertCount , sizeof GfxPackedVertex, &destverticies);
166
-
167
- if (is_console && dest[surf].verticies == reinterpret_cast <GfxPackedVertex*>(-1 ))
168
- {
169
- for (auto a = 0 ; a < data[surf].vertCount ; a++)
170
- {
171
- endian_convert (&destverticies[a].xyz [0 ]);
172
- endian_convert (&destverticies[a].xyz [1 ]);
173
- endian_convert (&destverticies[a].xyz [2 ]);
174
- endian_convert (&destverticies[a].binormalSign );
175
- // packed data probably consists of single bytes?
176
- // endian_convert(&destverticies[a].texCoord.packed);
177
- // endian_convert(&destverticies[a].normal.packed);
178
- // endian_convert(&destverticies[a].tangent.packed);
179
- }
180
- }
181
- }
182
-
183
- if (!is_console)
184
- {
185
- buf->pop_stream ();
152
+ dest[surf].verticies = buf->write_s (15 , data[surf].verticies , data[surf].vertCount );
186
153
}
154
+ buf->pop_stream ();
187
155
188
156
if (data[surf].rigidVertLists )
189
157
{
@@ -193,7 +161,7 @@ namespace ZoneTool
193
161
194
162
if (dest[surf].rigidVertLists == reinterpret_cast <XRigidVertList*>(-1 ))
195
163
{
196
- for (int k = 0 ; k < data[surf].vertListCount ; k++)
164
+ for (auto k = 0 ; k < data[surf].vertListCount ; k++)
197
165
{
198
166
if (ct[k].collisionTree )
199
167
{
@@ -205,195 +173,49 @@ namespace ZoneTool
205
173
{
206
174
if (entry->nodes )
207
175
{
208
- XSurfaceCollisionNode* destnode = nullptr ;
209
- entry->nodes = buf->write_s (15 , entry->nodes , entry->nodeCount , sizeof (XSurfaceCollisionNode), &destnode);
210
-
211
- if (entry->nodes == reinterpret_cast <XSurfaceCollisionNode*>(-1 ) && is_console)
212
- {
213
- for (auto a = 0u ; a < entry->leafCount ; a++)
214
- {
215
- for (auto b = 0 ; b < 3 ; b++)
216
- {
217
- endian_convert (&destnode[a].aabb .mins [b]);
218
- endian_convert (&destnode[a].aabb .maxs [b]);
219
- }
220
-
221
- endian_convert (&destnode[a].childBeginIndex );
222
- endian_convert (&destnode[a].childCount );
223
- }
224
- }
176
+ entry->nodes = buf->write_s (15 , entry->nodes , entry->nodeCount );
225
177
}
226
178
227
179
if (entry->leafs )
228
180
{
229
- XSurfaceCollisionLeaf* destleaf = nullptr ;
230
- entry->leafs = buf->write_s (1 , entry->leafs , entry->leafCount , sizeof (XSurfaceCollisionLeaf), &destleaf);
231
-
232
- if (entry->leafs == reinterpret_cast <XSurfaceCollisionLeaf *>(-1 ) && is_console)
233
- {
234
- for (auto a = 0u ; a < entry->leafCount ; a++)
235
- {
236
- endian_convert (&destleaf[a].triangleBeginIndex );
237
- }
238
- }
239
- }
240
-
241
- if (is_console)
242
- {
243
- for (auto a = 0 ; a < 3 ; a++)
244
- {
245
- endian_convert (&entry->trans [a]);
246
- endian_convert (&entry->scale [a]);
247
- }
248
- endian_convert (&entry->nodeCount );
249
- endian_convert (&entry->nodes );
250
- endian_convert (&entry->leafCount );
251
- endian_convert (&entry->leafs );
181
+ entry->leafs = buf->write_s (1 , entry->leafs , entry->leafCount );
252
182
}
253
183
}
254
184
}
255
-
256
- if (is_console)
257
- {
258
- endian_convert (&ct[k].boneOffset );
259
- endian_convert (&ct[k].vertCount );
260
- endian_convert (&ct[k].triOffset );
261
- endian_convert (&ct[k].triCount );
262
- endian_convert (&ct[k].collisionTree );
263
- }
264
185
}
265
186
}
266
187
}
267
188
268
- if (!is_console)
269
- {
270
- buf->push_stream (7 );
271
- }
272
-
189
+ buf->push_stream (7 );
273
190
if (data[surf].triIndices )
274
191
{
275
- Face* dest_tris = nullptr ;
276
- dest[surf].triIndices = buf->write_s (15 , data[surf].triIndices , data[surf].triCount , sizeof (unsigned __int16), &dest_tris);
277
-
278
- if (is_console && dest[surf].triIndices == reinterpret_cast <Face*>(-1 ))
279
- {
280
- for (auto a = 0u ; a < data[surf].triCount ; a++)
281
- {
282
- endian_convert (&dest_tris[a].v1 );
283
- endian_convert (&dest_tris[a].v2 );
284
- endian_convert (&dest_tris[a].v3 );
285
- }
286
- }
287
- }
288
-
289
- if (!is_console)
290
- {
291
- buf->pop_stream ();
292
- }
293
-
294
- if (is_console)
295
- {
296
- endian_convert (&dest[surf].vertCount );
297
- endian_convert (&dest[surf].triCount );
298
- endian_convert (&dest[surf].triIndices );
299
- endian_convert (&dest[surf].vertexInfo .vertCount [0 ]);
300
- endian_convert (&dest[surf].vertexInfo .vertCount [1 ]);
301
- endian_convert (&dest[surf].vertexInfo .vertCount [2 ]);
302
- endian_convert (&dest[surf].vertexInfo .vertCount [3 ]);
303
- endian_convert (&dest[surf].verticies );
304
- endian_convert (&dest[surf].vertListCount );
305
- endian_convert (&dest[surf].rigidVertLists );
306
- for (auto a = 0 ; a < 5 ; a++)
307
- {
308
- endian_convert (&dest[surf].partBits [a]);
309
- }
192
+ dest[surf].triIndices = buf->write_s (15 , data[surf].triIndices , data[surf].triCount );
310
193
}
194
+ buf->pop_stream ();
311
195
}
312
196
}
313
197
314
198
void IXSurface::write (IZone* zone, ZoneBuffer* buf)
315
199
{
316
- if (zone->get_target () == zone_target::pc)
317
- {
318
- auto data = this ->asset_ ;
319
- auto dest = buf->write <XModelSurfs>(data);
320
-
321
- assert (sizeof XModelSurfs, 36 );
200
+ auto * data = this ->asset_ ;
201
+ auto * dest = buf->write <XModelSurfs>(data);
322
202
323
- buf->push_stream (3 );
324
- START_LOG_STREAM;
203
+ assert (sizeof XModelSurfs, 36 );
325
204
326
- dest->name = buf->write_str (this ->name ());
205
+ buf->push_stream (3 );
206
+ START_LOG_STREAM;
327
207
328
- if (data->surfs )
329
- {
330
- buf->align (3 );
331
- auto destsurfaces = buf->write (data->surfs , data->numsurfs );
332
- write_xsurfaces<XSurface>(zone, buf, data->surfs , destsurfaces, data->numsurfs , false );
333
- ZoneBuffer::clear_pointer (&dest->surfs );
334
- }
208
+ dest->name = buf->write_str (this ->name ());
335
209
336
- END_LOG_STREAM;
337
- buf->pop_stream ();
338
- }
339
- else
210
+ if (data->surfs )
340
211
{
341
- std::vector<alpha::XSurface> surfs;
342
- surfs.resize (this ->asset_ ->numsurfs );
343
-
344
- for (auto i = 0u ; i < this ->asset_ ->numsurfs ; i++)
345
- {
346
- //
347
- surfs[i].tileMode = this ->asset_ ->surfs [i].tileMode ;
348
- surfs[i].deformed = this ->asset_ ->surfs [i].deformed ;
349
- surfs[i].vertCount = this ->asset_ ->surfs [i].vertCount ;
350
- surfs[i].triCount = this ->asset_ ->surfs [i].triCount ;
351
- surfs[i].triIndices = this ->asset_ ->surfs [i].triIndices ;
352
- surfs[i].verticies = this ->asset_ ->surfs [i].verticies ;
353
- surfs[i].vertListCount = this ->asset_ ->surfs [i].vertListCount ;
354
- surfs[i].rigidVertLists = this ->asset_ ->surfs [i].rigidVertLists ;
355
- memcpy (&surfs[i].vertexInfo , &this ->asset_ ->surfs [i].vertexInfo , sizeof XSurfaceVertexInfo);
356
- memcpy (surfs[i].partBits , this ->asset_ ->surfs [i].partBits , sizeof (int ) * 5 );
357
-
358
- // memset console shit to 0
359
- memset (&surfs[i].vb0 , 0 , sizeof alpha::D3DVertexBuffer);
360
- memset (&surfs[i].indexBuffer , 0 , sizeof alpha::D3DIndexBuffer);
361
- }
362
-
363
- alpha::XModelSurfs alpha_surfs = {};
364
- memcpy (&alpha_surfs, this ->asset_ , sizeof alpha::XModelSurfs);
365
- alpha_surfs.surfs = surfs.data ();
366
-
367
- auto data = &alpha_surfs;
368
- auto dest = buf->write (data);
369
-
370
- assert (sizeof alpha::XModelSurfs, 32 );
371
-
372
- buf->push_stream (3 );
373
- START_LOG_STREAM;
374
-
375
- dest->name = buf->write_str (this ->name ());
376
-
377
- if (data->surfs )
378
- {
379
- buf->align (3 );
380
- auto destsurfaces = buf->write (data->surfs , data->numsurfs );
381
- write_xsurfaces<alpha::XSurface>(zone, buf, data->surfs , destsurfaces, data->numsurfs , true );
382
- ZoneBuffer::clear_pointer (&dest->surfs );
383
- }
384
-
385
- END_LOG_STREAM;
386
- buf->pop_stream ();
387
-
388
- endian_convert (&dest->name );
389
- endian_convert (&dest->surfs );
390
- endian_convert (&dest->numsurfs );
391
- for (auto a = 0 ; a < 5 ; a++)
392
- {
393
- endian_convert (&dest->partBits [a]);
394
- }
212
+ buf->align (3 );
213
+ write_xsurfaces (zone, buf, data->surfs , data->numsurfs );
214
+ ZoneBuffer::clear_pointer (&dest->surfs );
395
215
}
396
-
216
+
217
+ END_LOG_STREAM;
218
+ buf->pop_stream ();
397
219
}
398
220
399
221
void IXSurface::dump (XModelSurfs* asset)
@@ -409,14 +231,14 @@ namespace ZoneTool
409
231
dump.dump_array (asset, 1 );
410
232
dump.dump_string (asset->name );
411
233
412
- for (int i = 0 ; i < asset->numsurfs ; i++)
234
+ for (auto i = 0u ; i < asset->numsurfs ; i++)
413
235
{
414
236
dump.dump_int (asset->surfs [i].tileMode );
415
237
dump.dump_int (asset->surfs [i].deformed );
416
238
dump.dump_int (asset->surfs [i].baseTriIndex );
417
239
dump.dump_int (asset->surfs [i].baseVertIndex );
418
240
419
- for (int j = 0 ; j < 6 ; j++)
241
+ for (auto j = 0 ; j < 6 ; j++)
420
242
{
421
243
dump.dump_int (asset->surfs [i].partBits [j]);
422
244
}
@@ -438,7 +260,7 @@ namespace ZoneTool
438
260
439
261
dump.dump_int (asset->surfs [i].vertListCount );
440
262
dump.dump_array (asset->surfs [i].rigidVertLists , asset->surfs [i].vertListCount );
441
- for (int vert = 0 ; vert < asset->surfs [i].vertListCount ; vert++)
263
+ for (auto vert = 0 ; vert < asset->surfs [i].vertListCount ; vert++)
442
264
{
443
265
if (asset->surfs [i].rigidVertLists [vert].collisionTree )
444
266
{
0 commit comments