This tutorial assumes you know the fundamentals of modding (creating a tp2, viewing/reading game resources and variables, understanding scripts). Also, correctly running this code requires a WeiDU feature that is only available in WeiDU 207 or later. PM me if you need the beta for the purposes of this tutorial. It is possible to do a similar thing with WeiDU 206, but it will be much more cumbersome to use, since you'll get printed a random TLK string rather than the script file and block number.
1) open your save game, view the creature file that is affected by the stutter, and write down a list of the script files it has as well as the script for the area you're in.
2) create a tp2 like the following one, edit the stuff I marked in the comments, and install it:
BACKUP ~stutter_test/backup~ AUTHOR ~blah~ BEGIN ~Test stuttering~ COPY_EXISTING ~scriptfile1.bcs~ ~override~ // be sure to change the file names to point to the relevant ones ~scriptfile2.bcs~ ~override~ ~scriptfileN.bcs~ ~override~ ~AreaScript.bcs~ ~override~ // ditto ~Baldur(25?).bcs~ ~override~ // use either baldur.bcs or baldur25.bcs wether you're in SoA or in ToB. SET x = 0 - 1 DECOMPILE_BCS_TO_BAF REPLACE_EVALUATE ~\(RESPONSE #[0-9]+\)~ BEGIN x += 1 END "\1 ActionOverride(Player1,DisplayString(Myself,~Running block %x% of %SOURCE_RES%.BCS~))" COMPILE_BAF_TO_BCS
3) load up your game. You'll see the dialogue window spammed with lines like:
<CHARNAME>: Running block 5 of BALDUR.BCS
<CHARNAME>: Running block 123 of DPLAYER2.BCS
These lines identify which BCS blocks are running. Wait for a bit (30 seconds are fine), and see which ones fire only once, and which ones are firing endlessly. The latter ones are more likely the cause of your stuttering issues.
4) If you don't get repeating blocks, it's time to get bored and add more scripts to the list. Try adding your party members' scripts to the list in step 3. If that doesn't work, try adding all the scripts for all creatures in the area (someday I could write code to automate this as well) - although by this point you'll get spammed by tons of unrelevant AI blocks firing off.
5) Open up those scripts in your favorite game editor (or decompile them with WeiDU and read their contents in your favorite text editors). Try to identify which of those blocks are affecting your stuttering character, and why are they causing him to stutter (is one firing a Dialogue() which doesn't display? Is he under a constant ActionOverride()? NoAction()? *CastSpell()?).
6) If step 5 didn't help identify your issues, try repeating step 4.
I hope this will be useful to some people, and all comments and criticsm (constructive or not) are very welcome. If possible, try to write your feedback in a public post rather than in a PM, so that it's accessible to more people.
This is the code that will run under WeiDU 206, probably all the way back to WeiDU 185. <CHARNAME> will fire off random item descriptions, dialogue lines, sound effects without associated printed dialog, etc. You'll need to decompile all the script files you listed (wether they fired off or not) and seek the tlk string that gets spammed in the dialogue window.
BACKUP ~stutter_test/backup~ AUTHOR ~blah~ BEGIN ~Test stuttering~ COPY_EXISTING ~sw1h01.itm~ ~override~ SET x = 0 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~scriptfile1.bcs~ ~override~ // be sure to change the file names to point to the relevant ones ~scriptfile2.bcs~ ~override~ ~scriptfileN.bcs~ ~override~ ~AreaScript.bcs~ ~override~ // ditto ~Baldur(25?).bcs~ ~override~ // use either baldur.bcs or baldur25.bcs wether you're in SoA or in ToB. DECOMPILE_BCS_TO_BAF REPLACE_EVALUATE ~\(RESPONSE #[0-9]+\)~ BEGIN x += 1 END "\1 ActionOverride(Player1,DisplayString(Myself,#%x%))" COMPILE_BAF_TO_BCS
EDIT: fix suggested by Taimon in the comments at G3.
Edited by the bigg, 24 May 2008 - 06:09 PM.