[IclipMap_t] More bugfixes

This commit is contained in:
momo5502 2016-12-23 01:03:17 +01:00
parent da59feb2d6
commit cec0db3e4c

View File

@ -257,7 +257,13 @@ namespace Assets
SaveLogEnter("CollisionBorder"); SaveLogEnter("CollisionBorder");
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
buffer->saveArray(&asset->collisionBorders, asset->numCollisionBorders);
for (int i = 0; i < asset->numCollisionBorders; ++i)
{
builder->storePointer(&asset->collisionBorders[i]);
buffer->save(&asset->collisionBorders[i]);
}
Utils::Stream::ClearPointer(&dest->collisionBorders); Utils::Stream::ClearPointer(&dest->collisionBorders);
SaveLogExit(); SaveLogExit();
} }
@ -268,24 +274,26 @@ namespace Assets
SaveLogEnter("CollisionPartition"); SaveLogEnter("CollisionPartition");
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
Game::CollisionPartition* border = buffer->dest<Game::CollisionPartition>(); Game::CollisionPartition* destPartitions = buffer->dest<Game::CollisionPartition>();
buffer->saveArray(asset->collisionPartitions, asset->numCollisionPartitions); buffer->saveArray(asset->collisionPartitions, asset->numCollisionPartitions);
for (int i = 0; i < asset->numCollisionPartitions; ++i) for (int i = 0; i < asset->numCollisionPartitions; ++i)
{ {
if (border[i].borders) Game::CollisionPartition* destPartition = &destPartitions[i];
Game::CollisionPartition* partition = &asset->collisionPartitions[i];
if (partition->borders)
{ {
if (builder->hasPointer(border[i].borders)) if (builder->hasPointer(partition->borders))
{ {
border[i].borders = builder->getPointer(border[i].borders); destPartition->borders = builder->getPointer(partition->borders);
} }
else else
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
builder->storePointer(border[i].borders); builder->storePointer(partition->borders);
buffer->save(partition->borders);
buffer->save(border[i].borders); Utils::Stream::ClearPointer(&destPartition->borders);
Utils::Stream::ClearPointer(&border[i].borders);
} }
} }
} }
@ -324,59 +332,60 @@ namespace Assets
SaveLogEnter("cbrush_t"); SaveLogEnter("cbrush_t");
buffer->align(Utils::Stream::ALIGN_128); buffer->align(Utils::Stream::ALIGN_128);
Game::cbrush_t* brushes = buffer->dest<Game::cbrush_t>(); Game::cbrush_t* destBrushes = buffer->dest<Game::cbrush_t>();
buffer->saveArray(asset->cBrushes, asset->numCBrushes); buffer->saveArray(asset->cBrushes, asset->numCBrushes);
for (short i = 0; i < asset->numCBrushes; ++i) for (short i = 0; i < asset->numCBrushes; ++i)
{ {
if (brushes[i].brushSide) Game::cbrush_t* destBrush = &destBrushes[i];
Game::cbrush_t* brush = &asset->cBrushes[i];
if (brush->brushSide)
{ {
if (builder->hasPointer(brushes[i].brushSide)) if (builder->hasPointer(brush->brushSide))
{ {
brushes[i].brushSide = builder->getPointer(brushes[i].brushSide); destBrush->brushSide = builder->getPointer(brush->brushSide);
} }
else else
{ {
AssertSize(Game::cbrushside_t, 8); AssertSize(Game::cbrushside_t, 8);
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
builder->storePointer(brushes[i].brushSide); builder->storePointer(brush->brushSide);
Game::cbrushside_t* side = buffer->dest<Game::cbrushside_t>(); Game::cbrushside_t* side = buffer->dest<Game::cbrushside_t>();
buffer->save(brushes[i].brushSide); buffer->save(brush->brushSide);
if (brushes[i].brushSide->side) if (brush->brushSide->side)
{ {
if (builder->hasPointer(brushes[i].brushSide->side)) if (builder->hasPointer(brush->brushSide->side))
{ {
brushes[i].brushSide->side = builder->getPointer(brushes[i].brushSide->side); side->side = builder->getPointer(brush->brushSide->side);
} }
else else
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
builder->storePointer(brushes[i].brushSide->side); builder->storePointer(brush->brushSide->side);
buffer->save(brush->brushSide->side);
buffer->save(brushes[i].brushSide->side);
Utils::Stream::ClearPointer(&side->side); Utils::Stream::ClearPointer(&side->side);
} }
} }
Utils::Stream::ClearPointer(&brushes[i].brushSide); Utils::Stream::ClearPointer(&destBrush->brushSide);
} }
} }
if (brushes[i].brushEdge) if (brush->brushEdge)
{ {
if (builder->hasPointer(brushes[i].brushEdge)) if (builder->hasPointer(brush->brushEdge))
{ {
brushes[i].brushEdge = builder->getPointer(brushes[i].brushEdge); destBrush->brushEdge = builder->getPointer(brush->brushEdge);
} }
else else
{ {
builder->storePointer(brushes[i].brushEdge); builder->storePointer(brush->brushEdge);
buffer->save(brush->brushEdge);
buffer->save(brushes[i].brushEdge); Utils::Stream::ClearPointer(&destBrush->brushEdge);
Utils::Stream::ClearPointer(&brushes[i].brushEdge);
} }
} }
} }
@ -431,25 +440,22 @@ namespace Assets
Game::DynEntityDef* dynEntDest = buffer->dest<Game::DynEntityDef>(); Game::DynEntityDef* dynEntDest = buffer->dest<Game::DynEntityDef>();
buffer->saveArray(asset->dynEntDefList[i], asset->dynEntCount[i]); buffer->saveArray(asset->dynEntDefList[i], asset->dynEntCount[i]);
Game::DynEntityDef* dynEnt = asset->dynEntDefList[i];
for (int j = 0; j < asset->dynEntCount[i]; ++j) for (int j = 0; j < asset->dynEntCount[i]; ++j)
{ {
Game::XModel* m = asset->dynEntDefList[i][j].xModel; if (dynEnt[j].xModel)
Game::FxEffectDef* fx = asset->dynEntDefList[i][j].destroyFx;
Game::PhysPreset* p = asset->dynEntDefList[i][j].physPreset;
if (m)
{ {
dynEntDest[j].xModel = builder->requireAsset(Game::XAssetType::ASSET_TYPE_XMODEL, m->name).model; dynEntDest[j].xModel = builder->requireAsset(Game::XAssetType::ASSET_TYPE_XMODEL, dynEnt[j].xModel->name).model;
} }
if (fx) if (dynEnt[j].destroyFx)
{ {
dynEntDest[j].destroyFx = builder->requireAsset(Game::XAssetType::ASSET_TYPE_FX, fx->name).fx; dynEntDest[j].destroyFx = builder->requireAsset(Game::XAssetType::ASSET_TYPE_FX, dynEnt[j].destroyFx->name).fx;
} }
if (p) if (dynEnt[j].physPreset)
{ {
dynEntDest[j].physPreset = builder->requireAsset(Game::XAssetType::ASSET_TYPE_PHYSPRESET, p->name).physPreset; dynEntDest[j].physPreset = builder->requireAsset(Game::XAssetType::ASSET_TYPE_PHYSPRESET, dynEnt[j].physPreset->name).physPreset;
} }
} }