diff --git a/neo/cm/CollisionModel.h b/neo/cm/CollisionModel.h index 6b4c0e7c..ffb8b75f 100644 --- a/neo/cm/CollisionModel.h +++ b/neo/cm/CollisionModel.h @@ -93,7 +93,7 @@ public: virtual ~idCollisionModelManager() {} // Loads collision models from a map file. - virtual void LoadMap( const idMapFile* mapFile ) = 0; + virtual void LoadMap( const idMapFile* mapFile, bool ignoreOldCollisionFile ) = 0; // Frees all the collision models. virtual void FreeMap() = 0; diff --git a/neo/cm/CollisionModel_load.cpp b/neo/cm/CollisionModel_load.cpp index 5dcaa0e2..bb0f4ba9 100644 --- a/neo/cm/CollisionModel_load.cpp +++ b/neo/cm/CollisionModel_load.cpp @@ -4256,7 +4256,7 @@ void idCollisionModelManagerLocal::ListModels() idCollisionModelManagerLocal::BuildModels ================ */ -void idCollisionModelManagerLocal::BuildModels( const idMapFile* mapFile ) +void idCollisionModelManagerLocal::BuildModels( const idMapFile* mapFile, bool ignoreOldCollisionFile ) { int i; const idMapEntity* mapEnt; @@ -4264,9 +4264,8 @@ void idCollisionModelManagerLocal::BuildModels( const idMapFile* mapFile ) idTimer timer; timer.Start(); - if( !LoadCollisionModelFile( mapFile->GetName(), mapFile->GetGeometryCRC() ) ) + if( ignoreOldCollisionFile || !LoadCollisionModelFile( mapFile->GetName(), mapFile->GetGeometryCRC() ) ) { - if( !mapFile->GetNumEntities() ) { return; @@ -4355,7 +4354,7 @@ void idCollisionModelManagerLocal::Preload( const char* mapName ) idCollisionModelManagerLocal::LoadMap ================ */ -void idCollisionModelManagerLocal::LoadMap( const idMapFile* mapFile ) +void idCollisionModelManagerLocal::LoadMap( const idMapFile* mapFile, bool ignoreOldCollisionFile ) { if( mapFile == NULL ) @@ -4398,7 +4397,7 @@ void idCollisionModelManagerLocal::LoadMap( const idMapFile* mapFile ) common->UpdateLevelLoadPacifier(); // build collision models - BuildModels( mapFile ); + BuildModels( mapFile, ignoreOldCollisionFile ); common->UpdateLevelLoadPacifier(); diff --git a/neo/cm/CollisionModel_local.h b/neo/cm/CollisionModel_local.h index 0b48388e..b2938916 100644 --- a/neo/cm/CollisionModel_local.h +++ b/neo/cm/CollisionModel_local.h @@ -326,7 +326,7 @@ class idCollisionModelManagerLocal : public idCollisionModelManager { public: // load collision models from a map file - void LoadMap( const idMapFile* mapFile ); + void LoadMap( const idMapFile* mapFile, bool ignoreOldCollisionFile ); // frees all the collision models void FreeMap(); @@ -502,7 +502,7 @@ private: // CollisionMap_load.cpp void RemapEdges( cm_node_t* node, int* edgeRemap ); void OptimizeArrays( cm_model_t* model ); void FinishModel( cm_model_t* model ); - void BuildModels( const idMapFile* mapFile ); + void BuildModels( const idMapFile* mapFile, bool ignoreOldCollisionFile ); cmHandle_t FindModel( const char* name ); cm_model_t* CollisionModelForMapEntity( const idMapEntity* mapEnt ); // brush/patch model from .map cm_model_t* LoadRenderModel( const char* fileName ); // ASE/LWO models diff --git a/neo/d3xp/Game_local.cpp b/neo/d3xp/Game_local.cpp index b5a4f668..0f296906 100644 --- a/neo/d3xp/Game_local.cpp +++ b/neo/d3xp/Game_local.cpp @@ -976,7 +976,7 @@ void idGameLocal::LoadMap( const char* mapName, int randseed ) mapFileName = mapFile->GetName(); // load the collision map - collisionModelManager->LoadMap( mapFile ); + collisionModelManager->LoadMap( mapFile, false ); collisionModelManager->Preload( mapName ); numClients = 0; diff --git a/neo/tools/compilers/dmap/dmap.cpp b/neo/tools/compilers/dmap/dmap.cpp index 47068565..dd5dd262 100644 --- a/neo/tools/compilers/dmap/dmap.cpp +++ b/neo/tools/compilers/dmap/dmap.cpp @@ -456,17 +456,16 @@ void Dmap( const idCmdArgs& args ) if( !leaked ) { - if( !noCM ) { - // make sure the collision model manager is not used by the game cmdSystem->BufferCommandText( CMD_EXEC_NOW, "disconnect" ); // create the collision map start = Sys_Milliseconds(); - collisionModelManager->LoadMap( dmapGlobals.dmapFile ); + // write always a fresh .cm file + collisionModelManager->LoadMap( dmapGlobals.dmapFile, true ); collisionModelManager->FreeMap(); end = Sys_Milliseconds();