RU 🔒 Locked

Расширение синтаксиса TXT2GAM

Feuerbart #53 23.04.2010 19:13 29 comments 18843 views

Предлагаю расширить синтаксис входного текста для утилиты TXT2GAM – кроме описания локаций и комментариев добавить еще и действия (базовые и «Выполнить при посещении»). При этом можно сохранить совместимость со старым. Например, так:

#Начало
     Здесь       текст 
     локации
- (конец локации)
=
     Команды, которые нужно 
      выполнить при посещении
      локации Начало

=Действие1
     Команды      Действия 1
     для локации Начало
=Действие2
     Команды  Действия 2
     для локации Начало

#Локация2
     Здесь       текст 
     Локации2
- 

#Локация3
     Здесь       текст 
     Локации3
- (конец локации)
=
     Команды, которые нужно 
      выполнить при посещении
      Локации3

Старая утилита TXT2GAM читает только между строками “#Имя” и “-”, поэтому добавления не заметит, а новая TXT2GAM понимает текст и в старом формате ,т.к. действия “=“ могут отсутствовать.

Feuerbart,
Вот краткое описание yaml ( http://ru.wikipedia.org/wiki/YAML ), советую посмотреть последний пример, он как написано “человекопонятный” и “компактный”.
А главное он очень похож на текущий формат txt2gam но не пересекается с ним. На yaml легко обкатать то, что потом будет перенесено и добавлено в утилиту txt2gam.

Ntropy, Cпасибо, посмотрел. Да, yaml больше подходит чем XML для текста, набираемого человеком. Только я все равно не понял, зачем еще какой-то формат, если уже несколько лет есть и применяется на практике формат TXT2GAM? Я предлагал его чуть-чуть расширить, а зачем менять кардинально?

Feuerbart,
В новом формате можно с легкостью и смело реализовать то что в старом было бы ограниченно обратной совместимостью.

Т.е. это будет совсем новый формат текстового представления исходников игры? Может в новую тему перенести? Надо опытных квестописателей спросить, как им было бы удобно разделять текст на локации, какими обозначениями пользоваться, что не хватает в нынешнем формате и т.д.
Goraph уже высказывался против “-” для обозначения конца локации (можно спутать со знаком “минус” в арифметическом вырадении) и еще что-то про скобки (я не понял, надо будет уточнить). Можно в новом формате и удобные расширения языка QSP придумать, не переделывая плеер (интерпретатор)-эти расширения будут просто компилироваться в имеющиеся операторы QSP при конвертации.

Feuerbart,
В данный момент не очень много авторов пишущих в чистом txt так что в выборе элементов нового формата или его описательных возможностей мы более-менее свободны.

В качестве разделителей локации и других элементов можно взять что то стандартизованное, например в yaml уже есть готовые решения для оформления списков (локаций) и структур (действий) и они могут быть вложенными.

В новую тему переносить не стоит, мы же не отказываемся от доработки txt2gam.

А вот расширения языка QSP можно вводить уже сейчас, посколько возможно использовать препроцессор кода (см. http://qsp.su/index.php?option=com_content&id=86&Itemid=56 ).

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

Обратной совместимости не теряем, а приобретаем важную фишку: конвертирование QSP-TXT2GAM в обе стороны без изменений.

Т.о., выгруженный в TXT2GAM формат текст можно будет, например, прогнать через утилиту, и “вернуть” обратно в QSP, получив исправленный, но не “сломанный” код игры.

Также, можно будет код любой игры выкладывать на сайте в виде текста, и “импортируя” получать игру с базовыми действиями и базовым описанием.

Ntropy,
Препроцессором всего не сделаешь. Например, новые управляющие операторы могут быть вложенными. Как препроцессором вложенные макросы обработать? Или можно, вроде этот препроцессор мощнее, чем в С?

Nex,
Тогда можно так: строковые константы и операторы act в начале локации, после которых идет спецкомментарий - это базовое описание и базовые действия(можно еще допустить обычные комментарии между ними). Прочие операторы act и строковые константы - часть кода “Выполнить при посещении”.

И ещё идея. Может добавить какой-нибудь комментарий для группировки локаций, чтобы сразу файл qproj генерировать? Например, после имени локации как-то указать, к какой группе она принадлежит.

Feuerbart,
Это неудобно. Группы локаций - это фишка редактора, а не формата QSP. Поэтому не стоит их смешивать, даже на таком уровне.

Фишка редактора-да, но почему она должна только в редакторе быть? Объединение локаций в группы относится скорее к модели построенного в игре мира, т.е. к метафизике ИЛ (например, “Кухня”, “Спальня”, “Ванная” - это ДОМ, а “Поляна” и “Тропинка” - ЛЕС).
Но может быть, в виде TXT этого следует добиваться другими средствами. Например, размещать локации разных групп в отдельных файлах и собирать их потом препроцессором. В любом случае хотелось бы сохранить информацию о группировке как в редакторе QGen, так и в TXT-формате.

Feuerbart,
практика показывает, что разрабатывать игру “в разных файлах” - неудобно.

Исключением могут быть лишь самостоятельные библиотеки, такие, например, как inventory_advanced

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

Еще плюс к универсальному формату txt2gam - даст возможность делать автоматизированные “патчи”, и также просматривать различия между версиями в программах типа WinMerge, WinDiff.

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

Что изменилось в новой версии txt2gam 0.1.0?

Log in or Register to post comments.