Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Kaiser

Building GL Nodes/PVS with Doom Builder 2

Recommended Posts

Does anyone know a way to make Doom Builder 2 correctly build GL nodes with GLBSP? It seems that whenever I compile a map, it doesn't build/insert GL nodes in the wad file. While on subject, I am also using glvis to build the PVS data, but since its a separate tool, there doesn't seem to be a way to have DB2 automatically call this tool after compiling the map.

So basically is there a way to force GL nodes to be built in DB2 as well as being able to have DB2 call glvis to build the PVS data during map compile?

Share this post


Link to post

I thought only Vavoom used PVS...

I guess the problem with GL nodes and DB2 is that they aren't in the traditional node lumps, and in fact come after BLOCKMAP/BEHAVIOR, so it might simply not be looking for them. Are you using an edited configuration in which the GL_ node lumps have been added to the map format?

As for working around it not calling two different tools, maybe a simple console program that calls glbsp and then glvis on the same file could be created quickly, and using it as the nodebuilder would work...

Share this post


Link to post

No, I simply specified what node compiling tool I wanted to use in DB2's configuration settings.

Gez said:

I thought only Vavoom used PVS...


Nope, Strife-VE uses them too :)

Share this post


Link to post

DB2 looks for a list of nodebuilder lumps to import:

		// This verifies if the nodebuilder lumps exist in a WAD file
		private bool VerifyNodebuilderLumps(WAD wad, string mapheader)
		{
			bool lumpscomplete = false;
			
			// Find the map header in source
			int srcindex = wad.FindLumpIndex(mapheader);
			if(srcindex > -1)
			{
				// Go for all the map lump names
				lumpscomplete = true;
				foreach(DictionaryEntry ml in config.MapLumpNames)
				{
					// Read lump settings from map config
					bool lumpnodebuild = config.ReadSetting("maplumpnames." + ml.Key + ".nodebuild", false);
					bool lumpallowempty = config.ReadSetting("maplumpnames." + ml.Key + ".allowempty", false);

					// Check if this lump should exist
					if(lumpnodebuild && !lumpallowempty)
					{
						// Find the lump in the source
						if(wad.FindLump(ml.Key.ToString(), srcindex, srcindex + config.MapLumpNames.Count + 2) == null)
						{
							// Missing a lump!
							lumpscomplete = false;
							break;
						}
					}
				}
			}

			return lumpscomplete;
		}
This list is obtained from the config file:
/*
MAP LUMP NAMES
Map lumps are loaded with the map as long as they are right after each other. When the editor
meets a lump which is not defined in this list it will ignore the map if not satisfied.
The order of items defines the order in which lumps will be written to WAD file on save.
To indicate the map header lump, use ~MAP

Legenda:
required = Lump is required to exist.
blindcopy = Lump will be copied along with the map blindly. (useful for lumps Doom Builder doesn't use)
nodebuild = The nodebuilder generates this lump.
allowempty = The nodebuilder is allowed to leave this lump empty.
script = This lump is a text-based script. Specify the filename of the script configuration to use.
*/

doommaplumpnames
{
	~MAP
	{
		required = true;
		blindcopy = true;
		nodebuild = false;
	}
	
	THINGS
	{
		required = true;
		nodebuild = true;
		allowempty = true;
	}
	
	LINEDEFS
	{
		required = true;
		nodebuild = true;
		allowempty = false;
	}
	
	SIDEDEFS
	{
		required = true;
		nodebuild = true;
		allowempty = false;
	}
	
	VERTEXES
	{
		required = true;
		nodebuild = true;
		allowempty = false;
	}
	
	SEGS
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
	
	SSECTORS
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
	
	NODES
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
	
	SECTORS
	{
		required = true;
		nodebuild = true;
		allowempty = false;
	}
	
	REJECT
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
	
	BLOCKMAP
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
}

Share this post


Link to post
Gez said:

As for working around it not calling two different tools, maybe a simple console program that calls glbsp and then glvis on the same file could be created quickly, and using it as the nodebuilder would work...


Would it be possible to have DB2 invoke a .BAT file to call multiple tools during compiling?

Share this post


Link to post
Kaiser said:

Would it be possible to have DB2 invoke a .BAT file to call multiple tools during compiling?

Yes I think so. Might be harder to transmit the error messages (if any) back to the DB2 but otherwise it should work.

Share this post


Link to post

This is absolute garbage, no matter what, Doom Builder 2 refuses to insert the GL nodes after compiling with glbsp. I even tried setting up the maplumpnames setting in the config to include the gl lump names but it fails to save the map when I do that.

How does one even make this work? This is getting frustrating.

Here's my setup:

/*
MAP LUMP NAMES
Map lumps are loaded with the map as long as they are right after each other. When the editor
meets a lump which is not defined in this list it will ignore the map if not satisfied.
The order of items defines the order in which lumps will be written to WAD file on save.
To indicate the map header lump, use ~MAP

Legenda:
required = Lump is required to exist.
blindcopy = Lump will be copied along with the map blindly. (usefull for lumps Doom Builder doesn't use)
nodebuild = The nodebuilder generates this lump.
allowempty = The nodebuilder is allowed to leave this lump empty.
script = This lump is a text-based script. Specify the filename of the script configuration to use.
*/

doommaplumpnames
{
	~MAP
	{
		required = true;
		blindcopy = true;
		nodebuild = false;
	}
	
	THINGS
	{
		required = true;
		nodebuild = true;
		allowempty = true;
	}
	
	LINEDEFS
	{
		required = true;
		nodebuild = true;
		allowempty = false;
	}
	
	SIDEDEFS
	{
		required = true;
		nodebuild = true;
		allowempty = false;
	}
	
	VERTEXES
	{
		required = true;
		nodebuild = true;
		allowempty = false;
	}
	
	SEGS
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
	
	SSECTORS
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
	
	NODES
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
	
	SECTORS
	{
		required = true;
		nodebuild = true;
		allowempty = false;
	}
	
	REJECT
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
	
	BLOCKMAP
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
    
    ~GL_MAP
	{
        blindcopy = true;
		required = false;
		nodebuild = true;
	}
    
    GL_VERT
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
    
    GL_SEGS
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
    
    GL_SSECT
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
    
    GL_NODES
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
    
    GL_PVS
	{
		required = false;
		nodebuild = true;
		allowempty = false;
	}
}
Here's the glbsp config setup:
compilers
{
	// This defines what files a compiler uses
	// The setting named "program" defines what .exe to run
	glbsp
	{
		interface = "NodesCompiler";
		program = "glBSP.exe";
	}
}

// Below are configurations for this nodebuilder. If you want to make your own configurations,
// it is recommended to do so in your own file as this file will be updated each release.

// NOTE: Nodebuilder configuration key names defined here must be unique for all nodebuilders!
// Recommend to start the key name with the name of the compiler, followed by underscore and a specific name.

// The "compiler" setting must refer to an existing compiler (such as defined above), but it
// does not have to be a compiler defined in the same configuration file.

nodebuilders
{
	glbsp_normal
	{
		title = "glBSP - Normal";
		compiler = "glbsp";
		parameters = "-v2 %FI -o %FI";
	}

	glbsp_fast
	{
		title = "glBSP - Fast (no reject)";
		compiler = "glbsp";
		parameters = "-normal -noreject -v5 -factor 1 %FI -o %FO";
	}
}
I really appreciate those who can help me out with this.

Share this post


Link to post
Kaiser said:

This is absolute garbage, no matter what, Doom Builder 2 refuses to insert the GL nodes after compiling with glbsp. I even tried setting up the maplumpnames setting in the config to include the gl lump names but it fails to save the map when I do that.

How does one even make this work? This is getting frustrating.

Here's my setup:

    ~GL_MAP
	{
        blindcopy = true;
		required = false;
		nodebuild = true;
	}

That won't work, ~MAP is a hardcoded thing in DB2. It won't recognize ~GL_MAP in the same way.

		// Map header name in temporary file
		internal const string TEMP_MAP_HEADER = "TEMPMAP";
		internal const string BUILD_MAP_HEADER = "MAP01";
		public const string CONFIG_MAP_HEADER = "~MAP";
					// Get the lump name
					lumpname = ml.Key.ToString();
					if(lumpname == CONFIG_MAP_HEADER) lumpname = mapname;

Share this post


Link to post

Kaiser said:
Doom Builder 2 refuses to insert the GL nodes after compiling with glbsp.

Fixed in the latest revision of GZDoom Builder

Kaiser said:

glbsp_normal
{
title = "glBSP - Normal";
compiler = "glbsp";
parameters = "-v2 %FI -o %FI"; // <- this should be "-v2 %FI -o %FO"
}

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
×