texx is a small tool for manipulating textureX files. It main use is for comparing texture definitions and outputting a single doomtools compatible textureX.txt file containing all unique textures between all the input files. It can also use a iwad as a filter to remove all textures that apear in the iwad. It has other functions like converting things to doomtools textureX.txt definitions. Extracting from wads, or converting lumps exported from slade for example. It also has a function where it can read a textureX and then look in a directory and it's subdirs for matching patch files, and copy them to a dir of your choice. ================================================================= texx -- TEXTUREx / DEUTEX manipulation tool Six independent modes for building and cleaning up Doom TEXTUREx definitions and SWANTBLS switch/animation tables. Pick exactly one mode per run. CONVERT (-c, --convert) Turn a single WAD, SLADE TEXTURES file, or DEUTEX texturex.txt into a clean DoomTools/DEUTEX-style text file. Use this to normalize one source into the text format the other modes expect. -c, --convert INPUT file/WAD to convert -o, --output PATH default: texturex.txt MERGE (-m, --merge) Combine several texture sources into one file of unique definitions -- e.g. stitching multiple community texture packs into a single set for a megaproject. Output is sorted alphabetically by texture name; patch layout/order within each texture is untouched. True duplicates and --filter matches are written out to a duplicates-.txt side file for review. -m, --merge IN [IN...] files to merge -f, --filter IN [IN...] drop anything matching these (e.g. doom2.txt) --resolveDups also write duplicates-resolved-.txt with true duplicates renamed uniquely (doesn't touch the main output) -o, --output PATH default: unique-textureX.txt SUBTRACT (-s, --subtract) Start from one base texturex.txt and strip out any definition identical (name + layout) to one found in the other inputs or --filter. Use this to pull IWAD-native textures back out of a texture file that accidentally included them. -s, --subtract BASE IN... base file, then files to compare against -f, --filter IN [IN...] additional definitions to remove -o, --output PATH default: -subtracted.txt REMOVE (-rm, --remove) Like --subtract, but for many files at once, each handled fully independently -- no merging, no renaming, no cross-file dedup. Use this to strip IWAD textures out of several map-specific texture files in one pass, keeping them as separate files. -rm, --remove IN [IN...] files to clean, each processed on its own -f, --filter IN [IN...] definitions to remove from every input (required) -o, --output DIR default: current directory FIND PATCHES (-fp, --findPatches) Scan a directory tree and copy out every patch graphic referenced by a texturex.txt. Use this to collect just the patches a texture set actually needs out of a much bigger resource folder. -fp, --findPatches TEXTUREX texture file to read patch names from -sd, --sourcedir DIR directory to scan recursively (required) -o, --output DIR default: -patches ANIMATION MERGE (-a, --animation, --animations) Merge SWANTBLS/defswani switch + animation definition files ([SWITCHES]/[FLATS]/[TEXTURES]) into one --default file that is reproduced 100% unchanged. New switches/animations from the other inputs are appended; anything that conflicts with the default, or between two inputs, is skipped and written to a -conflicts.txt side file for manual review instead. -a, --animation IN [IN...] defswani files to merge in --default FILE base file, kept 100% unchanged (required) -o, --output PATH default: merged-defswani.txt NOTES Inputs are auto-detected by content, not extension: WAD files (TEXTURE1/TEXTURE2 + PNAMES), SLADE TEXTURES .txt, or DoomTools/ DEUTEX .txt. --subtract's base and --findPatches's input must be DoomTools .txt specifically. Filter semantics (--merge/--subtract/--remove): a definition identical in name AND layout to a filter entry is dropped; a definition with the same name but a DIFFERENT layout is kept under its original name (stock-texture replacement). Every output enforces AASTINKY (the null texture, index 0) as the first entry -- moved to the front if present, or synthesized and inserted if missing entirely. (Not applied to --merge's duplicates-*.txt diagnostic side files.) EXAMPLES texx -c mywad.wad texx -c slade-export.txt -o texture1.txt texx -m resource.wad map01.wad -f doom2.wad texx -m 32in24.txt jimmytex.txt -f doom2.txt --resolveDups texx -s mytex.txt other.wad -f doom2.wad texx -rm texture01.txt texture02.txt -f doom2-textures.txt texx -fp texturex.txt -sd "C:/patches" -o picked texx -a 32in24-defswani.txt jimmytex-defswani.txt --default doom2-defswani.txt