Git Product home page Git Product logo

dialog-editor's Introduction

Dialog Editor

This repository is used to handle issues and publish the latest releases of the editor.

Download

You can find all available versions of the application in the Releases tab.

Pre-Requests

Get Started

  • Run xrSDK.Editor.DialogEditor.App.exe.

It may be blocked by the Windows Defender, because the executable file is not signed. But this warning can be safely bypassed.

  • Select File -> Open Game directory.
  • Select the root directory containing the gamedata folder.

Please, note:

  • The editor will try to use standard COP paths to dialogs and localization files. If the files are not found, you will be prompted to specify the paths to them manually;
  • The editor supports 2 localizations: eng and ru. You can switch between them in the settings.

For more information, check out our wiki

Issues

Feel free to create an issues for problems you encounter on Issues page.

Authors

Powered by Ray of Hope team.

Join us!

dialog-editor's People

Contributors

collectioner avatar reavert avatar xdenizx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

cybersys reavert

dialog-editor's Issues

Возможность изменить название диалога

Сейчас нет возможности изменить название диалога. Правда, чтобы замена была полностью автоматизированной, придётся синхронизировать программу с файлами character_desc.
image

Возможность редактировать ID ноды

Из практики знаю, что двигу не важно, какое ID имеет фраза (именно ID фразы, то есть ноды, а не ID текста). Главное, чтобы первая нода начиналась с 0. Когда я создавал диалоги вручную, я сначала писал ID ноды, которое содержало имя того, кому принадлежит фраза, и её примерное содержание (пример на скрине). При таком подходе каждая нода была уникальной для всего файла диалогов, и её можно было легко найти даже в простом блокноте. Поэтому было бы хорошо и в тулзе иметь возможность редактировать ID ноды.
image

Проверка на одинаковые ID

С появлением возможности самостоятельно редактировать ID фразы пользователь может облажаться и прописать одинаковые ID в две разные ноды. Иногда это и правда делается специально, но чаще это ошибка. Было не хорошо иметь возможность проверить такие ошибки

Несколько фичереквестов

  1. Было бы удобно если бы нод с фразой создавался в том месте, где юзер кликнул на add phrase через контекстное меню, а то оно стандартно создается по центру таблицы, и как-то неудобно каждый раз проматывать экран к созданному ноду.
    unknown

  2. Добавить редактирование идентификатора фразы в уже созданном ноде. А то при создании получается можно создать, а отредактировать его уже нельзя.
    unknown2

  3. В ТЧ немного другая приписка в названии файлов локализации (stable вместо st). Из-за этого если нет файла "st_dialogs_xxx", то идёт вылет при сохранении.
    Тут можно мб как-то детектить оба файла (и с припиской st и с припиской stable), и если нет обоих вариантов, то пусть программа создаёт этот файл в папке локализации.
    unknown3
    roh_dialog_editor.sanya.2022-09-04T20-13-47.log

Ошибка при открытии сложных диалогов, сделанных раннее вручную

При открытии сложных диалогов, которые ранее были сделаны вручную (не с помощью оригинального Dialog Editor) ноды располагаются максимально близко друг ко другу, вследствие чего трудно проследить связь между ними. Можно, стоит сделать автоматическое упорядочивание таких диалогов при их открытии (см. следующий багрепорт).

Поддержка красной строки

В текстах диалогов можно использовать красную строку. Для этого в тексте нужно прописать \n\n. Было бы хорошо, если бы нажатие Enter в окне редактирования прописывало бы символ \n, ведь так по сути появится возможность автоматически делать красную строку.
image

Ошибка при открытии файлов с комментариями

При открытии файлов, в которых есть комментарии типа <!--- Пупа получил за Лупу ---> программа вылатает с ошибкой в логе:
Error message: An XML comment cannot contain '--', and '-' cannot be the last character. Line 143, position 6.
В целом эту ошибку можно было бы скипнуть, ведь в комментариях нет ничего криминального. Возможно, это так и задумывалось, но программа всё же не воспринимает файлы с такими комментариями.

Область выделения

Ноды частенько приходится править вручную, но сейчас их можно выбирать только по одной через ctrl+ЛКМ. Было бы хорошо иметь функцию области выделения, т.е. выделил сразу несколько и передвинул куда надо.

Превью диалога

  1. Превью не понимает, составлен диалог для start_dialog или actor_dialog. Поскольку может быть и так, и так, то стоит сделать переключение между этими режимами отображения.

  2. У себя в проекте я раньше делал диалоги немного более хитрым способом, чем в оригинале. У меня весь диалог выстраивается через start_dialog таким образом:

  • Первая нода (которая 0) не содержит никаких условий и текстов, только ссылки на next-ноды
  • Вторая нода (их может быть 2-3) включает в себя условия, когда ветка этой ноды может или не может включиться
  • Третья нода (их может быть много) и последующие содержат тексты, условия и всё как обычно
    В игре получается так, что двиг читает ноду 0, но не выводит её текст (потому что его нет). Читает вторую ноду и её условия, но текст тоже не выводит (потому что его тут тоже нет), И наконец, он читает третью ноду, показывая её текст в диалоге по условиям, заданным во второй ноде. При этом фразой НПС оказывается как раз третья нода с текстом, и далее всё как обычно. Такая махинация позволяет динамически менять первую фразу НПС в разных условиях (карма, квест и т.п.), и всё это в рамках одного диалога. Обычным способом это не получилось бы, ведь первая (нулевая) нода может быть только одна, а вторая ноды в диалогах start_dialog принадлежит актору.

Так вот, превью тулды так не работает. Она читает все ноды по порядку, и даже если в ноде нет текста - она показывает пустую строку. По идее его можно заставить так работать, если его научить игнорировать ноды, в которых нет текста. Дойдя в дереве до первой ноды с текстом, тулза должна его выводить на экран, а все предыдущие пропускать. При этом см. пункт 1 - важно научить прогу понимать, составлен ли диалог для start_dialog или actor_dialog.

Работа поршней в реальном времени

Ранее уже писал о списке поршней, что он мог бы пригодиться в навигации по диалогу.

В этот самый список можно было бы включить так сказать live-режим, когда мы включая или отключая поршни, могли бы имитировать их наличие или лтсутствие у актора. При этом изменялось бы само превью диалогв в соответствии с наличием или отсутствием поршней, т.е. открывались или закрывались ветки диалога.

Раньше работа поршней по открытию или закрытию веток диалога делалась исключитльно в ручную в игре.

Порядок следования фраз

Если смотреть по файлу диалогов, то в игре первыми будут идти next-фразы, которые выше расположены в самой ноде. Пример:

image

В данном случае фраза "actor_I_wanna_eat_smth" будет 1, а фраза "actor_ok_thx_for_welcome" будет 2. Если надо поменять их местами в игре, нужно переставить их местами в файле. Однако в программе нет такой возможности. Можно ли реализовать?
image

Автонейминг нодов

При редактировании диалогов, созданных в ручную, возникает необходимость автоматического исправления ID нодов. Например, я ранее в своём проекте в качестве ID прописывал краткое содержание фразы, а также приладлежность фразы (actor_bye_sidor - фраза актора "Пока" в диалоге с сидором). С появлением редактора такая возможность отпала, но автоматически исправить старые ID в редакторе пока нельзя.

Корректное отображение связи нодов в циклах

Бывают диалоги, которые построены в виде цикла. Например, при отказе брать квест диалог возвращается в корень, или ветка типа "расскажи про..." тоже в определённые момент возвращает в корень диалога. В древе нодов такая связь выглядит не очень хорошо, иногда её даже не заметно.

Было бы хорошо, чтобы связи нодов, "возвращающие к предыдущим нодам", можно было изобразить в виде не зигзага, а полукруга (пример на скрине). Разумеется, заставить программу понимать, где именно нужно выставить такую связь, сложно. Однако, можно дать пользователю возможность вручную определять, где выставить такую связь
image

В связи с прошлыми пожеланиями было было бы добавить контекстное меню для редактирования связей нодов.

Нужен ли Phrase List?

Имхо не вижу нужды в Phrase List. На его месте было бы гораздо лучше разместить окно с текстом ноды. Так редактирование тексты было бы гораздо удобнее и быстрее. Если по каким-то причинам Phrase List всё же нужен, было бы хорошо иметь рядом с ним окно текста ноды.
image

Возможность временно скрывать ноды

В некоторых случаях было бы удобно скрывать ноды и их связи с другими нодами. Например, в сложных диалогах, где первая фраза НПС меняется в зависимости от поршней (start_dialog) фразы игрока могут использоваться одни и те же. На скрине показан случай, где фраза игрока "хочу с тобой поторговать" связана с множеством предыдущих фраз НПС, которые меняются в зависимости от получаемых поршней. Если пользователь уверен, что данная ветка диалога настроена и работает, её можно было бы скрыть, чтобы разгрузить рабочее пространство.
image

Древо диалога теряется на большом масштабе

Не могу точно определить причину бага, но иногда при повторном заходе в диалог он находится где-то далеко за границами вьюпорта, что приходится его искать. Возможно это происходит с большими диалогами, когда выходишь из него на максимальном удалении, а потом вновь пытаешься зайти.
image

Опциональная подсветка связанных нодов в сложных диалогах

В сложных диалогах со множеством циклов было бы хорошо иметь опциональную подсветку связанных нодов. То есть при выделении ноды одним цветом подсвечиваются предыдущие связи, а другим - последующие. Ведь при очень большом количестве связей становится не понятно, что с чем связано.

image

Последний открытый диалог

Было бы удобно, если бы при открытии программы открывался последний открытый диалог. Такое можно и опционально сделать

Передвижение нодов и окна

Сейчас если стоит задача передвинуть несколько нодов куда-то за пределы экрана - при переключении на пустое пространство выделение с нодов пропадает. Разумеется, можно воспользоваться зум-аутом и перетащить их куда надо при меньшем масштабе . Но в огромных диалогах это не всегда помогает, поэтому приходится перетащить на "шаг", затем передвинуть экран, затем заново выделить нужные ноды и снова перетащить на шаг.

Было бы хорошо назначить перемещение экрана на колесо мыши, или на зажатую ПКМ, или на ЛКМ+ПКМ.

Пожелания для оптимизации работы в приложении

  1. Кегль шрифта в окне текста очень мелкий, пожилым будет трудно :) Стоит добавить настройку по изменению кегля в этом окне

  2. Было бы очень хорошо каким-то образом отличить друг от друга ноды актора и ноды нпс, просто для удобства чтения диалога. Например, ноды актора покрасить в зелёный цвет, а ноды НПС - в синий (к примеру).

  3. В добавок к пункту (2). Стоит добавить переключение между режимами "actor_dialog" (первая нода принадлежит актору) и "start_dialog" (первая нода принадлежит НПС). Суть переключения между режимами заключается в том, что меняется местами выделение для нод. То есть в случае actor_dialog зелёным будут выделены все нечётные ноды, а в случае start_dialog - все чётные. Так читабельность дерева резко возрастёт.

  4. Хорошо было бы иметь возможность оставлять в ноде комментарий или какую-то пометку/флажок, которая будет записываться в файл в виде комментария. Например, комментарии типа "эта ветка приведёт к плохой концовке", или флажок, типа "начало квеста" или "завершение квеста".

  5. В настройках добавить возможность добавлять свои проперти для нодов. Например, в New Project есть проперти "go_back". Она используется в фразах, которые в сложных диалогах возвращают к корню диалога. При её включении нажатие клавиши Backspace, соответственно, возвращает в корень диалога. Таким образом, было бы хорошо добавлять в ноды свои кастомные проперти.

  6. Было бы хорошо как-то выделить ноды, которые имеют какие-то проперти (has_info и проч.), особенно те, в которых выдаются какие-то поршни (give_info). Просто для лучшей ориентировки по древу

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.