qbsp: output clipnodes in bsp2 format
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
This commit is contained in:
parent
083dc9fda1
commit
ce26465f57
|
|
@ -120,13 +120,13 @@ CountClipNodes_r(mapentity_t *entity, node_t *node)
|
|||
|
||||
/*
|
||||
==================
|
||||
ExportClipNodes_r
|
||||
ExportClipNodes
|
||||
==================
|
||||
*/
|
||||
static int
|
||||
ExportClipNodes_r(mapentity_t *entity, node_t *node)
|
||||
ExportClipNodes_BSP29(mapentity_t *entity, node_t *node)
|
||||
{
|
||||
int i, nodenum;
|
||||
int nodenum;
|
||||
bsp29_dclipnode_t *clipnode;
|
||||
face_t *face, *next;
|
||||
struct lumpdata *clipnodes = &entity->lumps[LUMP_CLIPNODES];
|
||||
|
|
@ -145,8 +145,43 @@ ExportClipNodes_r(mapentity_t *entity, node_t *node)
|
|||
map.cTotal[LUMP_CLIPNODES]++;
|
||||
|
||||
clipnode->planenum = node->outputplanenum;
|
||||
for (i = 0; i < 2; i++)
|
||||
clipnode->children[i] = ExportClipNodes_r(entity, node->children[i]);
|
||||
clipnode->children[0] = ExportClipNodes_BSP29(entity, node->children[0]);
|
||||
clipnode->children[1] = ExportClipNodes_BSP29(entity, node->children[1]);
|
||||
|
||||
for (face = node->faces; face; face = next) {
|
||||
next = face->next;
|
||||
memset(face, 0, sizeof(face_t));
|
||||
FreeMem(face, FACE, 1);
|
||||
}
|
||||
FreeMem(node, NODE, 1);
|
||||
|
||||
return nodenum;
|
||||
}
|
||||
|
||||
static int
|
||||
ExportClipNodes_BSP2(mapentity_t *entity, node_t *node)
|
||||
{
|
||||
int nodenum;
|
||||
bsp2_dclipnode_t *clipnode;
|
||||
face_t *face, *next;
|
||||
struct lumpdata *clipnodes = &entity->lumps[LUMP_CLIPNODES];
|
||||
|
||||
// FIXME: free more stuff?
|
||||
if (node->planenum == -1) {
|
||||
int contents = node->contents;
|
||||
FreeMem(node, NODE, 1);
|
||||
return contents;
|
||||
}
|
||||
|
||||
/* emit a clipnode */
|
||||
clipnode = (bsp2_dclipnode_t *)clipnodes->data + clipnodes->index;
|
||||
clipnodes->index++;
|
||||
nodenum = map.cTotal[LUMP_CLIPNODES];
|
||||
map.cTotal[LUMP_CLIPNODES]++;
|
||||
|
||||
clipnode->planenum = node->outputplanenum;
|
||||
clipnode->children[0] = ExportClipNodes_BSP2(entity, node->children[0]);
|
||||
clipnode->children[1] = ExportClipNodes_BSP2(entity, node->children[1]);
|
||||
|
||||
for (face = node->faces; face; face = next) {
|
||||
next = face->next;
|
||||
|
|
@ -175,7 +210,7 @@ ExportClipNodes(mapentity_t *entity, node_t *nodes, const int hullnum)
|
|||
{
|
||||
int oldcount, i, diff;
|
||||
int clipcount = 0;
|
||||
bsp29_dclipnode_t *olddata, *clipnode;
|
||||
void *olddata;
|
||||
struct lumpdata *clipnodes = &entity->lumps[LUMP_CLIPNODES];
|
||||
dmodel_t *model = (dmodel_t *)entity->lumps[LUMP_MODELS].data;
|
||||
|
||||
|
|
@ -187,7 +222,7 @@ ExportClipNodes(mapentity_t *entity, node_t *nodes, const int hullnum)
|
|||
model->headnode[hullnum] = clipcount + oldcount;
|
||||
|
||||
CountClipNodes_r(entity, nodes);
|
||||
if (clipnodes->count > MAX_BSP_CLIPNODES)
|
||||
if (clipnodes->count > MAX_BSP_CLIPNODES && !options.fBSP2)
|
||||
Error("Clipnode count exceeds bsp29 max (%d > %d)",
|
||||
clipnodes->count, MAX_BSP_CLIPNODES);
|
||||
|
||||
|
|
@ -201,18 +236,31 @@ ExportClipNodes(mapentity_t *entity, node_t *nodes, const int hullnum)
|
|||
diff = clipcount - model->headnode[1];
|
||||
if (diff != 0) {
|
||||
model->headnode[1] += diff;
|
||||
clipnode = clipnodes->data;
|
||||
for (i = 0; i < oldcount; i++, clipnode++) {
|
||||
if (clipnode->children[0] < MAX_BSP_CLIPNODES)
|
||||
clipnode->children[0] += diff;
|
||||
if (clipnode->children[1] < MAX_BSP_CLIPNODES)
|
||||
clipnode->children[1] += diff;
|
||||
if (options.fBSP2) {
|
||||
bsp2_dclipnode_t *clipnode = clipnodes->data;
|
||||
for (i = 0; i < oldcount; i++, clipnode++) {
|
||||
if (clipnode->children[0] >= 0)
|
||||
clipnode->children[0] += diff;
|
||||
if (clipnode->children[1] >= 0)
|
||||
clipnode->children[1] += diff;
|
||||
}
|
||||
} else {
|
||||
bsp29_dclipnode_t *clipnode = clipnodes->data;
|
||||
for (i = 0; i < oldcount; i++, clipnode++) {
|
||||
if (clipnode->children[0] < MAX_BSP_CLIPNODES)
|
||||
clipnode->children[0] += diff;
|
||||
if (clipnode->children[1] < MAX_BSP_CLIPNODES)
|
||||
clipnode->children[1] += diff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
map.cTotal[LUMP_CLIPNODES] = clipcount + oldcount;
|
||||
ExportClipNodes_r(entity, nodes);
|
||||
if (options.fBSP2)
|
||||
ExportClipNodes_BSP2(entity, nodes);
|
||||
else
|
||||
ExportClipNodes_BSP29(entity, nodes);
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
|||
Loading…
Reference in New Issue