ericw-tools
ericw-tools copied to clipboard
[Feature] _illusionary on any entity to disable collision (like ZHLT's zhlt_noclip)
Allows for stuff like non-solid trains and doors for aesthetic purposes (ex: clouds), without requiring mod support. Also saves clipnodes on non-standard nonsolid entities.
In Q1/Hx2/HL1, this would only generate hull 0 for any brush that isn't a clip brush. In Q2, this wouldn't really be necessary unless making a gigantic map (since contents_mist exists), but would only generate the visual mesh.
The _noclip key is already taken on worldspawn, for something similar but slightly different (https://ericw-tools.readthedocs.io/en/latest/qbsp.html#cmdoption-qbsp-noclip - skips building hull1/2 entirely, bsp won't load in most engines - mostly meant for debugging or to be combined with -wrbrushes.)
Even if this would only be used on real bmodel entities, (func_door, etc.) it should probably be a different key for clarity.
Since this sounds the same as func_detail_illusionary but just for bmodels, maybe _illusionary for the key name?
Would it be OK if the hull0 contents was made empty, same as func_detail_illusionary?
_illusionary is a logical name.
Empty contents would usually be fine (and probably expected), but being able to have a solid hull 0 without hulls 1-3 is sometimes useful as well, particularly in HL for small details to be able to still receive decals without hindering movement. Idk what to call a variant that retains contents though (_pointonly? _onlyhull0?), and iiuc it would work the same as _illusionary in Q2 mode (due to how q2bsp works).
Thought about this a bit more, and was wondering if perhaps a _contents KV that overrides the contents of all of an entity's brushes (except a few special ones, like clip* and origin) might help? So by default, _illusionary would set empty contents, but a HL1 could set -2 to keep zhlt_noclip-style behavior.
As my main use case requires hull 0 to be generated, I'm not too fond of _illusionary.
I considered having a _maxhull you could set to 0 to have the same effect.
I considered having a
_maxhullyou could set to0to have the same effect.
Maybe out of scope of this issue, but perhaps a _onlyhulls with a comma separated list of which hulls to generate? Seeing as some GoldSrc maps would benefit from having only hulls 0, 1, and 3. Not sure what would happen if you omit hull 0 in that list, though.
I forgot about hull 2, this makes a max hull fairly useless.
I'd go for a _skip_hulls as a Flags field. Easier to use and implement.
Omitting hull 0 would have the same effect as a func_detail_illusionary.