|P2ST is a set of level compilers written by Uncle Mike (Xash3D coder) in 2017-2019.
P2ST was written on top of the classic QBSP compiler from HLSDK to avoid generational layering of bugs of ZHLT compiler supplemented with low performance and hard to read macros formatting of VHLT and half-baked solutions of both.
The priorities of writing P2ST compilers were:
1. Being faster than VHLT
2. Creating effective BSP tree (recursion depth, overall speed)
3. Clean lightmaps without artifacts (noise, seams, etc.)
4. Storing additional info for Paranoia 2
5. Compiling Quake maps that VHLT's CSG can't handle due to some specific errors in those maps
6. Unlimited number of planes while staying compatible
By default P2ST produce maps in BSP30 format supported by many source ports of Quake. P2ST can correctly handle Quake-style light sources with limited light radius. The compiler can handle some pretty heavy load, it was tested on maps from Arcane Dimensions including The Forgotten Sepulcher. Uncle Mike claim it to be nearly 50% more effective at saving various mapping limits than TyrUtils.
Although not all features of the compiler can be utilized by Quake engines (custom face extents, custom lightmap scale, world space luxels supported by Xash3D) there are still cross-engine features:
- Reads maps in Quake 1 2 3 format
- Bezier Curves from Quake 3(Uncle Mike uses Quark which got a Bezier tool). At compile time Beziers turn into regular polygons. Example ".map"
- dirtmapping from TyrUtils
- misc_external_map from TyrUtils
- misc_model: same as above but recursive. A certain ".map" can be referenced on another map as misc_model prefab and at compile time the prefab itself, its child prefabs, their child prefabs etc. will compile and will be put into your map. You can edit one external prefab and then it will update on all your maps after you compile them. Prefab maps can contain func_detail, misc_model, env_static, Beziers. World brushes and other entities will be ignored.
- misc_model in ASE format. Specifying a model in HL format turns misc_model into env_static.
Supported env_static parameters:
spawnflags 4 (don't cast shadow)
spawnflags 8 (no vertex lighting)
zhlt_selfshadow 0/1 (for vertex lighting)
zhlt_nosmooth (for broken normals or artistic reason)
zhlt_backfrac (fix light leaks if needed)
- zhlt_nocsg 0/1 (global or for a particular func_group or other entity) disables CSG like in Quake 3. Brushes don't cut each other and void-facing polygons stay.
More func_group parameters:
_dirt to allow/deny dirtmapping on particular face
_shadow to be TyrUtils compatible
- zhlt_precisionclip 0/1 (global or per entity) enables Quake-style creation of collision mesh. Can be useful if you stuck in some complex geometry like caves. Exhaust clipnode limits 4 times faster.
- skybox does not illuminate if there's no other lights
- func_detail_wall, func_detail_fence, func_detail_illusionary, SKIP on solids turns into NULL - from TyrUtils
More entity parameters:
- zhlt_vertexlight 0/1 for any entity
- zhlt_lightflags 2 (brush entities cast shadows)
- zhlt_invisible, zhlt_noclip
- zhlt_detaillevel (func_detail priority level, at 0 it becomes func_group)
- zhlt_usestyle (directly assign lightstyle in some controversial cases)
Command line parameters:
-quake (adjust gamma, dscale, sky for Quake-styled lighting)
-merge 0/1/2 (how to merge adjacent faces of the same plane: default 1, advanced 2)
-balance to mimic VHLT-styled lighting instead of QBSP/ZHLT
Best results can be achieved when compilers are put in root directory of the game, i.e. "Quake" to see all the resources below.
(P2ST - Paranoia 2: Savior Tools)
P2ST ver. 0.98
patch for VIS