else // LordHavoc: bsp version 29 (normal white lighting)
{
// LordHavoc: hope is not lost yet, check for a .lit file to load
- strcpy(litfilename, loadmodel->name);
- FS_StripExtension(litfilename, litfilename);
- strcat(litfilename, ".lit");
+ strlcpy (litfilename, loadmodel->name, sizeof (litfilename));
+ FS_StripExtension (litfilename, litfilename, sizeof (litfilename));
+ strlcat (litfilename, ".lit", sizeof (litfilename));
data = (qbyte*) FS_LoadFile(litfilename, false);
if (data)
{
char lightsfilename[1024], *s, *t, *lightsstring;
mlight_t *e;
- strcpy(lightsfilename, loadmodel->name);
- FS_StripExtension(lightsfilename, lightsfilename);
- strcat(lightsfilename, ".lights");
+ strlcpy (lightsfilename, loadmodel->name, sizeof (lightsfilename));
+ FS_StripExtension (lightsfilename, lightsfilename, sizeof(lightsfilename));
+ strlcat (lightsfilename, ".lights", sizeof (lightsfilename));
s = lightsstring = (char *) FS_LoadFile(lightsfilename, false);
if (s)
{
for (i = 0;i < count;i++, in++, out++)
{
- strncpy(out->name, in->name, sizeof(out->name) - 1);
+ strlcpy (out->name, in->name, sizeof (out->name));
out->surfaceflags = LittleLong(in->surfaceflags);
out->nativecontents = LittleLong(in->contents);
out->supercontents = Mod_Q3BSP_SuperContentsFromNativeContents(loadmodel, out->nativecontents);
q3mbrush_t *out;
int i, j, n, c, count, maxplanes;
mplane_t *planes;
+ winding_t *temp1, *temp2;
in = (void *)(mod_base + l->fileofs);
if (l->filelen % sizeof(*in))
loadmodel->brushq3.data_brushes = out;
loadmodel->brushq3.num_brushes = count;
+ temp1 = Winding_New(64);
+ temp2 = Winding_New(64);
+
maxplanes = 0;
planes = NULL;
planes[j].dist = out->firstbrushside[j].plane->dist;
}
// make the colbrush from the planes
- out->colbrushf = Collision_NewBrushFromPlanes(loadmodel->mempool, out->numbrushsides, planes, out->texture->supercontents);
+ out->colbrushf = Collision_NewBrushFromPlanes(loadmodel->mempool, out->numbrushsides, planes, out->texture->supercontents, temp1, temp2);
}
if (planes)
Mem_Free(planes);
+ Winding_Free(temp1);
+ Winding_Free(temp2);
}
static void Mod_Q3BSP_LoadEffects(lump_t *l)
for (i = 0;i < count;i++, in++, out++)
{
- strncpy(out->shadername, in->shadername, sizeof(out->shadername) - 1);
+ strlcpy (out->shadername, in->shadername, sizeof (out->shadername));
n = LittleLong(in->brushindex);
if (n < 0 || n >= loadmodel->brushq3.num_brushes)
Host_Error("Mod_Q3BSP_LoadEffects: invalid brushindex %i (%i brushes)\n", n, loadmodel->brushq3.num_brushes);
if (l->filelen % sizeof(*in))
Host_Error("Mod_Q3BSP_LoadVertices: funny lump size in %s",loadmodel->name);
loadmodel->brushq3.num_vertices = count = l->filelen / sizeof(*in);
- loadmodel->brushq3.data_vertex3f = Mem_Alloc(loadmodel->mempool, count * sizeof(float[3]));
- loadmodel->brushq3.data_texcoordtexture2f = Mem_Alloc(loadmodel->mempool, count * sizeof(float[2]));
- loadmodel->brushq3.data_texcoordlightmap2f = Mem_Alloc(loadmodel->mempool, count * sizeof(float[2]));
- loadmodel->brushq3.data_svector3f = Mem_Alloc(loadmodel->mempool, count * sizeof(float[3]));
- loadmodel->brushq3.data_tvector3f = Mem_Alloc(loadmodel->mempool, count * sizeof(float[3]));
- loadmodel->brushq3.data_normal3f = Mem_Alloc(loadmodel->mempool, count * sizeof(float[3]));
- loadmodel->brushq3.data_color4f = Mem_Alloc(loadmodel->mempool, count * sizeof(float[4]));
+ loadmodel->brushq3.data_vertex3f = Mem_Alloc(loadmodel->mempool, count * (sizeof(float) * (3 + 2 + 2 + 3 + 3 + 3 + 4)));
+ loadmodel->brushq3.data_texcoordtexture2f = loadmodel->brushq3.data_vertex3f + count * 3;
+ loadmodel->brushq3.data_texcoordlightmap2f = loadmodel->brushq3.data_texcoordtexture2f + count * 2;
+ loadmodel->brushq3.data_svector3f = loadmodel->brushq3.data_texcoordlightmap2f + count * 2;
+ loadmodel->brushq3.data_tvector3f = loadmodel->brushq3.data_svector3f + count * 3;
+ loadmodel->brushq3.data_normal3f = loadmodel->brushq3.data_tvector3f + count * 3;
+ loadmodel->brushq3.data_color4f = loadmodel->brushq3.data_normal3f + count * 3;
for (i = 0;i < count;i++, in++)
{
if (l->filelen % sizeof(int[3]))
Host_Error("Mod_Q3BSP_LoadTriangles: funny lump size in %s",loadmodel->name);
count = l->filelen / sizeof(*in);
- out = Mem_Alloc(loadmodel->mempool, count * sizeof(*out));
+ out = Mem_Alloc(loadmodel->mempool, count * sizeof(*out) * 2);
loadmodel->brushq3.num_triangles = count / 3;
loadmodel->brushq3.data_element3i = out;
- loadmodel->brushq3.data_neighbor3i = Mem_Alloc(loadmodel->mempool, count * sizeof(*out));
+ loadmodel->brushq3.data_neighbor3i = out + count;
for (i = 0;i < count;i++, in++, out++)
{
rtexture_t **out;
int i, count;
+ if (!l->filelen)
+ return;
in = (void *)(mod_base + l->fileofs);
if (l->filelen % sizeof(*in))
Host_Error("Mod_Q3BSP_LoadLightmaps: funny lump size in %s",loadmodel->name);