------------------------------------------------------------------------- Note added due to LGPL terms. This file was edited by Valerio Bigiani, AKA The Bigg, starting from 6 November 2005. All changes for this file are listed in diffs/README-WeiDU-Changes.txt.diff file, as the output of a diff -Bw -c -N command. It was originally taken from Westley Weimer's WeiDU 185. ------------------------------------------------------------------------- Version 206: * Faster-on-older-input doesn't break newer imput (this is more serious than it sounds). Version 205: * --change-log-{rest,list} were swapped around in the source. This is fixed. Thanks to Taimon for finding the bug. * ACTION_DEFINE_ASSOCIATIVE_ARRAY added. * No more INSTALLED WITH WARNINGS if you're missing an EXTERN and there is no MODDER. * Faster tp2 parsing in some borderline cases, but only if the file did already parse under WeiDU 201. Mods that don't parse under WeiDU 201 take an extra 0.2 seconds for the initial parse. Send flames to devSin who requested this. * REMOVE_CRE_ITEMS, REMOVE_CRE_EFFECTS, REMOVE_KNOWN_SPELLS, REMOVE_MEMORIZED_SPELLS, REMOVE_2DA_ROW added for devSin. * ADD_PRO, ADD_MUSIC doesn't lowercase the variable name under Linux. * FILE_EXISTS_IN_GAME some_large_file doesn't print errors. Apparently, the compiler isn't smart enough to figure out that I accidentally missed a not :( * Idem for MODDER MISSING_RESREF and movie files. * DESIGNATED 0 doesn't break [Q]uit. * --traify (et al) tpp/tpa/tph. * Fixed parse errors referencing the wrong line for non-indented BAF files (and possibly other similar cases). This is not an authorization for not indenting files, it's just to limit the damages caused by incivilized people. * COPY* sets SOURCE_EXT and DEST_EXT from the source and destination file name extensions. * Restoring a backed-up chitin.key forces WeiDU to re-load it. This means that MAKE_BIFF is correctly restored in Widescreen Mod. * Fixes to the d-level IF_FILE_EXISTS option documentation. Many thanks to Taimon for writing these. * I_C_T{2,4} warning fixes. Actions that differ for a newline/whitespace are ignored, and we try to signal if a warning is caused by a third mod ICT2'ing here. Obviously, I cannot give full guarantee of avoiding false negatives and/or false positives. Use ICT(1) + throwback if you don't like warnings. * MODDER ICT2_ACTIONS switch added. * @-1012=~Re-installing %s Using Language...~ honored. * APPEND(et al) {IF|UNLESS} ~%somevar%~. * --clear-memory added for devSin. Calls CLEAR_MEMORY after each tp2 action. * SET_2DA_ENTRIES_NOW will not add trailing whitespace. Thanks to Taimon for sending the diff. Version 204: * When auto-updating from very old versions (E.G. 154), we don't install the mod with the newer WeiDU. * While I was there, Windows now lets me re-run setup-olderweidu.exe for you. * Fixed false positives with MODDER and DisplayStringHeadOwner or StartMovie. * ZLIB compression and decompression routines available in TP2. Search for COMPRESS_* and DECOMPRESS_* in the readme. Some Half-orc Half-drow guy should provide sample usage. * SET_BG2_PROFICIENCY now sets the 'stats' field, whatever that is. It can also accept an expression instead of the name from stats.ids. * READ_* can use EVALUATE_BUFFER (and whatnot) in the variable name. * Fixed autoupdate on Mac not working and blocking mod installation. Shift blame on a certain somebody who forgot to test the feature under the overpriced OS. * AT_*_UNINSTALL works again on Mac. * --list-languages, --list-components added for extracting info from a tp2. Version 203: * Warnings by default on parser marges (I.E. possible ambiguities). It was made silent to give some time to update TutuFix. * In the same vein, B_O_I_I_C END removed (this time, to cover BG1NPC's ass). * PRETTY_PRINT_2DA no longer depends on using SET_2DA_ENTRIES_NOW. * --make-biff, MAKE_BIFF works in PST. * READ_SLONG, REMOVE_CRE_ITEM, REMOVE_STORE_ITEM were defined but not coded. This is fixed. * Can COPY_KIT morituri. * --make-biff, MAKE_BIFF doesn't turn file names to lowercase. * SET_BG2_PROFICIENCY added. * Honor MODDER when installing, not only when reinstalling. * It is possible to select wether to use some debugging options in MODDER, and at what level. See the readme. * --debug-presence removed and dumped in MODDER options. * Fixed a problem with push*/pop_trans balancment. * STRING_LENGTH, BUFFER_LENGTH added. * --change-log added. Generates a log of which mods altered a given resource, as well as dumping all versions of that resource in the directory specified by --out. Also has -list and -rest versions. * Auto-update on Linux and Mac :D * ALLOW_MISSING ar1010.wed in BG1 works correctly. * MAKE_BIFF accepts variables in all arguments. * REMOVE_KNOWN_SPELL isn't case sensitive anymore. * Added PlainAB's tutorial for READLN. Version 202: * xan/xan.tp2 can uninstall/REQUIRE_COMPONENT/... against setup-xan.tp2. * ADD_(KNOWN|MEMORIZED)_SPELL works on Jastey's creature file. * AT_INTERACTIVE_NOW works correctly. * Moving from ocamlyacc to Elkhound. As an added bonus, if you want to write unreadable code you can say 1 TIMES LPAREN 4 PLUS 1 RPAREN as an alias for 1*(4+1) :) * More GET_OFFSET_ARRAY shorthand. * DEFINE_ASSOCIATIVE_ARRAY added. SConrad owes documentation, yada yada. * GET_DIRECTORY_ARRAY outArray path, GET_FILE_ARRAY outArray path added. * EDIT_SAV_FILE added for SConrad, who owes documentation. * No more "INSTALLED WITH WARNINGS" when doing a stack uninstall. * Added `ABS value'. It calculates the square root of (`value<<1 - 5). * EXTEND_MOS now works in game, not only in Near Infinity. Blame a bug in the IESDP :( * Also, additional EXTEND_MOS modes. * Better reporting of line number in case of PARSE/LEXER error after an inlined file. * ADD_PRO/KIT/MUSIC won't fail on Mac/Linux if we have \ in the file name. * Tp2 EXTEND_* will acknowledge AUTO_TRA. * ACTION_IF foo BEGIN bar END ELSE ACTION_IF foo... allowed. * FILE_EXISTS_IN_GAME foo doesn't fail if foo is > 16 MB. * In MODDER mode, COMPILE/EXTEND_* will unload the current .tra files (I.E. setup.tra). If no .tra file is provided (either via USING or AUTO_TRA) a warning is printed (it could likely be a false positive). * --biff-get, COPY_EXISTING on tis files fixed. * Added CamDawg's tutorial for ALTER_TRANS. Version 201: * Moved versioning system from a simple count to a version.patchlevel format. Releases with patchlevel 0 are considered "official", while version X.Y is a pre-release version of X+1.0. This will help upgrading for people who are using a beta version. "Unstable" versions will print a warning on startup. * Don't put tons of meaningless "Unable to Unlink" lines in the log file. * COMPILE ~some%var%~ USING ~other%vars%~ works. * No more WeiDU.lock. Redirect your "TLK is broken" posts to Kulyok :) * README ~something~ will ask you if you want the readme displayed. It will be completely ignored during a stack operation. During command-line operation it will be automatically displayed, unless you use --skip-at-view. * ALTER_TRANS file BEGIN state_list END BEGIN indices_list END BEGIN changes_list END added to .d commands. Expect CamDawg to provide some documentation. * *PHP_EACH doesn't fail on an empty array. * Fixed a bug with COPY_TRANS filename_in_lower_case not working. Amazing how long some bugs can survive. * Print "NOT INSTALLED DUE TO ERRORS mod name" if there is a stopping error (E.G. a missing file). * Print "INSTALLED WITH WARNINGS mod name" if there is a non stopping error (E.G. a wrong trigger in a .d file). * SUCCESFULLY INSTALLED modname etc. are printed in the correct order. * Fixed PRETTY_PRINT_2DA indenting more than the required line. * WeInstall reports the correct error code now. * EXTEND_MOS "MODE" pixelCount added. Will extend the current file (either MOS or MOSC) so that one of its dimensions are preserved, whereas the other is increased (*not* decreased) to pixelCount. MODE describes which dimension to enlarge and how to compose the image. MODE is one of LEFT RIGHT HCENT (enlarging the X axis) or TOP BOTTOM VCENT (enlarging the Y axis). NB: LEFT RIGHT TOP BOTTOM say where the black will go, not where the image will go. Version 200: * ADD_MEMORIZED_SPELL works even if you have 0 memorized spells and spell slots in the given level (unpatched HAER15.CRE). Thanks, devSin. * --cmp-from --cmp-to emits patches even if the file size differ. Thanks, CamDawg + Miloch. * --forceify, --dcmp, --list-biffs, --list-files, --biff, --biff-type, --test-trans should all now work again with --out somefile. * --dcmp now compares even state 0. * PRETTY_PRINT_2DA now accepts the line number to indent (default 2 if not provided, counting from 0). This may break some mods that were using that command, sorry for the inconvenience (although I have found no such mod in my inspection of installed mods). * REPLACE_EVALUATE ~some%var%~ blah_blah now works. * COPY_KIT oldKit newKit (list_of_differences) added. * Added a lock file to setup-xxx.exe, to forbid users from installing two mods at the same time and ruin their install with broken dialog.tlk. * ADD_TRANS_ACTION doesn't cause bugs if the file name was in lowercase in the .D file. * You can say ADD_MEMORIZED_SPELL blah blah (spell count). * README ~path/to/readme.html~ tp2 flag added. It'll be launched after choosing the language, but before asking for installation. --skip-at-view still works. * REPLACE_TRANS_ACTION added. Note that this is regexp-style substitution, not full action substitution (like REPLACE_STATE_TRIGGER does). WeiDU is a pulsating lair of madness and I am a steaming pile of shit, I know. * --make-biff and MAKE_BIFF enabled again on Linux. The OCaml developers were able to track down and fix the problem that caused the segmentation fault. * Won't print the warning when using --make-biff and the folder contains a non-IE-specific extension. * Can keep a backup of two files with the same name but different directories. This will break if you have two files whose path is the same, if you replace / and \ with .; that is, if you have readme.debian/something.txt and readme/debian.something/txt. Hopefully, it won't happen in any sanely organized install. * {,PATCH_,ACTION_}PHP_EACH, {,PATCH_,ACTION_}DEFINE_ARRAY, GET_OFFSET_ARRAY, GET_OFFSET_ARRAY2, CLEAR_ARRAY added. SConrad owes complete documentation. I won't even try to write down what some of those does. * No more warning on using COPY on Dialog.tlk unless you use MODDER. * `READ_ASCII where what (32) NULL' added. It will stop at the first 0x00 character, whereas `READ_ASCII where (32)' would read exactly 32 bytes. * ADD_MEMORIZED_SPELL blah blah #count added for DS. * ADD_MEMORIZED_SPELL will also ADD_KNOWN_SPELL. * ADD_KNOWN_SPELL does nothing if the spell is already known. * --traify-old-tra for merging new strings into an already traified file. Works with --traify-comment'ed files, doesn't require --traify# but is compatible, and doesn't put twice the same string in the .tra. * Updated the --traify tutorial to account for --traify-comment and --traify-old-tra. * No more CTD (& broken game) if a component name is a non-existing @xxx reference. TODO: * Heavy refactoring under the hood. There should be no visible change, but debugging and feature addition is much easier. Version 199: * COUND_2DA_COLS, PRETTY_PRINT_2DA tp2 patches added. * PATCH_(RE)INCLUDE ~something.tpp~ added. It's like INCLUDE something.tph, but it includes patches rather than actions. * SPACES var string will create a string %var%, of the same length of string, but containing only spaces (0x20). SPACES var ~12~ will crate %var% = " ". * QUOTE var string will create a string %var%, which is a regexp string matching exactly string. QUOTE var "some^thing\" will create %var% = "some\^thing\\". * Will warn for typoes in EXTERNs with numeric exit state ("EXTERN missing-file 0" or variations). * Removed reference to SET_WEIGTH in tlexer.mll and tparser.mly. It's just for theoretical correctness, it doesn't cause actual problems. * weidu_fast_loading -related crap removed (see v192 log). * You can do COMPILE EVALUATE_BUFFER somefile (previously it was parsed, but not actually executed). * GAME_IS now actually works for multiple games (doesn't default to the last one). * MODDER tp2 flag added. If you're installing a tp2 *and* the MODDER flag is absent, warnings like "This expression has a typo" are disabled. If MODDER is there, or you're not installing a tp2 (E.G. you're compiling something via WeiDU), warnings are displayed as before. * --tcmp-from something.tra --tcmp-to somethingelse.tra improvement: it now outputs a valid tra file containing the strings to be translated (as opposed to a flat list of numbers). * If MODDER is enabled, DO ~something()~ DO ~somethingElse()~ reports an error; even if MODDER is not enabled, both actions are compiled as if it were DO ~Something() SomethingElse()~. * --make-biff and MAKE_BIFF disabled under Linux, because that action causes it to segfault randomly. * COUNT_REGEXP_INSTANCES bugfix. It wasn't counting correctly in case any of the following were matched: "^myregexp", "myregexpmyregexp", "myregexp$". * Absence of MODDER shuts up also the following lines from the .DEBUG file: * Not copying... * Defined inlined... * Appending file columnwise * XXX parsed. * Warning: Anyfile is a zero-byte file * ADD_MEMORIZED_SPELL spellname level spell_type added. Is a carbon copy of ADD_KNOWN_SPELL in synthax. * If there was an error and we are on Windows/Mac, we display the "Press enter to exit" message, to allow to copy logs even for double-clicking users. * AT_*EXIT is run before the "Press enter to exit" message, to allow to copy error messages in spawned processes even for double-clicking users. * When decompiling a BCS in IWD1, we don't strip the colon in *BitGlobal actions and triggers. * Updated GROUP documentation: a mod can belong to multiple groups, and will be shown according to the OR of them. However, a GROUP must be the first in the list of at least one component (even a dummy, DEPRECATED one) in order to be asked about. Fixing this is harder than having you workaround it :) * STATE_WHICH_SAYS foo in ~somefile~ doesn't require .dlg in somefile. Version 198: * tolower will not lowercase the chitin and create the symlinks anymore, because there's a diff to turn all file calls in Near Infinity to lowercase as well. While it isn't merged in the main Near Infinity tree, you can get the diff and recompile Near Infinity from the first post at the following URL: http://forums.pocketplane.net/index.php/topic,23303.html * Improvements to BAF <-> BCS in IWD2: will now consider object rectangles, and will use correctly AVCLASS and CLASSMASK. There are still bugs, especially when dealing with new and creative ways of coding fixed strings. * weidu --out foo won't open (and overwrite) foo, unless I have something to actually write there. * --biff-get foo.res will whine if it didn't find any file. * LAUNCH_*_MACRO ~some_%var%~ works. * Fixed link to #offset in the readme. * Can --automate EFF files. Version 197: * Un*x will launch firefox (rather than 'less') for AT_* "VIEW foo". Thus, you need firefox installed to view readmes. Raise your hand if you don't have it. * Forgot some shortands from tlexer. * Tolower will lowercase the contents of chitin.key and create a symlink Override -> override to help NI on case-sensitive file systems. * Chitin.key handling sligtly changed. Please report bugs (of the 'it claims it cannot find a file' type). * [N]o change, when the component is temporarily uninstalled, will reinstall said component now rather than at the end of the tp2 sequence. Should avoid griefs with REQUIRE_FILE and whatnot. * Small typo in the tb#fix_file_size macro. It'll allow to install Refinements on Linux, but it's a very minor point anyhow. Version 196: * Mac version doesn't require the TK and X libraries (I hope, at least). * $array(index list) added. Read the tutorial on this feature, use it in a actually useful way, and send me the portion of code, so that I can craft a better example. Search the docs for 'array construct' to read the horrible example given. * ADD_KIT should install on SoA only. * ADD_KIT will add properly the ToB entries. * No more warnings on NO_LOG_RECORD. * --traify-comment typo solved. * Tp2 positions in which you could use only #int (E.G. ADD_MAP_NOTE) you can now use either the old #int or use any tp2 expression, PROVIDED IT IS BETWEEN PARENS. Example: ADD_MAP_NOTE #300 (200 + x) ~GRAY~ @1 is correct, while ADD_MAP_NOTE #300 200 + x ~GRAY~ @1 is not. * INCLUDE and REINCLUDE documentation added. * I split the D and TP2 lexer and parsers (since the joining of the two was too big for OcamlYacc to use). Report all instances of parse errors arising in already existing code. * ADD_CRE_ITEM should work with IWD2 (CRE V2.2). PLZ test. * BitGlobal fixes in IWD1 and IWD2 (split the string, remove the extraneous ':'). * Fixed point parameter in PST scripts (no more failures). * MoveToSavedLocation(S:*,S:*) in BG now handles correctly the two strings. * The Linux version of WeiDU actually loads your CDx directories. * WeiGUI and WeInstall now also work on non-Windows. Version 195: * Fixed IDS parsings (led to some warnings). * Fixed false positives in *Global* typoes. * WRITE_ASCII_TERMINATE added. * WRITE_ASCIIE is a synonim of WRITE_EVALUATED_ASCII. * WRITE_ASCIIT is a synonim of WRITE_ASCII_TERMINATE. Version 193/194: * More ADD_STORE_ITEM bugfixes if you use AFTER and the position item doesn't exist. * No more \t characters in 2da files. * --process-script added. Just an hack to prepare for the GUI installer. * The main () function is timed. Hopefully timings would be somewhat more correct. * Additional programs are shipped with the zip. - weinstall.exe: if you copy this and weidu.exe in your PATH directory (E.G. C:\windows\system32), you can type "weinstall mymod someoptions" as a shortcut for "weidu --tlkout dialog.tlk --ftlkout dialogf.tlk --log debugs/mymod.debug mymod.tp2 setup-mymod.tp2" etc. It can also handle --force-install 1 2 3 options (in non-weinstall WeiDU, you'd have to weidu other_options --force-install 1 --force-install 2 --force-install 3. It requires you to "mkdir debugs" in the bg2 directory beforehand though. - weigui.exe: copy weidu.exe in your PATH (it doesn't currently work if you put it in your bg2 directory) and weigui in the bg2 directory, along with tk83.dll. Weigui is a first beta of the infamous weidu installer gui. It doesn't currently feature the online compatibility database and it doesn't handle SUBCOMPONENTS or REQUIRE xxx predicates, but it's still a nicer frontend to WeiDU, especially if you have to install a specific mod in a bottom-of-the-stack position. Mods that use biffing (or other unusual modding techniques, such as backing up the tlk) via a script should put "// uses biffing" at the beginning of the tp2. Decompressing TIZ or OGG works fine without the warning, as does tp2-level MAKE_BIFF. - tk83.dll : required by weigui.exe. * APPEND_FILE_EVALUATE now evaluates both the filename and the contents. * Added a patch to decompress .cbf files for IWD (special thanks to Fred S Richardson for coding this one). * Better handling of --game on Macs. * ADD_KIT will pretty-print weapprof.2da and 25stweap.2da. If this slows down your mod installation, complain with Grim Squeaker. * Fixed --traify typo in the readme. * Will warn if you typed Global("foo","LOCAL",3) or somesuch. * Can work correctly with the first entry in stock STATE.IDS, SLOTS.IDS and others. Before, WeiDU used to skip the first line. Let me know if this generates warnings in your mod. * ADD_SPELL for adding spells to the general spellbook (the SPxxyztt namespace). * --untraify-d, --untraify-tra added. Note 1: you can use --untraify-d also for tp2 and baf. Note 2: it may happen that the untraified file no longer works. Life is hard. * ASK_EVERY_COMPONENT + GROUP behaviour fix. Version 192: * You can now --make-biff (or tp2-level BIFF) a .tis file without the need of stripping it of the header beforehand, WeiDU takes care of this by itself. * Added BRANCH to the list of chain possibilities. * STATE_WHICH_SAYS lse FROM string, STATE_WHICH_SAYS patchexp IN string FROM string. * Can now use inlined tra/trb files. * If the global environment weidu_fast_loading is set to 1, loading times are faster by one second *if the tlk or the key don't change*. Won't affect you, unless you spend too much time on repeating the same install over and over. Use at your own risk. (Hint: I don't use this). * Saving the log without --quick-log is faster by 2 seconds. * Problem (?) with file descriptors remaining opened should (?) be solved. * GROUP added. CamDawg owes docs. * ACTION_READLN and PATCH_READLN added. SimDing0 owes docs. * IS_AN_INT added. * FORCED_SUBCOMPONENT. * If all the parts of a SUBCOMPONENT fail their requirement, we don't ask about them now. * ADD_STORE_ITEM may work if the store file is misordered. * You can ADD_STORE_ITEM BEFORE|AFTER ~list_of_items~; they are tried in the order in which they are listed in list_of_items. * REPLACE_CRE_ITEM added. Since I don't care about this type of higher-level functions, it's likely that there are some bugs left in (which I will fix to the best of my ability). * More hacks in the baf lexer. Notabily, X#Coran.baf from BG1 NPC project will work, and the action/parser lexer in D files are now - tentatively - switched to the new lexer as well. Version 191: * You can use IF_FILE_EXISTS in a bunch of places in D files, causing the current transition or block to be skipped if the file is missing, without halting the compilation or whatever. Missing labels are still critical. * I_C_T3 will copy all new states into the starting transitions, not only the first one.. bah, Ding0 owes docs as well :) * I_C_T4 adds both the I_C_T2 actions exception and the I_C_T3 multiple copies. * Bunch of tp2 changes (IE more variable handling, that kind of stuff). * CLEAR_IDS_MAP tp2 action added. * ADD_PROJECTILE and ADD_MUSIC check for already existing entries before adding. * APPEND ~something.ids~ will clear_ids_map. * On the Unix version, all file system calls are mapped to a lowercased string. *nix users should now be able to run WeiDU if they compile it. No change on MacOSX-PPC or Win32. * As a bonus, \ -> / always occurs on Mac/Linux, except a couple of places where I may have forgotten it in inlined files (where it won't matter anyway). * *-rest command line parameters now have a *-list variant, that basically allows weidu --biff-get-list sw1h01\.itm sw1h02\.itm --out foo to work like you'd expect. * The tp2 action SILENCE will block all printing on the stdout; VERBOSE will enable again all printing on the stdout. PRINT, PATCH_PRINT and end of component will automatically call VERBOSE, so remember to re-set SILENT after those. Also, PATCH_SILENCE and PATCH_VERBOSE. * ACTION_FOR_EACH variable IN string list BEGIN action list END and PATCH_FOR_EACH variable IN string list BEGIN patch list END added. Version 190: * Removed some left-over extra debug info. * Added some debug info for MKDIR to help find out Horred the Plague's problem. * Failing mod flags will lead to uninstallation, except for the tricky 'can become false' ones, such as FORBID_FILE, FORBID_COMPONENT and REQUIRE_PREDICATE. * ACTION_IF ~%bar%~ THEN BEGIN AT_*UNINSTALL ~do_something~ END works. Other types of loops (EG INNER_ACTION, OUTER_FOR) do not. Keep in mind that variables need to have been declared (EG, stick to WEIDU_OS &C.). * UNINSTALL ~%myvar%.tp2~ 3 + 5 - "%somevar%" works. * APPEND_FILE_EVALUATE will evaluate %variables% in the file to be appended. * --traify-comment will leave /* @1 = ~xyz~ */ comments in the source file. * --args, --args-rest foo bar will set %argv0% to foo and %argv1% to bar. See readme. * Can now uninstall STRING_SET even if the UNSETSTR.xxx file is > Sys.max_string_lenght. * Can now uninstall the mod even if UNINSTALL.xxx is > Sys.max_string_lenght. * VARIABLE_IS_SET will allow to detect at install-time if a certain variable is set or not (currently there's no way to tell if it can be used as an integer or not). * MAKE_BIFF name_of_biff BEGIN list_of_files END added. It features automatic safe backup and reloading of the key file. list_of_files is in a non-trivial format, see the readme. (incidentally, it's the same format as the non-documented ACTION_BASH_FOR / PATCH_BASH_FOR). * Added D:\Program Files\Black Isle\BGII - SoA to the list of directories that are searched for the chitin.key file. * STRING_SET_EVALUATE patch_exp new_string added. * IDS_OF_SYMBOL (~ids_file~ ~SYMBOL~) patch expression added. Returns -1 if SYMBOL is not in ids_file, fails the installation if ids_file is missing altogether. * INCLUDE ~list_of_tph_files~ added. A tph file is a simple list of tp2 actions. Once this action is found, all actions in each tph file will be executed. * ALWAYS AT_*UNINSTALL ~foo~ works. * AT_*UNINSTALL in INCLUDEd files works. * For now, AT_*UNINSTALL does NOT work in macroes (either in main tp2, in tph, or from SML) Version 189: * ADD_STORE_ITEM allows NONE as a valid flag. * ADD_STORE_ITEM BEFORE|AFTER ~%somevar%~ works. * READ_2DA_ENTRY_FORMER will now whine and halt if you're performing a R_2_E_N with a currently not initialized string, or doing a read out of bounds. * ADD_STORE_ITEM bugfixes; you can now AFTER the last item (or BEFORE the first); added LAST|FIRST as position identifiers. * ~!Triggers()~ in .d files no longer cause warnings in the DEBUG file. * READ_2DA_ENTRIES_NOW/FORMER and SET_2DA_ENTRY_LATER/NOW accept variables for that-string-whose-purpose-is-OMG-so-obscure. * Now the macro tb#fix_file_size works (assuming it was ever broken, which isn't necessarily true). * APPEND_OUTER works like APPEND, except that the file is loaded as an actual file, rather than as a biff or override resource (think like COPY vs. COPY_EXISTING). * SCRIPT_STYLE ~IWD~ works correctly. * ADD_CRE_ITEM ~QUIVER~, ~QITEM~, ~INV~, ~RING~ are shortcuts for ~QUIVER1 QUIVER2 QUIVER3~, ~QITEM1 QITEM2 QITEM3~ etc. * No longer wrong warnings in .d file when decompiling abela.dlg. * BACKUP "/an/absolute/directory" works again. Please note that "/an/absolute/directory" DOESN'T work on Windows (you'll have to forget platform interoperability and use "\an\absolute\directory"). * INSERT_2DA_ROW bugfixes (uses \r\n, no longer inserts \n at the beginning, adds a \r\n at the end). * PRINT, PATCH_PRINT no longer lose their newline. * TO_UPPER ~somevar~ will turn to uppercase the contents of somevar. * TO_LOWER ~somevar~ will display a random porn picture. * REMOVE_MEMORIZED_SPELL spell_list added. Please stress-test the function and check throughly the memorization info. This hasn't been tested at all on CRE V9.0. * Another REQUIRE_FILE ~data\25spells.bif~ + MIT bugfix. (MIT=Multi Install Tool). * COPY will revert to COPY_LARGE if there are no patches or constraints; COPY_LARGE will revert to COPY (with a dummy IF_EVAL 1 constraint to avoid looping) if the src file is inlined. * Tutorials which get updated (or added) will be duly noted from now on in the readme. Notabily, I changed all references to IF_EVAL to PATCH_IF + B_O_I_I_C changes, and mentioned SOURCE_SIZE sanity checks as well. Check if I've missed a spot. * Various tentatives of improving --traify and --trbify with --out. * TEXT_SPRINT, LOCAL_TEXT_SPRINT and OUTER_TEXT_SPRINT can be used like SPRINT, but will not be traified. * Compiling triggers and actions in .d files now reverts to v185 behaviour - notabily, Kit(Myself,A!Kit) will not work anymore. This brings in too many unexpected problems. * ADD_CRE_ITEM bugfix. * COPY_LARGE with smaller file bugfix. * Helpful debug info if the modder has bad habits (EG \ in file names, AT_* ~NOTEPAD this~...) * --debug-change will print out if the patches don't alter the buffer. Version 188: * All files are chmod'ded to a+wrx (hopefully). * You can save files as inlined via the `-' optional flag. See readme. * --debug-ocaml will enable more debugging info in random places. (Note: this is Bigg's way to replicate ASSERTs in OcaML, so you'll find them only where I had problems debugging a particular addition). * ADD_STORE_ITEM can define the position of the item to add. * Some standard macroes are shipped with weidu.exe. See readme for description and usage instructions. They must be initialized with LOAD. * tb#factorial * tb#fix_file_size * Macroes can define local variables: LOCAL_SET, LOCAL_SPRINT (see readme). * LOAD allows to load macroes from the standard library. * Uninstalling a mod with biffed files now works. My fault. * INNER_PATCH_SAVE et similia may now work. * REPLACE_TEXTUALLY from to (length) for patching binary files. This will not be evaluated correctly if the from string contains regexp constructs different from '.'; it'll work with variables. * You can specify wether the matching in REPLACE_TEXTUALLY, REPLACE_EVALUATE, REPLACE and COUNT_REGEXP_INSTANCES is case-sensitive or not. The standard is not changed, but you're advised to specify that manually anyway. * You can specify wether the matching in REPLACE_TEXTUALLY, REPLACE and COUNT_REGEXP_INSTANCES is exact or uses regexp patterns. The standard is not changed, but you're advised to specify that manually anyway. * DevSin diffs: * ADD_CRE_ITEM EQUIP bugfix * ADD_CRE_ITEM slot_list is now case-insensitive. * ` rather than ~ means BNOT. * USING accepts variables. * ^^= means XOR_EQUALS. * Some fixes to the readme. * Tricky uninstalling/reinstalling patterns now work (again, my fault). * COPY_ALL_GAM_FILES added for igi. THIS FEATURE DOESN'T ALLOW BACKUP. * The log now also contains the name of the subcomponent - EG ~TB#TWEAKS/TB#TWEAKS.TP2~ #0 #2550 // Faster Romances: -> Medium. (v2) * COPY_EXISTING_REGEXP ~%some_var%~ may work as you hoped it would. * APPEND ~%somevar%~ ~a_string~ works. * Tutorial about macroes (defining, launching, pseudo-scope, standard macroes). * Kudos to Ascension64 for revising the tutorials! * --debug-boiic will print out the name of the files that *did* change in a COPY_* command that uses BUT_ONLY_IF_IT_CHANGES. * FORBID_COMPONENT may now work. * "Bash-style" FOR loops are available (ACTION/PATCH_BASH_FOR variable IN (directory regexp) list BEGIN action/patch list END) * REPLACE ~%var1%~ ~%var2%~ works. * Bugfixes when parsing IWD1/IWD2 IDS files (thanks FSR). * LOAD_TRA string_list action added. * GAME_IS ~list_of_games~ added as patch_exp. * GET_STRREF patch_exp variable added. * Tp2 and .D synthax is now case-insensitive (EG bEgIn @1 now works). Bonus points if you write all of your tp2 in alternating capitals. * MOD_IS_INSTALLED patch_exp added. * BUT_ONLY is shortand for BUT_ONLY_IF_IT_CHANGES. * INSERT_2DA_ROW patch_exp patch_exp string. * COMPILE ~somedir~ works again. Sorry. Version 187: * Is mostly the same as 186. 186 was used by Bigg for two months as a beta release. The version increase is to help upgrading for the various people who have used the 186 one for testing. * Bugfix when [U]ninstall All and the mod contains SUBCOMPONENTS. * Rules for identifying IDS strings inside BAFS are improved: notably, Kit(Player1,K!A_KIT) can get compiled. * Answering [U]ninstall when the component is not installed no longer gives an ugly "Uninstallation Failed" error (with instructions to send the debug file to xyz). * When asking about what to do with all installed and all non-installed components, 'Q' is a synonim of [S]kip (IE you have to give it twice to exit completely). That one always gets me :) * COUNT_REGEXP_INSTANCES regexp var counts how many `regexp` occurs inside the file, and puts the value inside var. * \ -> / conversion for Mac OS X users, I hope. * CLEAR_MEMORY added for Idobek. Don't. Use. This. Feature. * Some randomness with some evil SUBCOMPONENT grouping solved; if we have BEGIN ~a~ SUBCOMPONENT ~1~ FILE_EXIST ~somefile~ BEGIN ~b~ SUBCOMPONENT ~1~ NOT FILE_EXIST ~somefile~ and we have installed the first, then the file disappears, the first component is uninstalled, allowing us to install the second (in the slim chance that the file disappeared). * For Mac Users, .DS_Store is ignored by COMPILE. * --debug-presence tries to look if files referenced by BAF files are really there or are instead missing. Version 186: * Bigg starts meddling (note: in the version string, 'Hybris' is a Greek term meaning something like 'excessive pride'. * STRING_EQUAL and STRING_EQUAL_CASE are similar to STRING_COMPARE[_CASE], however the return values are more obvious (true if equal, false if different). * APPEND_COL now takes variables (and evaluates them before counting the spaces). It can now prepend any amount of empty items to the string - see the readme. * INNER_PATCH_SAVE savevar buff added (see the readme). * TP2_FILE_NAME variable added. * When the mod has 4 or more components, and no --ask-all option is chosen, WeiDU will print out the component name, EG "The setup-npcflirt.tp2 mod has 16 distinct optional components." * When choosing wether to install a mod component or not, you can now give [I]nstall as a synonim of the still valid [Y]es. This way, you can make better prompts.tra files. * NO_IF_EVAL_BUG tp2 flag added. Don't use IF_EVAL with it (it'll usually cause crashes or other random behaviours). * --language X --force-install X, --force-uninstall X, --force-install-rest X Y... and --force-uninstall-rest X Y... command-line parameters added, see manual for description. * %INTERACTIVE% tp2 variable added; if installation is interactive it's set to 1, otherwise it's set to 0. * REQUIRE_FILE, FORBID_FILE and FILE_EXIST, when fed a 25.*\.bif file, look if it is referenced in the key, rather than looking for the actual file (to workaround the problem with multiple installs). * ADD_KIT ~swashtf~ will work if the kit sswashtf (or swashfta) is already present; it will set the %swashtf% even if the swashtf kit is already present. * COPY ~%a_var%~ ~override~ works even if %a_var% is a directory. * If you choose [I]nstall All or [R]einstall All options, you still get asked explicitly about subcomponents. This does not happen with CLI options such as --yes and similar. Hint: take the chance to learn how to use the cli :) * MKDIR ~%somevar%~ now works. MKDIR ~a/b/c~ will work even if the a/b directory doesn't exist. More formally, it'll perform like MDIR ~a~ ~a/b~ ~a/b/c~. * The BACKUP directory is created if missing. * Since most modders out there are dumbasses and use AT_INTERACTIVE_VIEW ~NOTEPAD this~ and~EXPLORER this~, now these two constructs are equivalent to the correct ~VIEW this~. * --skip-at-view blocks AT_* ~VIEW~ actions (and synonims as the above entry), while the rest of actions (EG batch/shell files) are run as normal. * --quick-log doesn't print the name of installed components in the log (saves around 4 seconds per mod for people with large collections). * Long-time pending tutorial for SET_2DA_ENTRY_LATER/NOW added. * READ_2DA_ENTRIES_NOW/READ_2DA_ENTRY_FORMER added, they work somewhat like SET_2DA_ENTRY_LATER/SET_2DA_ENTRIES_NOW and are supposed to be faster. See the (rather skinny) tutorial. * Biffs are created as a+wrx at the request of Loriel. * COPY_LARGE allows to copy (without patching) files that exceed the standard size limit. * Backup works even if the destination file is too big for the standard size limit. * AT_NOW and AT_INTERACTIVE_NOW are run when found, rather than at the end of the installation. DO NOT USE THEM WITH WEIDU --make-biff. * DEFINE/LAUNCH_ACTION_MACRO (with MACRO_ACTION as synonim) added, they are similar to the so-called functions in bash. On the same line, DEFINE/LAUNCH_PATCH_MACRO (with MACRO_PATCH as synonim). Tutorials pending. Version 185: * TP2_AUTHOR variable for bigg. * COUNT_2DA_ROWS added for Diamond. * Bunch of devSin changes: * ADD_KIT bugfix. * Un-SET_STRING message removed. * !, &, |, &&, ||, << and >> do just what they do in C. * >>=, <<=, ~, ^^ added. * == works as an equality test for integers. * PATCH_RANDOM_SEED added. * RANDOM_SEED -- if you pass a non-integer it now does a self-init Version 184: * --traify is back to the old behavior for ~~ empty strings. Don't use those! * STRING_MATCHES_REGEXP (= STRING_COMPARE_REGEXP) and STRING_CONTAINS_REGEXP added. * STRING_SET (_RANGE) tra files now take %variables%. * WeiDU TP2 actions like "COMPILE myDir" should no longer lock that directory "forever". * Exponentiation added: a ** b == a^b a ** (b c) == a^(b/c) Version 183: * Fixed a bug with --reinstall and mods with many components. * WRITE_BYTE offset negativeNumber should now work correctly. * --noautoupdatemsg may now actually work. * COMPILE_D_TO_DLG will no longer leave FOO.DLG.DLG lying around. * Minor --traify bugfix involving empty strings with sounds. * ADD_TRANS_ACTION now handles @123 and whatnot. * STRING_SET_RANGE added. Version 182: * EXTEND_*_REGEXP bug fixed. Thanks, bigg. * <<<<<<<< now substitutes variables in the filename. * STRING_SET now takes a list of arguments, which may make things faster if you have a big TRA file and you're using USING. * --ask-every makes WeiDU behave as if ASK_EVERY_COMPONENT were present. * EVALUATE_BUFFER made generic as a patch action and a modifier for strings in patch expressions or assignments. Thus SPRINT indirect = "%y%" SET EVALUATE_BUFFER "%indirect%" = 55 sets y to 55, and so on. This removes the need for EVALUATE_BUFFER as a one-off modifier to EXTEND_TOP, etc. See manual. * optional SET allowed before +=, etc. That SET is required if you want to use EVALUATE_BUFFER on the destination variable name. Version 181: * SET_2DA_ENTRY_LATER won't issue misleading warnings with non-int values. Also respects the required-column-count correctly. * Rastor's ICT2 tutorial added. * You may now put EVALUATE_BUFFER after TP2 EXTEND_* and TP2 variables in the source BAF will be evaluated. * "var += value" is now a valid TP2 patch statement (_not_ an "expression" or "value"). Also -= *= /= |= &=. * --tlk-cmp now compares sound resource names as well as text strings. * --trbify and .TRB files added. Do not use. devSin owes docs. Version 180: * SNPRINT bugfix? * SET_2DA_ENTRY_LATER and SET_2DA_ENTRIES_NOW added. Some subset of { bigg, CamDawg, devSin } will provide documentation later. * SUBCOMPONENT + DESIGNATED bug fixed. Thanks, CamDawg. Version 179: * SNPRINT (like snprintf()) added for string truncation. * INSERT_FILE, WRITE_FILE take variables. * WeiDU should now work when compiled on 64-bit machines. Thanks, fca. * Variable handling bug fixed. Thanks, bigg. * More performance improvements. Thanks, bigg, devSin, Cam, etc. A random "complicated" mod goes from 16 seconds to 10 seconds. * WeiDU return values are now documented. Loosely, 0 = success, non-zero = failure. * Initial support for extracting data paths from Mac baldur.ini files. More help needed. Version 178: * ADD_CRE_ITEM bugfix. Thanks, devSin. * TP2 --reinstall added. Works like --install but only for already-installed components. Auto-selects last-used language if possible. * Some performance enhancements. Turns out that WeiDU was spending quite a bit of time setting and evaluating variables. For example, a mod that crawls over every effect in *.SPL now takes 8.7 seconds instead of 91 seconds. You will probably only see a difference on mods that have non-trivial patch processing (lots of READ_*, WRITE_*, PATCH_IF, etc.). For example, Ascension (all comps, English) shows no improvement, going from 2.58s (warm cache) to 2.92s (warm cache) -- loosely in the noise. Ease-Of-Use (all components, warm cache) improves from 18.3s to 6.12s. For some reason, I was sure that BUT_ONLY_IF_IT_CHANGES was the culprit. In fact, as best as I can measure, BUT_ONLY is free. Anyway, let me know if your mod starts behaving strangely or suddenly takes forever to install (please use wall-clock or OS time to measure this, since WeiDU's "*.DEBUG" reporting changed between this version and the last version so the self-reported numbers can't be compared). Version 177: * LOOKUP_IDS_SYMBOL_OF_INT documentation change. * ADD_CRE_ITEM multi-slot-equip fixed. * READ_SSHORT added. * --toplevel added for emitting DLG top-level states only. Version 176: * D Action APPEND_EARLY added. Works just like APPEND, but the states are added early and can be the target for I_C_T (or whatnot). Please test this and let me know if there are problems. * The TP2 Action APPEND now evaluates variables in the string to be appended. * TP2 EXTEND_TOP and EXTEND_BOTTOM evaluate variables in their filename arguments. * REPLACE_TEXTUALLY now does variable substitution for both arguments. * LOOKUP_IDS_SYMBOL_OF_INT added. * COPY_RANDOM syntax documented. Version 175: * SET_2DA_ENTRY now evaluates WeiDU variables in strings. * ADD_STORE_ITEM now takes variables for the item and "LIMITED"/"UNLIMITED" flags. Thanks, devSin. * INNER_PATCH_FILE added. * READ_STRREF added. * SPRINT added. * COPY ~%variable%~ ~dest~ now works. If you really have a file named %a%, make sure that you either catch it with globbing/regexps or that your TP2 file does not use a variable named "a". * --out, --textout, --textapp, --dout unified to --out (and --append) * (A != B) added for (NOT (A = B)) * Precedence and associativity for values fixed up a bit. Notably, 3*4+5 < 100 + 1 AND myvar = 22 Actually does what you expect: (((3 * 4) + 5) < (100 + 1)) AND (myvar = 22) As many of you noticed, I had the comparisons (<, =, ...) binding too tightly and a bunch of other things (e.g., bitwise ops) all had the same precendence. We now mimic C/C++. Of course, you can stlll put in extra parens if you're paranoid. * Values and Predicates, which used to be separate, are now one big group that contains everything that used to be in either one. Thus myvar = 3 + (FILE_CONTAINS "ROGER.CRE" "CRE") = 4 Results in 1 being assigned to myvar. * The WeiDU grammar is now down to 8 shift/reduce conflicts (from more than one hundred), all of which spring from using "X = 55" as shorthand for "SET X = 55". Loosely, these two situations are ambiguous with only one token of lookahead: COPY ~a~ ~b~ ~c~ = 5 and: COPY ~a~ ~b~ ~c~ ~d~ * WEIDU_ARCH and WEIDU_OS built-in variables added. * WeiDU almost includes free beer for CamDawg, but he was a few minutes too late. Version 174: * APPEND_FILE added. * Segfault involving out-of-order DESIGNATEDs fixed. Thanks, devSin. * "Foo component X not found" message elided. * Globbing now re-enabled by default on OSX (don't know why it was disabled ...). * Added --logapp. * ADD_CRE_ITEM can now take multiple possible item slots. * Added FILE_CONTAINS_EVALUATED, PATCH_PRINT. * Supported: "PATCH_IF foo BEGIN yada END ELSE PATCH_IF bar ..." * SAY_EVALUATED added. * WRITE_BYTE, SAY, etc., now also do bounds-checks. * READ_ASCII takes an optional size argument. * INNER_ACTION and INNER_PATCH added. * You can now specify state numbers for DLG->D on the command line. * INSTALL_BY_DEFAULT component flag added. Version 173: * Added READ_BYTE (etc.) ELSE clause for error handling. * Added --noselfupdatemsg * Massive documenting binge: all command line options are now documented. I would appreciate it if people would check over these. * ADD_KIT tutorial URL changed. * WRITE_*ASCII now takes an option "required size" argument (pads with NULs if you are too small). * Added GLOB explanation. * Added --tlkcmp-strings for al17. Version 172: * If you pass --yes, it will not ask you to press enter at the end. * You may now use ~~~~~ (instead of ~, " or %) to delimit a string. This should hopefully help with traifying TLK files with strings that contain all three of my previous faves. Special thanks to kenteam for his help in finding this bug. Version 171: * SOURCE_SIZE variable now set automatically as well. Version 170: * NO_LOG_RECORD module component flag added. * ";" parse problem with FOR loops fixed. * --debug-value switch added. Good luck, devSin. * WeiDU now does explicit bounds-checks on READ_BYTE/SHORT/LONG/ASCII. Thanks, devSin. * PORTRAIT_SMALL, PORTRAIT_LARGE constants added. * If you pass --uninstall, it will not ask you to enter at the end of the processing. * Empty Action Warning no longer displayed since we don't save empty actions. Version 169: * 0-byte files now handled correctly when uninstalling. * x=5 can be used instead of SET x=5, but DO NOT do "x=y=4" * patch_expression: FOR (x=0; x<5; x=x+1) BEGIN blah blah END * Errors while COMPILEing will now actually abort a tp2 component installation. * ADD_CRE_ITEM tutorial moved to right place. * ALLOW_MISSING / FILE_EXISTS_IN_GAME fixup. * Added Rastor's customization tutorial. * DO Actions that do not contain a letter or a number are removed. * --uninstall now automatically picks the Language based on WeiDU.log (if it exists and is in range, etc.) * You can now inline files with the TP2 Action <<<<<<<< Version 168: * IF and UNLESS now really take regexps, as the docs claim. * REPLACE_TEXTUALLY, REPLACE as well. * WeiDU will copy 0-byte files again. * STRING_SET takes USING. * RANDOM(lb ub) and RANDOM_SEED added. * STRING_COMPARE_CASE added. * DESIGNATED module flag added. Version 167: * Added string concatenation. * Added DECOMPILE_DLG_TO_D and COMPILE_D_TO_DLG. * Added SOURCE_RES and DEST_RES variables. Version 166: * Removed auto () message. Whoops! * "Many Components" + "Subcomponents" = "Skipping Too Much" bug fixed, I hope. * PATCH_IF now works. Thanks: CamDawg, bigg. * Smoketest: --transitive //from bugfix * Smoketest: --full-from does a two-pass printout to catch backward references and get correct //from comments. It is turned on automatically by --transitive. * SirLancelot: --traify-tlk can be combined with --traify# * Added SUB_COMPONENT tutorial by Cam. * I moved to a new laptop, so the "default" WeiDU is now built with cygwin+mingw instead of cygwin+msvc. This shouldn't introduce any problems, but let me know if it does (e.g., with viewing, or slashes and backslashes, or globbing). Version 165: * "ERROR_LOCATING_RESOURCE" error messages will now explain what WeiDU thought it was doing when it was loading that resource. * If WeiDU runs into an error processing a D action it will now tell you which of your D files it was working on. * The "missing THEN causes WeiDU to die" bug should be fixed. It was, in fact, a bug in ocaml's parser. Please try out removing all of your "then"s (or whatever) and let me know if you can encounter the problem now. If you can, send me a test file. * With the help of Idobek and Jason Compton, I believe that I have fixed the FORBID_FILE bug, aka the "Keto Double Interjection" bug. * Also fixed a minor-buglet with the module name printing in WeiDU.log -- if there was an error during the install it would sometimes fail to get the module names and yell about it (although everything worked fine). Now it gets the names and does not yell. * Added igi's auto-update-all. * Idobek/Grim subcomponents added. Version 164: * REQUIRE_PREDICATE evil warning messages suppressed. Thanks, igi and Reaper99. * "Error clearing *.IDS" message, which served no purpose, has been removed. * ADD_TRANS_ACTION added for Darios, Meria, etc. * PATCH_IF added for bigg. * You can use FOO instead of %FOO% to get the value of the variable FOO, so long as it is unambiguous. This work in "patch expressions" only -- in other places (e.g., in WRITE_EVALUATED_ASCII) you still need the %%s. Version 163: * ALLOW_MISSING now actually works for copying files (like it should have!). Thanks, CamDawg. * SET_2DA_ENTRY bug with setting the last entry on a line fixed. Thanks, igi. * Japh's ADD_CRE_ITEM and REMOVE_KNOWN_SPELL patches added. Thanks, Japh. Version 162: * REQUIRE_PREDICATE component flag added. * --autotp command documentation removed since command does not exist. * encrypted IDS and 2DA files now work correctly with COPY_EXISTING. Thanks, igi. * --continue, which continues despite TP2 action errors, was added for Vlad. * --traify now works on %strings%. Thanks, SConrad. * SET_2DA_ENTRY is now dramatically faster (work that used to take 7 seconds now takes 1.4). The patch command also no longer "pretty-prints" the resulting 2da file. * Added Japh's ADD_MAP_NOTE patch command. * Added Japh's ADD_KNOWN_SPELL patch command. You rule, Japh! * Added INTERJECT_COPY_TRANS2. Someone else should document it. Version 161: * AT_INTERACTIVE_EXIT will now work successfully on components that were "temporarily uninstalled" and then "permanently uninstalled" at the user's request. * WeiDU.log now includes component names as comments. Blah. Version 160: * Added COMPILE_BAF_TO_BCS and DECOMPILE_BCS_TO_BAF as "Patch" actions. * Added REPLACE_EVALUATE because Sim wanted it. Version 159: * Special thanks to Avenger for sending me a bunch of PST files so that I could fix more of this stuff. * We can now decompile PST BCS files with point-triggers, like: NearLocation(Myself,[1086.1803],20) * We can now compile PST BAF files with point-triggers. * We can now decompile PST actions like: GlobalSetGlobal("Previous_Area","GLOBAL","Current_Area","GLOBAL") But note that you need "--script-style PST" (or a PST Chitin.key) when decompiling to get this right. * @-100 = "Foo" now actually works. Thanks, Rastor. Version 158: * --script-style and SCRIPT_STYLE added: BG, IWD2, PST. Controls how BAF files are read in and how BAF and BCS files are written out. Generally autodetected. I need someone to send me all of PST's IDS files before I can improve or correct PST support. I would also like an example of a PST _trigger_ that uses a non-zero numbers pair (e.g., [55,66]). * Added --remove-biff. See example above. Don't use it. * %LANGUAGE% variable is now set automatically to the language directory name (e.g., "american" not "American English"). See AT_EXIT above for language-specific README viewing. * Some of WeiDU's "hard-coded" strings (e.g., "[Y]es or [N]o or [Q]uit?") can now be replaced by TRA files. See examples\prompts.tra . Could someone writeup some docs for this? Version 157: * ("foo" STRING_COMPARE "%bar%") evaluates to ZERO if and only if its two arguments are EQUAL (and have the same length) after variable substition. If they are not equal it returns 1 or -1 just like C's strcmp() function. The two arguments must be strings. You may use STR_CMP for STRING_COMPARE. Icelus wanted this. * Updated the documentation on division. 11 / 6 = 1 in WeiDU, not 1.8 or 2 or somesuch. * REPLACE_TRIGGER_TEXT_REGEXP, REPLACE_ACTION_TEXT_REGEXP, REPLACE_ACTION_TEXT_PROCESS_REGEXP. * INSERT_FILE, WRITE_FILE added. * --noautoupdate may actually work now. Version 156: * BUT_ONLY_IF_IT_CHANGES bugfix? Version 155: * Added Gwen's "--transitive" for viewing banters. * Added FORBID_COMPONENT. * REQUIRE_FILE and FORBID_FILE are now handled in a "preprocessing" step. Version 154: * Added BUT_ONLY_IF_IT_CHANGES. * SET_2DA_ENTRY now takes a patchexp. * Fixed a bug where READ patch actions were evaluated out-of-order in some cases. * Note: There is a KNOWN BUG involving --traify crashing on certain CHAIN constructors. Sorry. We're working on it. Version 153: * Bugfix involving ALLOW_MISSING in mod A not being honored when mod B tries to reinstall A's component. * STRING_SET and "forced string references" now uninstall automatically with the standard WeiDU rollback. How many times do I have to tell you guys not to use this feature? Since no one is listening to me in that regard, you can all thank JRM for convincing me to code this up. * If you pass AT_INTERACTIVE_UNINSTALL (and friends) a single argument that is a .TP2 file, WeiDU will enqueue that TP2 file for you and run it when it is done with the current one (and any others you have previously enqueued). This prevents you from having to guess the executable to invoke or whatnot, and is apparently handu for people with voodoo uninstall procedures. Note that you can make it so that A.TP2 calls B.TP2 and B.TP2 calls A.TP2 and the user loops forever. Don't. JRM again. Version 152: * EXTEND_TOP / _BOTTOM now automatically handle target scripts that are not there. Version 151: * CHITIN.KEY.FOO will no longer be found automatically. * Strings can now be %abc% as well as "abc" and ~abc~. This will apparently help with Big5 (Chinese) translations. Version 150: * Biffs made by WeiDU now write out the correct (hopefully) file resource location and tis resource location values. Thanks Avenger and Horrid. * APPLY_BCS_PATCH_OR_COPY added to make Ease easier. * More accurate output on "compiling X files" statements. Version 149: * Auto-update only on win32 ... * Read in triggers with 3 integer parameters from BAF files correctly now. Thanks, Avenger. * EXTEND_TOP, EXTEND_BOTTOM now handle missing arguments more gracefully (assume empty script). Version 148: * Unknown transition strings are now written out as -1, not 0. * --make-biff should no longer make read-only biffs. Thanks, C Bisson. * Added Idobek's WHILE loop and SET_2DA_ENTRY tutorials. Thanks! * Added CamDawg's bitwise operator tutorial. Thanks! * Some Mac niceities by Loriel. * REPLAC_BCS_BLOCK can take BAF file arguments. Idobek is lazy. * TP2 Flag parsing was messed up -- thanks, Idobek. Version 147: * Fred S. Richardson patches: MinGW compiler support, HD0: .INI path support (apparently handy for people with multiple BG2 installs). * WeiDU now supports dialog.tlk of basically arbitrary size. TLK files above 16 megs load more slowly (surprise). Version 146: * ADD_STATE_TRIGGER now takes an optional transition list. CBisson wanted it. * ADD_STORE_ITEM and ADD_GAME_NPC docs added by Japh. * BAND, BOR, BNOT, BXOR, BLSL, BASR, BLSR -- Smoketest's expression bitwise operators added. Version 145: * Better error messages in --tcmp. * First attempt at handling both CHITIN.KEY and chitin.key (unix). Version 144: * Added Fred S. Richardson's ADD_PROJECTILE. Thanks, Fred! * Fixed a bug that was causing "SAY NAME1 ~Foo~" to fail because NAME1 would not be evaluated. Version 143: * WeiDU now requires OCaml 3.07. * WeiDU now reloads KIT.IDS (and all other IDS files) after an ADD_KIT. Version 142: * ADD_KIT now adds to KIT.IDS. * Wow, I somehow left a "failwith foo" in the middle of the trigger list parsing code. Sigh! Thanks, Today's Newbie. Version 141: * --make-biff OSX fix broke --make-biff on all other platforms. Whoops. Fixed. Thanks, C Bisson. * COPY_EXISTING_REGEXP can now take GLOB as a modifier. Apparently everyone wanted this feature. * SOURCE_DIRECTORY, SOURCE_FILESPEC, SOURCE_FILE, DEST_DIRECTORY, DEST_FILESPEC, DEST_FILE are now all set on every single file that is copied. Darious wanted this feature. Version 140: * REQUIRE_COMPONENT bugfix. Thanks, Fred! Version 139: * INTERJECT may now use chain-style epilogues. * --make-biff may well work on OSX. Version 138: * WRITE_EVALUATED_ASCII added. Version 137: * Too many open files bug fixed. * Added some #defines to make xdiff compile more often. * Added Japh's ADD_STORE_ITEM and ADD_GAME_NPC commands. * Auto-Update process creation code now hand-tweaked on win32 platforms for bonus win98 compatibility. Special thanks to Kish for testing. Version 136: * Auto-Update now uses WeiDU versions. Let's try this once more. Version 135: * Fixed (hopefully!) an auto-update bug that was preventing Win98/WinME from using WeiDU. Auto-update has been revamped a bit: after an auto-update WeiDU will quit and you will have to click on Setup-Foo again (there will be a big message telling you to do this). Windows prevents me from doing it for you, sorry. Version 134: * WeiDU auto-updating now works even if the running WeiDU is not the newest WeiDU. However, all WeiDU mods should upgrade to at least 134. Get the word out. * WeiDU.log format changes undone for now ... but they (or the next syntax change) will eventually come back. Compton begged for a reprieve, and he shall have it, but it's hardly permanent. Version 133: * Fixed a problem with --traify FOO.BAF. Thanks, Kismet. * Fixed a problem in --traify-tlk with ~s in strings. * Fixed a problem with --make-tlk and a stack overflow. * Include Japh's STO automating code. * "setup-foo.exe this.tp2" runs "this.tp2" and not "setup-foo.tp2". * Added "component flags" in TP2 files. Version 132: * Added Fred's Cygwin/GCC patch. * Added Fred's BCS-Diff magic. Presumably Fred will continue to bat 1.000 by sending us some documentation. Look for a better multi-romance patch in the future. Version 131: * Fixed a problem with decompiling some IWD2 scripts. Thanks, Avenger. * "THEN" keywords inside CHAINs are now truly optional. * Fixed a problem with --traify and partially tra'd files. Jason here, Jason there. Version 130: * Weimorph changes. * WeiDU.log now includes the component name rather than just the number (when we have that info). This may help the people who seem to be posting that file to boards and whatnot. Notably, it helps me! * Fixed a CHAIN bug involving duplicate labels. Thanks, Grim Squeaker. Version 129: * weimorph fixes: duplicate effects (again), poison, regeneration, biffing, cre-in-name, more "not in dialogue" game crashes, brown bears with crossbows, etc. * Fred Richardson has coded up the REPLACE_BCS_BLOCK_REGEXP tp2 command. Docs to follow. * Fred Richardson's bugfix for REPLACE with WEIGHTs is included. * Massive weimorph changes. Version 128: * We now give an error on multiple JOURNALs per DLG transition. * IWG1 updates for Japh. Version 127: * WeiMorph changes for Japh and the boys. No real WeiDU changes. Version 126: * You may now --traify BAF files. * IDS files are now only loaded once each. * Better handling of actions that take two "concatenation string" arguments, like Torment's IncrementGlobalOnce("Morte_Zombie_1","GLOBAL","Law","GLOBAL",-1) Thanks, Luke Carroll. WeiDU can now compile DMORTE.D from PST. Version 125: * Added the "FILE_MD5 filename md5sum" predicate for Fred Richardson. * Documented the UNINSTALL tp2 action. Don't use it. Version 124: * Fixed a globbing definition problem in the OSX arch stuff. Thanks, Devon. * Added Unix globbing support. Thanks again to Devon Smith. Note that care should be taken to make sure your globbing works on multiple platforms -- try to use lower-case letters, for example. * Fixed a --traify problem with ~male~ ~female~ strings. Thanks, Jason and Bhasbuto. * --traify-tlk will no longer print the female text if it is the same as the male text. * Refactor WeiMorph a bit to make Japh's BG1->BG2 quest a bit easier. Version 123: * Fixed a bug in SAY (actually, offset in general) handling that was causing UNIDENTIFIED_DESC to have the DESC part replaced by its value instead of causing the entire thing to be replaced by its value. Thanks: Timothy Hoffman, Kish and Jason. Version 123: * Added three Japheth tutorials (values, read_byte, make-biff). Thanks! * Fixed a bug where variables were not being substituted properly in COPY destinations. * NOTE! You cannot uninstall correctly from something like: COPY GLOB ~save\**\worldmap.wmp~ ~%SOURCE_DIRECTORY%~ Only the last one will correctly uninstall. This is because WeiDU was not designed with the notion that their might be multiple files with the same name copied to different locations. Coding uninstall support for this would be boring, annoying and error-prone. If you want it, consider coding it up yourself or somehow getting you and your five friends to convince me that the fate of the world hangs in the balance. Version 122: * Added --extract-kits. Use it like this: mkdir kitmod weidu --extract-kits 1 --textout Setup-Kitmod.tp2 --out kitmod It will extract all of the kits (and their weapon and proficiency information and their special abilities ...) with ID >= 1 from KITLIST.2DA. Search the resulting TP2 file and look for "FIX ME" -- if it occurs, WeiDU was not able to find some information (or it was not in the original game) and you should think about providing it. You can run the TP2 file through --traify later if you want. All required resources (ability files, etc.) will be put in the 'kitmod' directory. * Fixed a bug in COPY GLOB that was corrupting the OCAML runtime and causing WeiDU to hang. Version 121: * COPY sets the %SOURCE_DIRECTORY% variable. * --debug-assign flag allows you to watch the values of TP2 variables change. * Fixed a bug where WHILE loops were not processing READ commands. Thanks, Japh. * Added "SET_2DA_ENTRY row col req_col value" as a patch. Someone wanted this. Version 120: * Added "exp ? exp : exp" -- the expression-valued if. * Added "SET variable = exp". * Added "WHILE exp BEGIN patch list END". * Case-insensitivity for actionoverride. * Added GLOB as an option to COPY for Japh. Do not use this non-portable feature. Version 119: * Empty TLK files now get a default entry 0 . Thanks, Talen. * --tlkmerge (and general file loading) bug fixed. Thanks, Dyara. * WeiDU will now notice if dialog.tlk and dialogf.tlk have different lengths and it will do something about it. Thanks, Dyara. Version 118: * Jason's brief transition syntax is now accepted: + optional_trigger + reply_text do_journal_list next * + is now accepted as a synonym for GOTO in a 'next' block. * CHAIN/CHAIN3 blocks can now end with END transition_list * SAY can now take "expressions" for offsets. * You may now put a + after COPY (existing/regexp) to mean "do not make a backup of this file and don't uninstall it later". Do not use this feature. * Noted in the docs that the THEN BEGIN keywords in a state decl * are optional and that the THEN part of a transition is optional. * Massive documentation update to cover new syntax that has been creeping in. * PRINT ~Variable foo is %foo%.~ does what you would expect. Version 117: * --automate NAME1 fix. Thanks, Thorfinn and others. * READ_*, WRITE_*, INSERT_BYTES, DELETE_BYTES, etc., may now all take "expressions" for their offsets and their values (where that makes sense). * BAF files may now use hex values (like 0x34). Version 116: * Various portability fixes by Ras. * Fixed a bug with INTERJECT_COPY_TRANS. Thanks, Elanor. * R, I tried to send you some email and it bounced. Send me some more email with a working address. Version 115: * Better error handling for out-of-range INTERJECT_COPY_TRANS. Thanks, Sim! * Yet another non-Setup-Foo.exe bugfix. This one should allow uninstallation. Thanks, GB. * CHAIN3 conditional fixing. Thanks, Jason. * Added REPLACE_ACTION_TEXT_PROCESS. Good luck, Ras. Version 114: * Fixed a problem with --biff-get and encrypted files. * --trans now looks inside DLG actions (like EraseJournalEntry()) and gives translation strings for them as well. * --biff-name bug with invalid strrefs fixed. Thanks, Sqweek. * Fixed a hideous bug in v113 that was causing WeiDU to overwrite TP2 files with itself. Version 113: * We warn if you add strings but don't specify --tlkout. Thanks, AvengerTeamBG. * Better support for GB's multiple-directory TP2 scheme. However, the only truly supported method is to have all of your TP2 files in the main game directory and run Setup-Foo. * Updated up the CHAIN epilogue in the documented grammar. Version 112: * Allow ! in tokens (but not as the lead character). * --nocomm disables comments in produced BAF files. Thanks, AvengerTeamBG. Version 111: * Added ALWAYS blocks for TP2 files. Version 110: * D-file actions and triggers are now replaced with their converted form. So you can say DO ~EraseJournalEntry(@1000)~ and have it work in the end. Thanks, Triangle. * TP2 logging is now case insensitive. * Added --make-tlk and --traify-tlk command-line arguments. * Extracting from BIFFs will no longer cause WeiDU to segfault if your KEY and BIFF files do not match up. * Fixed a problem with extracting biff resources that was causing COPY_EXISTING "this.cre" to fail. Thanks, Edsel Sabulao. Version 109: * Fixed on BCS decompilation probs. Thanks, Dyara. * --biff-get and BCS decompiling no longer stop after the first error. * --biff-get can now get arbitrarily large files (e.g., AR1000.TIS). I officially *do not care* for at least a few weeks if there is some random file hiding somewhere that WeiDU still cannot extract. Use WinBiff. Version 108: * Allow things like LastSeenBy("foo") in scripts. * Added support for biff creation. Use the --make-biff option and pass it a directory argument. All files in that directory will be made into a buff, CHITIN.KEY will be updated. Version 107: * Fixed a bug where the temp file for a big compressed biff would not be removed if weidu choked because the biff was way too big (or any other reason). * Actually, the entire handling of compressed biffs has been changed. Now we only do on-demand decompression. For example, the time to extract AR0602.WED drops from 9.6 seconds to 0.3 on my machine. No more temporary files at all. * Now faster when something adds a large number of new strings to dialog.tlk. * Fixed our handling of WEIGHTs (again!). Thanks, Dyara. Everyone, let me know if you find any flaws in the new handling. Version 106: * IDENTIFIED_DESC now works as an offset. * Added SOLVED_JOURNAL and UNSOLVED_JOURNAL keywords. Thanks, Avenger. Version 105: * Fix a WEIGHT problem. Thanks, GB. * Added --min and --max which work with --tlkcmp and --string. Fixed a minor bug in --tlkcmp. Thanks Harden Coonor. Version 104: * One last sanity check for auto-update: ensure that when we copy A over B we set B's timestamp to that of A. * You may say "COMPILE ~mymod/big-folder-of-scripts~" and every D or BAF file in that folder will get compiled. This works just like giving COPY a directory. Version 103: * Added ASK_EVERY_COMPONENT TP2 flag for Jason. Put up near AUTO_TRA. Version 102: * Added READ_BYTE, etc. WRITE_BYTE and friends can now use compound expressions (possibly involving variables). See IWD2-Ease. * Added COPY_RANDOM. * Added the --biff-get-rest option, which basically applies --biff-get to all the rest of the command line arguments. Version 101: * Unknown IDS entries (like ToB spells in SoA's SPELL.IDS) now default to 0. This was causing Sola installing problems. Version 100: * Fixed a key path-separator problem. Thanks, Devon. * COMPILE ~foo.baf~ will now uninstall correctly. Thanks, Japh. Version 99: * CHAIN "IF"s are now checked for validity. * Setup-Foo will now copy itself over all older Setup-Bar's in the same directory. * You can now COMPILE and EXTEND BAF files. See Setup-Solaufein.tp2. * BAF files can now take ~String Refs~ and @130 trans refs. Example: DisplayStringHead(Myself,~Flame Arrow~) DisplayString("Sola",@144) Version 98: * Fixed an [ANYONE] problem in BCS->BAF world. Thanks, Dyara. * Fixed a problem where re-installing a mod with an error in the new version would give you "yes/no/uninstall" instead of "yes/no". Thanks, Quitch. Version 97: * Added support for reading in some broken IDW DLG files (they come with out-of-range triggers/actions). * Added support for reading in some broken BCS files (they omit a non-optional action parameter). * ALLOW_MISSING is no longer case sensitive. Thanks, Carl Grenthe. * Fixed a lexer error involving unterminated // comments. Thanks, Moonfruit. * We now handle cd paths like "C:\CD2;E:\Other\CD2". * AUTO_TRA files are now associated only with their (single) associated D files and not with any other files. Thanks, Dyara and Quitch. * Fixed "See(LastSeenBy(Nearest([EVILCUTOFF])))" -> "See(LastSeenBy(Nearest)([EVILCUTOFF]))" problem. Thanks, Dyara. Version 96: * Parse errors and warnings are now logged. * XOR-encrypted 2DA files are now decrypted. Previously only IDS files were decrypted. Version 95: * We now verify D-file transition conditions. They were skipped before. * Invalid actions and trigger lists in D files are now only WARNINGS, as they should have been. * Location information for actions and trigger lists in D files is now much more accurate. Still not perfect, but at least it's on the right line. * BCS->BAF decompilation no longer throws up a bunch of warnings about "this file not found". * Added Japheth's R_C_T tutorial. * In BAF-land, typing things like "SeE(MySelF)" instead of "See(Myself)" is now only a warning. * If you say something like "LastSeenBy()" you are now given an explicit warning to use "LastSeenBy(Myself)" instead. The first one sometimes gets weird treatment by the game engine. * Fixed a case bug in APPENDI. Thanks, Quitch. * We are throwing a surprise 50th birthday party for my mother today. Wish us luck. Version 94: * Fixed a problem with I_C_T reversing transition lists. Thanks for making it perfectly clear, Jason. Version 93: * Fixed a problem with IDS files that have too much whitespace. Version 92: * Fixed a decompiler bug where the wrong trigger (e.g., HaveSpellRES instead of HaveSpell) might be printed. * WeiDU now checks actions and triggers in D files. * Documentation is no longer "too wide" for easy viewing. Thanks to Tapio Kivikkola for pointing this out. * Roland has taken up the "compile WeiDU for Mac users" mantle. Thanks! * Fixed a problem with CHAIN forgetting some actions. Thanks, Quitch. * CHAIN3 now supports weights for its intial condition. Version 91: * WeiDU is now a BAF -> BCS compiler. Just pass BAF files as arguments. BCS files will be created in teh current directory (or use --out). Again, let me know if we mis-compile something. Future work: allowing D-style string references in BAF files, etc. * WeiDU now reads all the .INI files in your game directory and looks for lines of the form CD1:=C:\My\Path. * New Uberchain tutorial by Jason. Version 90: * Fixed a problem where SETUP-FOO didn't work. Version 89: * Added Japeth's tutorials. * --tcmp no longer dies on an invalid file. Thanks, Falk! * WeiDU will now decrypt those annoying encrypted IDS files when extracting them from BIFFs. * WeiDU is now a BCS -> BAF decompiler. Just pass BCS files as arguments. BAF files will be created in the current directory (or you can use --out). I consider NI to be the "reference" decompiler. Let me know if you find a script where WeiDU and NI disagree on something that is not a comment, a MYAREA or an "ar1234". * You can now give WeiDU command-line arguments after seeing the options list. Version 88: * EXTEND_TOP_REGEXP and EXTEND_BOTTOM_REGEXP TP2 actions added. Will the person who wanted this submit some docs? * --automate now handles AREs * You may now say !NUMBER ~Hello~ (or !NUMBER @44 or whatnot) in a D file instead of ~Hello~ to *FORCE* the string ~Hello~ to overwrite whatever was already in strref NUMBER in dialog.tlk * --forceify option added. It behaves like --traify. So you might say: weidu --forceify my.d --dout new.d The created D file will be just like the old one, except that all of the strings in it will become forced strings with their current strref. No, I do not understand why you would want this either. But some people do. Version 87: * Yada yada, more prep to get ready for the tactics mod. Version 86: * Much nicer handling of mods with more than 4 components. * Added the UNINSTALL TP2 action to allow one mod component (say, the archer kit in a new tactics mod) to uninstall another (say, the old version of the archer kit in the sola mod). Version 85: * Fixed a bug where --automate was missing name offsets at 0xC (the identified name for ITMs, etc). Rerun --automate if you use it to make sure you aren't missing anything. * Added some --automate docs based on Rene Heroux's suggestions. Version 83-84: * Fixed a bug in "interject" that was the wrong number of parameters to be passed to "Global()" and was putting triggers (like InParty("Valen")) in the action slot. Sigh! Sigh! Version 82: * Setup-Foo.exe now dies if both Setup-Foo.tp2 and Foo.tp2 are not present. * --automate dir option added. Throw it at a directory of ITM/SPL/CRE files (say, "mymod/itm"), it will spit out a TP2 file for you. Example use: C:\> weidu --automate foo/itm --textapp Setup-Foo.tp2 * Special thanks to Victoria, who will surely be famous at some point. Let me know when you've updated your CHAIN tutorial and I will link to it. Version 81: * CHAIN/CHAIN3 changes: + You may now specify an initial condition, a la: CHAIN IF ~Global("MyValygarBanter","GLOBAL",0)~ THEN BVALYGA foo "Valygar says Hello." END BVALYGA 50 + You may end with "EXIT" instead of "END FILE LABEL". + You may end with "COPY_TRANS FILE LABEL" instead of "END FILE LABEL". * CHAIN/CHAIN3/INTERJECT/I_C_T changes: + You may include DO actions after spoken text: CHAIN BVALYGA foo "I shall smite thee!" DO ~SetGlobal("ValySmite","GLOBAL",1)~ == BVICONI "But not me, rivvil! I am magic resistant." EXIT + If you are a true masochist, you may use DO and IF at the same time here: CHAIN BVALYGA foo "I shall smite thee!" DO ~SetGlobal("ValySmite","GLOBAL",1)~ == BKELDOR IF ~IsValidForPartyDialogue("Keldorn")~ THEN "I shall prevent you from smiting anyone." DO ~SetGlobal("KeldornPreventsSmiting","GLOBAL",1)~ EXIT * Special thanks to "Blue" for making the tutorial that suggested these changes. See examples/chain-banter.d for the tutorial example. Version 80: * Handle empty BCS files in EXTEND_TOP/BOTTOM. Version 79: * The current directory is no longer a search location. Compton wanted this, yell if it messes you up. Version 78: * Fix a small typo noted by Jason Compton that caused all non-TIS files to be loaded incorrectly and all TIS files except the first to be loaded incorrectly. Version 77: * Compressed BIFFs (sometimes called BIFCs) are now supported. Version 76: * Also look in GAME/CDx/Data/ instead of just GAME/Data for BIFFs. Version 75: * TRA files with errors are no longer held open. * TIS files can now be extracted correctly. Special thanks to Ghreyfain for providing enough data files to debug this problem. Turns out that BIFF files store special TIS tables that are used only for TIS resources, so they must be handled as a special case. Version 74: * Pulled COPY_EXISTING_REGEXP out of COPY_EXISTING. Little backwards compat bug, sorry. Version 73: * COPY_EXISTING source files can now take regular expressions. * Fixed a bug where a D file with a parse error would be held open by WeiDU. This bug reported by Quitch. * WeiDU works with Icewind Dale 2. Version 71-72: * New slightly spiffier cross-referenced docs. * SET_STRING can now take @translations. Version 70: * New traify docs by compton. Fixed pizza example. * Unify CHAIN/CHAIN3 docs. * --traify works on TP2 files. Use --dout and --traify# as before. Version 69: * In a state declaration, IF ~StateTrig()~ THEN BEGIN label, the THEN and BEGIN tokens are optional. * In a transition, IF ~TransTrig()~ THEN ..., the THEN token is optional. * Abbreviated .D syntax: INTERJECT_COPY_TRANS can be I_C_T, etc. as per Compton's suggestions. * INTERJECT_COPY_TRANS now does the copy-trans bit on all of the interjections, not just the last one. The copy_trans bit comes above your interjections, so it should still work like it worked before in all cases where it worked before. Sigh. Version 68: * Fixed a bug where saying --uninstall on a mod that had any uninstalled components would put you in an infinite loop. Version 67: * Fixed a bug where temporarily uninstalled components would be handled poorly when you wanted to re-install them, blah, I can't even describe this bug. Anyway, it caused (at least) at lot of errors like "Unix.Stat(solarom/uninstall/1/uninstall.1)" but it didn't seem to actually hurt anything. Still, it marked a conceptual flaw in my understanding of what was going on. * The --tlkcmp command now produces TP2 STRING_SETs with @translation references and a TRA file that fills those in. Version 66: * This time we're really sure about that Quitch bug. :-) See test\quitch\quitch.tp2 for a way of reproducing the failure. It used to die (as Quitch reported) but now it succeeds. If this fixes it, the problem was much worse than I thought: the D-file action list could get "duplicated" (or at least, not deleted) when an error happened. Version 65: * Another attempt at fixing that bug Quitch reported. :-) Version 64: * Fix a bug noticed by Quitch where the internal DLG state was not being cleared after an (un)successful install. This meant that if you had two D files with "BEGIN foo" either in two separate components or in the same component that you tried to re-install it would fail. This could also explain some errors people have been reporting about "multiple install"-like effects. * Complain EARLY if the output dialog.tlk file is read-only or a directory or something. Version 63: * CHAIN replaced by CHAIN3 internall (but you can still use CHAIN). * --traify now emits the TRA things in the same order as they appear in your original D file. This makes --traify slower. Deal. * --traify# option allows you to specify a starting offset for the created translation strings. Version 62: * tlkcmp docs by JC added. * Added "FILE_EXISTS_IN_GAME" predicate, which is true if the file is in EITHER the biffs OR the override directory. * --traify option added. weidu --traify my.d --dout new.d Will make new.d which is just like my.d except that all game strings now reference TRA strings in new.tra. Documentation of this feature will (we hope) be provided by our favorite mind-reading freelance journalist. Version 61: * Added "--tlkcmp-to" and "--tlkcmp-from" for Jason (or something). * Added "ACTION_IF pred THEN BEGIN actions END" as a tp2 action * Added FILE_EXISTS, FILE_SIZE, FILE_CONTAINS, AND, OR, NOT as tp2 predicates. * Added FAIL and PRINT as tp2 actions. Version 60: * Possible paths are no long displayed, since that was confusing users (no, really). * Added the "--biff-name X" option for "--biff-str" and "--biff-type" listings. A typical use would be something like weidu --biff-name 8 --biff-type CRE --biff-str SW1H to print the names of all creatures that have one-handed swords. Version 59: * Registry thing really this time, but if this doesn't fix it I don't know what's going on. Version 58: * Fixed a registry path bug. * Added --transref string to have --trans emit string refs. * Added Compton's new instructcions on COPY_TRANS and INTERJECT. Version 57: * Fixed a bug in the handling of COMPILE-USING TRA files when you do not have a LANGUAGE keyword in your TP2 file. Such TRA files are no longer ignored. I never noticed this myself because all of my mods have LANGUAGEs. Version 56: * Say AT_EXIT "VIEW this" instead of AT_EXIT "notepad this". VIEW at the beginning of a shell command will be replaced by something appropriate for the user/architecture (notepad, mac osx viewer, whatever). * Added INTERJECT_COPY_TRANS, which does just what you would expect if you already understand the tersely-documented INTERJECT and COPY_TRANS actions. :-) Compton, some docs? :-) Version 55: * Added INTERJECT action for even easier banter. Now we are truly meddling with forces we were not meant to know! Muhaha! * Replace whitespace handling in DLG files to avoid messing up CharName("Drizzt Do'Urden",Player1) in state 57 of c6drizz1.dlg. Version 54: * AUTO_TRA bugfix. D files should now really get the matching TRA file. Version 53: * Fix a bug with "--yes" and failed installations. * Added CHAIN3 directive to support branching in chained dialogues. This was recently used in the Improved Ilyich mod -- compare the new compact presentation to what was done for the Eclipse guys. Version 52: * Allow constraints on COPY. You may now say COPY src dst // multiple src-dst pairs OK patch_list constraint_list // "IF", "UNLESS", "IF_SIZE_IS" * IF_SIZE_IS added as a constraint. * See examples/copyif.tp2. Version 51: * Make WeiDU unix friendly for a friend who would like to compile it. * Add a --nogame option for people who would like to test it out but do not have any Infinity Engine games. * Unify slash and backslash handling. Version 50: * Reading from BIFF files of any size is now supported. Note that an individual file within a BIFF must still be <= 16777000 bytes. * More verbose error messages in a few places. Version 49: * Pause the option list. * You can now say STRING_SET ~Hello~ ~Hola Boy~ ~Hola Girl~ [HOLA] to change every ~Hello~ string in DIALOG.TLK to that new one. The old STRING_SET 345 syntax still works. Have fun, Compton. * --biff-get can now take regular expressions * If we die in the middle of a TP2 installation then we uninstall all of the files copied so far, restoring things to the clean pre-attempted-install state. Version 48: * Added --dcmp-to and --dcmp-from options to automatically spit out REPLACE-diffs between DLG files. Version 47: * Added REPLACE_ACTION_TEXT and REPLACE_TRIGGER_TEXT as D actions. Go Jason! Version 46: * Added REPLACE_BCS_BLOCK, INSERT_BYTES and DELETE_BYTES patch actions. * Added --cmp-to and --cmp-from for simple diffing. * Fixed a bug where copying FOO.EXT to folder1 and also folder2 would create incorrect backup information: only folder1\FOO.EXT would get uninstalled. Version 45: * Fixed a bug in REPLACE_TEXTUALLY (etc.) that was causing it to not match a whole bunch of strings. Version 44: * Better handling of syntax changes in TP2 files (when one mod tries to uninstall another). * FORBID_FILE added. Version 43: * ADD_KIT now takes some ToB parameters (High-Level ability abbreviation and starting equipment). The starting equipment was very tricky to get right, since you can't just append a column, you have to explicitly set column X (which may or may not be an append). * Compton's multisay and chain2 tutorial included! Version 42: * Convert / to \ in AT_EXIT-style commands. * Fixed a bug in APPEND_COL that was causing it to never append anything. :-) Version 41: * Added WRITE_ASCII (cf. WRITE_LONG) for writing in BCS script names and ITMs and whatnot. * Fixed MKDIR so that it actually makes directories. * Add AT_INTERACTIVE_UNINSTALL. * Fixed an "tetris uninstall" bug. * We can list all of the effects in a SPL or ITM. Version 40: * WeiDU now keeps a log of all installed WeiDU mods and does the "tetris uninstall" automatically, then puts back all temporarily-uninstalled mods. * Added AT_INTERACTIVE_EXIT so that you can avoid spamming the user with your readme file whenever your mod happens to be randomly uninstalled. Version 39: * Allow patches after EXTEND_TOP, EXTEND_BOTTOM for Michael. * Added MKDIR as a TP2 action. * Added REQUIRE_FILE as a TP2 action. * Added REPLACE_SAY as a D action. * Added REPLACE_STATE_TRIGGER as a D action. * Added SET_WEIGHT as a D action. * ADD_STATE_TRIGGER, ADD_TRANS_TRIGGER and REPLACE_STATE_TRIGGER may now operate on lists of states. Just put the extra states after the trigger. * EXTEND_TOP and EXTEND_BOTTOM may now operate on lists of states. Put the extra states before the transition list. * Perhaps some kind soul could write some docs about these new features? Version 38: * Switch : to / in BIFF path names for Mac-VPC compat. * Added SET_STRING for Ghrey. Version 36-7: * Added REPLACE_TEXTUALLY * Really fix Polish TLK handling this time. When the TLK string length is 0, sometimes the offset is a big negative number. Version 35: * Added ADD_MUSIC * Added %VARIABLES% that are replaced by the kit number or music number from ADD_KIT or ADD_MUSIC. * More robust TLK handling (handle possible error with DIALOG.TLK from Polish version of Ascension?). Version 34: * Fixed a bug in CHAIN where the filename after == would be reported as "not found" even if it was present. Thanks Michael! * Added APPEND_COL as a TP2 option. * Added COPY_EXISTING, WRITE_BYTE, WRITE_SHORT, WRITE_LONG. * Missing TRA files are no longer fatal errors. Having an undefined string reference (e.g., @55) is, however. * Missing files at uninstall-time are no longer fatal errors. * Michael Lyashenko tutorial included. Version 33: * Minor profiling and algorithmic enhancements mean that WeiDU is now at least twice as fast as it was before when compiling D files. The "please be patient" notice is pretty much unnecessary. * Added a cheap menu option because I was getting tired of saying "No" to all three thousand of the options in the Sola mod. Unfortunately, DOS doesn't seem to like color. * Added ADD_KIT as a TP2 option. See mymod.tp2 for details. Version 32: * Added an optional position to EXTEND_{TOP,BOTTOM} in .D files. Version 31: * Fixed a bug where Multi-say states would forget their WEIGHT Version 30: * Really process COPY_TRANS, this time for sure. :-) Version 28: * Really process COPY_TRANS. Sigh. Verison 29: * Really stay silent about saving DLGs. Version 27: * Sort transitions triggers in trans-trig-table order when loading. (under the assumption that transitions run from the bottom up in trans-trig-table order, so we should write them out that way in order to preserve the semantics) * COPY_TRANS processed before all other actions. Version 26: * Handle state trigger weighting. Special thanks to Jason Compton and Ghreyfain for doing the research. * Log OR print "[FOO.DLG] created" but don't do both. * Added AT_UNINSTALL Version 25: * Now delay "successfully installed" until dialog.tlk has been saved. Version 23-24: * Incorporate Jason's README suggestions. Thanks a bundle! * Add support for IWD. * Convert multiple newlines to the right format when compiling and decompiling. Version 22: * Replace [\r\n]+ in raw-text (triggers, actions) with "\r\n". This should help people who were getting doubled new-lines. Version 21: * Search the Registry for the game path * Handle overwriting read-only files Version 14-20: * --biff-get now ignores override/ * After a TP error we reload the translation file, so no more weird strings during install * SETUP-FOO.EXE implies a search for FOO.TP2 * Added COPY_TRANS (thanks, JC) * Added AUTO_TRA (thanks, Quitch) Version 13: * Change TP to TP2 after a reported conflict with the Sola mod. Version 12: * The dawn of recorded history. * Fixed an idempotence problem with the Un-Ininstall algorithm. * Fixed a translation problem with multiple packages in a TP file. * Allow multiple TRA files for one LANGUAGE in a TP file. * Add the AT_EXIT command.