[IclipMap_t] Structure fixes

This commit is contained in:
momo5502 2016-12-20 22:26:58 +01:00
parent 756d7c15a9
commit c216929687
2 changed files with 304 additions and 297 deletions

View File

@ -424,7 +424,7 @@ namespace Components
AssetHandler::RegisterInterface(new Assets::IGfxWorld()); AssetHandler::RegisterInterface(new Assets::IGfxWorld());
AssetHandler::RegisterInterface(new Assets::ISndCurve()); AssetHandler::RegisterInterface(new Assets::ISndCurve());
AssetHandler::RegisterInterface(new Assets::IMaterial()); AssetHandler::RegisterInterface(new Assets::IMaterial());
AssetHandler::RegisterInterface(new Assets::IclipMap_t()); AssetHandler::RegisterInterface(new Assets::IclipMap_t());
AssetHandler::RegisterInterface(new Assets::IPhysPreset()); AssetHandler::RegisterInterface(new Assets::IPhysPreset());
AssetHandler::RegisterInterface(new Assets::IXAnimParts()); AssetHandler::RegisterInterface(new Assets::IXAnimParts());
AssetHandler::RegisterInterface(new Assets::IFxEffectDef()); AssetHandler::RegisterInterface(new Assets::IFxEffectDef());

View File

@ -2,9 +2,9 @@
namespace Assets namespace Assets
{ {
void IclipMap_t::save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) void IclipMap_t::save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder)
{ {
AssertSize(Game::clipMap_t, 256); AssertSize(Game::clipMap_t, 256);
Utils::Stream* buffer = builder->getBuffer(); Utils::Stream* buffer = builder->getBuffer();
Game::clipMap_t* asset = header.clipMap; Game::clipMap_t* asset = header.clipMap;
@ -13,335 +13,342 @@ namespace Assets
buffer->pushBlock(Game::XFILE_BLOCK_VIRTUAL); buffer->pushBlock(Game::XFILE_BLOCK_VIRTUAL);
if (asset->cPlanes) // OffsetToPointer support if (asset->cPlanes) // OffsetToPointer support
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->cPlanes, sizeof(Game::cPlane), asset->numCPlanes); buffer->save(asset->cPlanes, sizeof(Game::cPlane), asset->numCPlanes);
Utils::Stream::ClearPointer(&dest->cPlanes); Utils::Stream::ClearPointer(&dest->cPlanes);
} }
if (asset->staticModelList) if (asset->staticModelList)
{ {
// xmodel is already stored // xmodel is already stored
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
Game::cStaticModel* destStaticModelList = buffer->dest<Game::cStaticModel>(); Game::cStaticModel* destStaticModelList = buffer->dest<Game::cStaticModel>();
buffer->save(asset->staticModelList, sizeof(Game::cStaticModel), asset->numStaticModels); buffer->save(asset->staticModelList, sizeof(Game::cStaticModel), asset->numStaticModels);
for (int i = 0; i < asset->numStaticModels; i++) { for (int i = 0; i < asset->numStaticModels; i++)
if (asset->staticModelList[i].xmodel) {
{ if (asset->staticModelList[i].xmodel)
destStaticModelList[i].xmodel = builder->requireAsset(Game::XAssetType::ASSET_TYPE_XMODEL, asset->staticModelList[i].xmodel->name).model; {
} destStaticModelList[i].xmodel = builder->requireAsset(Game::XAssetType::ASSET_TYPE_XMODEL, asset->staticModelList[i].xmodel->name).model;
} }
Utils::Stream::ClearPointer(&dest->staticModelList); }
} Utils::Stream::ClearPointer(&dest->staticModelList);
}
if (asset->materials) if (asset->materials)
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
Game::dMaterial* mats = buffer->dest<Game::dMaterial>(); Game::dMaterial* mats = buffer->dest<Game::dMaterial>();
buffer->save(asset->materials, sizeof(Game::dMaterial), asset->numMaterials); buffer->save(asset->materials, sizeof(Game::dMaterial), asset->numMaterials);
for(int i=0; i<asset->numMaterials; i++) for (int i = 0; i < asset->numMaterials; i++)
{ {
buffer->save(asset->materials[i].name, strlen(asset->materials[i].name) + 1, 1); buffer->save(asset->materials[i].name, strlen(asset->materials[i].name) + 1, 1);
Utils::Stream::ClearPointer(&mats[i].name); Utils::Stream::ClearPointer(&mats[i].name);
} }
Utils::Stream::ClearPointer(&dest->materials); Utils::Stream::ClearPointer(&dest->materials);
} }
if (asset->cBrushSides) if (asset->cBrushSides)
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
Game::cBrushSide* sides = buffer->dest<Game::cBrushSide>(); Game::cBrushSide* sides = buffer->dest<Game::cBrushSide>();
buffer->save(asset->cBrushSides, sizeof(Game::cBrushSide), asset->numCBrushSides); buffer->save(asset->cBrushSides, sizeof(Game::cBrushSide), asset->numCBrushSides);
for (int i = 0; i<asset->numCBrushSides; i++) for (int i = 0; i < asset->numCBrushSides; i++)
{ {
if (sides[i].side) // OffsetToPointer if (sides[i].side) // OffsetToPointer
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(sides[i].side, sizeof(Game::cPlane), 1); buffer->save(sides[i].side, sizeof(Game::cPlane), 1);
Utils::Stream::ClearPointer(&sides[i].side); Utils::Stream::ClearPointer(&sides[i].side);
} }
} }
Utils::Stream::ClearPointer(&dest->cBrushSides); Utils::Stream::ClearPointer(&dest->cBrushSides);
} }
if (asset->cBrushEdges) if (asset->cBrushEdges)
{ {
// no align for char // no align for char
buffer->save(asset->cBrushEdges, 1, asset->numCBrushEdges); buffer->save(asset->cBrushEdges, 1, asset->numCBrushEdges);
Utils::Stream::ClearPointer(&dest->cBrushEdges); Utils::Stream::ClearPointer(&dest->cBrushEdges);
} }
if (asset->cNodes) if (asset->cNodes)
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
Game::cNode* nodes = buffer->dest<Game::cNode>(); Game::cNode* nodes = buffer->dest<Game::cNode>();
buffer->save(asset->cNodes, sizeof(Game::cNode), asset->numCNodes); buffer->save(asset->cNodes, sizeof(Game::cNode), asset->numCNodes);
for (int i = 0; i<asset->numCNodes; i++) for (int i = 0; i < asset->numCNodes; i++)
{ {
if (nodes[i].plane) // OffsetToPointer if (nodes[i].plane) // OffsetToPointer
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(nodes[i].plane, sizeof(Game::cPlane), 1); buffer->save(nodes[i].plane, sizeof(Game::cPlane), 1);
Utils::Stream::ClearPointer(&nodes[i].plane); Utils::Stream::ClearPointer(&nodes[i].plane);
} }
} }
Utils::Stream::ClearPointer(&dest->cNodes); Utils::Stream::ClearPointer(&dest->cNodes);
} }
if (asset->cLeaf) if (asset->cLeaf)
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->cLeaf, sizeof(Game::cLeaf), asset->numCLeaf); buffer->save(asset->cLeaf, sizeof(Game::cLeaf), asset->numCLeaf);
Utils::Stream::ClearPointer(&dest->cLeaf); Utils::Stream::ClearPointer(&dest->cLeaf);
} }
if (asset->leafBrushes) if (asset->leafBrushes)
{ {
buffer->align(Utils::Stream::ALIGN_2); buffer->align(Utils::Stream::ALIGN_2);
buffer->save(asset->leafBrushes, 2, asset->numLeafBrushes); buffer->save(asset->leafBrushes, 2, asset->numLeafBrushes);
Utils::Stream::ClearPointer(&dest->leafBrushes); Utils::Stream::ClearPointer(&dest->leafBrushes);
} }
if (asset->cLeafBrushNodes) if (asset->cLeafBrushNodes)
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
Game::cLeafBrushNode* node = buffer->dest<Game::cLeafBrushNode>(); Game::cLeafBrushNode* node = buffer->dest<Game::cLeafBrushNode>();
buffer->save(asset->cLeafBrushNodes, sizeof(Game::cLeafBrushNode) , asset->numCLeafBrushNodes); buffer->save(asset->cLeafBrushNodes, sizeof(Game::cLeafBrushNode), asset->numCLeafBrushNodes);
for(int i=0; i<asset->numCLeafBrushNodes; i++)
{
if(node[i].leafBrushCount > 0)
{
if(node[i].data.leaf.brushes) // OffsetToPointer
{
buffer->align(Utils::Stream::ALIGN_2);
buffer->save(node[i].data.leaf.brushes, 2, node[i].leafBrushCount);
Utils::Stream::ClearPointer(&node[i].data.leaf.brushes);
}
}
}
Utils::Stream::ClearPointer(&dest->cLeafBrushNodes);
}
if (asset->leafSurfaces) for (int i = 0; i < asset->numCLeafBrushNodes; i++)
{ {
buffer->align(Utils::Stream::ALIGN_4); if (node[i].leafBrushCount > 0)
buffer->save(asset->leafSurfaces, sizeof(int), asset->numLeafSurfaces); {
Utils::Stream::ClearPointer(&dest->leafSurfaces); if (node[i].data.leaf.brushes) // OffsetToPointer
} {
buffer->align(Utils::Stream::ALIGN_2);
buffer->save(node[i].data.leaf.brushes, 2, node[i].leafBrushCount);
Utils::Stream::ClearPointer(&node[i].data.leaf.brushes);
}
}
}
Utils::Stream::ClearPointer(&dest->cLeafBrushNodes);
}
if (asset->verts) if (asset->leafSurfaces)
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->verts, sizeof(Game::vec3_t), asset->numVerts); buffer->save(asset->leafSurfaces, sizeof(int), asset->numLeafSurfaces);
Utils::Stream::ClearPointer(&dest->verts); Utils::Stream::ClearPointer(&dest->leafSurfaces);
} }
if (asset->triIndices) if (asset->verts)
{ {
buffer->align(Utils::Stream::ALIGN_2); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->triIndices, sizeof(short), 3 * asset->numTriIndices); buffer->save(asset->verts, sizeof(Game::vec3_t), asset->numVerts);
Utils::Stream::ClearPointer(&dest->triIndices); Utils::Stream::ClearPointer(&dest->verts);
} }
if (asset->triEdgeIsWalkable) if (asset->triIndices)
{ {
// no align for char buffer->align(Utils::Stream::ALIGN_2);
buffer->save(asset->triEdgeIsWalkable, sizeof(char), ((3 * asset->numTriIndices + 31) >> 3) & 0xFFFFFFFC); buffer->save(asset->triIndices, sizeof(short), 3 * asset->numTriIndices);
Utils::Stream::ClearPointer(&dest->triEdgeIsWalkable); Utils::Stream::ClearPointer(&dest->triIndices);
} }
if (asset->collisionBorders) if (asset->triEdgeIsWalkable)
{ {
buffer->align(Utils::Stream::ALIGN_4); // no align for char
buffer->save(asset->collisionBorders, sizeof(Game::CollisionBorder), asset->numCollisionBorders); buffer->save(asset->triEdgeIsWalkable, sizeof(char), ((3 * asset->numTriIndices + 31) >> 3) & 0xFFFFFFFC);
Utils::Stream::ClearPointer(&dest->collisionBorders); Utils::Stream::ClearPointer(&dest->triEdgeIsWalkable);
} }
if (asset->collisionPartitions) if (asset->collisionBorders)
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
Game::CollisionPartition* border = buffer->dest<Game::CollisionPartition>(); buffer->save(asset->collisionBorders, sizeof(Game::CollisionBorder), asset->numCollisionBorders);
buffer->save(asset->collisionPartitions, sizeof(Game::CollisionPartition), asset->numCollisionPartitions); Utils::Stream::ClearPointer(&dest->collisionBorders);
for (int i = 0; i<asset->numCollisionPartitions; i++) }
{
if (border[i].borders) // OffsetToPointer
{
buffer->align(Utils::Stream::ALIGN_4);
buffer->save(border[i].borders, sizeof(Game::CollisionBorder), 1);
Utils::Stream::ClearPointer(&border[i].borders);
}
}
Utils::Stream::ClearPointer(&dest->collisionPartitions);
}
if (asset->collisionAABBTrees) if (asset->collisionPartitions)
{ {
buffer->align(Utils::Stream::ALIGN_16); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->collisionAABBTrees, sizeof(Game::CollisionAabbTree), asset->numCollisionAABBTrees); Game::CollisionPartition* border = buffer->dest<Game::CollisionPartition>();
Utils::Stream::ClearPointer(&dest->collisionAABBTrees); buffer->save(asset->collisionPartitions, sizeof(Game::CollisionPartition), asset->numCollisionPartitions);
}
if (asset->cModels) for (int i = 0; i < asset->numCollisionPartitions; i++)
{ {
buffer->align(Utils::Stream::ALIGN_4); if (border[i].borders) // OffsetToPointer
buffer->save(asset->cModels, sizeof(Game::cModel), asset->numCModels); {
Utils::Stream::ClearPointer(&dest->cModels); buffer->align(Utils::Stream::ALIGN_4);
} buffer->save(border[i].borders, sizeof(Game::CollisionBorder), 1);
Utils::Stream::ClearPointer(&border[i].borders);
}
}
Utils::Stream::ClearPointer(&dest->collisionPartitions);
}
if (asset->cBrushes) if (asset->collisionAABBTrees)
{ {
buffer->align(Utils::Stream::ALIGN_128); buffer->align(Utils::Stream::ALIGN_16);
Game::cBrush* brushes = buffer->dest<Game::cBrush>(); buffer->save(asset->collisionAABBTrees, sizeof(Game::CollisionAabbTree), asset->numCollisionAABBTrees);
buffer->save(asset->cBrushes, sizeof(Game::cBrush), asset->numCBrushes); Utils::Stream::ClearPointer(&dest->collisionAABBTrees);
for(int i=0; i<asset->numCBrushes; i++) }
{
if(brushes[i].brushSide)
{
Game::cBrushSide* side = buffer->dest<Game::cBrushSide>();
buffer->save(brushes[i].brushSide, sizeof(Game::cBrushSide), 1);
if (brushes[i].brushSide->side)
{
buffer->align(Utils::Stream::ALIGN_4);
buffer->save(brushes[i].brushSide->side, sizeof(Game::cPlane), 1);
Utils::Stream::ClearPointer(&side->side);
}
Utils::Stream::ClearPointer(&brushes[i].brushSide);
}
if(brushes[i].brushEdge)
{
buffer->save(brushes[i].brushEdge, 1, 1);
Utils::Stream::ClearPointer(&brushes[i].brushEdge);
}
}
Utils::Stream::ClearPointer(&dest->cBrushes);
}
if (asset->cBrushBounds) if (asset->cModels)
{ {
buffer->align(Utils::Stream::ALIGN_128); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->cBrushBounds, sizeof(Game::Bounds), asset->numCBrushes); buffer->save(asset->cModels, sizeof(Game::cModel), asset->numCModels);
Utils::Stream::ClearPointer(&dest->cBrushBounds); Utils::Stream::ClearPointer(&dest->cModels);
} }
if (asset->cBrushContents) if (asset->cBrushes)
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_128);
buffer->save(asset->cBrushContents, sizeof(int), asset->numCBrushes); Game::cBrush* brushes = buffer->dest<Game::cBrush>();
Utils::Stream::ClearPointer(&dest->cBrushContents); buffer->save(asset->cBrushes, sizeof(Game::cBrush), asset->numCBrushes);
}
if (asset->unknown4) for (short i = 0; i < asset->numCBrushes; i++)
{ {
buffer->align(Utils::Stream::ALIGN_4); if (brushes[i].brushSide)
buffer->save(asset->unknown4, 28, asset->unkCount4); {
Utils::Stream::ClearPointer(&dest->unknown4); Game::cBrushSide* side = buffer->dest<Game::cBrushSide>();
} buffer->save(brushes[i].brushSide, sizeof(Game::cBrushSide), 1);
if (asset->mapEnts) if (brushes[i].brushSide->side)
{ {
dest->mapEnts = builder->requireAsset(Game::XAssetType::ASSET_TYPE_MAP_ENTS, asset->name).mapEnts; buffer->align(Utils::Stream::ALIGN_4);
} buffer->save(brushes[i].brushSide->side, sizeof(Game::cPlane), 1);
Utils::Stream::ClearPointer(&side->side);
}
for (int i = 0; i < 2; i++) Utils::Stream::ClearPointer(&brushes[i].brushSide);
{ }
if (asset->dynEntDefList[i])
{
buffer->align(Utils::Stream::ALIGN_4);
Game::DynEntityDef* dynEntDest = buffer->dest<Game::DynEntityDef>();
buffer->save(asset->dynEntDefList[i], sizeof(Game::DynEntityDef), asset->dynEntCount[i]);
for(int j = 0; j < asset->dynEntCount[i]; j++)
{
Game::XModel* m = asset->dynEntDefList[j]->xModel;
Game::FxEffectDef* fx = asset->dynEntDefList[j]->destroyFx;
Game::PhysPreset* p = asset->dynEntDefList[j]->physPreset;
if (m) if (brushes[i].brushEdge)
{ {
dynEntDest->xModel = builder->requireAsset(Game::XAssetType::ASSET_TYPE_XMODEL, m->name).model; buffer->save(brushes[i].brushEdge, 1, 1);
} Utils::Stream::ClearPointer(&brushes[i].brushEdge);
}
}
Utils::Stream::ClearPointer(&dest->cBrushes);
}
if (fx) if (asset->cBrushBounds)
{ {
dynEntDest->destroyFx = builder->requireAsset(Game::XAssetType::ASSET_TYPE_FX, fx->name).fx; buffer->align(Utils::Stream::ALIGN_128);
} buffer->save(asset->cBrushBounds, sizeof(Game::Bounds), asset->numCBrushes);
Utils::Stream::ClearPointer(&dest->cBrushBounds);
}
if (p) if (asset->cBrushContents)
{ {
dynEntDest->physPreset = builder->requireAsset(Game::XAssetType::ASSET_TYPE_PHYSPRESET, p->name).physPreset; buffer->align(Utils::Stream::ALIGN_4);
} buffer->save(asset->cBrushContents, sizeof(int), asset->numCBrushes);
} Utils::Stream::ClearPointer(&dest->cBrushContents);
}
Utils::Stream::ClearPointer(&dest->dynEntDefList[i]); if (asset->unknown4)
} {
} buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->unknown4, 28, asset->unkCount4);
Utils::Stream::ClearPointer(&dest->unknown4);
}
buffer->pushBlock(Game::XFILE_BLOCK_RUNTIME); if (asset->mapEnts)
{
dest->mapEnts = builder->requireAsset(Game::XAssetType::ASSET_TYPE_MAP_ENTS, asset->name).mapEnts;
}
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {
if (asset->dynEntPoseList[i]) if (asset->dynEntDefList[i])
{ {
buffer->align(Utils::Stream::ALIGN_4); buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->dynEntPoseList[i], sizeof(Game::DynEntityPose), asset->dynEntCount[i]); Game::DynEntityDef* dynEntDest = buffer->dest<Game::DynEntityDef>();
Utils::Stream::ClearPointer(&dest->dynEntPoseList[i]); buffer->save(asset->dynEntDefList[i], sizeof(Game::DynEntityDef), asset->dynEntCount[i]);
for (int j = 0; j < asset->dynEntCount[i]; j++)
{
Game::XModel* m = asset->dynEntDefList[j]->xModel;
Game::FxEffectDef* fx = asset->dynEntDefList[j]->destroyFx;
Game::PhysPreset* p = asset->dynEntDefList[j]->physPreset;
} if (m)
} {
dynEntDest->xModel = builder->requireAsset(Game::XAssetType::ASSET_TYPE_XMODEL, m->name).model;
}
for (int i = 0; i < 2; i++) if (fx)
{ {
if (asset->dynEntClientList[i]) dynEntDest->destroyFx = builder->requireAsset(Game::XAssetType::ASSET_TYPE_FX, fx->name).fx;
{ }
buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->dynEntClientList[i], sizeof(Game::DynEntityClient), asset->dynEntCount[i]);
Utils::Stream::ClearPointer(&dest->dynEntClientList[i]);
}
}
for (int i = 0; i < 2; i++) if (p)
{ {
if (asset->dynEntCollList[i]) dynEntDest->physPreset = builder->requireAsset(Game::XAssetType::ASSET_TYPE_PHYSPRESET, p->name).physPreset;
{ }
buffer->align(Utils::Stream::ALIGN_4); }
buffer->save(asset->dynEntCollList[i], sizeof(Game::DynEntityColl), asset->dynEntCount[i]);
Utils::Stream::ClearPointer(&dest->dynEntCollList[i]);
}
}
buffer->popBlock(); Utils::Stream::ClearPointer(&dest->dynEntDefList[i]);
buffer->popBlock(); }
} }
void IclipMap_t::mark(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) buffer->pushBlock(Game::XFILE_BLOCK_RUNTIME);
{
Game::clipMap_t* asset = header.clipMap;
for(int i=0; i<asset->numStaticModels; i++)
{
Game::XModel* m = asset->staticModelList[i].xmodel;
builder->loadAsset(Game::XAssetType::ASSET_TYPE_XMODEL, m->name);
}
for (int j = 0; j < 2; j++) for (int i = 0; i < 2; i++)
{ {
for (int i = 0; i < asset->dynEntCount[j]; i++) if (asset->dynEntPoseList[i])
{ {
Game::XModel* m = asset->dynEntDefList[j]->xModel; buffer->align(Utils::Stream::ALIGN_4);
builder->loadAsset(Game::XAssetType::ASSET_TYPE_XMODEL, m->name); buffer->save(asset->dynEntPoseList[i], sizeof(Game::DynEntityPose), asset->dynEntCount[i]);
Game::FxEffectDef* fx = asset->dynEntDefList[j]->destroyFx; Utils::Stream::ClearPointer(&dest->dynEntPoseList[i]);
builder->loadAsset(Game::XAssetType::ASSET_TYPE_FX, fx->name);
Game::PhysPreset* p = asset->dynEntDefList[j]->physPreset;
builder->loadAsset(Game::XAssetType::ASSET_TYPE_PHYSPRESET, p->name);
}
}
builder->loadAsset(Game::XAssetType::ASSET_TYPE_MAP_ENTS, asset->name);
}
void IclipMap_t::load(Game::XAssetHeader* /*header*/, std::string name, Components::ZoneBuilder::Zone* /*builder*/) }
{ }
Game::clipMap_t* map = Game::DB_FindXAssetHeader(Game::XAssetType::ASSET_TYPE_COL_MAP_MP, name.data()).clipMap;
for (int i = 0; i < 2; i++)
{
if (asset->dynEntClientList[i])
{
buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->dynEntClientList[i], sizeof(Game::DynEntityClient), asset->dynEntCount[i]);
Utils::Stream::ClearPointer(&dest->dynEntClientList[i]);
}
}
for (int i = 0; i < 2; i++)
{
if (asset->dynEntCollList[i])
{
buffer->align(Utils::Stream::ALIGN_4);
buffer->save(asset->dynEntCollList[i], sizeof(Game::DynEntityColl), asset->dynEntCount[i]);
Utils::Stream::ClearPointer(&dest->dynEntCollList[i]);
}
}
buffer->popBlock();
buffer->popBlock();
}
void IclipMap_t::mark(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder)
{
Game::clipMap_t* asset = header.clipMap;
for (int i = 0; i < asset->numStaticModels; i++)
{
Game::XModel* m = asset->staticModelList[i].xmodel;
builder->loadAsset(Game::XAssetType::ASSET_TYPE_XMODEL, m->name);
}
for (int j = 0; j < 2; j++)
{
for (int i = 0; i < asset->dynEntCount[j]; i++)
{
Game::XModel* m = asset->dynEntDefList[j]->xModel;
builder->loadAsset(Game::XAssetType::ASSET_TYPE_XMODEL, m->name);
Game::FxEffectDef* fx = asset->dynEntDefList[j]->destroyFx;
builder->loadAsset(Game::XAssetType::ASSET_TYPE_FX, fx->name);
Game::PhysPreset* p = asset->dynEntDefList[j]->physPreset;
builder->loadAsset(Game::XAssetType::ASSET_TYPE_PHYSPRESET, p->name);
}
}
builder->loadAsset(Game::XAssetType::ASSET_TYPE_MAP_ENTS, asset->name);
}
void IclipMap_t::load(Game::XAssetHeader* /*header*/, std::string name, Components::ZoneBuilder::Zone* /*builder*/)
{
Game::clipMap_t* map = Game::DB_FindXAssetHeader(Game::XAssetType::ASSET_TYPE_COL_MAP_MP, name.data()).clipMap;
if (map) return; if (map) return;
Components::Logger::Error("Missing clipMap_t %s... you can't make them yet you idiot.", name.data()); Components::Logger::Error("Missing clipMap_t %s... you can't make them yet you idiot.", name.data());
} }
} }