How to program dialogue for a game?

Started by
11 comments, last by Alberth 3 months ago

@Alberth That sounds good, but may be quite a bit more complex once you want to localise to other languages, depending on how easily you want your localisation work to be. I would rather put all that into compiled code, though, because then you can directly invoke stuff as a result of choosing an option, and it allows you to have more control over dynamically generated dialogues or something. Although even then (or especially then :D), localisation will be a pain.

I would simply have a dialogue class, which has a command to generate a list of options (another class), and then there's a callback on each option that gets triggered when you have selected one (such as on_chosen and on_not_chosen or something, if you have different options which also trigger behaviours if you do not chose them). Not that you have to over-OOP it, but it's a good conceptualisation, I think. Each chosen option can then transform the dialogue into the next phase, either statically or dynamically. The dialogue itself should also contain some kind of context as to which things it's referring to (such as the player and a specific NPC, maybe also some other object of interested that the dialogue is about, etc.). Basically each option needs display() string, on_chosen(Dialogue &), and optionally on_not_chosen(Dialogue &), which modify or destroy the dialogue or affect things referenced by the dialogue. A rejected option can also lead to the creation of another option in the next stage of the dialogue.

Anyway, just brainstorming, not sure what exactly you want to do, anyway. If your requirement is just clicking A until the dialog displayed all its text, obviously, you would not need something like this. But I'm assuming you want the player to make choices and that the dialogue actually affects things.

Walk with God.

Advertisement

@Alberth That sounds like another solution, yes.

RmbRT said:
That sounds good, but may be quite a bit more complex once you want to localise to other languages

I didn't consider localization, but just because I use a concrete sentence doesn't mean it's the only solution. You can instead use a suggestive name like care_for_a_garden_walk_invite instead of the text. The computer can collect them for you (I tend to be as lazy as possible 🙂 ), and generate files (one for each language) for the actual text like

care_for_a_garden_walk_invite : are you interested in a walk in garden ?
no_i_am_busy : ...

Alternatively, you can put all languages in one file, much alike the conversation

care_for_a_garden_walk_invite
en_us: are you interested in a walk in garden ?
en_uk: are you interested in a walk in garden ?
..

no_i_am_too_busy
en_us: Go away, I am terribly busy
...

And of course, my examples are just about defining the interaction and the actual text, it doesn't say anything about how to implement it. So you can use classes etc.

Typically, you first try a small example, to work out what code you exactly need. Once you know, write Python (or other) code that prints the same pattern, for all dialogs you defined in the text files, in a fraction of a second.

Never do anything the computer can do faster or more precise 🙂

This topic is closed to new replies.

Advertisement