And dev/planning advice for organizing tons of dialogue based on many varibles?

Godot Version

Godot 4.6.1 (F+ Build)

Question

Howdy y’all! I am looking for advice on how to organize large amounts of callable dialogues. I’m working on a strategy-based social game (think harvest moon or tokimeki memorial - ish), which will involve a ton of cut–away dialogue instances in different game locations. I can give each dialogue scene a unique string and call to that in my code to play the cut-away dialogue scene, no problem. My issue is how to organize so many different variables and instances of dialogue!

I need to be able to:

  1. Call the strings from a list (so probably an array with “find()”), including “random” RNG ones based on certain variables
  2. Keep track of what strings I’ve called, and prevent some from being called a second time
  3. Call certain strings based on a calendar system I’ve implemented.

An example of my dilemma below. Each of these are different dialogue instances I theoretically need to call.

School Dialogues:
1. Meeting Alice (random chance, first interaction w/ Alice only)
2. Meeting Bob (random chance, first interaction w/ Bob only)
3. Meeting Cindy (random chance, first interaction w/ Cindy only)
4. Random Event with Alice 1 (any friendship, any time after first meeting)
5. Random Event with Alice 2 (any friendship, any time after first meeting)
6. Random Event with Bob 1 (any friendship, any time after first meeting)
7. Spring 15th Event Dialogue - REPEATS YEARLY
8. Heart Lvl 2 Event with Cindy (var: at least Lvl 2 Friendship)
9. Random non-NPC event where PC participates in class - REPEATS
10. Fall 15th Event Dialogue IF var Alice >= Lvl 5 Friendship
11. [etc]

Park Dialogues:
1. Heart Lvl 3 with Alice (var: Lvl3 Friendship only)
2. [etc. across several locations - you get the picture]

ANY advice you might have is incredibly appreciated.

Not sure if it helps at all, but when I made a dialogue system, I ended up using custom resources to store the dialogue texts for every character individually, with each dialogue option being stored in it’s own string var (Greeting 1, Greeting 2, etc).

All event and cutscene dialogue is separated from normal character dialogue as well, because in my case, all events are one-offs, and I don’t need that info loaded or checked for since it is usually only needed once.

For storing and managing dialogue and character related info, I did set up a global dialogue manager script that keeps track of things like Events, First Interactions, etc.