Как стать автором
Обновить

Комментарии 20

Еще полностью не прочитал, но уже поностальгировал :)

Лет 8 назад сам писал движок для текстовых квестов на PHP+MySQL.
Кроме картинки на экран должны были выводиться меню действий и состояние персонажа и содержимое его «рюкзака».
Были для описания состояний введены триггеры (флаги) и счетчики.
Триггеры, это те же счетчики, но принимают только 2 значения: 0 и 1. Служили для описания состояния элементов локаций: открыт ли проход, обезврежена ли ловушка, доступен ли предмет и т.д. На экран не выводились.
Счетчики могли принимать значения от 0 до n и были двух типов: общие (время, здоровье, сила и пр.) и носимые в рюкзаке (всякие ключи, патроны, инструменты, оружие, деньги).

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

Но это, пожалуй, всё, что я могу вспомнить. Движок, конечно, не доделал — охладел. Где-то, может быть, еще валяются куски PHP-скриптов. Но это не точно — за это время несколько раз менял HDD и один раз комп полностью (кроме HDD). И даже если найду, то уже вряд ли сумею в этом разобраться.
Однако каким бы программистом я был, если бы не написал еще один
А почему в качестве скриптового языка не использовать Groovy, который встраивается в java, имеет с ней бесшовное соединение и работает из коробки?

Я не знал, что есть такая возможность. К тому же, вероятно, не получилось бы сделать его настолько простым, насколько простым получился sl (хотя тут непонятно, плюс это или минус).

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


В груви конструкция вида aaa{...} может парситься как фунция aaa, в которую передаётся замыкание. Это замыкание можно вызвать в каком-то контексте (например, в том, в котором есть необходимые методы или переменные).


Записи вида funcName "string" — вызов функции с аргументом-строкой.


В качестве примера DSL на груви могу привести gradle файлы.


Единственный минус — в случае с замыканиями ошибка может быть не при их парсинге, а только когда его вызовут. Например, если в контексте не окажется нужного метода. Это усложняет отладку скриптов.

По мере чтения возник такой же вопрос, как у товарища oldd, только в качестве языка предложил бы Lua/Ruby. На последнем по опыту многих получаются DSL любой гибкости и простоты, которая нужна, практически будто бы на естественном языке.

Хотя лично сам я прикипел к Lua и в своём проекте просто встроил (при помощи luaj + встроенной в JDK стандартного механизма в виде javax.script.ScriptEngine) для исполнения на сервере нужной игровой логики, написанной на Lua. Такое решение выбрал для реализации мультиплеерной игры.
Выбрал груви, потому что 1) не надо ставить 2) есть отладка в IntelliJ Community 3) можно работать с моими kotlin классами 4) ничего не знаю про ruby :)

import groovy.lang.Binding
import groovy.lang.GroovyShell
//----------------
val shell = GroovyShell()
val binding = Binding()
//----------------
val groovyScript= shell.parse(scriptText)
binding.setVariable(«myObject», this)
groovyScript.binding = binding
groovyScript.run()

и всё, скрипт в работе
НЛО прилетело и опубликовало эту надпись здесь
По отдельности слова — да. Но как и многие заимствованные понятия, перевод «визуальная новелла» — устоявшееся название вполне определенного жанра игр ( ͡° ͜ʖ ͡°)
В книгоиздании существует жанр graphic novel — графический роман, в игропроме есть visual novel — визуальная новелла. Хотя и «визуальный роман» тоже встречается, но менее распространено.

Кажется, Хабр все еще торт

класно! обожаю такие штуки! тоже в своё время делал игру на PHP — посылаешь человеку смс и дальше он по городу ходит ищет коды, (которые ты ему предварительно оставляешь), вводит их в игру открывает новые задния — шпионская тема! круто было! такие вещи всегда в кайф спасибо за статью

Классная статья. Спасибо за описанный опыт разработки. Мне очень понравилось ваше решение при производстве артов: выбрать три фиксированных цвета, таким образом задав единый согласуемый стиль и упростив себе работу. Вполне одобряю, свежее и вполне грамотное решение, возможно попробую нечто похожее на каком-нибудь Game Jam-е. Сами художественные работы тоже очень понравились, намеренный минимализм (лица без деталей) — тоже вау.

Несколько вопросов/предложений:
1. Возможно не очень тщательно изучил репозиторий. Как вы собираете бинарники игры? Знакомы ли с build-инструментами в Java (Maven/Gradle)? Не сочтите вопрос за оскорбление, просто интересно.
2. Секция «Как можно было сделать систему диалогов лучше?». Возникла идея внедрить в игру что-то наподобие «Intelli Sense», т.е. например, как в Idea, когда вы пишете код и вводите лишь начальные буквы, а IDE уже выдает вам контекстное меню вариантов, как закончить конструкцию. То же самое можно адаптировать к игре, где проиндексированы все возможные действия игрока, а далее по первым буквам игроку списком выдаются опции, по мере ввода большего числа букв, список сужается, в конце концов до 1-2 вариантов, где игрок мышкой или клавишами выбирает уже понравившуются опцию. Надеюсь, внятно описал идею. Сам такое не пробовал внедрять в свои проекты, но думаю, можно нагуглить в сети решения. Предполагаю, что можно использовать что-то типа Lucene, а возможно уже есть прямо библиотеки реализующие почти всю логику «IntelliSence»-а.
3. Очень любопытно, захотел ли человек, которому предназначалась игра, DLC или хотя бы еще подобных игр такого жанра? Какие вообще были впечатления от истории, художественного исполнения, игровой механики?
4. Те 4-6 часов художественной работы можно было приплюсовать к 45 часам разработки и получилось бы красивое круглое число 50 для названия статьи. :-)
Спасибо! 1. С maven знаком, но для сборки не пользовался. Все классы просто компилировались через встроенные в InteliJ idea средства и запускались. 2. Интересный вариант. Хотя, с другой стороны, это может свестись к перебору всех букв алфавита в качестве первых букв фразы, и затем выбора нужного вараинта. 3. Худ. исполнение было воспринято тепло, история, судя по отзывам, не была полностью понята. Не совсем понятно, про какую конкретно механику Вы говорите, если про ввод — то она была воспринята негативно, но со смехом (когда, после ввода «пройти вперед», оказывалось, что надо ввести «идти прямо»). 4. Согласен, просто хотелось сделать клик-бэйтный заголовок, чтобы привлечь больше внимания. Подумал, что чем меньше времени указано — тем больше заинтересованность аудитории
Согласен, просто хотелось сделать клик-бэйтный заголовок, чтобы привлечь больше внимания. Подумал, что чем меньше времени указано — тем больше заинтересованность аудитории

И верно, ваша правда.

Кстати, есть ли планы учавствовать в грядущем Ludum Dare (#46)? Вообще, есть ли опыт участия в гейм джемах? Там как раз лимит времени (и зачастую темы) — одна из ключевых фишек формата.
Опыта участия — нет. В Ludum Dare учавствовать, вероятно, не буду (чисто теоретически, меня больше привлекают джемы со длинным сроком разработки — ~месяц).
Во втором пункте у вас описан метапарсер движка для текстографических игр Instead. В нём, кстати, решена проблема с «пройти вперед»/«идти прямо». Можно потыкать онлайн или запустив игру с помощью плеера для конкретной платформы.
Один вопрос — как запустить игру? Я не настоящий программист.

Извиняюсь за долгий ответ. Запуск: предположим Вы создали папку quests куда закинули папку с игрой (которая содержит манифест и ресурсы и находится на гитхабе в разделе Releases). Затем вам надо скомпилировать код (проще будет через IDE какую-нибудь) и запустить со следующими параметрами: --quests-dir "quests" --quest "Lone island"

Что-то сложновато. Я наверно портирую на Instead или подожду, пока кто-нибудь скомпилирует и поделится сборкой.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории