@@ -187,6 +187,12 @@ CBaseLevelMap::~CBaseLevelMap()
187187{
188188}
189189
190+ void CBaseLevelMap::Init (CDriverLevelModels* models, CDriverLevelTextures* textures)
191+ {
192+ m_models = models;
193+ m_textures = textures;
194+ }
195+
190196void CBaseLevelMap::FreeAll ()
191197{
192198 if (m_regionSpoolInfo)
@@ -239,14 +245,16 @@ int CBaseLevelMap::GetRegionsDown() const
239245 return m_regions_down;
240246}
241247
242- void CBaseLevelMap::WorldPositionToCellXZ (XZPAIR& cell, const VECTOR_NOPAD& position) const
248+ void CBaseLevelMap::WorldPositionToCellXZ (XZPAIR& cell, const VECTOR_NOPAD& position, const XZPAIR& offset /* = { 0 } */ ) const
243249{
244250 // @TODO: constants
245251 int units_across_halved = m_mapInfo.cells_across / 2 * m_mapInfo.cell_size ;
246252 int units_down_halved = m_mapInfo.cells_down / 2 * m_mapInfo.cell_size ;
247253
248- cell.x = (position.vx + units_across_halved) / m_mapInfo.cell_size ;
249- cell.z = (position.vz + units_down_halved) / m_mapInfo.cell_size ;
254+ const int squared_reg_size = m_mapInfo.region_size * m_mapInfo.region_size ;
255+
256+ cell.x = (position.vx + units_across_halved + offset.x ) / m_mapInfo.cell_size ;
257+ cell.z = (position.vz + units_down_halved + offset.z ) / m_mapInfo.cell_size ;
250258}
251259
252260// -------------------------------------------------------------
@@ -383,6 +391,9 @@ void CBaseLevelMap::LoadInAreaTPages(const SPOOL_CONTEXT& ctx, int areaDataNum)
383391 if (areaDataNum == 255 )
384392 return ;
385393
394+ if (!m_textures)
395+ return ;
396+
386397 AreaDataStr& areaData = m_areaData[areaDataNum];
387398 AreaTpageList& areaTPages = m_areaTPages[areaDataNum];
388399
@@ -395,7 +406,7 @@ void CBaseLevelMap::LoadInAreaTPages(const SPOOL_CONTEXT& ctx, int areaDataNum)
395406 if (areaTPages.pageIndexes [i] == 0xFF )
396407 break ;
397408
398- CTexturePage* tpage = ctx. textures ->GetTPage (areaTPages.pageIndexes [i]);
409+ CTexturePage* tpage = m_textures ->GetTPage (areaTPages.pageIndexes [i]);
399410
400411 // assign
401412 areaTPages.tpage [i] = tpage;
@@ -412,6 +423,9 @@ void CBaseLevelMap::LoadInAreaModels(const SPOOL_CONTEXT& ctx, int areaDataNum)
412423 if (areaDataNum == -1 )
413424 return ;
414425
426+ if (!m_models)
427+ return ;
428+
415429 AreaDataStr& areaData = m_areaData[areaDataNum];
416430
417431 int length = areaData.model_size ;
@@ -438,7 +452,7 @@ void CBaseLevelMap::LoadInAreaModels(const SPOOL_CONTEXT& ctx, int areaDataNum)
438452
439453 if (modelSize > 0 )
440454 {
441- ModelRef_t* ref = ctx. models ->GetModelByIndex (new_model_numbers[i]);
455+ ModelRef_t* ref = m_models ->GetModelByIndex (new_model_numbers[i]);
442456
443457 // @FIXME: is that correct? Analyze duplicated models...
444458 if (ref->model )
@@ -456,7 +470,7 @@ void CBaseLevelMap::LoadInAreaModels(const SPOOL_CONTEXT& ctx, int areaDataNum)
456470
457471 ctx.dataStream ->Read (ref->model , modelSize, 1 );
458472
459- ctx. models ->OnModelLoaded (ref);
473+ m_models ->OnModelLoaded (ref);
460474 }
461475 }
462476
0 commit comments