Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 5, 2022 1:59:13 GMT -5
It's finally done. I have mentioned several times on this board that I am making a new nodebuilder, and now I am releasing it into the world.
Why a new nodebuilder? I wanted a nodebuilder that is fast, yet has features for pushing maps under vanilla limits (including visplanes), has those cool custom effects from ZokumBSP (faster scrollers), but respects historically used advanced vanilla effects like self-referencing sectors, cares about Heretic/Hexen support no less than for a Doom, etc.
Having considered to fork other nodebuilders, I finally reached a conclusion that I will write a new one. But not entirely from scratch, I've ported (as in translated from one programming language to another) code from various other nodebuilders where I found it to be good (as in performace, features) or readable: blockmap computation code from ZDBSP, reject computation code from Zennode, and BSP code for building nodes (except I also took various performance and accuracy improvements from other nodebuilders, most notably AJ-BSP, Zennode, ZokumBSP). On top of that, I wrote a lot of new code, which accounts for: multi-threading (use threads to build blockmap, reject and bsp tree in parallel to each other), improved visplane reduction heuristics (new optional partition selectional algorithm, a refinement of Killough's one), automatic preservation of self-referencing sectors when dropping segs from "invisible linedefs" to decrease the size of various lumps, making reject account for self-referencing sector effects (monsters can see, attack, hear a player), etc.
In order to accomodate the needs of mapping both for strict vanilla (runs in original/Chocolate) and limit-removing/Boom mapping, you can supply options to the program (it's console like other nodebuilders). When downloading releases from github, you'll find an archive for GNU/Linux and Windows 32-bit and 64-bit platforms. The Windows ones have a configuration file for DoomBuilder-family of doom editors (probably not the first DoomBuilder, but DoomBuilder 2, X, GzDoomBuilder-BugFix and, I think, UltimateDoomBuilder or whatever is called shall be supported). There are 4 variants included in that cfg file:
1. vigilantbsp - Default cmd line equivalent: vigilantbsp %FI -o %FO
Just default options. Will try 36 offsets to pick smallest blockmap (like ZokumBSP does) using the amount of cores avaiable on your computer, using non-contrived partition selection algorithm that works fast enough on big maps and gives so-so but acceptable results for vanilla maps (until you are close to visplane limits), and builds reject. No manual instructions to preserve self-referencing sector effects shall be necessary.
This default exists because by default, you don't have a separate selection for vanilla configuration and limit-removing configuration in your DoomBuilder. Thus this can serve as universal. Also consider the next option.
2. vigilantbsp - Zero reject cmd line equivalent: vigilantbsp -rz %FI -o %FO
Same as default, but reject is zero. Proper reject takes the longest time to build usually out of blockmap, nodes and reject. This is an alternative universal option.
3. vigilantbsp - Target vanilla (Reduce visplanes etc.) cmd line equivalent: vigilantbsp -bo=3e=1 -na=2 %FI -o %FO
This is optimized for vanilla. Will try 65536 offsets (but often way less) to pick blockmap that will work in vanilla, but not necessary the smallest, just the one that works. Partition selection is the best one for vanilla (reduce visplanes the best it can), but will run hella slow on limit-removing maps such as one in Water Spirit for example.
4. vigilantbsp - Fastest (maelstrom, zero reject) cmd line equivalent: vigilantbsp -na=3 -rz %FI -o %FO
This is optimized for speed, when you have a very complex map, making edits to it and need to save it fast. Like, if you are designing wads like Water Spirit or even worse. The quality of partition selection here is not good for probably even normal vanilla maps not pushing vanilla limits. Reject is also absent because currently it is the hardest to speed optimize.
The full list of option is avaiable in documentation. I will probably elaborate more on visplane reduction and self-referencing sector preservation later (and the current bugs/shortcomings in those algorithms) in this thread later.
P.S. This nodebuilder works best on multi-core computers, especially with the ones that have 4 or more I think. I didn't test it on computers with less cores.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 5, 2022 2:48:08 GMT -5
Damn, the OP ended being intimidating and not at all informative. Anyway, I'm here to declare that I'm going to bring an end to "self-referencing sectors do not work reliably". That shit must have started with Zennode, and must I say there are wrong things written on this page: www.mrousseau.org/programs/ZenNode/README.htmlGraphs don't really interfere with self-referencing sectors. The underlying algorithm to build reject in Zennode "hides" self-referencing sectors well before the graphs are applied or even when they are not. You can still make monsters properly work in self-referencing sectors (apart from not being clipped by deep water, etc. which is inherent vanilla engine limitation) - see, hear, attack the player - if you instruct it to build zero reject. In VigilantBSP this is not a problem, although you might get less efficient reject (better safe than sorry approach) with default options. Expect bugs if you have crossing lines, unclosed sectors and whatever fucked up shit though. Another thing that may have been written wrong is about "ensure subsectors have only 1 sector" being necessary to support self-referencing sectors. It might be the other way around. Although I don't place multiple sectors in subsector unless a special tag (>=900) was used on sector - that is, I mimic the way BSP nodebuilder behaves. Also, I forgot to say that I also implemented an option to support "deep nodes" format output for those limit-removing maps that might need it, and that support for other nodes format (especially xnode) is planned. Also, currently I don't do GL nodes and don't consider them a priority, but an option that might be implemented.
|
|
MegaPancakeStrategist
You're trying to say you like DOS better than me, right?
IF YOU ARE READING THIS YOUR MAP NEEDS MORE LIGHTING VARIATION
Posts: 1,011
|
Post by MegaPancakeStrategist on Apr 5, 2022 4:26:41 GMT -5
Ayyy congrats on the release!
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 5, 2022 4:58:56 GMT -5
Thank you, MegaPancakeStrategist! I was in kind of a race developing it since January, 2022. Could have released a month earlier though were it not for war. Anyway, on the "advanced visplane reduction", it's still Killough's algorithm ( soulsphere.org/mirrors/www.rome.ro/lee_killough/editing/visplane.shtml ) at core, but with following modifications: 1. sectors with identical properties are considered to belong to one "sector equivalency" class except when they are tagged or have a special. When evaluating a partition line, instead of balancing the number of sectors on each side like in Killough's algorithm the number of sector equivalencies is balanced instead 2. if partition line has multiple sector equivalency class so they are on both sides, it is further penalized (cost increased) but only if more than one sector equivalency is on both sides. That's because engine can merge compatible visplanes on some circumstances 3. I implemented identification of null space from the normal space to eliminate it from node line length in following computation: Dunno why Lee Killough said that. It was not easy, and unfortunately sometimes fails - because I'm not that good at geometry thingy, but nonetheless, I implemented it. Would have been a lot easier if I had a time machine and could tell Lee Killough the idea about tracing the partition line through the map to see where it enters/exits it based on 1-sided linedefs only. This part still needs improvements going forward, of course, but should already work often enough to make a difference. 4. In the implementation of above heuristic by Killough, the sum of lengths of all segs included overlaps. The fix was easy enough for that compared to null space identification. 5. Finally, when node contains only 1 non-convex sector, it is split using a seg splitting algorithm similar to the default one with a penalty cost for splitting a seg doubled. I've noticed that how a single non-convex sector is partitioned doesn't affect the visplanes, so it is best to do some seg split minimization here. VigilantBSP offers original Lee Killough's algorithm as well, if it be necessary, but also works faster (than in BSP v5.2) due to optimization and with better accuracy (seg angles and other properties are recomputed on splitting).
|
|
nnn✓ork
Doomer
Dr. Noisystein
Posts: 719
|
Post by nnn✓ork on Apr 5, 2022 11:28:11 GMT -5
Ooo! I'm gonna have to make some maps and take this for a spin.
|
|
Lobo
Doomer
Posts: 594
|
Post by Lobo on Apr 5, 2022 14:35:54 GMT -5
Congratulations chief!
|
|
|
Post by TheFantasticFungiFan on Apr 5, 2022 15:05:49 GMT -5
Congratulations Vigilante! I'm no mapmaker, but I know that it must have taken a lot of time and effort, as well as talent, to produce something like this. Thank you for sharing it with the community.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 5, 2022 17:34:28 GMT -5
Whoa, a new nodebuilder! And it has a Linux version on Github! Awesome! Great job, Vigilante!
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 5, 2022 18:00:16 GMT -5
I honestly don't know what a nodebuilder is, but judging by the the amount of words and wathever mathematic language you've used.. i guess that it might be something very important.
I won't congratulate you on the release as i'm saving that to pinpoint-ely annoy someone in the future - as i find that particular sentence far more insulting than anything (not a particular jab at anyone, that's just my schizoid perception).
So for now have my sincere thanks (in advance, so when my future self properly understands the significance of this contribution; you'll already have this small token of appreciation) and let me blow you a kiss dressed in FIREBLU2 lipstick directed at your heart, my dear. Catch it while is fresh
|
|
kvsari
Doomer
I like mapping.
Posts: 326
|
Post by kvsari on Apr 5, 2022 20:06:24 GMT -5
Congratulations on the release Vigilante!
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 5, 2022 20:40:09 GMT -5
I honestly don't know what a nodebuilder is, but judging by the the amount of words and wathever mathematic language you've used.. i guess that it might be something very important. I won't congratulate you on the release as i'm saving that to pinpoint- ely annoy someone in the future - as i find that particular sentence far more insulting than anything (not a particular jab at anyone, that's just my schizoid perception). So for now have my sincere thanks (in advance, so when my future self properly understands the significance of this contribution; you'll already have this small token of appreciation) and let me blow you a kiss dressed in FIREBLU2 lipstick directed at your heart, my dear. Catch it while is freshHere you go. doomwiki.org/wiki/Node_builder
|
|
Gokuma
You're trying to say you like DOS better than me, right?
Resident DB English Teacher
Posts: 1,208
|
Post by Gokuma on Apr 5, 2022 20:56:50 GMT -5
Awesome! Great work Vigilante.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 7, 2022 11:15:14 GMT -5
Great job, and very interesting - I map exclusively for vanilla (doom2.exe) and only recently started using ZokumBSP because I have a few maps that I just couldn't seem to get under the seg & visplane limits. Switching to ZokumBSP did help a lot, but if it turns out you have developed a tool that will allow me to cram even more pointless detail and smoothed corners into my vanilla maps, I will be very happy edit: Tried it with the "target vanilla" parameters on a troublesome map, but the number of visplanes in high-stress areas of said map didn't differ from the same level built with ZokumBSP as far as I could tell after a quick dual stress-test. I have a question regarding segs though; the documentation states that you can set the same tag as ZokumBSP on linedefs (998) to have them not rendered. However, when I built the map mentioned above (using "target vanilla" parameters from the command line) I got a drastic increase in rendered segs on the map (about 20+ more than with ZokumBSP) leading me to beleive that the 998 tagged lines were not rendered invisible after all (it's a section of a map with a lot of different sky heights). Do I have to set another parameter switch to achieve this in addition to the ones specified in "target vanilla"?
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 8, 2022 13:22:28 GMT -5
Another thing that will be very interesting to experiment with once I get the hang of it, is the ability to choose to ignore either front- or back sides of a linefef for rendering - I'm curious to see if and how this will affect the number of drawn segs - IMO the biggest achilles of doom2.exe mapping.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 8, 2022 14:36:35 GMT -5
Tried it with the "target vanilla" parameters on a troublesome map, but the number of visplanes in high-stress areas of said map didn't differ from the same level built with ZokumBSP as far as I could tell after a quick dual stress-test. That's sad. But of course, the algorithms in ZokumBSP and VigilantBSP are really different, so one or the other could win on some maps. One thing that ZokumBSP clearly wins over mine is producing less deep BSP trees. In fact, I have a map where choosing visplane reductions over default in VigilantBSP produces deeper BSP tree, but ZokumBSP, on the other hand, produces less deep tree than with plain seg reduction. A lot of hard work that went into ZokumBSP is hard to replicate: I have trouble reading its code, there are huge swaths of commented code, unclear names or logic, etc. Even Zennode's was already hard to understand, but it seems to have gotten even more cryptic in ZokumBSP. A shame, cause I would really like to understand its depth reduction and multi-tree algorithms. I tried to alter my "advanced visplane reduction" to produce less depth, segs etc. but generally make equally good picks as in balancing sectors. However, while this was possible to achieve, it sometimes made some hard-hit areas have worse visplane counts, so I discarded such experiments as of yet. They might work as a basis of some partial "multi-tree" fuckery later (I would try to make search space much smaller though, so it would be practical to use on real maps), but that kind of algo will take quite some time to implement. I have a question regarding segs though; the documentation states that you can set the same tag as ZokumBSP on linedefs (998) to have them not rendered. However, when I built the map mentioned above (using "target vanilla" parameters from the command line) I got a drastic increase in rendered segs on the map (about 20+ more than with ZokumBSP) leading me to beleive that the 998 tagged lines were not rendered invisible after all (it's a section of a map with a lot of different sky heights). Do I have to set another parameter switch to achieve this in addition to the ones specified in "target vanilla"? No, the parameter should have been respected. You can try passing "-v" parameter and redirect console output to file and verify that it contains output: Linedef <number> will not be rendered because it was either tagged so (tag 998) or assigned an action with numeric code 1086. What really happened, is that algorithm in VigilantBSP produced more seg splits. Significant in this case... Try to use "-ni=2" then, although similar effect can be tried in ZokumBSP with "-ni", and he will probably get better results there too. However, the effect this has on visplane count is not predictable, sometimes culled segs may have been better partition picks or something (I have yet to understand how, but this was observed on a map I'm testing it most of the time). Basically, nodebuilders initially map all 1-sided lines to 1 seg, all 2-sided lines to 2 segs, but then they get split when necessary in process to produce the final BSP tree. That is, of course, when tags or heuristic to skip seg creation are not used. Another thing that will be very interesting to experiment with once I get the hang of it, is the ability to choose to ignore either front- or back sides of a linefef for rendering - I'm curious to see if and how this will affect the number of drawn segs - IMO the biggest achilles of doom2.exe mapping. That functionality originated from ZokumBSP as well. It has an effect on making only 1 seg be produced from 2-sided line initially. It still can be split further in process. The effect will probably differ from complete omission in that one side will get rendered when it is supposed to be visible (depending on angle of the viewer). Another side-effect is that since a seg will exist, the line will be considered a partition candidate, which means nodes will be built differently from the case of not rendering it all, and more similar to the case when the line didn't get any special treatment at all, but you'll get fewer segs overall and fewer drawsegs when looking from particular angle than with that latter case. I'm considering to maybe create some experimental releases targeted towards particular use-cases and user requests (i.e. until the modifications can be confirmed to be definite, and not circumstantial improvement), but that of course would require some sort of cooperation, like me getting maps via pm or something. Meanwhile, you can try to use a different factor (-nf=<number> parameter) to see if result gets better at values lesser or greater than default value of nf=17.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 8, 2022 14:44:27 GMT -5
To me, one of the motivations to make VigilantBSP was that ZokumBSP was cool, but started to break self-referencing sectors with default settings in newer versions, then in newer versions still, I couldn't even figure out which parameters to pass to it anymore so it won't break them. All the while I also wanted to use its multi-tree functionality, which initially got faster, but then also started to get broken from optimizations. That was freaking 2 years ago btw (zokumbsp issues on github links): github.com/zokum-no/zokumbsp/issues/20github.com/zokum-no/zokumbsp/issues/19I am, however, very interested in making vanilla maps push the limits further with my nodebuilder. It is just not an easy task.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 9, 2022 3:53:57 GMT -5
Yeah, self-referencing sectors in ZokumBSP is a head-scratcher. My "workaround" is that I rarely use them, and if I have monsters in them I make sure those monsters are alerted to the player via sound/dummy secors off-map so they at least move out of said sectors and then attack. Not an optimal solution, though. And it's good to hear you're also interested in squeezing more mileage out of vanilla! Keep up the good work
|
|
nnn✓ork
Doomer
Dr. Noisystein
Posts: 719
|
Post by nnn✓ork on Apr 16, 2022 17:38:28 GMT -5
bites lips...
Someone's nodebuilder is going to be defiled soon.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 16, 2022 23:44:16 GMT -5
nnn✓ork Is this a map o_O?! At first I thought it was just a cheerful drawing, a bit disturbing with mousenises going through a cheek and an eye. Looks like a source of potential trouble for nodebuilder indeed.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 23, 2022 12:33:07 GMT -5
Ok, I will expand upon this tomorrow, but, VigilantBSP got updated to v0.69. There I fixed a few bugs: - When I implemented speed-up scrollers (like ZokumBSP does) in VigilantBSP, I forgot to also omit the dummy linedefs which are created for this purpose (ZokumBSP also does it this way) from blockmap and nodes builder. This new release fixes this - An option that might help @uncle is implemented, and the default already set to apply what seems to be the best choice. I am referring to "secondary score" option, this multiscoring is also what Zennode and ZokumBSP use as opposed to a single integer score of BSP nodebuilder. Basically, some partitions can score similarly on some single parameter but you can measure additional scores (establish the priority as well) to identify the best choice between the last few good otherwise partition picks. This should allow to get the same visplane count with fewer segs or maybe sometimes tree depth, although it's hard to guarantee actually. - I found a bug in reject that also applies to Zennode and ZokumBSP, and a bug in blockmap that was solely mine and only applies to VigilantBSP v0.67a. Fixed it in VigilantBSP v0.69a. It is related to infinite ocean below - Some other stuff that doesn't need to be mentioned perhaps, read the changelog, it's not big. Infinite ocean effect: I have been informed that 4chan finally caught up with the existence of my nodebuilder, and tried to see if this effect can be achieved with what we have already since BSP nodebuilder. doomshack.org/uploads/infocean.zipWorks in vanilla (only!), based off: www.doomworld.com/forum/topic/94606-horizon-effect-in-vanilla-only/Also, there are whole three wads included, there is not much to see besides purely having this damn effect in vanilla, but from nodebuilding perspective, infocean_crash.wad brings down ZokumBSP 1.0.11 (and the current trunk, I presume), Zennode 1.2.1 and old VigilantBSP 0.67a. When loaded in GzDoomBuilderBugFix, the first two also freeze it, meaning that if you had map editor crash on you before, it might sometimes be the fault of nodebuilder and not editor. VigilantBSP (before the fix) just caused GzDoomBuilderBugFix to print a error about nodebuilder failure that also included information is quite useful to programmer btw. Anyway, the bug was fixed in this VigilantBSP 0.69a release, whereas ZokumBSP even still has, I think, in its development version. Remember, that I used (translated from C++ to Go) reject code from ZokumBSP (Zennode's with just 1 bug fixed) for VigilantBSP as a base for reject builder, so: github.com/zokum-no/zokumbsp/blob/master/src/zokumbsp/zenreject.cppin function bool CreateREJECT ( DoomLevel *level, const sRejectOptions &options, const sBlockMapOptions &blockMapOptions) we have // Initialize globals used to test line pairs testLines = new sSolidLine * [ noSolidLines ]; and the problem is, noSolidLines (number of solid lines) is not enough because in function bool FindInterveningLines ( sLineSet *set ) at line set->lines [ lineCount ] = NULL; where set->lines was sliced from testLines, and lineCount is the number of lines included in the slice, we MIGHT end up accessing beyond the end of testLines under certain circumstances (which are provided in infocean_crash.wad), overriding whatever data followed it (hence the crash, or other unpredictable behavior). The language I wrote VigilantBSP doesn't tolerate out-of-bounds array access and forces an error exit when the access was supposed to happen, whereas in C++ everything goes, so the crash may end up due to how it fucked up something else. The fix I chose to is trivial, to extend testLines size by one more cell.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 23, 2022 12:40:27 GMT -5
Anyway, writing text takes a lot of time (even more would be need to make it readable). Plus I've not rebuilt ZokumBSP with the latest changes to be 100% sure the development version is affected, but if it is, an issue on github is probably worth opening there.
Damn github also sucks with it sending an e-mail with verification code on every login attempt. Can't just type username/password to go onto website. Good thing pushing changes from local repo onto github doesn't require it, as I do it from command line using a generated access token.
I still have not written some things about VigilantBSP I have wanted to write, specifically about adjustments that distinguish "advanced visplane reduction" from "Lee Killough's algorithm for BSP nodebuilder". The former is built on the latter using Lee Killough's unimplemented ideas once again, and they have yet bugs that affect accuracy (could use some help over there), but fuck I hate writing text.
|
|
xeepeep
Banned
Forever
Posts: 2,338
|
Post by xeepeep on Apr 23, 2022 14:33:10 GMT -5
It's called bzzrak's horizon effect, thank you very much. It's a part of the holy trinity along with the linguortal and mikoportal. Congrats on adding support for the coolest vanilla hack!
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Apr 23, 2022 22:24:11 GMT -5
Excerpt from changelog about v0.67a -> v0.69a :
Breakdown: 1. Use secondary score for partition selection.
Zennode/ZokumBSP family of nodebuilders - unlike BSP nodebuilder - use a more fine-grained partition scoring when evaluating a partition candidate (usually, a seg) for algorithms other than fast/seg split minimization. You can instruct VigilantBSP to do the same, currently only in advanced visplane reduction mode. Although Killough's visplane reduction could be augmented to use it as well, I consider Killough's algo as a backup when you want visplane reduction but want a faster performing (even if inaccurate) algorithm.
Since having multiple scores produces some ambiguity on what could be picked, you can prioritize minimizing seg splits (for lower seg count) or subsectors (for depth reduction), or both equally (now default, for both lower seg count and lower depth than without using secondary score), while the results about visplane counts should be roughly the same.
Also, the option that should be producing the best results is already enabled by default. You can choose to disable it entirely (and get the same results as VigilantBSP v0.67a would give you, in case a regression happened), or experiment by trying other values.
2. Fixed bug: dummy linedefs created by nodebuilder to implement fast/remote scrolling shall not be added to blockmap and bsp tree
Support for fast/remote scrolling via the same mechanism as ZokumBSP 1.0.11 (and some earlier versions) was added to VigilantBSP in the initial release already, but I forgot to take the same precautions as found in ZokumBSP to make all the dummy linedefs needed to implement effect to be omitted from blockmap and bsp tree (nodes). They're really not needed there for effect to work, and best removed to keep blockmap and bsp tree minimal for the same results.
3. Debug parameters: --cpuprofile <file>, --memprofile <file>
They are only documented in accompanying text file, but do not show when you launch VigilantBSP from command line with no parameters. What they do, is write additional files that show which function calls within program code take what time or how much memory is allocated by them. This data can be analyzed by a person with programming skills, and is more informative when a map is also provided. Using this data, a programmer can identify what makes the nodebuilder slow or how to lower its memory consumption.
4. Fixed bug: panic in blockmap builder due to linedef with max index was missing from bounds computation
A stupid bug was fixed. When deciding what blockmap covers entire map sans non-collideable linedefs, linedefs with maximum index was not included in the computation. This could cause nodebuilder to crash if it was then to be added to blockmap as it would be outside "blockmap boundaries".
5. Fixed bug: panic in reject builder due to out-of-bounds access to array of solid (1-sided) lines in certain circumstances
This bug was inherited from Zennode family of nodebuilders and causes crashes (or in case Zennode/ZokumBSP working from map editor, a map editor freeze) when those nodebuilders - or previous version of VigilantBSP - build reject under certain circumstances. Workaround for nodebuilders (versions) that have not (yet) fixed this bug is to build zero reject.
6. A good thing not mentioned in changelog: before those bugs were fixed, when VigilantBSP crashed but was called from GzDoomBuilder, the latter managed to pass the error message printed by VigilantBSP along and display it to the user, so user could see that: 1) nodebuilder failed 2) capture screenshot to file a bug report containing meaningful (to programmer) information about error, including its exact location . Whereas Zennode and ZokumBSP just cause editor to freeze on crash.
That behavior on crash is not my cunning, though, just VigilantBSP was written in Go whereas Zennode and ZokumBSP in C++. Both are compiled languages, but the former is a bit easier to program in (though similar algorithm could work faster in C++), whereas the latter allows better performance in theory ("close to metal") but more bugs can creep up, and more ceremony about memory management needed during the "implementing new features" phase (which can be distracting), hence my choice.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on May 4, 2022 0:10:17 GMT -5
I discovered that I am full of shit and will need to release a new version soon: my nodebuilder doesn't recognise ExMy levels unless y is TWO digits. I found out two digits in y are sometimes allowed (I don't recall where, maybe in MBF21 docs or some port that implements MBF21), but the error in writing code to allow it resulted in _requiring_ it. This affects all versions of VigilantBSP (both initial v0.67 and v0.69) as of this writing. The fix in source code is easy (one fucking line in source), but packaging for all platforms is not yet streamlines, hence why it is "soon" rather than "today". How was discovered: in process of writing RMB options file (*.rej) parser and testing it. EDIT: I've sent code to github, but not yet built a release. There is an issue with 32-bit exe speed, which happens when I built in on Debian but not if I build on Windows. This, of course, makes it only more contrived to package a release for every platform, but I am not going to deviate from that standard, just you'll have to wait a bit more. Meanwhile, technical folks can build it from source, main branch is good up to and including github.com/VigilantDoomer/vigilantbsp/commit/d493d84193b35de876257553ba7c4c2e4fe6cda0.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on May 5, 2022 3:40:06 GMT -5
The version 0.72a has arrived.
There were changes in advanced visplane reduction algorithm that might alter the results. New priority option (that replaces secondary score) is effective only when it is selected, and you now can try either split minimization or depth reduction, which although far call from ZokumBSP efficiency at reducing depth, might work better than what was done by VigilantBSP hitherto. Which exactly option will perform better depends on the map, although I have my suspicion that when depth reduction gives worse results it's because of errors in detecting which parts hit the void when tracing partition lines that just happened to accumulate more on that specific map.
And yes, making levels for Doom 1 and Heretic should finally work as intended.
|
|