Skip to content

Releases: themuffinator/VibeyMapTools

VibeyMapTools 3.1.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 18:21

🧭 Coming from ericw-tools? CLI names and file formats remain familiar; this round focuses on safer failure modes and more predictable tooling.

Features

  • vmt-hub: Renamed from vmt-preview to reflect multi-tool hub focus
  • vmt-hub: HUD overlay with portal/leaf counts, selection info, and lightgrid sample stats
  • vmt-hub: Selection tools (copy face/texture info, focus camera on face/leaf, solo selected texture)
  • vmt-hub: Auto-reload portal/leak visualizations (.prt/.pts/.lin) and BSP outputs for .map sessions
  • vmt-hub: Optional selection ray rendering toggle

Robustness & Enhancements

  • Compiler throughput: Replace detailed VIS's quadratic portal scan with a deterministic indexed priority queue; reuse flood/bitset workspaces; cache QBSP texture, model, and ambient-volume lookups; and make deep output traversals iterative ⚡
  • vmt-light: Batch surface-emitter and lightgrid occlusion rays while preserving authored light order, use dense face-indexed Phong-normal storage, size Embree geometry buffers exactly before upload, and enforce channel/shadow metadata for generated skip-shadow geometry
  • Core I/O: Make BSP and diagnostic-sidecar replacement transactional and permission-preserving, harden bounded memory streams and numeric conversions, and validate LIT, JSON, WAL, entity, parser, and visibility inputs before allocation or traversal 🧯
  • vmt-hub: Share immutable BSP ownership with the renderer instead of copying the map, reuse visibility scratch buffers, pre-index brush-model entities, render unlit special surfaces and extended LMSTYLE/LMSTYLE16 IDs correctly, and reject geometry/lightmap uploads that exceed Qt or OpenGL limits
  • Tests: Copy writable map fixtures into each build tree so normal, sanitizer, and optional-dependency suites no longer race over source-tree outputs on Windows 🧪
  • Core formats: Make BSP/BSPX, PAK/WAD, image, entity, map, and token parsing bounds-checked and transactional, with clearer errors for truncated or malformed input 🧱🛡️
  • vmt-bsp / vmt-vis / vmt-light: Validate numeric ranges, model references, portal state, light data, and output sizes before indexing or serializing
  • vmt-bsputil: Preserve the original input across chained conversions/scales, harden WAD and lightgrid handling, and keep derived paths and BSP versions consistent
  • vmt-maputil: Clarify positional MAPFILE handling, reset per-run state, and report Lua/script failures reliably
  • vmt-bspinfo: Reject unknown command-line switches explicitly and support -- before hyphen-prefixed BSP paths
  • vmt-hub: Harden file watching, reload/debounce, renderer lifecycle, threading, and range checks; fix Windows Qt platform-plugin packaging
  • vmt-hub: Compile .map previews in owned temporary workspaces, preserving map-specific .rad lighting without overwriting sibling BSP/LIT/PRT artifacts (ericw-tools #463)
  • vmt-hub: Bring over upstream lightpreview selection refinements so brush-model clicks respect visibility and entity origins, Escape clears selection, and the open dialog remembers its directory (masking, offsets, workflow)
  • Builds: Make platform scripts source-root aware and fail-fast, improve sanitizer/IPO option handling, support dependency-light DISABLE_TESTS configurations, and report the selected configuration correctly with multi-config generators
  • Builds: Restore the four upstream-tested third-party Git links expected by CMake and .gitmodules, update custom formatters for fmt 12/Clang 20, and make git clone --recursive produce a configure-ready source tree 🔗
  • vmt-light / builds: Remove unfinished -denoise, -stochastic, -incremental, and GPU/OptiX experiments, the nonfunctional embedding API, and the ignored buildgui target; retain the supported Embree, HDR/lit2, and vmt-hub paths ⚠️
  • vmt-light: Remove the undocumented <texture>_norm/<texture>_n lookup so ordinary phong-normal interpolation is deterministic again
  • vmt-light: Add -force_world_units_per_luxel so fast preview builds can override every per-entity _world_units_per_luxel value (ericw-tools #485)
  • vmt-light: Add opt-in -embedsettings to store a versioned, path-sanitized effective-settings manifest in the LIGHTING_SETTINGS BSPX lump for reproducible relighting (ericw-tools #483) 📜
  • Compiler and utility CLIs: Add deferred -werror handling so strict CI runs report warnings as failure only after worker, output, and logging cleanup completes 🛡️
  • vmt-bsputil / vmt-maputil: Close per-run log handles at their public in-process boundary on both success and failure
  • vmt-light: Add deterministic -super/-supersample factors from 1 through 8 while preserving -extra and -extra4 compatibility
  • vmt-light: Give both BSPX lightgrid formats colored, isotropic minlight, with an optional -mingridlight/-minlight_grid override that otherwise inherits the world minimum 💡
  • vmt-light: Batch each lightgrid point's eligible entity and sunlight rays while preserving deterministic light order and byte-identical BSPX output ⚡
  • vmt-vis: Bind resumable state to the exact portal topology, real-leaf mapping, level, and visibility distance; report visible-leaf distribution statistics after detailed VIS
  • vmt-bspinfo: Make potentially large lightmap-atlas/OBJ diagnostics opt-in with -export-lightmap-atlas; ordinary inspection now writes only its JSON sidecar, while atlas export discovers and validates sibling RGB/HDR .lit data
  • Docs: Add source-pinned ericw-tools parity and q3map2 feature decision logs, including the rationale for leaving the ineffective experimental denoiser removed 🔬
  • vmt-light docs: Explain how to reduce discrete _sunlight2 direction steps with -sunsamples/-extra4, including the legacy dome's brightness trade-off (ericw-tools #484)
  • vmt-bsp docs: Document the bounded workarounds and compatibility risks for point entities near filled, expanded detail collision hulls instead of changing established fill defaults globally (ericw-tools #499)

Bug Fixes

  • Release automation: Reject malformed, missing, or VERSION-mismatched tags before starting the build matrix; pin checkout to the validated tag ref and publish successful tag builds directly
  • Cross-platform tests: Replace hardware-sensitive Embree lightgrid byte hashes with semantic and repeatability checks, and support older Apple C++20 standard libraries
  • vmt-vis: Make Quake II PHS generation transactional and repeatable, reject malformed leaf/cluster ranges and truncated compressed rows, and keep -phsonly from consuming its own partially rebuilt data
  • vmt-bsputil: Make --check tolerate and diagnose invalid, cyclic, or extremely deep node trees and malformed face/edge/light-offset/style-array metadata instead of overflowing or indexing outside BSP lumps
  • vmt-maputil: Reject non-finite or out-of-range Lua geometry, ambiguous texture-projection tables, zero plane normals and texture scales, and non-boolean tx2 values; also restore optional Lua builds on MSVC
  • Core / vmt-bsp / vmt-light: Eliminate progress, decompiler, and bounce-pass concurrency races; assign lightmap blocks deterministically in face order for byte-identical output across thread counts; read BSPX HDR samples without unaligned access; and remove the ignored -midsplitsurffraction switch 🧵
  • vmt-vis: Strictly validate PRT1, PRT2, and PRT1-AM counts, windings, endpoints, mappings, and trailing data before allocating or compiling visibility
  • vmt-bspinfo: Validate lightmap-atlas BSPX tables, geometry, offsets, and sample ranges before export; decode HDR samples portably; and support extended LMSTYLE/LMSTYLE16 atlases 🧭
  • vmt-hub: Fix portal overlay color uniforms being sent to the wrong shader
  • Image loading: Honor -filepriority loose when loading Quake II palettes and safely use black when a texture has no visible pixels (ericw-tools #492)
  • Image loading: Support prefix-free loose and PAK texture layouts after the traditional textures/ lookup, including Quake II metadata, while rejecting asset-root traversal and quietly ignoring null BSP texture sentinels (ericw-tools #451)
  • vmt-light: Preserve texture brightness while boosting saturation, fix sun energy with jitter/attenuation keys, reject backside sunlight on phong surfaces, make missing _suntexture values emit nowhere (including lightgrids), use the original Half-Life min/max light scale, and preserve authored switchable-light styles as oldstyle (#401, #486, #491, #496, #470, #475)
  • vmt-light: Repair -bouncedebug and -bouncelightsdebug so they render indirect lighting and bounce emitters instead of black lightmaps (ericw-tools #416)
  • vmt-light: Keep scanning delay-4 local-min lights after a lighting-channel mismatch; accept bare -soft; derive its automatic radius as floor(supersampling / 2) for both legacy and arbitrary...
Read more