You'd need to use windowed anyway, floating speech wasn't meant for dialogue.
I still think just using speech occurred and item tagged equipped is better. Though I need to do some testing to confirm that, but if you are happy with this system go for it, everyone has their own methods. The important thing is using the item equipped ABCD a speech tree can be improvised.
I only suggested to have an intermediate dialogue to teach the player a new system. Unfortunately there will always be players who don't read the manual or do the tutorial maps, so unless the first mission starts in a locked room with the only way out is by getting the player to talk to an instructor, the first few people the player can talk to with multiple options will need an out of character note.
There isn't actually anything wrong with double speech, even with all the variables the player will still need to learn to equip and unequip the letters before continuing.
BTW you don't need to end a sentence with <C> when the next sentance begins with a new colour tag.
With any system the modder will need to write it out before hand and use clear titles for the triggers, speech nodes and speech events to avoid confusion and linking to the wrong events. I would of thought adding variables would add even more opportunity for errors?
With your example you can do away with the intermediate dialogue and just add the out of character note to the first click speech.
Then just start Catfish Bob with the Default A speech node as his initial click speech.
Catfish_Bob_DefaultA = {Howdy. Heck of a day ain't it?}
Trigger Bob_DefaultA:
condition:
speech bob1 occurred
action:
change click speech to bob2
Catfish_Bob_DefaultB = {What can I do ya for?\n\n
<Cr>A. Well uh........ why do they call you catfish bob?\n\n
<Cy>B. How long have you been living out here in this toxic swamp Catfish Bob?\n\n
<Cg>C. I noticed that you have a diving board on your porch.... Tell me you don't swim in the toxic swamp.\n\n
<Cb>D. No offense Catfish Bob, but why do you insist on living in this ghetto f***ing shack? We have plenty of sturdy building materials in the ranger center warehouse.}
Trigger Bob_DefaultB Choose A:
condition:
speech bob2 occurred
player has more than 0 items tagged A equipped.
action:
change click speech to bob_A
Trigger Bob_DefaultB Choose B:
condition:
speech bob2 occurred
player has more than 0 items tagged B equipped.
action:
change click speech to bob_B
Trigger Bob_DefaultB Choose C:
condition:
speech bob2 occurred
player has more than 0 items tagged C equipped.
action:
change click speech to bob_C
Trigger Bob_DefaultB Choose D:
condition:
speech bob2 occurred
player has more than 0 items tagged D equipped.
action:
change click speech to bob_D
Catfish_Bob_Reply_A = {Ya know, I don't rightly remember. I reckon my first name is Bob, but I've forgotten the rest. It's probably a nickname i got before they bombarded the earth with all them nukes. Since I can't remember my real name I'm pretty much stuck with this one.\n\n
<Cr>A. Exactly how old are you?\n\n
<Cy>B. Can't remember your real name? What are you senile?\n\n
<Cg>c. Well, as far as nicknames go Catfish Bob is pretty sweet.\n\n
<Cb>D. Back}
Trigger Bob_Reply_A Choose A:
condition:
speech bob_A occurred
player has more than 0 items tagged A equipped.
action:
change click speech to bob_AA
Trigger Bob_Reply_A Choose B:
condition:
speech bob_A occurred
player has more than 0 items tagged B equipped.
action:
change click speech to bob_AB
Trigger Bob_Reply_A Choose C:
condition:
speech bob_A occurred
player has more than 0 items tagged C equipped.
action:
change click speech to bob_AC
Trigger Bob_Reply_A Choose D:
condition:
speech bob_A occurred
player has more than 0 items tagged D equipped.
action:
change click speech to bob2
Catfish_Bob_Reply_AC = {Well thank ya kindly. Here. Have a Nuka Cola on me. Sit down and take a load off if ya like.\n\n
<Cr>A. Sounds like a plan. I could use some good conversation.\n\n
<Cy>B. Sorry man. I'm on duty right now. How bout a rain check?\n\n
<Cg>C. Back}
Trigger Bob_Reply_AC Choose A:
condition:
speech bob_AC occurred
player has more than 0 items tagged A equipped.
action:
change click speech to bob_ACA
Trigger Bob_Reply_AC Choose B:
condition:
speech bob_A occurred
player has more than 0 items tagged B equipped.
action:
change click speech to bob_ACB
Trigger Bob_Reply_AC Choose C:
condition:
speech bob_AC occurred
player has more than 0 items tagged C equipped.
action:
change click speech to bob_ACC
Trigger Bob_Reply_AC Choose D:
condition:
speech bob_AC occurred
player has more than 0 items tagged D equipped.
action:
change click speech to bob_A
All triggers preserved.
Edit.
Actually thinking about it there's one way to do it without variables, that will eliminate double speech and won't require extra click speech (though it will require extra speech nodes in the text file) and that is to use the display world text action.
Have all the click speech nodes use generic text, hell you can even just have dot dot dot and they don't even have to be windowed. Then add to the triggers the action to display world text and then link that to the text that contains the options and replies.
So for the first click speech.
Catfish_Bob_DefaultA = {...}
Trigger Bob_DefaultA:
condition:
speech bob1 occurred
action:
change click speech to bob2
display world text Catfish_Bob_DefaultA1
The the world text would be
Catfish_Bob_DefaultA1 = {What can I do ya for?\n\n
<Cr>A. Well uh........ why do they call you catfish bob?\n\n
<Cy>B. How long have you been living out here in this toxic swamp Catfish Bob?\n\n
<Cg>C. I noticed that you have a diving board on your porch.... Tell me you don't swim in the toxic swamp.\n\n
<Cb>D. No offense Catfish Bob, but why do you insist on living in this ghetto f***ing shack? We have plenty of sturdy building materials in the ranger center warehouse.}
Clickspeech bob2 Catfish_Bob_DefaultB = {...}
Trigger Bob_DefaultB Choose A:
condition:
speech bob2 occurred
player has more than 0 items tagged A equipped.
action:
change click speech to bob_A
display world text Catfish_Bob_DefaultBA
Trigger Bob_DefaultB Choose B:
condition:
speech bob2 occurred
player has more than 0 items tagged B equipped.
action:
change click speech to bob_B
display world text Catfish_Bob_DefaultBB
etc etc
The display world text opens up a bigger window in the middle of the screen, you'd have to use the image tag to insert the npc's portrait but otherwise it's a much better window to read a lot of text in.
So basically the player would click on the npc the world text window would open with the npc's response and the multiple choice replies. Then they'd equip a letter and click on the npc again and then get the next world text window and the next set of replies.