rhc.hull = &model->brushq1.hulls[0]; // 0x0x0
else if (model->brush.ismcbsp)
{
- if (boxsize[2] < 48) // pick the nearest of 40 or 56
- rhc.hull = &model->brushq1.hulls[2]; // 16x16x40
- else
- rhc.hull = &model->brushq1.hulls[1]; // 16x16x56
+ int i;
+ float vdist, dist;
+ int vdisti = 0;
+
+ vdist = 0; // shut up compiler warning
+
+ // find the closest hull size (this algorithm probably sucks, a qc field to override it might be in order...)
+ for (i = 1; i < model->brushq1.numhulls; i++)
+ {
+ dist = fabs(model->brushq1.hulls[i].clip_size[0] - boxsize[0]) +
+ fabs(model->brushq1.hulls[i].clip_size[1] - boxsize[1]) +
+ fabs(model->brushq1.hulls[i].clip_size[2] - boxsize[2]) * 0.25;
+
+ if (!vdisti || dist < vdist)
+ {
+ vdisti = i;
+ vdist = dist;
+ }
+ }
+ rhc.hull = &model->brushq1.hulls[vdisti];
}
else if (model->brush.ishlbsp)
{
tx->surfaceflags = mod_q1bsp_texture_solid.surfaceflags;
}
tx->currentframe = tx;
+
+ // clear water settings
+ tx->reflectmin = 0;
+ tx->reflectmax = 1;
+ tx->refractfactor = 1;
+ Vector4Set(tx->refractcolor4f, 1, 1, 1, 1);
+ tx->reflectfactor = 1;
+ Vector4Set(tx->reflectcolor4f, 1, 1, 1, 1);
}
if (!m)
{
if (loadmodel->isworldmodel)
{
- data = loadimagepixels(tx->name, false, 0, 0);
+ data = loadimagepixels(tx->name, false, 0, 0, false);
if (data)
{
R_Q1BSP_LoadSplitSky(data, image_width, image_height, 4);
if (strncmp(tx->name,"*lava",5)
&& strncmp(tx->name,"*teleport",9)
&& strncmp(tx->name,"*rift",5)) // Scourge of Armagon texture
- {
tx->basematerialflags |= MATERIALFLAG_WATERALPHA | MATERIALFLAG_NOSHADOW | MATERIALFLAG_WATERSHADER;
- VectorSet(tx->reflectcolor, 1, 1, 1);
- VectorSet(tx->refractcolor, 1, 1, 1);
- tx->refractmin = 0;
- tx->refractmax = 1;
- tx->refractfactor = 1;
- }
tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_NOSHADOW;
}
else if (!strncmp(tx->name, "sky", 3))
Host_Error("Mod_Q1BSP_Load: %s has wrong version number(%i should be %i)", mod->name, i, MCBSPVERSION);
// read hull info
- hullinfo.numhulls = LittleLong(*(int*)index); index += 4;
+ hullinfo.numhulls = SB_ReadInt (&index);
hullinfo.filehulls = hullinfo.numhulls;
+ mod->brushq1.numhulls = hullinfo.numhulls;
+
VectorClear (hullinfo.hullsizes[0][0]);
VectorClear (hullinfo.hullsizes[0][1]);
for (i = 1; i < hullinfo.numhulls; i++)
hullinfo.numhulls = 4;
hullinfo.filehulls = 4;
+ mod->brushq1.numhulls = 4;
VectorSet (hullinfo.hullsizes[1][0], -16, -16, -36);
VectorSet (hullinfo.hullsizes[1][1], 16, 16, 36);
VectorSet (hullinfo.hullsizes[2][0], -32, -32, -32);
{
hullinfo.numhulls = 3;
hullinfo.filehulls = 4;
+ mod->brushq1.numhulls = 3;
VectorSet (hullinfo.hullsizes[1][0], -16, -16, -24);
VectorSet (hullinfo.hullsizes[1][1], 16, 16, 32);
VectorSet (hullinfo.hullsizes[2][0], -32, -32, -24);
// we only need to have a drawsky function if it is used(usually only on world model)
if (surface->texture->basematerialflags & MATERIALFLAG_SKY)
mod->DrawSky = R_Q1BSP_DrawSky;
- if (surface->texture->basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFLECTION))
+ if (surface->texture->basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION))
mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;
// calculate bounding shapes
for (k = 0, vec = (loadmodel->surfmesh.data_vertex3f + 3 * surface->num_firstvertex);k < surface->num_vertices;k++, vec += 3)
c = 0;
for (i = 0;i < count;i++, in++, out++)
- if (Mod_LoadTextureFromQ3Shader(out, out->name, false, true, false))
+ if (!Mod_LoadTextureFromQ3Shader(out, out->name, false, true, false))
c++;
if (c)
Con_DPrintf("%s: %i textures missing shaders\n", loadmodel->name, c);
mod->DrawSky = NULL;
for (j = 0;j < mod->nummodelsurfaces;j++)
- if (mod->data_surfaces[j + mod->firstmodelsurface].texture->basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFLECTION))
+ if (mod->data_surfaces[j + mod->firstmodelsurface].texture->basematerialflags & (MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION | MATERIALFLAG_REFLECTION))
break;
if (j < mod->nummodelsurfaces)
mod->DrawAddWaterPlanes = R_Q1BSP_DrawAddWaterPlanes;