itendswithtens / vertalert Goto Github PK
View Code? Open in Web Editor NEWFind, display, and optionally round floating point plane coordinates in Source engine VMF files.
Home Page: http://www.gyroshot.com/vertalert.htm
License: MIT License
Find, display, and optionally round floating point plane coordinates in Source engine VMF files.
Home Page: http://www.gyroshot.com/vertalert.htm
License: MIT License
--VertAlert 1.0.0-- Find, display, and optionally round floating point plane coordinates in Source engine .vmf files. Standalone executables have no dependencies, Python script requires either Python 2.7 or 3.3. Supports Windows, Linux, and OS X. Latest release hosted at http://www.gyroshot.com/vertalert.htm Comments and questions can be sent by email to [email protected] or via Twitter to @ItEndsWithTens. --Usage-- The standalone executables and Python script share the same parameters: vertalert [-h] [-f] [-fn FIXNAME] [-t THRESH] [-sl SNAPLO] [-sh SNAPHI] input -h, --help Shows usage information. -f, --fix Writes out a new .vmf with rounded coordinates. Will overwrite existing output file without prompting. If you use this flag, please be careful to rename the resulting file before building cubemaps; not only do cubemaps break if the filename changes after the fact, but you may not be able to build them at all if the filename is too long. -fn, --fixname The filename for use with --fix. The default is to append _VERTALERT to the end of the input filename, before the extension. -t, --thresh Threshold between snaplo and snaphi. A setting of 0 will display all float coordinates, effectively disabling rounding. Default snaplo * 0.2. -sl, --snaplo Coordinates with deviations less than thresh will be rounded to the nearest multiple of this value; said multiple also serves as the basis for calculating a coordinate's deviation. Default 1. -sh, --snaphi Coordinates with deviations equal to or greater than thresh will be rounded to the nearest multiple of this value. Default None. --Tech notes-- VertAlert currently uses a very primitive means of examining the .vmf file, and as a side effect it only looks through VisGroups that you've enabled. The critic in me notes that this is born of my laziness, but I try to think of it as helping you narrow down the source of your problems, and lets you focus on fixing one area at a time. If the --fix flag is specified, and you've used a large enough threshold, VertAlert will use the so-called "Banker's Rounding", where values of exactly 0.5 will be rounded to the even number. If you'd rather use something else, you'll need to modify the Python script. When not using snaphi, brushes whose max deviation is less than thresh will have their float coordinates rounded, while brushes with even one coordinate equal to or greater than thresh will be left completely untouched. If you are using snaphi, on the other hand, coordinates are treated individually, and a given brush might have some rounded to snaplo and some to snaphi, depending on their distance from snaplo. The test map test_snaphi was created by using the spike tool to create an eight-sided spike measuring 64x64x64. Scaling the result down to 32x32x32 produces a spike whose corner vertices (northeast, southwest, etc.) land at exactly 0.5 units between one grid line and the next. Duplicate the spike, then move the whole group slightly. Move the group back where it was, save, close, and reopen the file, and you should get an invalid solids error. Run VertAlert on the file, though, and those spikes should be corrected, allowing the vmf to open in Hammer without a problem. --Hammer setup-- Through use of the --fix and --fixname options, the standalone version of this tool can be easily integrated with your Hammer compile options. Bring up the Run Map dialog in Hammer with F9, then click Edit next to the drop-down list of Configurations. Highlight Default, for the sake of this example, and click Copy. Provide a new name, I'll use "VertAlert (Default)" to demonstrate. Close the Run Map Configurations dialog box, then choose the new configuration from the list. Click New to be given a blank command, then hit Move Up until it's all the way at the top. Now, with it selected, use the right hand pane to set Command to point to the VertAlert executable, wherever you placed it. Next, set Parameters to $path\$file.$ext --fix so VertAlert will produce a new .vmf with all the problematic coordinates rounded. Check the box labeled "Ensure file post-exists:", and set its value to $path\$file_VERTALERT.vmf After that, it's simply a matter of going through each command (bsp, light, rad, Copy File, game) and replacing each instance of $path\$file with the alternative $path\$file_VERTALERT (though be careful with Copy File, you don't want to accidentally delete the .bsp file extension). Once finished, the program should be transparent. You work on the original VMF, the toolchain runs VertAlert to produce an altered file, compiles that instead, and launches the modified version for you. The original map file, and your original compile settings, remain untouched, and you can easily switch back to compiling things as usual. --Background-- My original reason for developing VertAlert is moot, as it turns out. The initial motivation was the tendency of Hammer to occasionally throw some brush vertices off the grid ever so slightly upon opening a map, suggesting some sort of problem. That phenomenon is the result of the fact that the .vmf file format, in contrast to the older .rmf format, does not store actual vertices for the brushes it contains. Instead, it defines only three points per surface, the minimum necessary to define a plane in 3D space. Each brush is computed upon load, by intersecting the various planes that make up said object. Sometimes, however, the result can be a bit off. Computed vertices can end up slightly off of the grid, with floating point instead of integer positions. At my level of understanding, or lack thereof, I have little choice but to attribute this phenomenon to the mythical "rounding errors" that I love to dread plague the world of floating point operations. It so happens, however, that the first step in the map compilation process, VBSP, already accounts for this. Some admittedly informal testing shows that the program snaps everything to the nearest whole number if it's less than 0.2 units away, which most (perhaps all) Hammer rounding errors are. This behavior can be readily demonstrated by compiling test_threshold.vmf, bundled with the VertAlert source distribution, as-is. It includes an outer wall brush that creates a 0.15 unit gap, exposing the inside of the map to the void, but VBSP handles it without issue. Since most of the larger errors are either the result of intentional brush rotations or accidental scales, and should be visually examined one by one, the --fix option is of limited utility unless combined with --snaphi. --Changes-- 1.0.0 - March 28th, 2013 Add snaplo and snaphi parameters 0.2.1 - January 1st, 2013 Update fix_plane's use of string replace method 0.2.0 - November 27th, 2012 Added --thresh Added shebang line Fixed writing out OS-specific line endings 0.1.0 - November 24th, 2012 Initial release
Floats in a plane string are replaced en masse, based only on the first match. For example, the string
(-173.98 -932 0) (-173.981 -932 120) (-175.979 -944 120)
becomes
(-174 -932 0) (-1741 -932 120) (-176 -944 120)
when it should actually be
(-174 -932 0) (-174 -932 120) (-176 -944 120)
Setting the 'maxreplace' parameter of the string's replace method to 1 should fix the problem.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.