• Advertisement
Sign in to follow this  

half life 1 bsp to quake 3 bsp?

This topic is 4792 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

anyone ever tried this? know of a converter already out there? the engine i'm using only supports the quake 3 bsp format, and i'd really like to test with half life 1 maps instead...

Share this post


Link to post
Share on other sites
Advertisement
I can't say I have heard of any editors/programs that do it. That doesn't mean it doesn't exist or that it would be impossible to write your own. I haven't had much experience with either, but it would be interesting to see if it could be done.

Share this post


Link to post
Share on other sites
do you have all the structures for quake3? the halflife1 structs are pretty much quake2. theres a few exceptions. the main gotchas that i encountered when writing my hl1 bsp loader was with the leafs/nodes and the vis information. the quake2 source uses node->contents=-1 for leafs and hl1 uses 0. it could be the other way around i'm too lazy to check. the vis information is quite different than quake2. hl1 really doesn't use clusters or areaportals. so the vis information is really just a compressed bit array for every leaf sequentially. you can think of each leaf as its own cluster and use the quake3 vis code i'm pretty sure. you can find all the bsp structs and the internal model structs in the hl1 sdk. be sure to check out the wad code too. they use paletted textures in the TEXDATA lump so some textures can be stored internally. lastly, you may want to parse the ENTITIES lump and place all func_wall back into the map. this may require you to append some data to the marksurfaces arrays.

good luck.

Share this post


Link to post
Share on other sites
here i found part of my vis marking func

for( i = 0; i < numleafs; i++ )
{
int cluster = i-1;

if (cluster == -1)
continue;

//check to see if this leaf is visible from our current leaf
if( vis[cluster>>3] & (1<<(cluster&7)) )
{
node = (mnode_t *)&r_worldmodel->leafs;
do
{
//save ourselves some work if we already traversed this chain
if( node->visframe == r_visframecount )
break;

//if we haven't visited this node, mark it and traverse up
node->visframe = r_visframecount;
node = node->parent;
}
while( node);
}
}

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement