Dheu wrote:If you want it to make something that is a "Must Have" for developers, it will need to make something that does more than I can accomplish with grep.
I know about grep
![Smile :)](./images/smilies/)
Some reasons you might use this thing instead include: it's faster (no big deal, grep is usually fast enough), the output is more readable, it can more conveniently (once I've actually implemented this) navigate through a conversation, it can (once I've actually implemented this, haven't even started on this yet) display the conversation graphically (as a treeview or the like, this will take some experimenting and/or suggestions to be useful).
IE: Make a gui editor that makes them easier to actually edit. (There is one that exists, but it doesn't provide update access to all fields)
I haven't thought about editing at all yet. In its current state the code does not really allow that because it does not preserve line numbers. It could spit out a completely new .dlg file but its contents would have completely different line numbers, breaking python code referring to them as well as confusing other people or tools using the same file (like source control).
Adding functionality that goes beyond simple text search. For example, I would love to a have some integrity checking functions. grep is not so good at looking for duplicate lines for example.
You may have noticed me spewing .dlg improvement suggestions at Wesp (in a few of his patch threads). Those are from reports from mostly the same code
![Smile :)](./images/smilies/)
Suggestions in this area are appreciated.
{1}{NPC Statement}{}{#}{
{2}{PC Response}{}{10}{Persuasion -3}{
{2}{PC Response}{}{20}{Persuasion 3}{
Not sure what you're after here. The example is not a problem because the "destination" differs, right? Which buggy forms of this pattern do you want me to catch? I've considered checking for cases where it's possible either both or neither of the replies are reachable because the requirements are not met. Do you mean that? Or do you mean cases where the destination (next npc statement) is actually identical, so the pc responses should be merged?
or... Something that could reveal or at least bring attention to any dialogs that may not have a valid response. ie:
{1}{NPC Statement}{}{#}{
{2}{PC Response}{}{5}{Persuasion -3}{
{3}{PC Response}{}{10}{Intimisation 3}{
{5}{NPC Statement}{}{#}{
{6}{PC Response}{}{10}{G.Show==1}{
{7}{PC Response}{}{20}{G.Show==0}{
What happens if a person comes to line 1 with Persuasion 3? There is no valid response. However, such a function would have to understand the protocol enough to be able to extract dialog blocks (seperated by {#} in the line number area) and actually parse and evaluate all the condition blocks.
That's exactly what my code does. It builds a graph (npc lines are nodes, pc lines are edges connecting those). It also parses requirements and does limited (work in progress) parsing of other kinds of script, which I'm hoping to use to do checks for unsatisfiable conditions reliably even in slightly more complicated cases than your persuasion/intimidation example. It's not just a database full of individual lines, it knows which ones are pc and npc and how they are connected.
Of couse the best thing in the world would be a gui dialog editor that had all those things. But I will take what I can get. =)
Hope this is useful.
Definitely useful, I'll see if I can get the sanity-checking stuff in a form others can use too (the output is currently a bit cryptic, I've been translating from its gibberish into something closer to english when reporting possible problems to Wesp). Do not hold your breath for a gui editor, but a (gui or text-based) tool reporting possible problems is doable (mostly already there).
As for your tourette question... VTMB makes use of a lot of global variables that get set in diffierent locations. When you seduce Jeanete G.Jeanette_Side gets updated by 1 (updated by Jeanette.dlg) and when you suck up to Therese, G.Therese_Side gets updated by 1 (updated in Therese.dlg). To get Tourette, you must have sucked up to BOTH of the sisters consistently AND have a minimum persuasion.
I know, although you're right I should have mentioned that too. Figuring out exactly what the requirements are here is a bit tricky and I can't do it completely automated yet. It does tell you Therese_Seduce and Jeanette_Seduce each need to be high enough, and finding all spots where those are increased (in dlg code! changes through level script aren't caught, but I don't think there are any in this case) is easy too, but combining all that to "you must have these stats and followed one of the following possible paths in conversations" is a bit harder...