## ############################################################################### ############### Tool 'wszst' ############### ############################################################################### #:def_tool( "wszst", \ "wszst [option]... command [option|parameter|@file]...", \ "Wiimms SZS Tool : List, compare, (de-)compress, extract and create" \ " SZS, U8, PACK, BRRES, BREFF and BREFT archives. Additonally, RARC" \ " archive can be extracted. It is also a wrapper to all other tools." ) #:def_cmd( "VERSION", "VERSION|V", \ "wszst VERSION [ignored]...", \ "Print program name and version and exit." ) #:def_cmd( "HELP", "HELP|H|?", \ "wszst HELP [--width=wd] OPT|OPTION [option]...\n" \ "wszst HELP [--width=wd] CMD|COMMAND ...\n" \ "wszst HELP [--width=wd] command ...\n" \ "wszst HELP [--width=wd] ...", \ "Print help for commands and options.", \ "Print help for commands and options.\n" \ " The first variant (with keyword @OPT@ or @OPTION@) prints a list of" \ " all global and command specific options. If at least one option is" \ " set, only info about the declared options are printed. The second" \ " variant (with keyword @CMD@ or @COMMAND@) prints an overview about" \ " all commands. The third variant (with a valid command name) prints" \ " details about the declared command. The fourth variant prints an" \ " overview about all commands and all global options." ) #:def_cmd( "CONFIG", "CONFIG", \ "wszst CONFIG [options]...", \ "Show all information about the search for the configuration file and" \ " its content. The command can also export the settings for scripts or" \ " can create or update configuration files." ) #:def_cmd( "INSTALL", "INSTALL", \ "wszst INSTALL [file]...", \ "Install files to the shared directory. Use {wszst CONFIG} to list" \ " related pathes." ) #:def_cmd( "ARGTEST", "ARGTEST", \ "wszst ARGTEST ...", \ "This debug command accepts all kinds of parameters and prints one" \ " line for each parameter. All tools know the ARGTEST command." ) #:def_cmd( "EXPAND", "EXPAND", \ "wszst EXPAND ...", \ "This debug command accepts (like ARGTEST) all kinds of parameters and" \ " prints one line for each parameter. After that, the parameter is" \ " treated as a filename with wildcards and all matching files are" \ " searched. The special parameters '+h' and '_h' enable or disable the" \ " search for hidden directories and files (files beginning with a" \ " point) for the following parameters. All tools know the EXPAND" \ " command." ) #:def_cmd( "WILDCARDS", "WILDCARDS", \ "wszst WILDCARDS pattern...", \ " Each parameter is treated as a filename. $Wildcards$ are accepted." \ " After evaluating the wildcards, all input files are sorted according" \ " to their path and duplicates are deleted. The special parameters" \ " '+h' and '_h' enable or disable the search for hidden directories" \ " and files (files beginning with a point) for the following" \ " parameters. Finally, one line is printed for each file name of the" \ " list." ) #:def_cmd( "TEST", "TEST", \ "wszst TEST [options]... [ignored]...", \ "This debugging command accepts all options and parameters and prints" \ " a list of the internal option values. The command is designed to" \ " test the option parameters. The non option parameters are completely" \ " ignored." ) #:def_cmd( "COLORS", "COLORS", \ "wszst COLORS", \ "Ignore all parameters and print colored text for testing." ) #:def_cmd( "ERROR", "ERROR|ERR", \ "wszst ERROR [error_code]", \ "Translate an exit code to a message name. If no exit code is entered," \ " print a table with all error messages. All tools know the ERROR" \ " command." ) #:def_cmd( "FILETYPE", "FILETYPE|FT", \ "wszst FILETYPE file...", \ "Scan the header of the entered files and print file type and path for" \ " each file as list. All tools know the FILETYPE command." ) #:def_cmd( "UI_CHECK", "UI-CHECK|UC|UICHECK", \ "wszst UI-CHECK file...", \ "Classify SZS files from directory .../Scene/UI/. For the analysis," \ " the filename is ignored and only the content is examined.$Wildcards$" \ " are accepted. After evaluating the wildcards, all input files are" \ " sorted according to their path and duplicates are deleted." ) #:def_cmd( "FILEATTRIB", "FILEATTRIB|FA", \ "wszst FILEATTRIB [keyword]...", \ "Print a table with attributes for all known file types. If at least" \ " one keyword is entered, only matching file types are printed. A" \ " keyword is either a file type (like 'BRRES' or 'BMG') or one of the" \ " printed keywords (like 'ARCHIVE' or 'EXTRACT'). All tools know the" \ " FILEATTRIB command." ) #:def_cmd( "BRSUB", "BRSUB", \ "wszst BRSUB [file]...", \ " If no file is defined, print a table with known BRRES sub files" \ " consisting of file format, version, number of sections and warn" \ " level. Otherwise analyse the version numbers of each BRRES sub file" \ " of each source and print warnings about invalid versions." ) #:def_cmd( "SYMBOLS", "SYMBOLS", \ "wszst SYMBOLS", \ "Print predefined symbols of text parser to standard output. Many" \ " tools know the SYMBOLS command." ) #:def_cmd( "FUNCTIONS", "FUNCTIONS", \ "wszst FUNCTIONS [key]...", \ "Print a list with all parser functions. If one or more keys entered," \ " then only functions that match at least one key are printed. Many" \ " tools know the FUNCTIONS command." ) #:def_cmd( "CALCULATE", "CALCULATE", \ "wszst CALCULATE expression...", \ "Calculate each expression and print the result to standard output." \ " Many tools know the CALCULATE command." ) #:def_cmd( "MATRIX", "MATRIX", \ "wszst MATRIX [patch-option]... [vector]...", \ "Use the transformation options as base and calculate and print the" \ " related vectors and the transformation matrices. Then do a forward" \ " and backward transformation for each @vector@ parameter using the" \ " matrices and print the results.", \ "Use the transformation options as base and calculate and print the" \ " related vectors and the transformation matrices. Then do a forward" \ " and backward transformation for each @vector@ parameter using the" \ " matrices and print the results. The transformations are done with 4" \ " different methods to confirm the algorithms. Only the main results" \ " and results, which differ, are printed.\n" \ " Normally, the exit status is @OK@ (null). If at least one old" \ " transformation returns different results for the different" \ " algorithms, then status @DIFFER@ (not null) is returned." ) #:def_cmd( "FLOAT", "FLOAT", \ "wszst FLOAT number...", \ "This commands helps to convert hex values into floating point numbers" \ " and vice versa. For each non empty parameter, a line with 4 bytes" \ " hex and a float, 8 bytes hex and a double float, and the parameter" \ " itself is printed. If a parameter begins with 'x' or '0x', it is a" \ " hex string, otherwise it is a floating point number.\n" \ " The special parameters \"+\" and \"-\" mean: Increment or decrement" \ " the previous value by the smallest possible value. Use different" \ " increments for floats and doubles.\n" \ " All conversions are done using big endian." ) #:def_cmd( "VR_CALC", "VR-CALC|VRCALC", \ "wszst VR-CALC delta...", \ " Calculate a VR increment for each given delta value" \ " (@=VR_winner-VR_loser@). Print results as table." ) #:def_cmd( "VR_RACE", "VR-RACE|VRRACE", \ "wszst VR-RACE vr1 vr2...", \ "Print a table with VR calculations for a race. Each @VR@ is the" \ " current rating of a player. The vr-list is well ordered: The first" \ " VR is for the winner and the last VR for the looser. Up to 30 VR" \ " values will be accpeted. Each VR can be preceeded by @\"NUM*\"@ to" \ " define a repeat factor." ) #:def_cmd( "AUTOADD", "AUTOADD", \ "wszst AUTOADD [source]...", \ "Manage the auto-add library. Primarily add files to the main auto-add" \ " archive for future use of option {--auto-add} or to convert WU8" \ " files. If @SOURCE@ is a directory, all standard track and arena file" \ " names are searched for the missed auto-add files. Without source" \ " files, the status of the auto-add archive is printed.\n" \ " Try {wszst AUTOADD ./path_to/Race/Course/} to add all supported" \ " files." ) #:def_cmd( "TRACKS", "TRACKS", \ "wszst TRACKS [selection_mask]", \ "Print a list of all known track SZS files of Mario Kart internal" \ " directory './Race/Course'. These files are 32 standard track files" \ " and 10 arena files. The first column shows an unique ID of exact 3" \ " upper case characters or digits. For '_d' files, a 'd' is appended." \ " The second column shows the internal file name. Use BMG files to" \ " print real names as third column." ) #:def_cmd( "SCANCACHE", "SCANCACHE", \ "wszst SCANCACHE directory\n" \ "wszst SCANCACHE --cache directory", \ "Scan the cache directory for SZS files and re-build the checksum" \ " table. Store the result as file 'cache-content.txt' in the same" \ " directory. The file is used by option {--cache} to optimize file" \ " access." ) #:def_cmd( "LIST", "LIST|LS", \ "wszst LIST [source]...", \ "List all sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC" \ " archives. If listing a directory, then a virtual SZS file is created" \ " (like CREATE does it) and listed. $Wildcards$ are accepted. After" \ " evaluating the wildcards, all input files are sorted according to" \ " their path and duplicates are deleted." ) #:def_cmd( "LIST_L", "LIST-L|LL|LISTL", \ "wszst LIST-L [source]...", \ "List all sub files with size. 'LIST-L' and 'LL' are short cuts for" \ " {LIST --long}. $Wildcards$ are accepted. After evaluating the" \ " wildcards, all input files are sorted according to their path and" \ " duplicates are deleted." ) #:def_cmd( "LIST_LL", "LIST-LL|LLL|LISTLL", \ "wszst LIST-LL [source]...", \ "List all sub files with offset and size. 'LIST-LL' and 'LLL' are" \ " short cuts for {LIST --long --long}. $Wildcards$ are accepted. After" \ " evaluating the wildcards, all input files are sorted according to" \ " their path and duplicates are deleted." ) #:def_cmd( "LIST_LLL", "LIST-LLL|LLLL|LISTLLL", \ "wszst LIST-LLL [source]...", \ "List all sub files with offset and size in debugging mode. 'LIST-LLL'" \ " and 'LLLL' are short cuts for {LIST --long --long --long}." \ " $Wildcards$ are accepted. After evaluating the wildcards, all input" \ " files are sorted according to their path and duplicates are deleted." ) #:def_cmd( "LIST_A", "LIST-A|LA|LISTA", \ "wszst LIST-A [source]...", \ "List recursive all sub files with size. 'LIST-A' and 'LA' are short" \ " cuts for {LIST --long --all --all}. $Wildcards$ are accepted. After" \ " evaluating the wildcards, all input files are sorted according to" \ " their path and duplicates are deleted." ) #:def_cmd( "LIST_LA", "LIST-LA|LLA|LISTLA", \ "wszst LIST-LA [source]...", \ "List recursive all sub files with offset and size. 'LIST-LA' and" \ " 'LLA' are short cuts for {LIST --long --long --all --all}." \ " $Wildcards$ are accepted. After evaluating the wildcards, all input" \ " files are sorted according to their path and duplicates are deleted." ) #:def_cmd( "NAME_REF", "NAME-REF|NAMEREF", \ "wszst NAME-REF [source]...", \ "For each BRRES file or subfile, create a name based cross reference" \ " and print the result as list ordered by names in BRRES order. For U8" \ " archives (e.g. track SZS files), sub file @course_model.brres@ is" \ " analysed." ) #:def_cmd( "ILIST", "ILIST|IL", \ "wszst ILIST [source]...", \ "List the images files of all sub files of SZS, U8, PACK, BRRES," \ " BREFF, BREFT and RARC archives; non image files are ignored. If" \ " listing a directory, then a virtual SZS file is created (like CREATE" \ " does it) and listed." ) #:def_cmd( "ILIST_L", "ILIST-L|ILL|ILISTL", \ "wit ILIST-L [source]...", \ "List all image files with geometry data. 'ILIST-L' and 'ILL' are" \ " short cuts for {ILIST --long}." ) #:def_cmd( "ILIST_LL", "ILIST-LL|ILLL|ILISTLL", \ "wit ILIST-LL [source]...", \ "List all sub files with advanced geometry data. 'ILIST-LL' and 'ILLL'" \ " are short cuts for {ILIST --long --long}." ) #:def_cmd( "ILIST_A", "ILIST-A|ILA", \ "wszst ILIST-A [source]...", \ "List recursive all image files. 'ILIST-A' and 'ILA' are short cuts" \ " for {ILIST --all}." ) #:def_cmd( "ILIST_LA", "ILIST-LA|ILLA|ILISTLA", \ "wit ILIST-LA [source]...", \ "List recursive all image files with geometry data. 'ILIST-LA' and" \ " 'ILLA' are short cuts for {ILIST --long --all}." ) #:def_cmd( "MEMORY", "MEMORY|MEM", \ "wszst MEMORY [source]...", \ "Dump a memory map of each source file. Virtual images (extracted" \ " directories) are also supported." ) #:def_cmd( "MEMORY_A", "MEMORY-A|MEMA", \ "wszst MEMORY-A [source]...", \ "Dump recursive a memory map of each source file. 'MEMORY-A' and" \ " 'MEMA' are short cuts for {MEMORY --all --all}." ) #:def_cmd( "DUMP", "DUMP", \ "wszst DUMP [source]...", \ "Dump the internal structure of a BRRES files, compressed or not." \ " Other archives are ignored. The main goal is to verify string" \ " relocation. Virtual images (extracted directories) are also" \ " supported." ) #:def_cmd( "SHA1", "SHA1", \ "wszst SHA1 [source]...", \ "Print a SHA1 checksum for each source. The checksum is calculated by" \ " using the uncompressed data and after patching." ) #:def_cmd( "ANALYZE", "ANALYZE|ANA|ANALYSE", \ "wszst ANALYZE [source]...", \ "Analyse track files and LE-CODE binaries. Print the results in" \ " machine-readable form. The output format is selected by options." ) #:def_cmd( "SPLIT", "SPLIT", \ "wszst SPLIT [source]...", \ "Analyse (file) names and split them into the different parts. Print" \ " the results in machine readable format." ) #:def_cmd( "IS_TEXTURE", "IS-TEXTURE|ISTEXTURE", \ "wszst IS-TEXTURE --reference reference [source]...", \ "Test each source to see if it's a texture hack versus a reference" \ " file. For each source, one human and machine readable status line is" \ " printed. It is either »-1=err« on error, »1=yes« for a texture" \ " hack, or »0=no LIST« with a comma separated list of reasons.\n" \ " At the moment KCL, KMP (see notes) and LEX are checked. KMP section" \ " CAME has been intentionally left out. Section ENPT is only checked" \ " if KCL contains a least one face of type force-recalculation." ) #:def_cmd( "FEATURES", "FEATURES", \ "wszst FEATURES [source]...", \ "Analyse track files and create a feature list for each source in" \ " machine readable format. CTGP uses the feature lists to manage" \ " ghosts. See option {--lex-features} for details." ) #:def_cmd( "DISTRIBUTION", "DISTRIBUTION|DIS|DISTRIB", \ "wszst DISTRIBUTION result source...\n" \ "wszst DISTRIBUTION directory [source]...", \ "Load each @SOURCE@ (SZS, WBZ, U8 or WU8) and calculate a checksum of" \ " the uncompressed data. If @SOURCE@ is a directory, scan it for SZS," \ " WBZ, U8 and WU8 files. If a source directory starts with \"arena\"," \ " all tracks of the directory are assumed to be battle arenas. Finally" \ " print the results into file @RESULT@.\n" \ " The default name for @RESULT@ is \"distribution.txt\". Extension" \ " .txt is appended to the filename if not defined. If @RESULT@ is a" \ " directory, it is used as first source too.\n" \ " If file @RESULT@ exists, it is automatically added as last source" \ " to the list of option --source, but only if not already added. On" \ " scanning of file @result@, parameters are scanned too.\n" \ " See »welect DISTRIBUTION« for a new and alternative implementation" \ " of this." ) #:def_cmd( "DIFF", "DIFF|CMP", \ "wszst DIFF source1 source2\n" \ "wszst DIFF source... --dest dest", \ "Compare two or more sources (each SZS, U8, PACK, BRRES, BREFF, BREFT," \ " RARC or directory) on file level and report mismatches for each sub" \ " file. If option {--dest} is set, then each source file is compared" \ " with a file in the destination." ) #:def_cmd( "CHECK", "CHECK", \ "wszst CHECK [source]...", \ "Make a validity check for track files: Try to read KCL and KMP (and" \ " check both) and find unknown, modified, needed and unneeded files." \ " Also analyse cannons and make slot proposals. This command uses an" \ " internal object and file database. The source can be a SZS, U8, WU8" \ " or WBZ file, or an U8 like directory." ) #:def_cmd( "SLOTS", "SLOTS", \ "wszst SLOTS [source]...", \ "Try to find out the slots, that will run a track. Each source can be" \ " a SZS, U8, WU8 or WBZ file, or an U8 like directory. For each source" \ " one status line is printed. The status line contains either a" \ " positive or a negative slot list, whatever is shorter. For battle" \ " arenas, the keyword @ARENA@ is printed." ) #:def_cmd( "STGI", "STGI", \ "wszst STGI [source]...", \ "Find the first KMP:STGI of each file and print an analysis of it as" \ " single line statistic. Additional the number of lap counter check" \ " points ('LC') is printed. Track and KMP (binary and text) files are" \ " accepted as input." ) #:def_cmd( "ISARENA", "ISARENA", \ "wszst ISARENA [source]...", \ "Analyse each track for its arena status and print a line with a" \ " status code and the track name. The status code is: »-RACE« for a" \ " racing track, »?MAYBE« for likely an arena, »+ARENA« for an" \ " arena, »+DISPATCH« for an arena with dispatch points or any error" \ " hint beginning with an »!«. So the very first character (one of" \ " »!-?+«) can be used to distinguish the status class.\n" \ " The exit status is >2 on error, 2 (DIFFER), if at least one file is" \ " a racing track, or 0 (OK), if all sources are arenas." ) #:def_cmd( "NORMALIZE", "NORMALIZE|NORM", \ "wszst NORMALIZE [source]...", \ "Normalize an U8 archive, compressed or not: The files are sorted in" \ " `Nintendo like' order and unused data holes are removed. If" \ " directory '.' is available it becomes the root directory for all" \ " others. Compressed sources are compressed again with maximum" \ " compression (level 9). The destination is only written if any data" \ " changed.\n" \ " {wszst NORMALIZE} is the same as {wszst PATCH --norm}." ) #:def_cmd( "PATCH", "PATCH", \ "wszst PATCH [source]...", \ "Patch an U8 archive, compressed or not: Load the archive, apply all" \ " patching and transforming options and store the file again." \ " Compressed sources are compressed again. The destination is only" \ " written if any data changed or if stored in another file." \ " $Wildcards$ are accepted." ) #:def_cmd( "COPY", "COPY|CP", \ "wszst COPY source dest\n" \ "wszst COPY source... [-d|-D] dest", \ "COPY is an alternative command for copying and patching files. It" \ " uses the same internal procedure as command PATCH, but has another" \ " command line syntax.\n" \ " The command copies all source files to the destination. If more than" \ " 1 source is defined, the destination must be either a directory or a" \ " destination filename with escapes. Patching is also possible and" \ " option --overwrite is set implicitly." ) #:def_cmd( "DUPLICATE", "DUPLICATE|DUP", \ "wszst DUPLICATE source [-d|-D] dest", \ "The command reads a single track file and duplicates it several times" \ " to DEST. Therefor it analyzes the presence flags combinations with" \ " and without extension support and creates one file for each relevant" \ " scenario. A LEX section TEST will be inserted to force the execution" \ " mode for offline tests.\n" \ " The destination filename (not directory part) is searched for the" \ " first occurance of @'@@'@. If not found, the place before the last" \ " point is used. At this place an identification string is inserted.\n" \ " Depending on option {--gamemodes} up to 1573 files will be created." \ " So the use of option {--fast} is recommended to speed up the" \ " process. Use command {wkmpt GAMEMODES} to list all variants and to" \ " check them beforehand." ) #:def_cmd( "MINIMAP", "MINIMAP", \ "wszst MINIMAP [source]...", \ "Print minimap data (more exact: the visual field of the minimap) of a" \ " SZS, U8, BRRES or MDL file. If patching options are used, modify the" \ " data and write back the file using its original file format. Only" \ " the translation vector is modified and new translation and inverse" \ " matrices are calculated." ) #:def_cmd( "COMPRESS", "COMPRESS|COM", \ "wszst COMPRESS [source]...", \ "Compress and create a SZS archives. If the source is already" \ " compressed, then decompress and compress it again. The default" \ " destination is @'%P/%N.szs'@." ) #:def_cmd( "DECOMPRESS", "DECOMPRESS|DEC", \ "wszst DECOMPRESS [szs]...", \ "Decompress SZS files. The default destination is @'%P/%N.u8'@." ) #:def_cmd( "ENCODE", "ENCODE|E", \ "wszst ENCODE [source_dir]...", \ " Create and/or encode sub files if necessary. It works like command" \ " CREATE, but without creating a new first level archive file." ) #:def_cmd( "CREATE", "CREATE|C", \ "wszst CREATE [source_dir]...", \ "Create SZS, U8, PACK, BRRES, BREFF or BREFT archives by adding all" \ " not hidden files of the directory structure. Create and/or encode" \ " sub files if necessary. The default destination is @'%P/%N%T'@." ) #:def_cmd( "UPDATE", "UPDATE|U", \ "wszst UPDATE [source]... [--source=] [--dest=]", \ "Update an existing SZS, U8, PACK, BRRES, BREFF, BREFT and" \ " RARCarchive. This is done in similar way as the {EXTRACT} command," \ " but instead of extracting, source files are searched in a prior" \ " extracted archive. Only files with the same size are updated. The" \ " secondary source is used to find the source sub files. The default" \ " secondary source is @'%P/%N.d/'@." ) #:def_cmd( "EXTRACT", "EXTRACT|X", \ "wszst EXTRACT [source]...", \ "Extract all sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC" \ " archives. The default destination is @'%P/%N.d/'@." ) #:def_cmd( "XDECODE", "XDECODE|XD", \ "wszst XDECODE [source]...", \ "Command @XDECODE@ is a short cut for {EXTRACT --decode}. It extract" \ " all sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC" \ " archives and decodes all supported files. The default destination is" \ " @'%P/%N.d/'@." ) #:def_cmd( "XEXPORT", "XEXPORT|XX", \ "wszst XEXPORT [source]...", \ "Command @XEXPORT@ is a short cut for {EXTRACT --decode --export}. It" \ " extract all sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC" \ " archives and decodes all supported files with enabled export mode." \ " The default destination is @'%P/%N.d/'@." ) #:def_cmd( "XALL", "XALL|XA", \ "wszst XALL [source]...", \ "Command @XALL@ is a short cut for {EXTRACT --all}. It extract all sub" \ " files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC archives" \ " recursively and decodes all supported files. The default destination" \ " is @'%P/%N.d/'@." ) #:def_cmd( "XCOMMON", "XCOMMON", \ "wszst XCOMMON [source]...", \ "Command @XCOMMON@ is a short cut for {EXTRACT --basedir=common}. Scan" \ " archives and extract files from archives, that are below directory" \ " @'common'@. The default destination is @'%P/%N.d/'@." ) #:def_cmd( "BINARY", "BINARY|BIN", \ "wszst BINARY [source]...", \ "Read each source file (binary or text, but never archives) and write" \ " the content as binary file. The file extension of the new file" \ " depends on the file type, but is usually @.bin@. Currently supported" \ " file formats are @BMG@, @GEOHIT@, @ITEMSLOT@, @KCL@, @KMG@, @KMP@," \ " @LEX@, @OBJFLOW@, @PAT@ and the related text formats." ) #:def_cmd( "TEXT", "TEXT|TXT", \ "wszst TEXT [source]...", \ "Read each source file (binary or text, but never archives) and write" \ " the content as text file. The file extension of the new file is" \ " usually @.txt@. Currently supported file formats are @BMG@," \ " @GEOHIT@, @ITEMSLOT@, @KCL@, @KMG@, @KMP@, @LEX@, @OBJFLOW@, @PAT@" \ " and the related text formats." ) #:def_cmd( "CAT", "CAT", \ "wszst CAT [source/subfile]...", \ "Extract one or more sub files of SZS, U8, PACK, BRRES, BREFF, BREFT" \ " and RARC archives. The output of all source files is concatenated" \ " and written to stdout." ) #:def_cmd( "BMG", "BMG", \ "wszst BMG [source]...", \ "For each archive all BMG sub files are searched and, if found," \ " decoded and printed as combined BMG text file. The command works" \ " exactly like {wbmgt MIX}." ) #:def_cmd( "KCL", "KCL", \ "wszst KCL [source]...", \ "For each archive the KCL sub file @course.kcl@ is searched and, if" \ " found, decoded and printed (copied to stdout).\n" \ " Automated dropping of bad KCL triangles is enabled if no other drop" \ " option is specified by option {--kcl}." ) #:def_cmd( "KMP", "KMP", \ "wszst KMP [source]...", \ "For each archive the KMP sub file @course.kmp@ is searched and, if" \ " found, decoded and printed (copied to stdout)." ) #:def_cmd( "LEX", "LEX", \ "wszst LEX [source]...", \ "For each archive the LEX sub file @course.lex@ is searched and, if" \ " found, decoded and printed (copied to stdout)." ) #:def_cmd( "INFO", "INFO", \ "wszst INFO [source]...", \ "For each archive a file named @info.txt@ and, if not found," \ " @credits.txt@ is searched, ignoring case. The first found file of" \ " each archive is printed (copied to stdout)." ) #:def_cmd( "YAZDUMP", "YAZDUMP|YD", \ "wszst YAZDUMP [szs]...", \ "Analyze YAZ compression and print a dump to stdout. Ignore files" \ " without YAZ compression." ) #:def_opt( "VERSION", "V|version", "G", \ "", \ "Stop parsing the command line, print a version info and exit." ) #:def_opt( "HELP", "h|help", "G", \ "", \ "Stop parsing the command line, print a help message and exit." ) #:def_opt( "XHELP", "xhelp", "G", \ "", \ "Stop parsing the command line and print a help message with all" \ " commands included. Exit after printing." ) #:def_opt( "CONFIG", "config", "GP", \ "file", \ "Define a configuration file or a directory as source. In later case," \ " file @'wiimms-szs-tools.conf'@ is searched.\n" \ " If option is not not set, then file @'wiimms-szs-tools.conf'@ is" \ " searched in different directories. Use command @'wszst CONFIG'@ to" \ " get more details." ) #:def_opt( "ALLOW_ALL", "allow-all|allowall", "G", \ "", \ "Usually commands accept only options with impact to the command. All" \ " other options fire a syntax error. But if @--allow-all@ is set, all" \ " commands accept all options.\n" \ " This makes changing the command of a long command line without" \ " removing useless options easier. It also helps to override wrong" \ " option permissions." ) #:def_opt( "COMPATIBLE", "compatible", "GP", \ "vers", \ "The option expects a version number (format @'#.##'@ or @'v#.##'@) or" \ " a revision number (format @'r#'@) as parameter. If set, the tools" \ " try to create BMG and KMP text files, that are compatible to the" \ " entered version of the tools. This may override other legacy" \ " options." ) #:def_opt( "WIDTH", "width", "GP", \ "width", \ "Define the terminal width (number of columns) for help and some other" \ " messages and disable the automatic detection of the terminal width." ) #:def_opt( "MAX_WIDTH", "max-width|maxwidth", "GP", \ "maxwidth", \ "Define the maximum terminal width (number of columns) for help and" \ " some other messages. The default is 120. This option is ignored if" \ " --width is set." ) #:def_opt( "NO_PAGER", "no-pager|nopager", "G", \ "", \ "Forbid the internal usage of a pager." ) #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple usage is possible." \ " The impact is command dependent. In general: If set three times," \ " different file format warnings are suppressed." ) #:def_opt( "VERBOSE", "v|verbose", "GM", \ "", \ "Be verbose and print more progress information. Multiple usage is" \ " possible. The impact is command dependent." ) #:def_opt( "LOGGING", "L|logging|log", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ " it up to three times to be more verbose." ) #:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ "", \ "Enable extended error messages. This includes a source file and line" \ " reference. Logging level 1 activates it too. @--xerr@ is a short" \ " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ "Enable or disable warnings. Parameter @'list'@ is a comma separated" \ " list of keywords. A minus sign before a keyword disables a warning." \ " Each occurrence of the option will only change entered warning and" \ " all other warnings are untouched.\n" \ " Keyword @DEFAULT@ resets the default settings, @OFF@ disables and" \ " @ALL@ enables all. The other allowed keywords are: @INVALID-OFFSET@." ) #:def_opt( "DE", "de", "G", \ "", \ "Use german track and arena names." ) #:def_opt( "COLORS", "colors", "GO", \ "[=modus]", \ "Define the modus for colored text output. Allowed keywords are: @OFF@" \ " or @NO-COLORS@ to disable colors, @AUTO@ (default) for automatic" \ " detection, @ON@ for automatic detection but never @OFF@, @8-COLORS@" \ " and @256-COLORS@ to force 8 or 256 color support. Without parameter," \ " @ON@ is used.\n" \ " @AUTO@ will enable colorized output only for terminals. @AUTO@ and" \ " @ON@ use environment variable @TERM@ to find the correct color" \ " modus.\n" \ " If a command is prefixed by @'C-'@, then @--color=ON@ is used" \ " implicitly as default." ) #:def_opt( "NO_COLORS", "no-colors|nocolors", "G", \ "", \ "Deactive colorized text. This is the default, if an output file is" \ " not a terminal." ) #:def_opt( "CT_CODE", "ct-code|ctcode", "G", \ "", \ "Enable CT-CODE support." ) #:def_opt( "LE_CODE", "le-code|lecode", "GO", \ "[=param]", \ "Enable LE-CODE and CT-CODE support. The optional parameter is" \ " deprecated and ignored." ) #:def_opt( "LOAD_PREFIX", "load-prefix|loadprefix", "GP", \ "file", \ "Read in a PREFIX file and replace the internal prefix database with" \ " the content. https://ct.wiimm.de/export/prefix is the authoritative" \ " source for this." ) #:def_opt( "LOAD_CATEGORY", "load-category|loadcategory", "GP", \ "file", \ "Read in a CATEGORY file and replace the internal category database" \ " with the content. https://ct.wiimm.de/export/category is the" \ " authoritative source for this." ) #:def_opt( "PLUS", "plus", "CP", \ "chars", \ "If a name begins with a plus sign, then all characters up to the" \ " first space are recognized as a plus prefix. The first part consists" \ " of all the plus signs followed by any other characters. The first" \ " character of the second part is used to determine the sort value. If" \ " the second part is empty, then the last plus sign is used instead.\n" \ " The higher sorting value is now calculated from the number of plus" \ " signs in the first part, the more plus signs, the smaller the value." \ " The first character from the second part determines the lower value." \ " If it is in parameter CHARS then the position determines the value," \ " otherwise the ASCII value to which 500 is added." ) #:def_opt( "SPLIT", "split", "CP", \ "num", \ "Only one line with the standardized name is output. The components" \ " are divided into NUM (1-13) parts with predifined format strings." \ " The pipe sign (@|@) is used as a separator. An alternative output" \ " format can be defined with the {--printf} option." ) #:def_opt( "PRINTF", "printf", "CP", \ "format", \ "Add an output line with a formatted string." ) #:def_opt( "CHDIR", "chdir", "GMP", \ "dir", \ "Set a new working directory for all following options, for all" \ " parameters and for the command execution. This option can be used" \ " multiple times, but for parameter parsing and for command execution" \ " only the last usage is relevant. Nevertheless, @'@@param'@ values" \ " are scanned while reading the command line." ) #:def_opt( "CONST", "c|const", "GMP", \ "list", \ "Define constant values, that are used by the internal encoders and by" \ " the numeric options as predefined global variables. This option" \ " allows a conditional encoding of text files. It can be used multiple" \ " times for multiple definitions.\n" \ " The parameter is a comma separated list of terms and a term is" \ " '@name=expression@'. The expression is calculated by the text" \ " parser." ) #:def_opt( "TOUCH", "touch", "C", \ "", \ "Mark the minimap as modified to force a new calculation of the" \ " translation and inverse matrices." ) #:def_opt( "AUTO", "auto", "C", \ "", \ "Calculate the minimap translations automatically by using the minimum" \ " and maximum vertex coordinates. The 'scale' and 'rotation' fields" \ " are reset. This is done as first action before the SET, CENTER and" \ " the other transformations." ) #:def_opt( "SET_FLAGS", "set-flags|setflags", "CP", \ "flag", \ "Define the flag values (default 0x31f) of the minimap." ) #:def_opt( "SET_SCALE", "set-scale|setscale", "CP", \ "vector", \ "Define the scale values (default 1.0) of the minimap. The parameter" \ " is either a vector expression or a comma separated list of" \ " coordinates ('x,z' or 'x,y,z')." ) #:def_opt( "SET_ROT", "set-rot|setrot", "CP", \ "vector", \ "Define the rotation values (default 0.0) of the minimap. The" \ " parameter is either a vector expression or a comma separated list of" \ " coordinates ('x,z' or 'x,y,z')." ) #:def_opt( "SET_X", "set-x|setx", "CP", \ "v1[,v2]", \ "Define 2 values and sort them to define the minimum and maximum" \ " x-coordinates of the minimap. If 'v2' is not entered, '-v1' is used" \ " as second value." ) #:def_opt( "SET_Y", "set-y|sety", "CP", \ "v1[,v2]", \ "Define 2 values and sort them to define the minimum and maximum" \ " y-coordinates of the minimap. If 'v2' is not entered, '-v1' is used" \ " as second value." ) #:def_opt( "SET_Z", "set-z|setz", "CP", \ "v1[,v2]", \ "Define 2 values and sort them to define the minimum and maximum" \ " z-coordinates of the minimap. If 'v2' is not entered, '-v1' is used" \ " as second value." ) #:def_opt( "XCENTER", "xcenter", "C", \ "", \ "Center the minimap in x-direction. This is done after AUTO and SET," \ " but before SCALE and SHIFT." ) #:def_opt( "YCENTER", "ycenter", "C", \ "", \ "Center the minimap in y-direction. This is done after AUTO and SET," \ " but before SCALE and SHIFT." ) #:def_opt( "ZCENTER", "zcenter", "C", \ "", \ "Center the minimap in z-direction. This is done after AUTO and SET," \ " but before SCALE and SHIFT." ) #:def_opt( "CENTER", "center", "C", \ "", \ "Center the minimap in all 3 directions. This is a short cut for" \ " {--xcenter --ycenter --zcenter}." ) #:def_opt( "SCALE", "scale", "CP", \ "vector[@origin]", \ "Transform the data: Scale all coordinates and size values by 'vector'" \ " relative to the point 'origin'. If the origin is not set, @0,0,0@ is" \ " used instead.\n" \ " Negative values mirror the coordinates. Each parameter is either a" \ " vector expression or a comma separated expression list of" \ " coordinates ('x,z' or 'x,y,z').\n" \ " Transformations are calculated in the order SCALE, SHIFT, ROTATE," \ " TRANSLATE." ) #:def_opt( "SHIFT", "shift", "CP", \ "vector", \ "Transform the data: Add 'vector' to all coordinates. It's simlar to" \ " {--translate}, but the addition is done before rotation. The" \ " parameter is either a vector expression or a comma separated" \ " expression list of coordinates ('x,z' or 'x,y,z').\n" \ " Transformations are calculated in the order SCALE, SHIFT, ROTATE," \ " TRANSLATE." ) #:def_opt( "XSS", "xss", "CP", \ "x1old,x1new,x2old,x2new", \ "--xss (x-scale-shift) calculates the X values of {--scale} and" \ " {--shift}, so that old values are transformed to the new values. The" \ " parameters are numbers or expression." ) #:def_opt( "YSS", "yss", "CP", \ "y1old,y1new,y2old,y2new", \ "--yss (y-scale-shift) calculates the Y values of {--scale} and" \ " {--shift}, so that old values are transformed to the new values. The" \ " parameters are numbers or expression." ) #:def_opt( "ZSS", "zss", "CP", \ "z1old,z1new,z2old,z2new", \ "--zss (z-scale-shift) calculates the Z values of {--scale} and" \ " {--shift}, so that old values are transformed to the new values. The" \ " parameters are numbers or expression." ) #:def_opt( "ROT", "rot", "CP", \ "degree[@origin]", \ "Transform the data: Rotate all coordinates and rotation values by the" \ " angle 'degree' (is a vector) around the 3 axes. All 3 axes goes" \ " through the point 'origin'. If the origin is not set, @0,0,0@ is" \ " used instead.\n" \ " Each parameter is either a vector expression or a comma separated" \ " expression list of coordinates ('x,y,z').\n" \ " Option --rot is an alternative for {--xrot}, {--yrot} and {--zrot}" \ " to define all 3 rotations in one step. Transformations are" \ " calculated in the order SCALE, SHIFT, X-ROTATE, Y-ROTATE, Z-ROTATE," \ " TRANSLATE." ) #:def_opt( "XROT", "xrot", "CP", \ "degree[@origin]", \ "Transform the data: Rotate all coordinates and rotation values by the" \ " angle 'degree' around the x-axis, that goes through the point" \ " 'origin'. If the origin is not set, @0,0,0@ is used instead.\n" \ " Each parameter is either a vector expression or a comma separated" \ " expression list of coordinates ('y,z' or 'x,y,z').\n" \ " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE," \ " Y-ROTATE, Z-ROTATE, TRANSLATE." ) #:def_opt( "YROT", "yrot|hrot", "CP", \ "degree[@origin]", \ "Transform the data: Rotate all coordinates and rotation values by the" \ " angle 'degree' around the x-axis, that goes through the point" \ " 'origin'. If the origin is not set, @0,0,0@ is used instead. This is" \ " a horizontal counterclockwise rotation and the old option name" \ " --hrot can also used.\n" \ " Each parameter is either a vector expression or a comma separated" \ " expression list of coordinates ('x,z' or 'x,y,z').\n" \ " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE," \ " Y-ROTATE, Z-ROTATE, TRANSLATE." ) #:def_opt( "ZROT", "zrot", "CP", \ "degree[@origin]", \ "Transform the data: Rotate all coordinates and rotation values by the" \ " angle 'degree' around the z-axis, that goes through the point" \ " 'origin'. If the origin is not set, @0,0,0@ is used instead.\n" \ " Each parameter is either a vector expression or a comma separated" \ " expression list of coordinates ('x,y' or 'x,y,z').\n" \ " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE," \ " Y-ROTATE, Z-ROTATE, TRANSLATE." ) #:def_opt( "YPOS", "ypos", "CP", \ "pos", \ "This option defines an Y position for KMP:CKPT transformations. It" \ " has only impact to X and Z rotations (Options {--xrot} and" \ " {--zrot}). If not set, the mean y of the active rotation origins are" \ " used." ) #:def_opt( "TRANSLATE", "translate|trans", "CP", \ "vector", \ "Transform the data: Add 'vector' to all coordinates. It's simlar to" \ " {--shift}, but the addition is done after rotation. The parameter is" \ " either a vector expression or a comma separated expression list of" \ " coordinates ('x,z' or 'x,y,z'). @--trans@ is a short cut.\n" \ " Transformations are calculated in the order SCALE, SHIFT, ROTATE," \ " TRANSLATE." ) #:def_opt( "NULL", "null", "C", \ "", \ "Create a neutral transformation without affecting the coordinates." \ " The only influence is, that the dependent values (like maximum) are" \ " re-calculated as if a transformation has taken place." ) #:def_opt( "NEXT", "next", "C", \ "", \ "Close the current transformation step with all scaling, shifting," \ " rotation and translation options and open a new step with cleared" \ " options. On transformation each step is logical done one by one. In" \ " real, one total transformation matrix is calculated and used for" \ " fast transformations.\n" \ " If option --next is used, the ability for modifying the scale and" \ " rotation vectors (not the positions) of different KMP sections is" \ " nearly always lost. A warning is printed if this occurs." ) #:def_opt( "ASCALE", "ascale", "CP", \ "factor@dir", \ "Transform the data and do an axis scale: Close the current" \ " transformation step like {--next} and scale the data by @'factor'@" \ " into the direction given by the vector @'dir'@. Store the resulting" \ " matrix as single transformation step and open a new one.\n" \ " This kind of transformation is EXPERIMENTAL!" ) #:def_opt( "AROT", "arot", "CP", \ "degree[@pos1]@pos2", \ "Transform the data and do an axis rotation: Close the current" \ " transformation step like {--next} and rotate the data by @'degree'@" \ " around the axis defined by the 2 points. If @'pos1'@ is not set, use" \ " @0,0,0@ instead. Store the resulting matrix as single transformation" \ " step and open a new one.\n" \ " This kind of transformation is EXPERIMENTAL!" ) #:def_opt( "TFORM_SCRIPT", "tform-script|tformscript", "CP", \ "script", \ "Load the script and execute it by the text parser.\n" \ " Then for each coordinate (2D and 3D), call the macro @TRANSFORM@" \ " after all other transformations. Call it without parameters and set" \ " variable @$$I@ with a zero based index of all vertices, variable" \ " @$$D@ to the dimension (2 or 3) and the variable @$$P@ to the vector" \ " of the current vertex. If the macro returns a vector, it is the new" \ " position.\n" \ " For each file, macro @BEGIN@ is called at the beginning and @END@" \ " after processing all points, but only, if the macros are defined." \ " For @END@, variable @$$I@ is set to the number of processed vertices" \ " in the current file.\n" \ " Before each macro call, the private and local variables are cleared" \ " and only global parameters are permanent. The zero based index is" \ " cleared for each new source. The parameters of the macro calls are" \ " defined in the local name space." ) #:def_opt( "MINIMAP", "minimap", "C", \ "", \ "Fix the minimap position in the same way as {wszst MINIMAP --auto}." \ " All other minimap related options are ignored for the minimap" \ " processing." ) #:def_opt( "RM_GOBJ", "rm-gobj|rmgobj", "CP", \ "objlist", \ "Remove objects from the KMP section @GOBJ@. Therefor a comma" \ " separated object list with single values like @'a'@ or ranges like" \ " @'a:b'@ is expected. @'a'@ and @'b'@ are numbers, object names" \ " (prefixed by 'o$$') or any other parser expressions." ) #:def_opt( "BATTLE", "battle", "GO", \ "[=mode]", \ "@MODE@ is either @OFF@, @AUTO@ (default) or @ON@. Without value, @ON@" \ " is used.\n" \ " If mode is @ON@, assume a battle arena and enable a special battle" \ " support. If mode is @OFF@, disable special battle arena support. If" \ " mode is @AUTO@, analyse the KMP and estimate, if it is a battle" \ " areana. Modes @ON@ and @OFF@ override KMP parameter @BATTLE-MODE@." ) #:def_opt( "EXPORT_FLAGS", "export-flags|exportflags|exflags", "GO", \ "[=mode]", \ "@MODE@ is either @OFF@, @AUTO@ (default) or @ON@. Without value, @ON@" \ " is used. --exflags is an alternative name for the option.\n" \ " If mode is @ON@, this feature is forced: On creating a KMP text" \ " file, the option @EXPORT-FLAGS@ is always set to 1. On creating a" \ " binary KMP file, the flags are always exported as lowest byte of the" \ " scale factors or x-rotation.\n" \ " If mode is @OFF@, this feature is totally disabled. If mode is not" \ " @AUTO@, KMP parameter @EXPORT-FLAGS@ is overridden." ) #:def_opt( "ROUTE_OPTIONS", "route-options|routeoptions|ropt", "GO", \ "[=mode]", \ "@MODE@ is either @OFF@, @AUTO@ (default) or @ON@. Without value, @ON@" \ " is used.\n" \ " On mode @ON@, the new commands @$$PREV@ and @$$NEXT@ are printed" \ " for each group of KMP sections ENPT and ITPT. On mode @AUTO@, the" \ " command is only printed, if any option is set or if parameter" \ " @SHOW-OPTIONS@ is >0. On mode @OFF@, this feature is totally" \ " disabled to create KMP text files that are compatible with versions" \ " <1.60a.\n" \ " This option exists only for a transition period. Its behaviour will" \ " be changed in the future. @--ropt@ is a short cut." ) #:def_opt( "WIM0", "wim0", "GO", \ "[=mode]", \ "@MODE@ is either @OFF@, @AUTO@ (default) or @ON@. Without value, @ON@" \ " is used.\n" \ " If mode is @ON@, a KMP section called WIM0 is added on binary KMP" \ " creation. The sections contains information for Wiimms tools.\n" \ " If mode is @OFF@, this feature is totally disabled. If mode is not" \ " @AUTO@, KMP parameter @KMP-WIM0@ is overridden." ) #:def_opt( "SLOT", "slot", "CP", \ "keyword", \ "Patch a track file to run at the specified slot. KMP and KCL may be" \ " modified. BRRES files may be added to or removed from SZS. The main" \ " keywords are @DAISY, DESERT, SHERBET, SHYGUY, STANDARD@ and @MOST@." \ " Slot numbers (except '42' and '4.2') and different other track names" \ " are also accepted. For some conversions, the auto-add library is" \ " needed." ) #:def_opt( "LOAD_KCL", "load-kcl|loadkcl", "GP", \ "file", \ "Load a KCL or OBJ file for reference issues." ) #:def_opt( "KCL", "kcl", "GP", \ "list", \ "Set global options for KCL processing. Parameter @'list'@ is a comma" \ " separated list of keywords. A minus sign before a keyword disables a" \ " setting. Each occurrence of the option will only change entered" \ " settings and all other settings are untouched.\n" \ " Keyword @DEFAULT@ resets the default settings and @CLEAR@ disables" \ " all. Keywords @SMALL, MEDIUM@ and @CHARY@ select the default" \ " parameters for the octree creation. The other allowed keywords are:" \ " @FAST, NEW, CENTER, ROUND, NORMALS, MTL, WIIMM, TRIANGLES, OUT-SWAP," \ " G, USEMTL, CLIP, IN-SWAP, AUTO, HEX4, HEX23, HEX, DROP-UNUSED," \ " DROP-FIXED, DROP-INVALID, DROP, RM-FACEDOWN, RM-FACEUP, FIX-ALL," \ " TINY-0 ... TINY-7, CONV-FACEUP, WEAK-WALLS, SORT, INPLACE, SILENT@" \ " and @LOG@." ) #:def_opt( "KCL_FLAG", "kcl-flag|kclflag", "CP", \ "joblist", \ "Modify the KCL flag of KCL files. A comma separated job list in the" \ " format @'srclist=dest'@ is expected. @'srclist'@ is a plus sign" \ " separated list with single values like @@, @T@ and" \ " @/@ or ranges like @:@, @T:@ and" \ " @:/@. @''@ is a complete KCL flag in the range" \ " of @0..0xffff@. @''@ are only the base types in the range of" \ " @0..0x1f@. If @@ is present, it marks the relevant bits. For" \ " the @T@ variant, the mask is set to @0x1f@.\n" \ " All KCL flags of the source list are assigned to the new value" \ " @'dest'@, but only the set bits of @''@ are modified. A later" \ " definition overrides the previous one." ) #:def_opt( "KCL_SCRIPT", "kcl-script|kclscript", "CP", \ "script", \ "After reading a KCL source file and executing all transformations," \ " the text file @'script'@ is executed by the internal text parser." \ " The script should use the parser functions @tri$$*()@ to read and" \ " modify the triangle positions and flags, or to add or remove" \ " complete triangles.\n" \ " If this option is used multiple times, each script is executed in" \ " the entered order." ) #:def_opt( "TRI_AREA", "tri-area|triarea", "GP", \ "EXPR", \ "Define the minimal area size of KCL triangles. The intention is to" \ " ignore triangles that are generally to small. @EXPR@ is a floating" \ " point number or expression. Triangles are invalidated if their area" \ " size is smaller than @EXPR@. The test is executed after reading" \ " files, after transformations, and after calculating normals and" \ " lengths. Values between 0.01 and 4.0 are recommended. The careful" \ " value 1.0 is used as default. Value 0 disables this filter" \ " functionality." ) #:def_opt( "TRI_HEIGHT", "tri-height|triheight|tri-ht|triht", "GP", \ "EXPR", \ "Define the minimal height of KCL triangles. The intention is to" \ " ignore deformed triangles (very slim, but long). @EXPR@ is a" \ " floating point number or expression. Triangles are invalidated if at" \ " least 1 of the 3 heights is smaller than @EXPR@. The test is" \ " executed after reading files, after transformations, and after" \ " calculating normals and lengths. Values between 0.01 and 2.0 are" \ " recommended. The careful value 1.0 is used as default. Value 0" \ " disables this filter functionality.\n" \ " --tri-ht is an alternative name for the option." ) #:def_opt( "FLAG_FILE", "flag-file|flagfile", "CP", \ "filename", \ "Define a flag file if scanning an OBJ file (KCL processing). The file" \ " name may contain %-escapes. Set it to an empty string to disable" \ " flag files at all.\n" \ " The tool search the flag file in the following order until found:" \ " File defined by --flag-file; OBJ file name with replaced extension" \ " ('a.obj' becomes 'a.flag'); OBJ file name with appended extension" \ " ('a.obj' becomes 'a.obj.flag')." ) #:def_opt( "KMP", "kmp", "GP", \ "list", \ "Set global options for KMP processing. Parameter @'list'@ is a comma" \ " separated list of keywords. A minus sign before a keyword disables a" \ " setting. Each occurrence of the option will only change entered" \ " settings and all other settings are untouched.\n" \ " Keyword @DEFAULT@ resets the default settings and @CLEAR@ disables" \ " all. The other allowed keywords are: @FORCE, NEW, RM-SPCITEM, LEFT," \ " RIGHT, WIDE, NARROW, FIX-CKPH, FIX-ENPH, FIX-ITPH, FIX-PH," \ " FIX-CKNEXT, FIX-CKJGPT, FIX-CK, FIX-ALL, MASK-PFLAGS, RM-LECODE," \ " PURGE-GOBJ, FULL-DEFOBJ, DUMP-CLASS, DUMP-ONEWAY, DUMP-ALL, 1LAP ..." \ " 9LAPS, MAX-LAPS, RM-EMPTY, TINY-0 ... TINY-7, INPLACE, SILENT@ and" \ " @LOG@." ) #:def_opt( "SPEED_MOD", "speed-mod|speedmod", "GP", \ "factor", \ "The speed modifier is a user extensions to change the basic speed of" \ " all vehicles. The speed factor itself is stored into KMP:STGI" \ " section of a track.\n" \ " If --speed-mod is set to a value >0.0, then the last 2 bytes of" \ " the STGI section are patched. The value 0.0 reset these 2 bytes and" \ " deactivates the speed modifier." ) #:def_opt( "KTPT2", "ktpt2", "GP", \ "vector", \ "Insert or replace a second KTPT. Use VECTOR as new position. VECTOR" \ " is either @X,Z@ or @X,Y,Z@ or an expression. Set Y to 0 for an" \ " automatic defined height.\n" \ " If the first 4 characters of VECTOR are 'AUTO' (ignoring case)," \ " then the position is calculated automatically and set to the" \ " recommendation of command @wkmpt KTPT@.\n" \ " The tool looks for the nearest lap counter (CKPT with mode 0) and" \ " adjust the KTPT: The direction of the lap counter is copied and the" \ " KTPT is moved to the lap counter line using the new direction.\n" \ " LE-CODE uses the second KTPT to draw the finish line at another" \ " place away from the start position." ) #:def_opt( "TFORM_KMP", "tform-kmp|tformkmp|tkmp", "GP", \ "list", \ "Select KMP sections and objects for a transformation. @--tkmp@ is a" \ " short cut. The option expects a comma separated list of keywords." \ " Non ambiguous of keywords are allowed and minus signs within" \ " keywords are optional (e.g. @GOBJS@). A minus sign before a keyword" \ " disables transformation of the related section or object.\n" \ " Sections are selected by the KMP section names @AREA, CAME, CKPT," \ " CNPT, ENPT, GOBJ, ITPT, JGPT, KTPT, MSPT@ and @POTI@.\n" \ " Objects are selected by the keywords @AREA-POSITION, AREA-ROTATE," \ " AREA-SCALE, CAME-POSITION, CKPT-POSITION, CNPT-POSITION," \ " CNPT-ROTATE, ENPT-POSITION, ENPT-SCALE, GOBJ-POSITION, GOBJ-ROTATE," \ " GOBJ-SCALE, ITPT-POSITION, ITPT-SCALE, JGPT-POSITION, JGPT-ROTATE," \ " KTPT-POSITION, KTPT-ROTATE, MSPT-POSITION, MSPT-ROTATE@ and" \ " @POTI-POSITION@.\n" \ " The keywords @NONE@ and @ALL@ (default) complete the field." ) #:def_opt( "REPAIR_XPF", "repair-xpflags|repairxpflags|repxpf", "CP", \ "file", \ "Load a KMP file and use it to repair the settings of the extended" \ " presence flags, if they are destroyed by another KMP tool." \ " @--repxpf@ is a short cut for this option." ) #:def_opt( "GAMEMODES", "gamemodes|gmodes", "CP", \ "list", \ "Filter the list of combinations. The parameter is a comma separated" \ " list of keywords: @AUTO@: Add a automatic mode without conditions" \ " first. @STANDARD@ (or @STD@): Add standard modes. @1STANDARD@ (or" \ " @1STD@): Add standard modes first. @BALLOON@: Add balloon battle" \ " modes. @COIN@: Add coin runners modes. @BATTLE@: Short cut for" \ " 'BALLOON,COIN'. @VERSUS@ (or @VS@): Add versus modes. @ITEMRAIN@:" \ " Add itemrain modes. @RACE@: Short cut for 'VERSUS,ITEMRAIN'. @ALL@" \ " (default): Short cut for 'STANDARD,BATTLE,RACE'. @NO-MODES@: Exclude" \ " 'ALL' and create auto modes only. @ENGINE@: Include engine classes" \ " (default). @NO-ENGINE@: Exclude engine classes. @RANDOM@: Include" \ " random modes (default). @NO-RANDOM@: Exclude random modes." \ " @OFFLINE@: Filter offline modes. @ONLINE@: Filter online modes." \ " @NO-TT@: Exclude time trial. @TT@: Force a time trial scenario, even" \ " if it is a duplicate. @FULL@: Don't eliminate duplicates from list" \ " (up to 1573 modes). @NSORT@: Sort the list by name. @ISORT@: Sort" \ " the list by index. @DEBUG@: Print a debug info about this option." ) #:def_opt( "MDL", "mdl", "GP", \ "list", \ "Set global options for MDL processing. To enable MDL patching, use" \ " option {--patch-file} and select BRRES files for patching.\n" \ " Parameter @'list'@ is a comma separated list of keywords. A minus" \ " sign before a keyword disables a setting. Each occurrence of the" \ " option will only change entered settings and all other settings are" \ " untouched.\n" \ " A MDL transformation (controlled by the transformation options) is" \ " only done, if at least one of the keywords @VECTOR@ or @VERTEX@ is" \ " set.\n" \ " Keyword @DEFAULT@ resets the default settings (@VERTEX@) and" \ " @CLEAR@ disables all. The other allowed keywords are: @VECTOR," \ " MATRIX, VERTEX, PARENT, CHILD@ and @LOG@." ) #:def_opt( "PAT", "pat", "GP", \ "list", \ "Set global options for PAT processing. Parameter @'list'@ is a comma" \ " separated list of keywords. A minus sign before a keyword disables a" \ " setting. Each occurrence of the option will only change entered" \ " settings and all other settings are untouched.\n" \ " Keyword @DEFAULT@ resets the default settings and @CLEAR@ disables" \ " all. The other allowed keywords are: @AUTO, SIMPLE, COMPLEX, BOTH," \ " SILENT@ and @LOG@." ) #:def_opt( "PATCH_FILE", "patch-file|patchfile|pfile", "GP", \ "list", \ "Define, which kind of KMP, KCL and BRRES/MDL files are objects for" \ " patching. @--pfile@ is a short cut.\n" \ " Parameter @'list'@ is a comma separated list of keywords. A minus" \ " sign before a keyword disables a setting. Each occurrence of the" \ " option will only change entered settings and all other settings are" \ " untouched.\n" \ " Keyword @DEFAULT@ resets the default settings (@TRACK,LOG@) and" \ " @CLEAR@ disables all. The other allowed keywords are: @KMP, KCL," \ " OTHER-KCL, ALL-KCL, MODEL, MAP, VRCORN, OTHER-BRRES, ALL-BRRES," \ " TRACK (=KMP,KCL,MODEL,MAP,VRCORN), ALL, LOG@ and @LOG-ALL@." ) #:def_opt( "KMG_LIMIT", "kmg-limit|kmglimit", "GP", \ "seconds", \ "Limit the run time for Ballon Battle and Coin Runners to the given" \ " time in SECONDS. Smaller values are not changed. The limitation is" \ " carried out after loading a binary file and before scanning a text" \ " file. Value 0 disables this option." ) #:def_opt( "KMG_COPY", "kmg-copy|kmgcopy", "GP", \ "id", \ "Make all 10 slots of a KMG file equal after loading a binary file and" \ " before scanning a text file. ID is either a slot index (0..9) or a" \ " slot name (A11..A25) and declares the source slot. Value -1 disables" \ " this option. If ID contains brackets [...], then it is analysed as" \ " an arena name and the part between the brackets is searched for" \ " attributes A11..A25." ) #:def_opt( "LT_CLEAR", "lt-clear|ltclear", "G", \ "", \ "Clear the LEX/TEST section and remove the section and course.lex if" \ " empty. This option is executed before all other --lt-* options." ) #:def_opt( "LT_ONLINE", "lt-online|ltonline", "GP", \ "mode", \ "Set LEX/TEST parameter OFFLINE-ONLINE to this MODE. MODE is one of" \ " @AUTO@ (default), @NEVER@ or @ALWAYS@. Only track.szs files are" \ " modified. If needed, file course.lex and section TEST are created or" \ " removed if empty." ) #:def_opt( "LT_N_PLAYERS", "lt-n-players|lt-nplayers|ltnplayers", "GP", \ "offline,online", \ "Set LEX/TEST parameters N-OFFLINE and N-ONLINE to these integer" \ " values. Only track.szs files are modified. If needed, file" \ " course.lex and section TEST are created or removed if empty." ) #:def_opt( "LT_COND_BIT", "lt-cond-bit|lt-condbit|ltcondbit", "GP", \ "bitnum", \ "Set LEX/TEST parameter COND-BIT to this integer value. Use -1 to" \ " deactivate this COND-BIT. Only track.szs files are modified. If" \ " needed, file course.lex and section TEST are created or removed if" \ " empty." ) #:def_opt( "LT_GAME_MODE", "lt-game-mode|lt-gamemode|ltgamemode", "GP", \ "mode", \ "Set LEX/TEST parameter GAME-MODE to this MODE. MODE is one of @AUTO@" \ " (default), @BALLOON, COIN, VERSUS@ or @ITEMRAIN@. Only track.szs" \ " files are modified. If needed, file course.lex and section TEST are" \ " created or removed if empty." ) #:def_opt( "LT_ENGINE", "lt-engine|ltengine", "GP", \ "mode", \ "Set LEX/TEST parameter ENGINE to this MODE. MODE is one of @AUTO@" \ " (default), @BATTLE, 50CC, 100CC, 150CC, 200CC, 150M@ or @200M@. Only" \ " track.szs files are modified. If needed, file course.lex and section" \ " TEST are created or removed if empty." ) #:def_opt( "LT_RANDOM", "lt-random|ltrandom", "GP", \ "index", \ "Force a random scenario, if INDEX is between 1 and 8. Value 0 enables" \ " auto selection and -1 disables this option. Only track.szs files are" \ " modified. If needed, file course.lex and section TEST are created or" \ " removed if empty." ) #:def_opt( "LEX_PURGE", "lex-purge|lexpurge", "G", \ "", \ "Delete LEX sections without any impact. Delete sub-file course.lex if" \ " it no longer contains a section. This option is executed after all" \ " --lt-* and --lex-* options." ) #:def_opt( "LEX_FEATURES", "lex-features|lexfeatures", "G", \ "", \ "Calculate LEX setion FEAT (features) by analysing the track file. If" \ " no features found, delete the section and the possibly empty" \ " sub-file course.lex. If features found, then insert the section or" \ " update an existing section. If necessary, the sub-file course.lex is" \ " created. This option is executed after all --lt-* options and after" \ " --lex-purge.\n" \ " CTGP uses the FEAT section to manage ghosts." ) #:def_opt( "LEX_RM_FEAT", "lex-rm-features|lexrmfeatures", "G", \ "", \ "Remove LEX setion FEAT (features) if exists and the possibly empty" \ " sub-file course.lex. This option is ignored if --lex-features is" \ " set. It is executed after all --lt-* options and after --lex-purge." ) #:def_opt( "LOAD_BMG", "load-bmg|loadbmg", "CMP", \ "file", \ "Load immediately the file to fill an internal message pool. The" \ " option can be used multiple times to fill the message pool by" \ " different sources. A later message overrides the previous message.\n" \ " The internal message pool is patched by all {--patch-bmg} options." ) #:def_opt( "PATCH_BMG", "patch-bmg|patchbmg|pb", "CMP", \ "mode[cond][=param]", \ "This option specifies a BMG patch mode. Some of the modes need a" \ " parameter or a file name of a BMG patch file (raw or text BMG), both" \ " separated by an equal sign. Modes with required file names are" \ " @PRINT, REPLACE, INSERT, OVERWRITE, DELETE, MASK, EQUAL@ and" \ " @NOTEQUAL@. Modes with text parameter are @FORMAT@, @REGEXP@ and" \ " @RM-REGEXP@. Standalone modes are @ID, ID-ALL, UNICODE, RM-ESCAPES," \ " RM-CUPS, CT-COPY, CT-FORCE-COPY, CT-FILL, LE-COPY, LE-FORCE-COPY," \ " LE-FILL, X-COPY, X-FORCE-COPY@ and @X-FILL@. Unique abbreviations" \ " are allowed.\n" \ " The optional condition @COND@ is either '@?MID@' or '@!MID@'. In" \ " case of '@?MID@', the patch is only applied if the message id MID" \ " already exists. In case of '@!MID@', the patch is only applied if" \ " the message id MID does not exists.\n" \ " If this option is used multiple times, all patch files will be" \ " processed in the entered order." ) #:def_opt( "MACRO_BMG", "macro-bmg|macrobmg|mb", "CMP", \ "file", \ "Load a BMG file and add the messages to the macro library; already" \ " existing entries are replaced. The macro library is accessed by" \ " escape sequence @\\m{{MID}@ as fallback, if the active file has not" \ " already defined the message @MID@ by itself." ) #:def_opt( "FILTER_BMG", "filter-bmg|filterbmg|fb|msg", "CMP", \ "list", \ "If this option is set, the BMG messages are filtered by this list." \ " Only enabled messages are exported to the output BMG file (binary or" \ " text).\n" \ " The parameter is a list of message ids (short MID, 'Txx' or 'Uxx'" \ " or Mxx' or hex number) or message ranges (MID:MID) or one of the" \ " keywords @NONE, IDENT (=ID), PARAM, CUPS, TRACKS, ARENAS, CHAT," \ " CTCODE (=CT), CTUPS, CTTRACKS, CTARENAS, CTREFS, LECODE (=LE)," \ " LEUPS, LETRACKS, LEARENAS, LEREFS, XCODE (=X), XUPS, XTRACKS," \ " XARENAS, XREFS, ALLCODE, ALLUPS, ALLTRACKS, ALLARENAS, ALLREFS," \ " GENERIC@ or @ALL@. If an element is preceded by a minus sign, it is" \ " removed from the filter list (disabled).\n" \ " With v2.01a, this option was renamed from --msg to the more" \ " meaningful name --filter-bmg. The old name is still available." ) #:def_opt( "LE_MENU", "le-menu|lemenu", "C", \ "", \ "Patch language independent SZS files from directory .../Scene/UI/ to" \ " change the menu as required by LE-CODE to be able to select tracks" \ " from more than 8 cups." ) #:def_opt( "TITLE_SCREEN", "title-screen|titlescreen", "CP", \ "dir", \ "Specify a directory from which to search and replace title screens." \ " Title screens only appear in the file 'Title.szs' and there in the" \ " sub-directory './title/timg/'. If the replacement file is not found," \ " then search file 'title1.szs' to patch standard files or file" \ " 'title2.szs' to patch bokeboke files." ) #:def_opt( "CUP_ICONS", "cup-icons|cupicons", "CP", \ "image", \ "Load given image, convert it to TPL.CMPR and add the result as" \ " sub-files 'button/timg/ct_icons.tpl' and as" \ " 'control/timg/ct_icons.tpl' to files 'Channel.szs', 'MenuMulti.szs'" \ " and 'MenuSingle.szs'. Both sub-files are always linked, so that" \ " storage space is saved." ) #:def_opt( "NO_COPY", "no-copy|nocopy", "C", \ "", \ "Don't copy a file if it was not modified." ) #:def_opt( "CACHE", "cache", "GP", \ "dir", \ "Define a directory for a SZS cache. If creating a YAZ0 compressed" \ " file with standard compression (level 9), the cache is searched for" \ " the compressed version. File cache-content.txt is used as file list" \ " with hash values. If the cache file is not found or the content" \ " differ, the file is (re-)created and exit status 2=differ is" \ " returned.\n" \ " Background: Loading a compressed SZS and content verification is" \ " much faster than YAZ compression.\n" \ " For legay reasons: If parameter DIR is a file, it is split into" \ " directory and base name. The directory is used for the cache" \ " directory and the base name for option {--cname}, but only if" \ " {--cname} is not used." ) #:def_opt( "CNAME", "cname", "GP", \ "name", \ "Name of the first cache file. This parameter overrides the generated" \ " cache name. The name is used only once for the very first cache" \ " candidate." ) #:def_opt( "LOG_CACHE", "log-cache|logcache", "GP", \ "file", \ "Define a file to log chache activities. The file is openend in" \ " append-mode." ) #:def_opt( "PARALLEL", "parallel", "G", \ "", \ "Tell the tool that it will be called multiple times in parallel." \ " Currently it only has an effect if {--cache} is enabled." ) #:def_opt( "ID", "id", "C", \ "", \ "Print an ID with 8 characters instead of a SHA-1 sum with 40" \ " characters. The SHA-1 sum is used to calculate the ID. The ID" \ " consists of '0'-'9' and 'a'-'v' (32 different characters)." ) #:def_opt( "BASE64", "base64", "CO", \ "[=mode]", \ "Encode the the checksum string as BASE64 with 27 characters instead" \ " of hex. If a parameter is set, it acts like {--coding=mode}." ) #:def_opt( "DB64", "db64", "CO", \ "[=mode]", \ "Encode the the checksum string and some length as BASE64 with 32" \ " characters instead of hex for database searches. This options" \ " implies {--coding=URL} if no other coding is defined. If a parameter" \ " is set, it acts like {--coding=mode}. Option {--db64} has priority" \ " over {--base64}." ) #:def_opt( "CODING", "coding", "CP", \ "mode", \ "Define the coding of the non alphanumeric characters for BASE64:" \ " STANDARD (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)." ) #:def_opt( "VERIFY", "verify", "C", \ "", \ "Calculate the checksum and compare the filename and return exit" \ " status (0=valid, 2=differ). The result is valid, if the checksum is" \ " found with a leading and a following point or minus sign. If" \ " {--quiet} is set, error messages are suppressed." ) #:def_opt( "ROUND", "round", "C", \ "", \ "Print additional lines with rounded values (to 3 and 2 bytes for" \ " floats and 7 and 6 bytes for doubles)." ) #:def_opt( "LONG", "l|long", "CM", \ "", \ "Print in long format. Multiple usage possible." ) #:def_opt( "NO_HEADER", "H|no-header|noheader", "C", \ "", \ "Suppress printing of header and footer." ) #:def_opt( "BRIEF", "B|brief", "C", \ "", \ "Suppress information lines in decoded text files. This includes" \ " syntax information ({--no-header}). If set twice, the output of" \ " unneeded sections is also suppressed." ) #:def_opt( "IN_ORDER", "in-order|inorder", "CM", \ "", \ "Process the input files in order of the command line and don't delete" \ " duplicates." ) #:def_opt( "PIPE", "pipe", "CM", \ "", \ "Use pipe sign instead of spaces to separate columns." ) #:def_opt( "DELTA", "delta", "C", \ "", \ "Print only modified records or sections on text output. Supported" \ " file formats until now: @GEOHIT@, @ITEMSLOT@, @KMG@ and @OBJFLOW@." \ " If set twice, limit output to modified records (only relevant for" \ " @ITEMSLOT@)." ) #:def_opt( "DIFF", "diff", "C", \ "", \ "On text output, print only differences from original files. It's a" \ " short cut for --no-header --brief --brief --delta --delta." \ " Additional, the output is limited to data sections." ) #:def_opt( "BMG_ENDIAN", "bmg-endian|bmgendian", "CP", \ "name", \ "Force an endian for new BMG files. Accepted values are @BIG@ or @BE@" \ " for big endian, @LITTLE@ or @LE@ for little endian and @AUTO@ for" \ " automatic detection (default).\n" \ " Mario Kart Wii uses big endian; the default if no other endian is" \ " defined." ) #:def_opt( "BMG_ENCODING", "bmg-encoding|bmgencoding", "CP", \ "name", \ "Force an encoding for new BMG files. Accepted encoding names are" \ " @CP-1252@, @UTF-16BE@ (or @UTF-16@), @SHIFT-JIS@, @UTF-8@ and @AUTO@" \ " for automatic detection (default). Same keywords without minus signs" \ " are accepted too.\n" \ " Mario Kart Wii uses encoding @UTF-16BE@; the default if no other" \ " encoding is defined." ) #:def_opt( "BMG_INF_SIZE", "bmg-inf-size|bmginfsize", "CP", \ "size", \ "Defines the 'INF1' size of new BMG files between 4 and 1000. The" \ " first 4 bytes of a INF1 record is an offset into the string pool and" \ " the remaining bytes the attributes. Maximal 40 attribute bytes are" \ " supported and additional bytes are assumed to be NULL. All BMG files" \ " of MKW have a size of 8." ) #:def_opt( "BMG_MID", "bmg-mid|bmgmid", "CO", \ "[mode]", \ "Control the creation of BMG section @MID1@. Suppress the creation, if" \ " mode is @OFF@. Force the creation, if mode is @ON@. On mode @AUTO@" \ " (default), the source is analysed for the decision." ) #:def_opt( "FORCE_ATTRIB", "force-attrib|forceattrib", "CP", \ "attrib", \ "Forces, that all attributes are set to this vector." ) #:def_opt( "DEF_ATTRIB", "def-attrib|defattrib", "CP", \ "attrib", \ "Define the default attributes for BMG files. If not set, the default" \ " attributes are estimated. On text output, strings with default" \ " attributes are printed without attribute vector. The usual default" \ " attribute for MKW is @[1]@." ) #:def_opt( "NO_ATTRIB", "no-attrib|noattrib", "C", \ "", \ "Suppress the output of any BMG attributes if creating BMG text files." ) #:def_opt( "X_ESCAPES", "x-escapes|xescapes", "C", \ "", \ "Use \\x{{} escapes instead of \\z{{} escapes." ) #:def_opt( "OLD_ESCAPES", "old-escapes|oldescapes", "C", \ "", \ "To be compatible with v1.43 and earlier, print 1A escape sequences" \ " with total size of >12 bytes as single words using \\x{{}. Also" \ " don't use \\x{{} and \\u{{} with parameter lists." ) #:def_opt( "SINGLE_LINE", "1|single-line|singleline", "C", \ "", \ "If set, don't print continuation lines for BMG text output. If set" \ " twice, print only single text lines and suppress attributes like" \ " option {--no-attrib} does it." ) #:def_opt( "NO_BMG_COLORS", "no-bmg-colors|nobmgcolors", "C", \ "", \ "If set, suppress the output of '\\c{{color}' escape sequences for" \ " colors definitions in BMG text output to be compatible with old" \ " versions of the tools." ) #:def_opt( "BMG_COLORS", "bmg-colors|bmgcolors", "C", \ "", \ "Force output of '\\c{{color}' escape sequences with names, even for" \ " foreign (not MKWii) BMG files." ) #:def_opt( "NO_BMG_INLINE", "no-bmg-inline|nobmginline", "C", \ "", \ "Print BMG attributes as separate line before the message definition" \ " to be compatible with versions until v1.39. The output for the" \ " standard value 0x01000000 is always suppressed. This was the default" \ " until v1.43." ) #:def_opt( "EXPORT", "X|export", "C", \ "", \ "Enable the export mode and create small and machine readable text" \ " files for easy post processing. The option works similar like @-HBB@" \ " for KMP and like @-HBl1@ for BMG text files." ) #:def_opt( "NO_PARAM", "P|no-param|noparam", "C", \ "", \ "Disable parameter support in decoded KMP text files." ) #:def_opt( "SORT", "S|sort", "CP", \ "mode", \ "Define a sort mode. Allowed keywords are: @NONE@ (default), @NAME," \ " OFFSET, U8, PACK, BRRES, BREFT@ and @AUTO@" ) #:def_opt( "MAX_FILE_SIZE", "M|max-file-size|maxfilesize", "GP", \ "size", \ "This security option defines the maximum file size for input files;" \ " larger files are ignored with a warning. The default unit is MiB and" \ " the default size is 100 MiB; that should be enough for standard" \ " usage." ) #:def_opt( "TRACKS", "T|tracks", "GP", \ "tracks", \ "Define a new track order. A comma separated list in the format" \ " @[a=]b@ or @a:=b@ is expected. @'a'@ and @'b'@ are track names or" \ " slot numbers. @'a'@ is the destination slot and @'b'@ the assigned" \ " track. If @'a'@ is omitted, the next slot is used; this means" \ " @[a=]b,c,d@ is possible.\n" \ " Tracks will only be exchanged so that always all tracks are" \ " assigned. But if using @':='@ the new slots are assigned without" \ " exchanging and the old values are lost." ) #:def_opt( "ARENAS", "A|arenas", "GP", \ "arenas", \ "Define a new arena order. A comma separated list in the format" \ " @[a=]b@ or @a:=b@ is expected. @'a'@ and @'b'@ are arena names or" \ " slot numbers. @'a'@ is the destination slot and @'b'@ the assigned" \ " arena. If @'a'@ is omitted, the next slot is used; this means" \ " @[a=]b,c,d@ is possible.\n" \ " Arenas will only be exchanged so that always all arenas are" \ " assigned. But if using @':='@ the new slots are assigned without" \ " exchanging and the old values are lost." ) #:def_opt( "AUTOADD_PATH", "autoadd-path|autoaddpath", "GP", \ "directory", \ "Define an alternative directory as autoadd library. The default is," \ " that the sub-directory called './auto-add/' of all search paths are" \ " used. Use {wszst config -ll} for tests." ) #:def_opt( "TRANSFORM", "x|transform", "CP", \ "list", \ "Convert image formats. A comma separated list with terms is expected." \ " A term have the syntax @'[SRC=]DEST'@. It means: convert @SRC@" \ " format into @DEST@ format. If @SRC=@ is not set, the destination" \ " format is used for all source formats. This makes only sense as last" \ " rule. If @DEST@ is empty no transformation is done for the source." \ " Examples: '@TPL@' or '@GRAY@' or '@BTI.IA8@' or" \ " '@TPL.I4+I8=IA8,TEX=,CMPR@'\n" \ " @SRC@ and @DEST@ are tuples of file, image and palette formats and" \ " of 2 more attributes. All parts are optional and separated by" \ " points, the order is irrelevant.\n" \ " Allowed file formats are: @TPL, TEX, BTI, BREFT-IMG (=BTIMG), PNG@" \ " (import). Allowed image formats are: @I4, I8, IA4, IA8, RGB565" \ " (=R565), RGB5A3 (=R3), RGBA32 (=R32), C4, C8, C14X2, CMPR@. Allowed" \ " palette formats are: @P-IA8 (=P8), P-RGB565 (=P565), P-RGB5A3" \ " (=P3)@. Attributtes are @PALETTE@, @NO-PALETTE@, @GRAY@, @COLOR@," \ " @ALPHA@ and @NO-ALPHA@.\n" \ " All terms are managed as list. For each graphic the list is" \ " iterated until the first SRC tuple of a term matches the graphic." \ " Then the destination tuple is used for the transformation.\n" \ " The command {wimgt TEST} prints a clearly arranged readable table" \ " as result of this option." ) #:def_opt( "STRIP", "strip", "C", \ "", \ "If creating a PNG file, don't add comments about creator and source" \ " formats." ) #:def_opt( "TEST", "t|test", "GM", \ "", \ "Run in test mode, modify nothing.\n" \ ">>> USE THIS OPTION IF UNSURE! <<<" ) #:def_opt( "FORCE", "force", "GM", \ "", \ "The tools analyse input files and reject files with invalid data" \ " structures. If --force is set, little repairable issues are ignored" \ " and a warning is printed.\n" \ "Option {--kmp force} does the same, but only for KMP files.\n" \ ">>> THE RESULT MAY BE INVALID OUTPUT FILES! <<<" ) #:def_opt( "REPAIR_MAGICS", "repair-magics|repairmagics", "GO", \ "[=mode]", \ "Control the reparing of missing or wrong magics of files and" \ " sub-files by analysing file path and file extension. @MODE@ is one" \ " of @OFF@ (default), @ANALYZE@ or @REPAIR@ (default, if set without" \ " mode). @OFF@ disables this feature, @ANALYZE@ enables it for" \ " analysis only, and @REPAIR@ repairs all magics while reading the" \ " files. Keyword @FNAME@ can be appended (separated by a comma) to" \ " give filename scanning the highest priority.\n" \ ">>> THE RESULT MAY BE INVALID OUTPUT FILES! <<<" ) #:def_opt( "TINY", "tiny", "GP", \ "mode", \ "Set tiny mode to a level between 0 and 7." ) #:def_opt( "YAZ0", "yaz0", "G", \ "", \ "If creating a compressed file, force Yaz0 compression. Yaz0" \ " compression is the default, if no compression method is defined by" \ " option or setup file." ) #:def_opt( "YAZ1", "yaz1", "G", \ "", \ "If creating a compressed file, force Yaz1 compression. The difference" \ " to Yaz0 is only the magic, which is set to 'Yaz1'." ) #:def_opt( "XYZ", "xyz", "G", \ "", \ "If creating a compressed file, force XYZ compression (an experimental" \ " Yaz0 variant)." ) #:def_opt( "BZ", "bz", "G", \ "", \ "If creating a compressed file, force BZ compression (a BZIP2" \ " variant)." ) #:def_opt( "SH", "sh", "G", \ "", \ "Dump info using SH syntax. Use {--var name} as prefix." ) #:def_opt( "BASH", "bash", "G", \ "", \ "Dump info using BASH syntax. Use {--var name} as prefix." ) #:def_opt( "JSON", "json", "G", \ "", \ "Dump info using JSON syntax. Options {--var} and {--array} are" \ " ignored." ) #:def_opt( "PHP", "php", "G", \ "", \ "Dump infos using PHP syntax. Use {--var name} as variable name of the" \ " resulting object." ) #:def_opt( "MAKEDOC", "makedoc", "G", \ "", \ "Dump infos using MakeDoc syntax. Use {--var name} as variable name of" \ " the resulting map." ) #:def_opt( "VAR", "var", "GP", \ "varname", \ "Use @VARNAME@ as variable name or prefix on script output. The" \ " default value is 'res' for variables and 'res_' as prefix." ) #:def_opt( "ARRAY", "array", "G", \ "", \ "Use an array on script output if possible. If arrays are not" \ " supported, then append a '_#' suffix with an zero based index to the" \ " variable name defined by {--var name}. In this case, only one output" \ " file is created." ) #:def_opt( "AVAR", "avar", "GP", \ "varname", \ "Shortcut for: {--array --var name}" ) #:def_opt( "CASE", "case", "GP", \ "case", \ "@CASE@ is one of @LOWER@, @AUTO@ (default) or @UPPER@.If @LOWER@ or" \ " @UPPER@ are set, then the lower/upper case of the variable names is" \ " adjusted accordingly." ) #:def_opt( "INSTALL", "install", "C", \ "", \ "Manage configuration for an installation." ) #:def_opt( "SOURCE", "s|source|src", "CP", \ "path", \ "Define a secondary source path (directory/file).\n" \ " The path may contain escape sequences: @%Q@ is replaced by the" \ " fully qualified primary source name. @%P@ and @%F@ are replaced by" \ " the primary source path or by the filename. @%N@ and @%E@ are" \ " replaced by primary source filename without extension or by the" \ " source extension. Finally, @%T@ is replaced by the default extension" \ " of a virtual destination format.\n" \ " A @'?'@ direct behind @'%'@ in @%E@ and @%T@ conversions avoid that" \ " the same extension is used twice in row." ) #:def_opt( "REFERENCE", "ref|reference", "CP", \ "path", \ "Define a reference SZS." ) #:def_opt( "DEST", "d|dest", "CP", \ "path", \ "Define a destination path (directory/file). The destination @-@" \ " means: write to standard output.\n" \ " The path may contain escape sequences: @%Q@ is replaced by the" \ " fully qualified source name. @%P@ and @%F@ are replaced by the" \ " source path or by the filename. @%N@ and @%E@ are replaced by source" \ " filename without extension or by the source extension. Finally, @%T@" \ " is replaced by the default extension of the destination format.\n" \ " A @'?'@ direct behind @'%'@ in @%E@ and @%T@ conversions avoid that" \ " the same extension is used twice in row." ) #:def_opt( "DEST2", "D|DEST", "CP", \ "path", \ "Like {--dest}, but create the directory path automatically." ) #:def_opt( "ESC", "E|esc", "CP", \ "char", \ "Define an alternative escape character for destination files. The" \ " default is '%'. For Windows batch files it is a good choice to set" \ " @'-E$$'@." ) #:def_opt( "OVERWRITE", "o|overwrite", "C", \ "", \ "Overwrite already existing files without warning and ignore option" \ " {--number}." ) #:def_opt( "NUMBER", "number|num", "C", \ "", \ "If a file already exist, append a number directly before the file" \ " extension to make the filename unique. If other numbered files" \ " already exist (ignoring case), use the maximum existing index+1." \ " @--num@ is a short cut." ) #:def_opt( "REMOVE_SRC", "remove-src|removesrc|rm-src|rmsrc", "C", \ "", \ "Remove the source file after successful operation. @--rm-src@ is a" \ " short cut." ) #:def_opt( "REMOVE_DEST", "r|remove-dest|removedest|rm-dest|rmdest|remove", "C", \ "", \ "Remove already existing files before creating it. If set," \ " {--overwrite} is ignored. @--rm-dest@ is a short cut." ) #:def_opt( "UPDATE", "u|update", "C", \ "", \ "Update only existing files and don't create new files. If set," \ " {--overwrite} and {--remove-dest} are ignored." ) #:def_opt( "PRESERVE", "p|preserve", "C", \ "", \ "Preserve file times (atime+mtime) while converting or copying files." ) #:def_opt( "IGNORE", "i|ignore", "C", \ "", \ "Ignore non existing source files without warning." ) #:def_opt( "IGNORE_SETUP", "ignore-setup|ignoresetup", "C", \ "", \ "Ignore hidden setup file '@wszst-setup.txt@'. This file is used to" \ " determine some default settings and to find out sub archives and" \ " files to encode. Use this option only if you know what you do." ) #:def_opt( "PURGE", "purge", "C", \ "", \ "Remove repeated files with same checksum." ) #:def_opt( "ALIGN_U8", "align-u8|alignu8", "CP", \ "size", \ "Define an align value for the sub files in U8 archives. The value" \ " must be a power of 2 and the default value is 32 (0x20) This value" \ " is only relevant if creating or normalizing U8 archives." ) #:def_opt( "ALIGN_PACK", "align-pack|alignpack", "CP", \ "size", \ "Define an align value for the sub files in PACK archives. The value" \ " must be a power of 2 and the default value is 32 (0x20) This value" \ " is only relevant if creating or normalizing OACK archives." ) #:def_opt( "ALIGN_BRRES", "align-brres|alignbrres", "CP", \ "size", \ "Define an align value for the sub files in BRRES archives. The value" \ " must be a power of 2 and the default value is 4 This value is only" \ " relevant if creating or normalizing BRRES archives." ) #:def_opt( "ALIGN_BREFF", "align-breff|alignbreff", "CP", \ "size", \ "Define an align value for the sub files in BREFF archives. The value" \ " must be a power of 2 and the default value is 4 This value is only" \ " relevant if creating or normalizing BREFF archives." ) #:def_opt( "ALIGN_BREFT", "align-breft|alignbreft", "CP", \ "size", \ "Define an align value for the sub files in BREFT archives. The value" \ " must be a power of 2 and the default value is 0x20 This value is" \ " only relevant if creating or normalizing BREFT archives." ) #:def_opt( "ALIGN", "align", "CP", \ "size", \ "Define an align value for the sub files in all archives. This is a" \ " short cut for {--align-u8=size --align-pack=size --align-brres=size" \ " --align-breff=size --align-breft=size}." ) #:def_opt( "ENCODE_ALL", "encode-all|encodeall|eall", "C", \ "", \ "Encode all files. Normally a file is only encoded, if the source is" \ " younger than the destination or the destination is missing. Only" \ " files in the @[encode]@ section of the file '@wszst-setup.txt@' are" \ " candidates for encoding. @--eall@ is a short cut. Option" \ " {--no-encode} takes precedence over {--encode-all}." ) #:def_opt( "ENCODE_IMG", "encode-img|encodeimg|eimg", "C", \ "", \ "Encode all image files. Normally a image file is only encoded, if the" \ " source is younger than the destination or the destination is" \ " missing. Only files in the @[encode]@ section of the file" \ " '@wszst-setup.txt@' are candidates for encoding. @--eimg@ is a short" \ " cut. If set, option {--no-encode} is ignored for images." ) #:def_opt( "NO_ENCODE", "no-encode|noencode|noenc", "C", \ "", \ "Do not encode files before creating an archive. @--noenc@ is a short" \ " cut. Option {--no-encode} takes precedence over {--encode-all}, but" \ " {--encode-img} takes precedence for images." ) #:def_opt( "NO_RECURSE", "no-recurse|norecurse|norec", "C", \ "", \ "Do not create archives recursively. Normally files in the @[create]@" \ " section of the file '@wszst-setup.txt@' are created first. @--norec@" \ " is a short cut." ) #:def_opt( "AUTO_ADD", "auto-add|autoadd|aadd", "C", \ "", \ "Analyze the KMP (if exist) and add missing BRRES, BREFF, BREFT, BRASD" \ " and KCL files automatically, if the tool can find the files in any" \ " sub directory named 'auto-add'. This sub directory is searched in" \ " all directories of @'SEARCH_PATH'@; use command @{wszst AUTOADD}@ to" \ " view them. Command {wszst AUTOADD} may also create an auto-add" \ " database. @--aadd@ is a short cut." ) #:def_opt( "NO_ECHO", "no-echo|noecho", "C", \ "", \ "Suppress output of @@ECHO commands while scanning text files." ) #:def_opt( "NO_CHECK", "N|no-check|nocheck", "C", \ "", \ "Do not make plausibility checks for KCL and KMP files." ) #:def_opt( "PT_DIR", "pt-dir|ptdir|pdir", "CO", \ "[=mode]", \ "Set one of the `point directory' modes @REMOVE@ (=@0@), @FORCE@" \ " (=@1@) or @AUTO@ (default). If --pt-dir is used without parameter," \ " then @FORCE@ is assumed.\n" \ " This option is only relevant if creating an U8 archive. It decides," \ " if a special directory with name '.' will be added as base for all" \ " other files." ) #:def_opt( "RM_AIPARAM", "rm-aiparam|rmaiparam|rmai", "C", \ "", \ "Remove the directory AIParam and all files from the archive. This" \ " option has only impact, if creating a new archive or normalizing an" \ " existing archive. @--rmai@ is a short cut." ) #:def_opt( "U8", "u8", "C", \ "", \ "Create an U8 archive, if possible. If the source is a WU8 archive," \ " convert it to an U8 archive. This is the default if the setup file" \ " '@wszst-setup.txt@' has no other definition. The default compression" \ " mode is set to Yaz0 (see {--yaz0})." ) #:def_opt( "SZS", "szs", "C", \ "", \ "Short cut for {--u8 --yaz0}: Create an U8 archive, if possible, and" \ " set the compression method to Yaz0." ) #:def_opt( "WU8", "wu8", "C", \ "", \ "Create a WU8 archive, if possible. If the source is an U8 archive," \ " convert it to a WU8 archive." ) #:def_opt( "WBZ", "wbz", "C", \ "", \ "Short cut for {--wu8 --bz}: Create a WU8 archive, if possible, and" \ " set the compression method to BZ." ) #:def_opt( "PACK", "pack", "C", \ "", \ "Create a PACK archive." ) #:def_opt( "BRRES", "brres|bres", "C", \ "", \ "Create a BRRES archive." ) #:def_opt( "BREFF", "breff", "C", \ "", \ "Create a BREFF archive." ) #:def_opt( "BREFT", "breft", "C", \ "", \ "Create a BREFT archive." ) #:def_opt( "NO_COMPRESS", "no-compress|nocompress|noc", "C", \ "", \ "Create an uncompressed file instead of a compressed SZS file. The" \ " default destination changes to @'%P/%N%T'@. @--noc@ is a short cut." ) #:def_opt( "COMPRESS", "C|compr|compress", "CP", \ "level", \ "Define a compression level between @0..9@: @0@ (or @NOCHUNKS@)" \ " disables finding chunks, @1@ (or @FAST@) for the fastest standard" \ " compression and @9@ (or @BEST@) for the best (=default) compression." \ " @10@ (or @ULTRA@) and @100-150@ are special time-consuming" \ " compression modes. They are dedicated to competitions with size" \ " limitations. The special value @UNCOMPRESSED@ acts like option" \ " {--no-compress}.\n" \ " Because of many repeated data, the best bz-compression mode varies." \ " Therefor the levels @TRY2..TRY5@ (or short @T2..T5@) are defined to" \ " find the best compression mode with testing the first N modes of 9," \ " 1, 8, 2, 5. @TRY2@ is used for normalizing. For non bz-compression," \ " @TRY*@ are the same as @BEST@.\n" \ " Option {--norm} takes precedence over {--compr} and sets the" \ " compression level to @TRY2@ (@BEST@).\n" \ " For more modes and details type {wszst -C list}. To force colorized" \ " output type {wszst -C clist}." ) #:def_opt( "FAST", "fast", "C", \ "", \ "Short cut for {--compr=fast}: Set the fastest real compression. It" \ " also overrides compression rates set by {--norm} or {--compr}." ) #:def_opt( "NORM", "n|norm", "C", \ "", \ "The uncompressed data will be normalized. See command {NORMALIZE} for" \ " more details." ) #:def_opt( "LINKS", "links", "C", \ "", \ "Support hardlinks while creating U8 and WU8 archives. Keep hardlinks" \ " if normalizing U8 and WU8 archives. On extracting, search hardlinks" \ " in every archive and try to create hardlinks at local file system." ) #:def_opt( "BASEDIR", "basedir|bdir", "CP", \ "directory", \ "Extract only files from archives, that are below the DIRECTORY." \ " Leading points and slashes and trailing slahes are removed from the" \ " parameter. --bdir is short cut for --basedir." ) #:def_opt( "RECURSE", "R|recurse", "CO", \ "[=level]", \ "If a extracted file is a known and supported archive, than extract it" \ " recursively until the entered level is reached. Level 0 (=@NONE@)" \ " deactivates this. If --recurse is used without parameter, then" \ " @UNLIMITED@ is assumed.\n" \ " -R does'nt accept a parameter and is a short cut for" \ " {--recurse=unlimited}." ) #:def_opt( "EXT", "e|ext", "C", \ "", \ "For BRRES archives only: If a file is extracted, add a handy file" \ " extension like '.mdl' to the file name. If set twice and a textual" \ " file magic is available, use the file magic in lower case instead" \ " like '.mdl0'." ) #:def_opt( "DECODE", "decode|dec", "C", \ "", \ "If a extracted file is known and can be decoded, do it. @--dec@ is a" \ " short cut." ) #:def_opt( "MIPMAPS", "mipmaps|mm", "C", \ "", \ "If reading a source, scan for mipmaps and load them too. For PNG" \ " files, files named @NAME.mm#.EXT@ with #=1.. are searched. This is" \ " the default. @--mm@ is a short cut." ) #:def_opt( "NO_MIPMAPS", "no-mipmaps|nomipmaps|no-mm|nomm", "C", \ "", \ "If reading a source, ignore mipmaps. This disables not the creation" \ " of mipmaps (see {-n-mipmaps}). @--no-mm@ is a short cut." ) #:def_opt( "N_MIPMAPS", "n-mipmaps|nmipmaps|n-mm|nmm", "CP", \ "num", \ "Force the number of mipmaps. Values between 0 and 20 are allowed." \ " Value @OFF@ (default) disables this option. If enabled, options" \ " @--max-mipmaps@ and @--mipmap-size@ are ignored. The creation of" \ " mipmaps stops if the width or the height of the mipmap becomes 0." \ " @--n-mm@ is a short cut." ) #:def_opt( "MAX_MIPMAPS", "max-mipmaps|maxmipmaps|max-mm|maxmm", "CP", \ "num", \ "Control the automatic mipmap creation. Values between 0 and 20 are" \ " allowed and the default is 4. The mipmap creation for an image" \ " stops, if the set number is reached. This option is ignored, if" \ " @--n-mipmaps@ is enabled. @--max-mm@ is a short cut." ) #:def_opt( "MIPMAP_SIZE", "mipmap-size|mipmapsize|mm-size|mmsize", "CP", \ "num", \ "Define the minimal width and minimal height of a generated mipmap." \ " Any value >0 is allowed. The default is 8. This option is ignored," \ " if @--n-mipmaps@ is enabled. @--mm-size@ is a short cut." ) #:def_opt( "FAST_MIPMAPS", "fast-mipmaps|fastmipmaps|fast-mm|fastmm", "C", \ "", \ "If resizing an image, use the old fast resize algorithm (default" \ " until v1.64a) instead of the new smart one. Both algorithms differ" \ " only, when creating a mipmap for images with odd width or odd" \ " height. The old algorithm is faster (factor 2-4) than the default" \ " algorithm, but the new algorithm creates better resized images." \ " @--fast-mm@ is a short cut." ) #:def_opt( "CMPR_DEFAULT", "cmpr-default", "CP", \ "rgb1[,rgb2]", \ "Define 2 colors for the case, that all 16 pixels of a CMPR block are" \ " transparent. The default is to calculate an average color of all" \ " transparent pixels. Before v2.04 white was used.\n" \ " 2 RGB values (hex values with 6 digits each) are expected as" \ " parameter. If optional @RGB2@ is missed, a copy of @RGB1@ is used." \ " As first step, both colors are converted to RGB565 colors @C1@ and" \ " @C2@ and sorted, so that @C1