promotional bannermobile promotional banner

OpenDialogues

Dialogue trees for Hytale. Write conversations that remember players’ answers, straight from the Asset Editor, and show them your way.
item image
item image
item image
item image
item image

Description

OpenDialogues

💬 Dialogue trees for your Hytale server. Give your NPCs and items something to say, let players answer, and make every answer count.

No code required. Write dialogues in the Asset Editor, drop the plugin in mods/, and talk.

Discord GitHub

Grizzle, the miner's plush, asks for ten copper, ten iron and ten gold ore

A speaker with a name, a title and a portrait, answers with icons and colours, and a story that remembers what you said last time.

📦 Want to see it in action ? Install OpenQuests Examples: The strange plush chapter hands you a hungry goblin plush that talks, begs for ore and changes its tune once fed.


✨ What you get

📝 Everything in the Asset Editor. Dialogues, speakers and routers are assets, checked as you type. Nest a whole conversation in a single file, or split it as you like.

🎭 Three ways to show a dialogue, and yours. A framed panel, a cinematic band across the bottom of the screen, or plain chat. Each dialogue picks its own, the server owner has the last word, and a mod can add a display matching its server's UI.

🗣️ Speakers. A name, a title and a portrait, written once and shared by every dialogue they speak.

📄 Pages and answers. Several pages read one after the other, then answers that close the dialogue, open the next one or run a command.

🔍 Answers that show when they make sense. An answer can ask for an item in hand, enough ore in the bag, a permission, or a choice made earlier. Otherwise it stays hidden.

🧠 A memory per player. Every dialogue opened and every answer picked is saved with the player, so a character greets a newcomer and a regular differently.

🔀 Routers. One id, many dialogues: the first whose condition holds, or one drawn at random by weight.

🖱️ Opened from the world. Press F on an NPC, use an item, run a command: each opens a dialogue.

🛡️ Checked at boot. A missing dialogue or a router going round in circles is logged when assets load, not met by a player hours later.

🈯 Translatable. Every line is a translation key.


🎭 Displays

🖼️ Default

The default display: Grizzle's portrait in a frame, the text in the middle, and three coloured answer buttons on the right

A framed panel in the game's own style. Each answer is a button you can colour and give an icon.

The default display on the first of three pages of Grizzle's story, with an arrow to the next page

Long texts are cut into pages, with an arrow to turn them and a counter of where you are.

🎬 Cinematic

The cinematic display after Grizzle was fed: the epithet now reads Well-fed plush, and four new answers are offered

The speaker's portrait, large, over a band darkening the bottom of the screen, and the answers on the right. The world stays in view: made for characters you meet.

💬 Chat

The chat display: Grizzle's line followed by three numbered answers, the first in green and the second in red, and the /oda command reminder

The text and numbered answers straight in the chat, picked with /oda <n>. Nothing opens, nothing stops the game.

A dialogue names its display. Server owners can override it for one dialogue, for a tag, for a whole pack or for everything, without touching the files.

🎨 Your own

Your server has its own look ? Give its dialogues the same. A display is a plugin's few lines: point the panel at your own .ui files, or draw dialogues any way you like, and register it under a name. Dialogues then name it like any other.


🔀 Conditions and routers

Condition Holds when
Opened A dialogue was opened a number of times
Answered An answer of a dialogue was picked a number of times
Holding The item in hand matches
Inventory The inventory holds enough of an item, a resource or a tag
HasPermission The player has a permission
Composite All of its conditions hold, or one of them

Every condition can be turned around with "Not": true. Put one in an answer's When to show it only when it holds, or in a router to pick the dialogue.

Router Picks
Sequence The first route whose condition holds, else a default
Weighted One entry drawn at random, by weight

Routers lead to dialogues or to other routers, so a character's whole personality can hang on a single id.

🎬 Answer actions

Action Effect
Close Ends the dialogue
Open Moves on to another dialogue, or to what a router picks
Command Runs a command as the player
ConsumeInventory Takes items from the player, all of them or none

⚔️ With OpenQuests

Install the OpenQuests Dialogues bridge next to OpenQuests and dialogues and quests talk to each other:

  • A Dialogue quest type: open a dialogue, or pick one of its answers, a number of times. "Talk to the merchant" is one quest.
  • Answers that hand out quests with AssignQuest, or end them with SetQuestState.
  • A RequiresQuest condition: an answer that only shows while a quest is running, or once it is done.

🛠️ For server owners

Installing

Drop OpenDialogues in mods/. It needs nothing else.

Writing a dialogue

A dialogue is a JSON asset under Server/OpenDialogues/Dialogues/, edited in the Asset Editor:

{
  "Title": "grizzle.name",
  "Speaker": "MyPack_Grizzle",
  "Display": "Cinematic",
  "Pages": [
    { "Text": "grizzle.hungry.text" }
  ],
  "Responses": [
    {
      "Text": "grizzle.hungry.feed",
      "Icon": "Icons/ItemsGenerated/Ore_Gold.png",
      "Color": "#7aff81",
      "When": { "Type": "Inventory", "Item": { "ItemId": "Ore_Gold" }, "Min": 10 },
      "Actions": [
        { "Type": "ConsumeInventory", "Items": [{ "Item": { "ItemId": "Ore_Gold" }, "Quantity": 10 }] },
        { "Type": "Open", "Dialogue": "MyPack_GrizzleFed" }
      ]
    },
    { "Text": "grizzle.hungry.later", "Actions": [{ "Type": "Close" }] }
  ]
}

To open it in game, add the OpenDialoguesOpen action to an NPC role's interaction, or the OpenDialoguesOpen interaction to an item.

Commands

Command Effect Granted to
/oda <n> Picks an answer of the dialogue open in the chat Everyone
/odialogues open <id> Opens a dialogue or a router, also /od World editors
/odialogues display default <display> Sets the display of dialogues naming none Admins
/odialogues display set <target> <display> Forces a display on a dialogue, a tag, a pack or everything Admins
/odialogues display which <dialogue> Tells where a dialogue will open, and why Admins
/odialogues history reset <player> Forgets what a player said, so everyone greets them anew Admins

💻 For developers

Other mods plug in through OpenDialoguesPlugin.get().getRegistry(): answer actions, conditions, router selectors and whole new displays are one line each. DialogueEvent.Opened, Answered and Closed tell you what players do.

A display in your server's style reuses the panel with your own layout, the way Cinematic does:

public class MyDialoguePage extends DialogueCustomPage {
    public MyDialoguePage(PlayerRef player, DialogueSession session, DialogueService dialogues) {
        super(player, session, dialogues, "MyMod/Dialogue/Page.ui", "MyMod/Dialogue/Answer.ui");
    }
}

OpenDialoguesPlugin plugin = OpenDialoguesPlugin.get();
plugin.getRegistry().registerDisplay("MyModPanel", new PageDisplay(plugin.getDialogueService(), MyDialoguePage::new));

Keep the element ids of the bundled .ui files and style the rest freely. For something else entirely, implement DialogueDisplay: show and close, and every answer goes back through DialogueService.answer. Declare "MartelStudios:OpenDialogues" in your manifest.json.


Source and documentation: https://github.com/MartelStudios/OpenQuests

MIT licensed.

OpenDialogues Team

profile avatar
  • 2
    Followers
  • 8
    Projects
  • 994
    Downloads

More from Hazard4UView all

  • OpenQuests Examples project image

    OpenQuests Examples

    The example quest line for OpenQuests.

    • 199
    • October 31, 2026
  • OpenQuests Dialogues project image

    OpenQuests Dialogues

    Bridge between OpenQuests and OpenDialogues. Send players to talk to a character, hand out quests from an answer, and let dialogues react to their progress.

    • 9
    • October 31, 2026
  • OpenQuests Core project image

    OpenQuests Core

    The Core library behind OpenQuests: quest lifecycle, storage, scopes and rewards, with no quest type of its own.

    • 294
    • October 31, 2026
  • OpenQuests project image

    OpenQuests

    Modular and extensible quest system for Hytale. Create any quest you can imagine in a few clicks, straight from the Asset Editor.

    • 334
    • October 31, 2026
  • OpenQuests Examples project image

    OpenQuests Examples

    The example quest line for OpenQuests.

    • 199
    • October 31, 2026
  • OpenQuests Dialogues project image

    OpenQuests Dialogues

    Bridge between OpenQuests and OpenDialogues. Send players to talk to a character, hand out quests from an answer, and let dialogues react to their progress.

    • 9
    • October 31, 2026
  • OpenQuests Core project image

    OpenQuests Core

    The Core library behind OpenQuests: quest lifecycle, storage, scopes and rewards, with no quest type of its own.

    • 294
    • October 31, 2026
  • OpenQuests project image

    OpenQuests

    Modular and extensible quest system for Hytale. Create any quest you can imagine in a few clicks, straight from the Asset Editor.

    • 334
    • October 31, 2026