Try it here! https://nlaha.github.io/EquinoxDialogue/
Equinox dialogue is a web-based dialogue tree builder for EquinoxEngine. It is built using React, please read the instructions below if you are a contributor.
What is "Equinox Engine"? It's something I'm working on that isn't quite ready to be open sourced yet!
Screenshots
Usage
Build dialogue trees, when done click save or export. Save will serialize the entire tree + metadata whereas export will only export data needed by a game engine. This is tool is designed to work on a one NPC per tree system, so for each NPC you'll have a dedicated .dlg
file. It does not currently support multiple NPCs in a single conversation.
Keybinds
Limited copy/paste support is available through: CTRL-C CTRL-V
Delete nodes or connections with: DEL
Select multiple nodes by holding SHIFT
and dragging with the left mouse button
Roadmap
- Support for metadata conditionals (if quest completed -> unlocks dialogue subtree)
- Support for metadata
- Support for multiple NPCs in one conversation
- Autosaving
Electron app- Exit node
Jump node and visible node IDs
Building from source
I recommend using yarn but npm run
works as well
To start a development server run...
yarn start
To build static files for production run...
yarn build
Electron
To start the electron app in development mode run...
yarn electron:start
To package the electron app as an executable run...
yarn electron:package:<mac,win,linux>
Replacing <mac,win,linux>
with your OS
Sample Output
The following is sample JSON from an exported dialogue tree
{
"id": "node_0",
"npc_name": "AI Character",
"type": "dialogue_entry",
"responses": [
{
"type": "none",
"next": {
"id": "node_1",
"type": "gameplay_event",
"responses": [
{
"type": "pass",
"next_node": {
"id": "node_2",
"type": "dialogue_event",
"responses": [
{
"type": "end_response",
"text": "Yes"
},
{
"type": "choice_response",
"text": "No",
"next_node": {
"id": "node_3",
"type": "jump_node",
"responses": [
{
"type": "end_response",
"text": "Exit"
}
],
"jump_to": "node_1"
}
},
{
"type": "choice_response",
"text": "Other Response",
"next_node": {
"id": "node_4",
"type": "gameplay_event",
"responses": [
{
"type": "end_response",
"text": "Exit"
}
],
"event": "test_gameplay_event_2"
}
}
],
"npc_text": "This is a test dialogue node"
}
}
],
"event": "test_gameplay_event_1"
}
}
],
"gameplay_events": [
"test_gameplay_event_1",
"test_gameplay_event_2"
]
}