@@ -11,148 +11,8 @@ std::string g_levname;
1111IVirtualStream* g_levStream = nullptr ;
1212char * g_overlayMapData = nullptr ;
1313
14- extern DkList<std::string> g_model_names;
15-
1614CDriverLevelTextures g_levTextures;
17-
18- // -------------------------------------------------------------
19- // parses model lumps and exports models to OBJ
20- // -------------------------------------------------------------
21- void LoadCarModelsLump (IVirtualStream* pFile, int ofs, int size)
22- {
23- int l_ofs = pFile->Tell ();
24-
25- int modelCount;
26- pFile->Read (&modelCount, sizeof (int ), 1 );
27-
28- Msg (" all car models count: %d\n " , modelCount);
29-
30- // read entries
31- carmodelentry_t model_entries[MAX_CAR_MODELS];
32- pFile->Read (&model_entries, sizeof (carmodelentry_t ), MAX_CAR_MODELS);
33-
34- // position
35- int r_ofs = pFile->Tell ();
36-
37- int pad; // really padding?
38- pFile->Read (&pad, sizeof (int ), 1 );
39-
40- // load car models
41- for (int i = 0 ; i < MAX_CAR_MODELS; i++)
42- {
43- Msg (" car model: %d %d %d\n " , model_entries[i].cleanOffset != -1 , model_entries[i].damOffset != -1 , model_entries[i].lowOffset != -1 );
44-
45- if (model_entries[i].cleanOffset != -1 )
46- {
47- pFile->Seek (r_ofs + model_entries[i].cleanOffset , VS_SEEK_SET);
48-
49- pFile->Read (&g_carModels[i].cleanSize , 1 , sizeof (int ));
50-
51- g_carModels[i].cleanmodel = (MODEL*)malloc (g_carModels[i].cleanSize );
52- pFile->Read (g_carModels[i].cleanmodel , 1 , g_carModels[i].cleanSize );
53- }
54- else
55- g_carModels[i].cleanmodel = nullptr ;
56-
57- if (model_entries[i].damOffset != -1 )
58- {
59- pFile->Seek (r_ofs + model_entries[i].damOffset , VS_SEEK_SET);
60-
61- pFile->Read (&g_carModels[i].damSize , 1 , sizeof (int ));
62-
63- g_carModels[i].dammodel = (MODEL*)malloc (g_carModels[i].damSize );
64- pFile->Read (g_carModels[i].dammodel , 1 , g_carModels[i].damSize );
65- }
66- else
67- g_carModels[i].dammodel = nullptr ;
68-
69- if (model_entries[i].lowOffset != -1 )
70- {
71- pFile->Seek (r_ofs + model_entries[i].lowOffset , VS_SEEK_SET);
72-
73- pFile->Read (&g_carModels[i].lowSize , 1 , sizeof (int ));
74-
75- g_carModels[i].lowmodel = (MODEL*)malloc (g_carModels[i].lowSize );
76- pFile->Read (g_carModels[i].lowmodel , 1 , g_carModels[i].lowSize );
77- }
78- else
79- g_carModels[i].lowmodel = nullptr ;
80- }
81-
82- pFile->Seek (l_ofs, VS_SEEK_SET);
83- }
84-
85- // -------------------------------------------------------------
86- // load model names
87- // -------------------------------------------------------------
88- void LoadModelNamesLump (IVirtualStream* pFile, int size)
89- {
90- int l_ofs = pFile->Tell ();
91-
92- char * modelnames = new char [size];
93- pFile->Read (modelnames, size, 1 );
94-
95- int len = strlen (modelnames);
96- int sz = 0 ;
97-
98- do
99- {
100- char * str = modelnames + sz;
101-
102- len = strlen (str);
103-
104- g_model_names.append (str);
105-
106- sz += len + 1 ;
107- } while (sz < size);
108-
109- delete[] modelnames;
110-
111- pFile->Seek (l_ofs, VS_SEEK_SET);
112- }
113-
114- // -------------------------------------------------------------
115- // parses model lumps and exports models to OBJ
116- // -------------------------------------------------------------
117- void LoadLevelModelsLump (IVirtualStream* pFile)
118- {
119- int l_ofs = pFile->Tell ();
120-
121- int modelCount;
122- pFile->Read (&modelCount, sizeof (int ), 1 );
123-
124- MsgInfo (" model count: %d\n " , modelCount);
125-
126- for (int i = 0 ; i < modelCount; i++)
127- {
128- int modelSize;
129-
130- pFile->Read (&modelSize, sizeof (int ), 1 );
131-
132- if (modelSize > 0 )
133- {
134- char * data = (char *)malloc (modelSize);
135-
136- pFile->Read (data, modelSize, 1 );
137-
138- ModelRef_t& ref = g_levelModels[i];
139- ref.index = i;
140- ref.model = (MODEL*)data;
141- ref.size = modelSize;
142- ref.swap = false ;
143- }
144- else // leave empty as swap
145- {
146- ModelRef_t& ref = g_levelModels[i];
147- ref.index = i;
148- ref.model = nullptr ;
149- ref.size = modelSize;
150- ref.swap = true ;
151- }
152- }
153-
154- pFile->Seek (l_ofs, VS_SEEK_SET);
155- }
15+ CDriverLevelModels g_levModels;
15616
15717// ---------------------------------------------------------------------------------------------------------------------------------
15818
@@ -275,7 +135,7 @@ void ProcessLumps(IVirtualStream* pFile)
275135 {
276136 case LUMP_MODELS:
277137 MsgWarning (" LUMP_MODELS ofs=%d size=%d\n " , pFile->Tell (), lump.size );
278- LoadLevelModelsLump (pFile);
138+ g_levModels. LoadLevelModelsLump (pFile);
279139 break ;
280140 case LUMP_MAP:
281141 MsgWarning (" LUMP_MAP ofs=%d size=%d\n " , pFile->Tell (), lump.size );
@@ -287,7 +147,7 @@ void ProcessLumps(IVirtualStream* pFile)
287147 break ;
288148 case LUMP_MODELNAMES:
289149 MsgWarning (" LUMP_MODELNAMES ofs=%d size=%d\n " , pFile->Tell (), lump.size );
290- LoadModelNamesLump (pFile, lump.size );
150+ g_levModels. LoadModelNamesLump (pFile, lump.size );
291151 break ;
292152 case LUMP_SUBDIVISION:
293153 MsgWarning (" LUMP_SUBDIVISION ofs=%d size=%d\n " , pFile->Tell (), lump.size );
@@ -327,7 +187,7 @@ void ProcessLumps(IVirtualStream* pFile)
327187 break ;
328188 case LUMP_CAR_MODELS:
329189 MsgWarning (" LUMP_CAR_MODELS ofs=%d size=%d\n " , pFile->Tell (), lump.size );
330- LoadCarModelsLump (pFile, pFile-> Tell () , lump.size );
190+ g_levModels. LoadCarModelsLump (pFile, lump.size );
331191 break ;
332192 case LUMP_TEXTUREINFO:
333193 MsgWarning (" LUMP_TEXTUREINFO ofs=%d size=%d\n " , pFile->Tell (), lump.size );
@@ -461,23 +321,8 @@ void FreeLevelData()
461321
462322 FreeSpoolData ();
463323
464- for (int i = 0 ; i < MAX_MODELS; i++)
465- {
466- if (g_levelModels[i].model )
467- free (g_levelModels[i].model );
468- }
469-
470- for (int i = 0 ; i < MAX_CAR_MODELS; i++)
471- {
472- if (g_carModels[i].cleanmodel )
473- free (g_carModels[i].cleanmodel );
474-
475- if (g_carModels[i].dammodel )
476- free (g_carModels[i].dammodel );
477-
478- if (g_carModels[i].lowmodel )
479- free (g_carModels[i].lowmodel );
480- }
324+ g_levTextures.FreeAll ();
325+ g_levModels.FreeAll ();
481326
482327 delete[] g_overlayMapData;
483328}
0 commit comments