Node builder does not want to work from DoomBuilder

This bug happens on some big levels. After attempt to build nodes with ZenNode or zdbsp I got the error:

---------------------------
Doom Builder
---------------------------
The nodebuilder did not build the required structures.
Please check your map for errors or select a different nodebuilder.

Your map will be saved without the nodes.
---------------------------
ОК
---------------------------


But! Through command line both nodebuilders work perfectly! Practically I can build nodes for my level directly from DoomBuilder only with bsp-w32.exe, but its nodes are buggy in some cases. I can send the level to CodeImp directly for reproducing the bug.

DoomBuilder Version 1.68.0385
ZenNode Version 1.2.1
ZDBSP Version 1.8
Doom BSP node builder ver 5.1


Quick Nodebuilder params:
Executable: D:\games\Doom2\Doom Builder\ZenNode.exe
Params: -b- %F -o %F
When to rebuild: Alway rebuild nodes

Output of ZenNode after building through command-line:

D:\games\Doom2\Doom Builder\ZenNode.exe -b- HSPIRIT-Ligth.WAD
ZenNode Version 1.2.1 (c) 1994-2004 Marc Rousseau

Working on: HSPIRIT-Ligth.WAD

 *MAP01   : NODES - 6911/7189 ( 96%)  SEGS - 17162/17497 ( 98%)    4.555 secs
            REJECT - Efficiency:  38.3%/ 0.0%  Sectors:   795     18.088 secs

Saving to HSPIRIT-Ligth.WAD...

1 Level processed in 22.643 seconds - 1 Level needed updating.

D:\games\Doom2\Doom Builder\

Share this post


Link to post

I have added following record into nodebuilders section in DoomBuilder\Parameters.cfg

	deepbsp1
	{
		title = "DeePsea Normal build";
		executable = "deepbsp.exe";
		parameters = ""%F" "%T"";
	}
It works without errors and fast as zdbsp

Share this post


Link to post

I'm surprised no one thought of this before, including myself.

Good one entryway .... :)

Share this post


Link to post

ZDBSP tends to be buggy. It probably doesn't like what you are doing. It has happened to me before.

Share this post


Link to post
doom2day said:

ZDBSP tends to be buggy. It probably doesn't like what you are doing. It has happened to me before.

But it works perfectly from command-line for my wad.

Share this post


Link to post

I'm encountering the same problem with my hell map too; the node builders that came with DB (Zennode, ZDBSP, & BSP-W32) doesn't like it.

My stargate map with 35k sidedefs got its node rebuilt just fine, but when I up the ante and tried to rebuild nodes for my 53k sidedef hell map:

---------------------------
Doom Builder
---------------------------
The nodebuilder did not build the required structures.
Please check your map for errors or select a different nodebuilder.

Your map will be saved without the nodes.
---------------------------
ОК
---------------------------


This error was encountered occasionally at a high enough sidedef count, and occurred more and more frequently as the map became more complex... until one day it consistently gave me this error.

This is really slowing down my mapping effort. 3D mode is rendered a mess without the level nodes, which makes it unusable.

The only way I could see my hell map now is to run it through ZDoom, which automatically rebuit my level's nodes.

Entryway: What commands did you use to operate the nodebuilders? I have basic knowledge of CMD, but not sure how to run a WAD through the nodebuilders with it.

Share this post


Link to post

I'm not sure how to run the nodebuilders externally, instructions would be nice.

I hope Codeimp release a future DB that address this rare problem (nodebuilding and huge levels).

Share this post


Link to post

Doom Marine
Firstly, try to extract files from this archive:
http://prboom-plus.sourceforge.net/doombuilder.zip
into your DoomBuilder folder, start DoomBuilder, press F5 (Configuration), go to the Nodebuilder page, select DeePsea in the profiles list, open your map and try to rebuild the nodes. If it will not work, then put your map in the DoomBuilder folder (with nodebuilders) and try:

zdbsp.exe DV.WAD -o TEST.WAD
or
zdbsp.exe DV.WAD -o TEST.WAD --map=MAP05

TEST.WAD will be WAD with nodes rebuilt by zdbsp.exe

Share this post


Link to post

Fantastic! Your plan A worked without a hitch... Thanks for your help Entryway... I think my map is calling me now...

Share this post


Link to post

Yes I keep silent because I don't feel like playing for helpdesk and there is no logical explanation in this topic that explains the problem. Hence, I cannot fix it either. When I know the cause of this problem, then I may be able to fix it.

Ask youself questions like these:
Have you tried other parameters in DB? The correct parameters for a normal ZenNode build are: %F -o %F
What is this -b- you added? Might be the cause? Did you change anything in any of the configurations?

Share this post


Link to post
CodeImp said:

Yes I keep silent because I don't feel like playing for helpdesk and there is no logical explanation in this topic that explains the problem. Hence, I cannot fix it either. When I know the cause of this problem, then I may be able to fix it.

I can send you test map which can't be compiled from DB directly, but can from command-line. In the evening.

Have you tried other parameters in DB?

Yes. In all cases it does not work. Neither with my parameters, nor with parameters by default.

The correct parameters for a normal ZenNode build are: %F -o %F

Does not work too.

What is this -b- you added? Might be the cause?

D:\games\Doom2\Doom Builder\ZenNode.exe
ZenNode Version 1.2.1 (c) 1994-2004 Marc Rousseau

Usage: ZenNode {-options} filename[.wad] [level{+level}] {-o|x output[.wad]}

     -x+ turn on option   -x- turn off option  √ = default

     -b[c]              √ - Rebuild BLOCKMAP
        c               √   - Compress BLOCKMAP

Did you change anything in any of the configurations?

Only Invert mouse and Filtering.

Share this post


Link to post

Doom Builder does not like an empty or missing BLOCKMAP lump as result from the nodebuilder. But if the same problem occurs with "normal" settings, then there may be something else going on.

Share this post


Link to post
CodeImp said:

Doom Builder does not like an empty or missing BLOCKMAP lump as result from the nodebuilder. But if the same problem occurs with "normal" settings, then there may be something else going on.

Check your PM. Only deepbsp.exe and bsp-w32.exe can build nodes directly from doombuilder for that level

Share this post


Link to post

Try this test map
http://prboom-plus.sourceforge.net/testmap.zip

ZDBSP 1.9 does not want to build nodes for this map even from command line

zdbsp.exe testmap.wad -o tmp.wad
----MAP01----
Unhandled exception. ZDBSP cannot continue.
ZenNode works correctly from the command line
ZenNode.exe testmap.wad -o testmap.wad
ZenNode Version 1.2.1 (c) 1994-2004 Marc Rousseau

Working on: testmap.wad

  MAP01   : BLOCKMAP - * Level too big to create valid BLOCKMAP *  0.012 secs
            NODES -    8/8    (100%)  SEGS -    28/28    (100%)    0.002 secs
            REJECT - Efficiency:   0.0%/ 0.0%  Sectors:     3      0.009 secs

1 Level processed in 0.023 seconds - No Levels needed updating.
43.478261 levels/sec
but does not work directly from DoomBuilder.

deepbsp works without errors from DoomBuilder.

Share this post


Link to post

Yes, I just ran it through Doom Builder in debug mode and built it with ZenNode and normal parameters. The problem is the BLOCKMAP: the nodebuilder can't make a BLOCKMAP because the map is too big (not in number of elements, but the aera used). Doom Builder notices the missing BLOCKMAP lump and will tell you the nodebuilder failed (which is very true and understandable now that we know what causes it). If you really want a map this big, just let the engine or another nodebuilder take care of it, they have tricks that allow for ridiculous large blockmaps.

Share this post


Link to post

Other nodebuilders (such as deepbsp and bsp32) may have techniques that allow for this huge blockamp. If you use deepbsp or bsp32 in DB, then you can use 3D mode, not?

If for some reason you don't want to use those nodebuilders in DB to use 3D mode, then you could try to disable DB checking the blockmap lump by going into the game configuration and changing the "BLOCKMAP" setting in the "maplumpnames" structure. Usually it is set to 4 which means BLOCKMAP is supposed to be generated by the nodebuilder. Set it to 0 and DB will completely ignore this lump (means it will also not be in your WAD file!)

Share this post


Link to post
CodeImp said:

Other nodebuilders (such as deepbsp and bsp32) may have techniques that allow for this huge blockamp. If you use deepbsp or bsp32 in DB, then you can use 3D mode, not?

Yes, it works.

If for some reason you don't want to use those nodebuilders in DB to use 3D mode, then you could try to disable DB checking the blockmap lump by going into the game configuration and changing the "BLOCKMAP" setting in the "maplumpnames" structure. Usually it is set to 4 which means BLOCKMAP is supposed to be generated by the nodebuilder. Set it to 0 and DB will completely ignore this lump (means it will also not be in your WAD file!)

It works too, but I think you should make that behaviour more user friendly.

Share this post


Link to post

I think you should bitch at the authors of the nodebuilders to make them work with huge blockmaps or just choose a different nodebuilder... thats my think.

Share this post


Link to post

IIRC, it is impossible to build correct blockmap for big levels in original doom format. It is impossible because it uses 2-byte offsets. If it is impossible, it should not be built. Most of ports rebuild blockmap if size of lump is greater than 0x10000/2. So I think you can change BLOCKMAP value in maplumpnames to zero for following configs (at least): Boom.cfg, ZDoom*.cfg

Share this post


Link to post

Yes the BLOCKMAP size is limited by the format. There is no such thing as "huge blockmaps".

glBSP always writes a BLOCKMAP lump, even if it overflows (with the assumption that ports will detect the overflowed size and generate their own).

Note prBoom 2.4.5 code does not check for zero size lumps:

if (M_CheckParm("-blockmap") || (count = W_LumpLength(lump)/2) >= 0x10000)
  P_CreateBlockMap();
BTW entryway, the maximum size is 0x10000*2 bytes not 0x10000/2, right?

Share this post


Link to post

Ajapted said:
the maximum size is 0x10000*2 bytes not 0x10000/2, right?

That's what the ZenNode author seems to say, in regard to the Doom map format. The standard engine, though, can only handle up to 64 KB (Venetian blinds crashes will occur at certain locations of the level if it's bigger).

Share this post


Link to post

To make a correction: the latest glBSP, version 2.20, will write an empty lump if the BLOCKMAP overflows. I had forgotten about that.

Looking at my code now, it doesn't seem right. It will flag an overflow for 0x10000 bytes or more (and output an empty lump), even though PrBoom and other ports support upto 0x20000 in size. Hmmmm...

Share this post


Link to post

Note prBoom 2.4.5 code does not check for zero size lumps:

The latest two versions of PrBoom (2.4.6+) and PrBoom-Plus (2.4.6.1+) do it:

if (M_CheckParm("-blockmap") ||
   W_LumpLength(lump)<8 || (count = W_LumpLength(lump)/2) >= 0x10000)
  P_CreateBlockMap();

BTW entryway, the maximum size is 0x10000*2 bytes not 0x10000/2, right?

oh, sorry :)

Share this post


Link to post

So, DoomBuilder behavior is at least not friendly to users in this point IMO. Many of maps are too large for BLOCKMAP, but DB likes only deepbsp and its false BLOCKMAP which is not used in ports. Also deepbsp is not included in DoomBuilder, hence users cannot work with huge levels at all (in a configuration by default)

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