Skip to content

Commit aba9e53

Browse files
committed
- added model flags displaying in model viewer
1 parent 9f72414 commit aba9e53

4 files changed

Lines changed: 106 additions & 140 deletions

File tree

DriverLevelTool/driver_routines/d2_types.h

Lines changed: 69 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -111,186 +111,122 @@ struct carmodelentry_t
111111
// FIXME: it's guessed
112112
struct POLYF3
113113
{
114-
unsigned char id;
115-
unsigned char v0;
116-
unsigned char v1;
117-
unsigned char v2;
118-
unsigned char pad;
114+
uchar id;
115+
uchar v0;
116+
uchar v1;
117+
uchar v2;
118+
uchar pad;
119119
CVECTOR_NOPAD color;
120120
char pad2[4];
121121
};
122122

123123
// FIXME: it's guessed
124124
struct POLYF4
125125
{
126-
unsigned char id; // 0
127-
unsigned char pad1;
128-
unsigned char pad2;
129-
unsigned char spare;
130-
unsigned char v0; //4
131-
unsigned char v1;
132-
unsigned char v2;
133-
unsigned char v3;
126+
uchar id; // 0
127+
uchar pad1;
128+
uchar pad2;
129+
uchar spare;
130+
uchar v0; //4
131+
uchar v1;
132+
uchar v2;
133+
uchar v3;
134134
CVECTOR_NOPAD color;
135135
char pad[5];
136136
};
137137

138-
struct POLYFT3
138+
struct POLYFT4
139139
{
140-
unsigned char id;
141-
unsigned char texture_set;
142-
unsigned char texture_id;
143-
unsigned char spare;
144-
unsigned char v0;
145-
unsigned char v1;
146-
unsigned char v2;
147-
unsigned char pad;
148-
UV_INFO uv0;
149-
UV_INFO uv1;
150-
UV_INFO uv2;
151-
UV_INFO pad2;
140+
uchar id;
141+
uchar texture_set;
142+
uchar texture_id;
143+
uchar spare;
144+
uchar v0, v1, v2, v3;
145+
UV_INFO uv0, uv1, uv2, uv3;
152146
CVECTOR color;
153147
};
154148

155-
struct POLYGT3
149+
struct POLYGT4
156150
{
157-
unsigned char id;
158-
unsigned char texture_set;
159-
unsigned char texture_id;
160-
unsigned char spare;
161-
unsigned char v0;
162-
unsigned char v1;
163-
unsigned char v2;
164-
unsigned char pad;
165-
unsigned char n0;
166-
unsigned char n1;
167-
unsigned char n2;
168-
unsigned char pad2;
169-
UV_INFO uv0;
170-
UV_INFO uv1;
171-
UV_INFO uv2;
172-
UV_INFO pad3;
151+
uchar id;
152+
uchar texture_set;
153+
uchar texture_id;
154+
uchar spare;
155+
uchar v0, v1, v2, v3;
156+
uchar n0, n1, n2, n3;
157+
UV_INFO uv0, uv1, uv2, uv3;
173158
CVECTOR color;
174159
};
175160

176-
struct POLYFT4
161+
struct POLYFT3
177162
{
178-
unsigned char id;
179-
unsigned char texture_set;
180-
unsigned char texture_id;
181-
unsigned char spare;
182-
unsigned char v0;
183-
unsigned char v1;
184-
unsigned char v2;
185-
unsigned char v3;
186-
UV_INFO uv0;
187-
UV_INFO uv1;
188-
UV_INFO uv2;
189-
UV_INFO uv3;
163+
uchar id;
164+
uchar texture_set;
165+
uchar texture_id;
166+
uchar spare;
167+
uchar v0, v1, v2, pad;
168+
UV_INFO uv0, uv1, uv2, pad2;
190169
CVECTOR color;
191170
};
192171

193-
struct POLYGT4
172+
struct POLYGT3
194173
{
195-
unsigned char id;
196-
unsigned char texture_set;
197-
unsigned char texture_id;
198-
unsigned char spare;
199-
unsigned char v0;
200-
unsigned char v1;
201-
unsigned char v2;
202-
unsigned char v3;
203-
unsigned char n0;
204-
unsigned char n1;
205-
unsigned char n2;
206-
unsigned char n3;
207-
UV_INFO uv0;
208-
UV_INFO uv1;
209-
UV_INFO uv2;
210-
UV_INFO uv3;
174+
uchar id;
175+
uchar texture_set;
176+
uchar texture_id;
177+
uchar spare;
178+
uchar v0, v1, v2, pad;
179+
uchar n0, n1, n2, pad2;
180+
UV_INFO uv0, uv1, uv2, pad3;
211181
CVECTOR color;
212182
};
213183

184+
#define COLLISION_BOX 0
185+
#define COLLISION_CYLINDER 1
186+
#define COLLISION_CONE 2
187+
#define COLLISION_SPHERE 3
188+
#define COLLISION_INDOORS 4
189+
214190
struct COLLISION_PACKET
215191
{
216192
short type;
217-
short xpos;
218-
short ypos;
219-
short zpos;
193+
short xpos, ypos, zpos;
220194
short flags;
221195
short yang;
222196
short empty;
223-
short xsize;
224-
short ysize;
225-
short zsize;
197+
short xsize, ysize, zsize;
226198
};
227199

228-
#if 0
229-
enum ModelFlags1 // collision flags?
230-
{
231-
everything = 1,
232-
dontKnow0 = 2,
233-
walls = 4,
234-
dontKnow1 = 8,
235-
dontKnow2 = 16,
236-
planarGround = 32,
237-
dontKnow3 = 64,
238-
dontKnow4 = 128,
239-
dontKnow5 = 256,
240-
dontKnow6 = 512,
241-
ground = 1024,
242-
dontKnow7 = 2048,
243-
dontKnow8 = 4096,
244-
street = 8192,
245-
tree = 16384,
246-
anythingToHit = 32768 // walls, poles, fences; but not trees or buildings
247-
};
248-
249-
enum ModelFlags2 // effect flags?
250-
{
251-
dontKnow9 = 1, // empty in Chicago
252-
sandy = 2, // ??? lots of sandy stuff, but not everything
253-
dontKnow10 = 4, // ??? (just one roof in Chicago)
254-
dontKnow11 = 8, // ??? (empty in Chicago)
255-
dontKnow12 = 16, // many sidewalks, some grass
256-
medianStrips = 32,
257-
crossings = 64,
258-
dirt = 128, // lots but not everything
259-
dontKnow13 = 256, // parking lot in Chicago
260-
chair = 512,
261-
walls2 = 1024, // don't know the difference to 'walls'
262-
destructable = 2048,
263-
dontKnow14 = 4096, // ??? (empty in Chicago)
264-
greenTree = 8192, // don't know the difference to 'tree'
265-
dontKnow15 = 16384, // ??? again: many sidewalks, some grass
266-
sidewalk = 32768
267-
};
268-
#else
269-
270200
enum ModelShapeFlags
271201
{
272-
SHAPE_FLAG_SMASH_QUIET = 0x8,
273-
SHAPE_FLAG_NOCOLLIDE = 0x10,
274-
SHAPE_FLAG_SUBSURFACE = 0x80, // grass, dirt, water
275-
SHAPE_FLAG_ALLEYWAY = 0x400, // alleyway
276-
SHAPE_FLAG_SMASH_SPRITE = 0x4000,
202+
SHAPE_FLAG_LITPOLY = 0x1,
203+
SHAPE_FLAG_BSPDATA = 0x2,
204+
SHAPE_FLAG_TRANS = 0x8,
205+
SHAPE_FLAG_NOCOLLIDE = 0x10,
206+
SHAPE_FLAG_WATER = 0x80, // model is water
207+
SHAPE_FLAG_AMBIENT2 = 0x100, // Ambient sound 2 associated - maybe used in D1
208+
SHAPE_FLAG_AMBIENT1 = 0x200, // Ambient sound 1 associated - maybe used in D1
209+
SHAPE_FLAG_TILE = 0x400, // treat as road
210+
SHAPE_FLAG_SHADOW = 0x800, // D1 leftover flag
211+
SHAPE_FLAG_ALPHA = 0x1000, // alpha tested object
212+
SHAPE_FLAG_ROAD = 0x2000, // section of road
213+
SHAPE_FLAG_SPRITE = 0x4000,
277214
};
278215

279216
enum ModelFlags2
280217
{
281-
MODEL_FLAG_ANIMOBJ = 0x1,
282-
MODEL_FLAG_MEDIAN = 0x20,
283-
MODEL_FLAG_ALLEY = 0x80,
284-
MODEL_FLAG_HASROOF = 0x100,
285-
MODEL_FLAG_NOCOL_200 = 0x200,
218+
MODEL_FLAG_MEDIAN = 0x20, // Hmmmm...
219+
MODEL_FLAG_JUNC = 0x40,
220+
MODEL_FLAG_ALLEY = 0x80, // alley tile
221+
MODEL_FLAG_INDOORS = 0x100,
222+
MODEL_FLAG_CHAIR = 0x200,
286223
MODEL_FLAG_BARRIER = 0x400,
287224
MODEL_FLAG_SMASHABLE = 0x800,
288225
MODEL_FLAG_LAMP = 0x1000,
289226
MODEL_FLAG_TREE = 0x2000,
290227
MODEL_FLAG_GRASS = 0x4000,
291-
MODEL_FLAG_SIDEWALK = 0x8000,
228+
MODEL_FLAG_PATH = 0x8000,
292229
};
293-
#endif
294230

295231
struct MODEL
296232
{

DriverLevelTool/driver_routines/models.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ void SwapValues(T& a, T& b)
350350
// TODO: rework, few variants of faces still looks bad
351351
int decode_poly(const char* polyList, dpoly_t* out)
352352
{
353-
int ptype = *polyList & 31;
353+
int ptype = *polyList & 0x1f;
354354

355355
out->page = 0xFF;
356356
out->detail = 0xFF;

DriverLevelTool/viewer/renderlevel.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,13 @@ void DrawLevelDriver2(const Vector3D& cameraPos, float cameraAngleY, const Volum
256256

257257
if (model)
258258
{
259-
if (model->shape_flags & SHAPE_FLAG_SMASH_SPRITE)
259+
if (model->shape_flags & SHAPE_FLAG_SPRITE)
260260
{
261261
cellRotationRad = DEG2RAD(cameraAngleY);
262262
}
263263

264-
if ((model->shape_flags & (SHAPE_FLAG_SUBSURFACE | SHAPE_FLAG_ALLEYWAY)) ||
265-
(model->flags2 & (MODEL_FLAG_SIDEWALK | MODEL_FLAG_GRASS)))
264+
if ((model->shape_flags & (SHAPE_FLAG_WATER | SHAPE_FLAG_TILE)) ||
265+
(model->flags2 & (MODEL_FLAG_PATH | MODEL_FLAG_GRASS)))
266266
{
267267
isGround = true;
268268
}
@@ -422,13 +422,13 @@ void DrawLevelDriver1(const Vector3D& cameraPos, float cameraAngleY, const Volum
422422

423423
if (model)
424424
{
425-
if (model->shape_flags & SHAPE_FLAG_SMASH_SPRITE)
425+
if (model->shape_flags & SHAPE_FLAG_SPRITE)
426426
{
427427
cellRotationRad = DEG2RAD(cameraAngleY);
428428
}
429429

430-
if ((model->shape_flags & (SHAPE_FLAG_SUBSURFACE | SHAPE_FLAG_ALLEYWAY)) ||
431-
(model->flags2 & (MODEL_FLAG_SIDEWALK | MODEL_FLAG_GRASS)))
430+
if ((model->shape_flags & (SHAPE_FLAG_WATER | SHAPE_FLAG_TILE)) ||
431+
(model->flags2 & (MODEL_FLAG_PATH | MODEL_FLAG_GRASS)))
432432
{
433433
isGround = true;
434434
}

DriverLevelTool/viewer/viewer.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,36 @@ void DisplayUI(float deltaTime)
599599
{
600600
ImGui::Text("");
601601
}
602+
603+
int shape_flags = model->shape_flags;
604+
605+
// shape flags
606+
ImGui::CheckboxFlags("Lit", &shape_flags, SHAPE_FLAG_LITPOLY); ImGui::SameLine();
607+
ImGui::CheckboxFlags("BSP", &shape_flags, SHAPE_FLAG_BSPDATA); ImGui::SameLine();
608+
ImGui::CheckboxFlags("Quiet", &shape_flags, SHAPE_FLAG_TRANS); ImGui::SameLine();
609+
610+
ImGui::CheckboxFlags("Water", &shape_flags, SHAPE_FLAG_WATER); ImGui::SameLine();
611+
ImGui::CheckboxFlags("Amb2", &shape_flags, SHAPE_FLAG_AMBIENT2);
612+
ImGui::CheckboxFlags("Amb1", &shape_flags, SHAPE_FLAG_AMBIENT1); ImGui::SameLine();
613+
614+
ImGui::CheckboxFlags("Tile", &shape_flags, SHAPE_FLAG_TILE); ImGui::SameLine();
615+
ImGui::CheckboxFlags("Shad", &shape_flags, SHAPE_FLAG_SHADOW); ImGui::SameLine();
616+
ImGui::CheckboxFlags("Alpha", &shape_flags, SHAPE_FLAG_ALPHA); ImGui::SameLine();
617+
ImGui::CheckboxFlags("Road", &shape_flags, SHAPE_FLAG_ROAD); ImGui::SameLine();
618+
ImGui::CheckboxFlags("Spr", &shape_flags, SHAPE_FLAG_SPRITE);
619+
620+
int flags2 = model->flags2;
621+
ImGui::Spacing();
622+
ImGui::CheckboxFlags("Junc", &flags2, MODEL_FLAG_JUNC); ImGui::SameLine();
623+
ImGui::CheckboxFlags("Alley", &flags2, MODEL_FLAG_ALLEY); ImGui::SameLine();
624+
ImGui::CheckboxFlags("Indrs", &flags2, MODEL_FLAG_INDOORS); ImGui::SameLine();
625+
ImGui::CheckboxFlags("Chair", &flags2, MODEL_FLAG_CHAIR); ImGui::SameLine();
626+
ImGui::CheckboxFlags("Barr", &flags2, MODEL_FLAG_BARRIER);
627+
ImGui::CheckboxFlags("Smsh", &flags2, MODEL_FLAG_SMASHABLE); ImGui::SameLine();
628+
ImGui::CheckboxFlags("Lamp", &flags2, MODEL_FLAG_LAMP); ImGui::SameLine();
629+
ImGui::CheckboxFlags("Tree", &flags2, MODEL_FLAG_TREE); ImGui::SameLine();
630+
ImGui::CheckboxFlags("Grass", &flags2, MODEL_FLAG_GRASS); ImGui::SameLine();
631+
ImGui::CheckboxFlags("Path", &flags2, MODEL_FLAG_PATH);
602632
}
603633
else
604634
{

0 commit comments

Comments
 (0)