RU 🔒 Locked

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

Feuerbart #53 23.04.2010 19:13 29 comments 18862 views

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

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

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

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

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

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

Между “#” и “-” как раз код, который выполняется при посещении :)

Byte:

Между “#” и “-” как раз код, который выполняется при посещении

Точно! Это я описанием формата GAM увлекся. :)
А было бы удобно писать там просто текст, без кавычек, а код-после =. Но тогда полной совместимости не выйдет. А может тогда “#” выполнить при посещении “-”, а просто текст (описание локации)где-то еще?

Нужно обдумать разные варианты.

Совместимость нужно обязательно сохранить!
Вот, придумал:

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

#Локация2
...

Кстати, может сразу включить возможности формата QSP для утилиты TXT2QSP? И желательно при этом также сохранить совместимость. Верно ли я понимаю, что QSP-формат только картинкой для действия отличается?
UPD. А раз только картинка, то добавить для действия еще 1 строчку: “@имя файла с картинкой”. Исправил код выше. Если генерируется GAM, то @ просто игнорируется, а если QSP-файл, то вставляется соответствующая строчка.

Edited at 24.04.2010 07:47 (15 years ago)

Я не вижу особого смысла добавлять базовые действия в формат TXT2GAM - их ведь можно с тем же успехом разместить в “выполнить при посещении”. Также как и “текст локации”.
Я думал над вариантом, когда эти поля находятся в начале кода локации, но разделены каким-либо специальным комментарием.

#локация
*p 'Текст локации'
!-
act 'Базовое действие 1','картинка':
(код действия)
end
act 'Базовое действие 2','картинка':
(код действия)
end
!-
(остальной код локации)
-

Byte:

Я не вижу особого смысла добавлять базовые действия в формат TXT2GAM - их ведь можно с тем же успехом разместить в “выполнить при посещении”. Также как и “текст локации”.

Однако, в редакторе QGen есть отдельные элементы “текст локации”, “выполнить при посещении” и “базовые действия”. И это не просто внешнее удобство, они напрямую отображаются в формат GAM\QSP, где также все эти сущности есть отдельно. Поэтому расширенный TXT-формат позволит производить импорт\экспорт “один к одному”.
UPD. Текст локации и базовые действия излишни, достаточно только кода локации (”выполнить при посещении”). Однако это излишество только функциональное. Т.е. можно перенести описание локации в кавычках в ее код и перенести туда же базовые действия в виде “act…end” - в результате игра будет работать так же. Но функциональность - одно, а наглядность и удобство создания игры - другое.Нагляднее получится явное “синтаксическое” разделение, а не имитация при помощи операторов *р и act.К тому же и написать легче - кавычек и *р лишних не надо, “=действие” вместо “act действие:…end”

Edited at 24.04.2010 18:34 (15 years ago)

Разделители в виде комментариев и нужны, чтобы один-к-одному конвертировать.

Можно и вообще без разделителей. Все операторы act из начала кода локации переносятся в базовые действия, а все строковые константы (с явным или подразумеваемым *p)- в описание локации. Но это программировать труднее, чем с явным синтаксическим указанием и, еще раз повторю, менее наглядно и менее удобно для написания.

Вариант с “=“ и “@” для меня жутко ненагляден :)

Можно вместо “=“ и “@” другие символы подобрать или имя файла-картинки писать в той же строке, что и имя действия. Хотя, полагаю, дело не в символах… Кому ненаглядно может продолжать писать по-старому (только код), старый формат полностью совместим. Но, ИМХО, надо как-то привести в соответствие формат QSP, работу в QGen и представление игры в текстовом виде.
Наглядность – дело субъективное, но если игра разрабатывается в текстовом виде, то этот вид должен именно на текст походить, без излишних формализмов (кавычек, *P,act…). Мне, например, более нагляден самый первый вариант https://qsp.org/forum/28-rassirenie-sintaksisa-txt2gam(хоть он и не совместим со старым), потому что код «Выполнить при посещении» исполняется после вывода описания локации, значит и в текстовом представлении нагляднее разместить эти элементы в таком же порядке.
UPD. А если уж отказаться от совместимости и добавить картинку в действие, то из первого варианта получим

#Начало 
     Здесь       текст 
     локации 
= 
     Команды, которые нужно 
      выполнить при посещении 
      локации Начало 
=Действие1 
@имя файла с картинкой
     Команды      Действия 1 
     для локации Начало 
=Действие2 
@имя файла с картинкой
     Команды  Действия 2 
     для локации Начало 
- (конец локации) 
#Локация2
...
Edited at 25.04.2010 12:23 (15 years ago)

По-моему, это надуманная проблема :)

Ага, думал-думал “с чем бы на форуме засветиться”, вот и надумал :)

Выяснился ещё один нюанс. В QSP есть функция

DESC([$выражение]) - возвращает текст базового описания локации с заданным в [$выражение] названием

Однако в TXT2GAM нельзя задать базовое описание, это можно сделать только в QGEN. В текстовом виде базовое описание переносится в код «Выполнить при посещении», поэтому DESC для игры, сгенерированной TXT2GAM, возвращает всегда пустую строку.
Конечно, функция DESC используется редко (если вообще на практике когда-либо использовалась). Тем не менее, получается, что полной совместимости между TXT2GAM и QGEN нет даже функционально – в текстовом виде нельзя выразить всё, поэтому после конвертации в текст и обратно игра может работать по-другому.

Feuerbart,
Я думаю, что искать удобство стоит не привязываясь к формату txt2gam. Например можно разработать вариант записи qsp-игр в xml или yaml, а если формат получиться удобным и простым то написать утилиту xml2gam или yaml2gam будет делом техники.

Я против XML (да простит меня Eten, его пропагандирующий). Входной формат утилиты TXT2GAM - это простой текстовый формат и предназначен он для написания игры в самом обычном текстовом редакторе (Word, Bred, Far и т.д.). Поэтому должен быть этот формат как можно проще, без всяких «загогулин». А формат XML не подходит в качестве исходного языка, на котором автор пишет игру. Писать <Location Name=’Начало’> сложнее, чем #Начало. Если использовать XML как формат для внутреннего представления игры, с которым автор работает через специализированный редактор, то зачем нужен еще 1 формат в дополнение к существующему формату QSP (GAM)? QSP даже компактней, т.к. в нем не надо у каждого значения писать имя тега как в XML.
Про yaml не знаю, но вряд ли и он будет проще чем “#Начало… - “.
Так что формат txt2gam останется, удобство в нем именно в его простоте. Нужно всего лишь дополнить возможностью задавать базовое описание (ну и базовые действия заодно, для полной совместимости). Добавить опционально, кто не хочет использовать будет писать это в коде, как раньше.

Log in or Register to post comments.