Skip to content

Commit 8241236

Browse files
committed
- move models code to C++ class
- get rid of direct CLUT access in lev textures
1 parent f97b77b commit 8241236

12 files changed

Lines changed: 269 additions & 245 deletions

File tree

DriverLevelTool/driver_level.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
// extern some vars
2323
extern IVirtualStream* g_levStream;
2424
extern CDriverLevelTextures g_levTextures;
25+
extern CDriverLevelModels g_levModels;
2526

2627
//----------------------------------------------------------
2728

DriverLevelTool/driver_routines/level.cpp

Lines changed: 6 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -11,148 +11,8 @@ std::string g_levname;
1111
IVirtualStream* g_levStream = nullptr;
1212
char* g_overlayMapData = nullptr;
1313

14-
extern DkList<std::string> g_model_names;
15-
1614
CDriverLevelTextures 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
}

DriverLevelTool/driver_routines/level.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,6 @@ extern ELevelFormat g_format;
6767
//------------------------------------------------------------------------------------------------------------
6868
// functions
6969

70-
71-
72-
void LoadModelNamesLump(IVirtualStream* pFile, int size);
73-
7470
void LoadLevelFile(const char* filename);
7571
void FreeLevelData();
7672

0 commit comments

Comments
 (0)