Hi all!
I have some ideas about a very very old topic : Implementing a speech tree or dialog tree in Tactics! Only way I can find it to be (one day) usable and fun to make AND play would be with lua coding and/or .exe cracking of the original game. All other options I analyzed over the years are either too weird (prone, crouch, waiting time...) or too complicated to program or make (anwser items, boxes to check that are in fact pictures...) My suggestion would work as follows :
All original (vanilla) Tactics dialogues stays in place and still work. This way, already made missions still function, and no one has to convert ALL his.her mod dialogues to the new speech system. Like bubblehead in Fallout 1 and 2, only some dialogue trees will be made INSIDE already programmed dialogues. They can then be added AFTER a mod has been done, and without breaking any part of it.
1. Using codes, a function identifies when a specific dialogue is being displayed (after a click to an entity). Ex: "Dialog1 = {Hi! How are you?}"
2. It then check the core/locale .txt file to see if there are extension entries to that specific displayed dialogue (same name as the dialog + a coded sentence, like "_s,_p,_e,_c,_i,_a,_l". Ex: "Dialog1_s, Dialog1_p, etc."
2. It then access the already displayed dialogue and add to it a series of buttons at the end, each displaying a label written in one of these coded entries. Ex : "Dialog1_s = {I am fine, thank you.}, Dialog1_p = {Fuck yourself!}"
3. At any time during the conversation, you can press "OK", "BARTER" or other buttons as normal. "OK" button will always be available to stop a conversation directly.
4. When clicking a specific anwser option, it automatically search for "Dialog1s" (next step of "Dialog1_s") and display its content into the dialog, replacing all previous texts and buttons.
5. It then check for next options, coded as this : "Dialog1s_s, Dialog1s_p, etc.".
6. If it does not find any coded anwser entires, it displays nothing (like the vanilla dialog)
7. When (just after a click) it does not find any entry to continue the dialog, it closes the dialog. This means that if you program something like this : "Dialog1s_s = {Goodbye.} and then there is no entries afterward, no "Dialog1ss", it closes the dialog completely.
8. For EACH dialog that is displayed, the code add an event with the same name in the mission, like vanilla dialogues works with the condition "Dialog occured". All effects of dialogues can then be coded separately (like adding a new location to the map, or turning some NPC hostile), using the condition "Dialog occured".
9. The BEST would be to also have a code to "call" another entry, like this Dialog1sp = {#Dialog1}. This would, instead of showing Dialog1sp, bring the dialog back to the first bit of conversation.
DONE!
And then an idea to go even further...
Instead of the famous skill checks, that I don't like much because they makes all characters have the same dialog options, always, and never force "non charismatic characters to say mean things", or "very intelligent characters to say complicated things", it would work as follow :
1. Check main character INT. The maximum number of dialog options will be half the INT score, rounded up. Ex : 1 INT shows a maximum of one dialog option. 2 INT gives a max of 2 dialog options. 5 INT gives 3 max.
2. Check the highest main character stat. Ex : If this is ST, search for the "_s" anwser option and display it first. (So a 1 INT character with 10 ST will always be obliged to use dialogues based on ST, like "intimidation, insult, display of force, etc.").
3. Check the second highest main character stat. Ex : If this is PE, search for the "_p" anwser option and display it second. Don't display it if maximum dialog options has been reach. (don't display it if main character has 1 INT).
4. Do this until max dialog options has been reach, or until there are no entries left.
When writing dialogues, the game creator will use those general considerations :
ST dialogs : Intimidation, Courage, Accept a dangerous quest or challenge, insult
PE dialogs : Observation, Remarks, questions, interrogations
EN dialogs : Prudence, refuse dangerous quest or challenge, protect an NPC, endure mean words
CH dialogs : Charm, convince NPC of something, try to get a better reward, accept in some conditions, solve critical situation
IN dialogs : Logic, Say something bright, solve a technical question, give advice
AG dialogs : Cunning, Make a deal, Lie, say something vague, avoid telling something
LU dialogs : Emotion, show trust or not, say what we want you to say
Voilà! Feel free to comment on this system if you want. I think this would be some work to do, but it will be so RAD.