Тема закрыта
Добрый день, друзья.
Мне тут по долгу службы (а компания, где я работаю, сейчас разрабатывает ролевую онлайн-игру) необходимо написать движок для воспроизведения текстовых мини-игр на javascript. Эти мини-игры будут вставлены в основную канву игры в качестве небольших квестов. Ещё один нюанс - эти игры будут писать разные люди, использующие разные ОС и что важно - эти люди ну совсем не программисты. Поэтому всё должно быть наглядно и по-русски.
Twine (Tweebox) неплохо подошёл бы для решения этого вопроса, но, к сожалению, он уже давно не обновлялся и при всех своих достоинствах плохо работает с кириллической кодировкой (возникают ошибки во время редактирования пассажей и при импорте/экспорте текстовых исходников). Тут ещё и узнал, что автор проект забросил. Но идея визуального проектирования повествования, заложенная в Twine, очень хороша, и жаль от неё отказываться.
В общем пришлось написать свой велосипед, обратно совместимый по исходникам с Tweebox и с аналогичным интерфейсом. В настоящее время редактор "допиливается" и тестируется. Есть три сборки - для Windows, Mac OS X и Linux.
Сейчас реализовано следующее:
- визуальное проектирование, аналогичное Twine;
- нативная поддержка любых кодировок (внутри всё крутится в utf-8);
- совместимость с исходными кодами игр Tweebox;
- корректная подсветка синтаксиса во время редактирования;
- собственый компилятор игр в один компактный независимый html-файл;
- адаптация для экранов мобильных браузеров.
Если кому интересно, выложу скриншоты и бета-версию.
Последняя версия всегда лежит по адресу http://sm.axmasoft.com/ru/
По этой ссылке можно посмотреть "Руководство пользователя AXMA Story Maker":
http://sm.axmasoft.com/ru/help.html
Отредактировано DoubleDragon (17.06.2012 10:35)
Неактивен
Баги и пожелания можно в этой-же теме?
Баги:
- При создании нового параграфа, если сразу же щёлкнуть "удалить". Происходит влет без сохранения, мелкая, но неприятная ловушка.
- при сохранении файла автоматом не даёт расширение ".sm" из-за чего получаются нечитаемые редактором текстовые файлы. Приходится при сохранении имя прописывать ручками, типа "Game_test.sm"
Пожелания:
- Сделать автоматическую генерацию перехода, перетягиванием мышки от параграфа к параграфу.
Т.е. на карте параграфов схватил например и потащил стрелочку до целевого параграфа, а комп сгенерировал в конце параграфа переход типа [[Новая локация]].
Вопрос:
Как можно реализовать инвентарь? Чтобы к нему был доступ с любой позиции игры, и возвращался в последний параграф.
Спасибо.
Неактивен
Вроде даёт расширение... Какая версия ОС?
WinXP SP3
Не даёт именно при переименовании. Например файл по умолчанию "Моя история" без проблем сохраняется.
Но меняем название на "История с приведениями" и тут же расширение исчезает, файл становится не читаемым текстовым. Приходится писать именно "История с приведениями.sm"
Как можно реализовать инвентарь? Чтобы к нему был доступ с любой позиции игры, и возвращался в последний параграф.
Через макрос <<set>> создаёте объект и присваиваете ему значение, например, <<set $ключ=1>>, а где нужно, проверяете через макрос <<if>>. Если я правильно понял вопрос.
Это я понял, удобная вещь, но она именно для действия с предметами. А я имею в виду, просмотр инвентаря, что бы не нужно было каждый раз его прописывать в тексте.
Я имел в виду, похоже, как из меню вызывается "StoryAuthor", т.е. в любой момент просмотрел, и вернулся на параграф с которого начинал.
Дело в том, что я рассчитываю применить редактор, больше не на просто интерактивный рассказ, а книгу-игру с параметрами и предметами.
Неактивен
Как можно реализовать инвентарь? Чтобы к нему был доступ с любой позиции игры, и возвращался в последний параграф.
Вопрос снимается, разобрался.
Если у кого-то возникнет подобный вопрос.
1. В параграфе "StoryMenu" просто делаем ссылку например на параграф "Инвентарь". И он появляется в меню, вернутся можно кнопочкой back.
Неактивен
Предложение:
Сделать внутри параграфа, при редактировании список всех используемых переменных (как в навигаторе в вкладке объект).
А то сейчас приходится сохранять во внешний текстовый файл и оттуда вставлять, чтобы не путаться.
Неактивен
Может в браузере дело?
Я потестил и с ифом и просто. Вроде бы работает.
Единственное, я картинки сохранял не на локальном компе, а прописывал сетевой путь.
Кое-что начинает поясняться. В принципе есть очень удобные моменты. Немного довести его до блеска и будет хороший инструмент.
Неактивен
Вета написал:
Написала небольшую игру для друга.
Поняла, что мне не хватает.
1. Изменение переменных в процессе перехода. Приходится создавать кучу дополнительных параграфов.
2. Неудобная система надписей по ссылке внутри параграфа (action) - приходится ради красиво названной ссылки называть параграф длинными именами. Почему бы не сделать как с невозвратной ссылкой - параграф+имя ссылки?
3. Еще было бы отлично, если бы разного вида ссылки по стилю и по цвету в самой игре не отличались друг от друга, потому что смотрится некрасиво, когда все это пестрит.
4. Мне не хватает нормального инвентаря с перечнем предметов, висящего сбоку. Приходится извращаться, это неудобно опять же.
5. Отсутствие стрелок в редакторе между параграфами, если ссылка отличается от обычной.
6. Автоматический переход на новую строку, когда создаешь ссылку. А если я хочу сделать ссылкой слово в тексте?
7. Отсутствие системы обнуления ВСЕХ переменных сразу, типа killall. Приходится обнулять каждую, это неудобно.
Навскидку
И что-то не пойму, как опубликовать игру на свой сайт... Нажимаю публикация на сайт, ничего не происходит...
Вета, отлично сформулировали. Согласен по всем пунктам (5 только не понял).
Вот DoubleDragon сразу поле для деятельности как расширилось
Неактивен
DoubleDragon
Хочу сказать СПАСИБО. Я не успеваю качать новые версии редактора, так быстро исправляются выявленные баги и пожелания пользователей. И это хорошо.
Насчёт невозвратных ссылок, согласен, что лучше делать галочку в настройках по желанию автора "Все возвратные ссылки" или "все не возвратные".
Например, если делаешь игру с несколькими параметрами, которые достаточно часто меняются в каждом параграфе, приходится вручную отслеживать и прописывать все невозвратные ссылки. Иначе, вернувшися на параграф назад каждый раз пересчитываются переменные. Прикольный такой чит получается.
Неактивен
Прошу прощения, а почему нельзя вложенную ссылку сделать как и обычную, с комментарием перед "палкой".
Т.е. сейчас работает только формат:
[[+Тест2]]
А хотелось бы.
[[Уточнить, что он имеет в виду|+Тест2]]
Или я неправильно использую?
Неактивен
Вроде и не обидно, спасибо, за подсказку! Сам не заметил. Руководство перечитал сразу а обновлений не видел.
Неактивен
1. Новое поведение кнопки Назад и макроса <<back>> (значение переменных ВОССТАНАВЛИВАЕТСЯ).
2. Исправлена ошибка с переносами строк.
Большое спасибо! То что нужно, это радует!
Неактивен
Пусть функция расставляет старые (уже добавленные в историю) параграфы, а новые пусть добавляются там, где был сделан клик. Если же добавление было инициировано кнопкой панели инструментов, пожалуйста - пусть добавляется в рядок.
А при правом клике по параграфу и из меню "добавить параграф", новый параграф формируется ниже, и сразу же соединён с "материнским" ссылкой типа [[Параграф2]]
Для музыки решением мог бы быть "список используемых звуков", отдельно выделить "фоновая", которая прокручивается всю игру, и в параграфах, которая вызывается активацией.
2. Исправлена ошибка с переносами строк.
Чего-то незаметно. Всё равно постоянно пропускает 1 строку. Поэтому приходится или писать сплошным текстом, или как абзац пропускать 1 строку. Переменные в рядок не лезут, а стремятся смыться на новую строку.
Неактивен
спойлер…
DoubleDragon
Не первую строку, а одну строку. Ну в принципе это наверное и не ошибка, не заморачивайся. Просто редактируешь параграф, когда подтверждешь "океем" он переформатируется, делая пропуск строки в каждой строке где был нажат Enter. Те не переходит на следующую, а именно пропускает пустую троку. И в игре каждый макрос, текст получаются отделены пустой строкой.
Но опять же это не большая проблема, можно привыкнуть.
Narratius
Это такая мелочь, что даже не мешает. Кто тебе мешает щёлкнуть "да" чтобы сохранить или "нет" чтобы выйти без сохранения? А если нужно конкретно "сохранить как" тогда ручками в меню.
DoubleDragon
Есть более интересная и полезная проблема. Возможно ли сделать экспорт?
Не нужно особых наворотов или распознования макросов.
Достаточно чтобы автоматом определялась граница параграфа, его № или наименование, и исходящие ссылки.
Тогда можно будет писать в ворде, с проверкой ошибок, и просто удобно. А потом переконвертировать в АХМА, и настроить вручную переменные параметры.
Например такой текст:
269
Вставляете призмы в пазы. Как и ожидали, подходит тютелька в тютельку.
Когда они со щелчком становятся на место, их наполняет разноцветное свечение.
Раздается мягкий завывающий звук, и черные линзы также вспыхивают красным
свечением.
Ощущаете покалывание на коже. Мгновение дезориентации и
невесомости…
Сцена изменилась. Теперь вы стоите на краю пустынной равнины. Древняя
каменная стена пересекает равнину как ряд щербатых зубов. На дальней стороне
равнины возле черной стены пещеры видите пьедестал. На его вершине
установлена Эмблема Победы, ради которой вы подвергались всем опасностям
последних часов! Теперь она почти у вас в руках!
Параграф [271].
270
После восстановления перед следующей Спиралью у него три решки и два
орла. У вас две решки и два орла. Вы начали было обдумывать свой ход, но вас
прерывает Киеф, собравший монеты. При виде вашего изумления он поясняет:
- Ты должен видеть, что ты проиграл, правда?
Параграф [271].
271
Свистящий ветер дует с дерева. Каменная кора покрывается тысячей
усмехающихся ртов, кричащих и зовущих вас. Тысячи обгорелых пальцев
протягиваются из пропасти, которую вы не в силах вообразить, маня вас
присоединиться к ним. Чувствуете надвигающееся безумие…
Есть ли у вас окаменевшее сердце? Если да – параграф [270]. Если такого
предмета нет, вы должны полагаться на собственную силу воли, чтобы пройти это
испытание (параграф [273]).
273
Вы погибли.
Прошу прощения, за огромные скрины, не знаю как на форуме их приуменьшить.
Отредактировано Ergistal (05.07.2012 14:56)
Неактивен
Ура, ура, ура..
Придумал сам как импорт сделать.
Неактивен
Вета, имеется в виду папка AXMA Story Maker Libs, она устанавливается при установке.
Неактивен
И все-таки большая просьба подумать над сменой переменных в процессе перехода между параграфами. Очень полезная штука...и очень нужная. Намного удобнее, чем менять переменные в самом параграфе. А то приходится создавать кучу параграфов лишних и загромождать пространство. А так я бы в одном параграфе по условиям выводила.
Это действительно было бы удобно.
По изменения значение переменных в пути:
Первый вариант:
Чтобы особо не изменять саму структуру редактора и не вводить новый класс объектов такое предложение. Сделать вид ссылки "безусловный переход". И тогда можно создавать "технические" параграфы, без текста и видимых ссылок. Программа читает текст, выполняет все условия, но как только натыкается на "безусловный переход" автоматом перескакивает на целевой параграф. Т.е. игрок не щёлкает на ссылки.
Например:
#Рассчёт боёвки
Random Победа
if Победа = 1
"Безуловный переход Победа"
else if Победа = 0
"Безуловный переход Поражение"
endif
Ещё, как вариант (чтобы место не загромождать на карте параграфов) можно сделать чек-бокс (галочку). "Технический параграф", который отображается на карте параграфов мааленьким ромбиком.
Второй вариант
Цеплять в хвост ссылки ещё паровозик из макросов.
Choise 'Обед' 'Вы решили пообедать в бигмаке!'
set $Сытность + 1
set $Денег - 10
set $Пузо +5
choiseend
По возврату!
Откат на большое число шагов, хоть на начало игры ИМХО не нужен. Для этого рестарт есть и система сохранялок.
1. Кнопку "назад" вверху странички, сделать откатом на 1 шаг с восстановлением переменных. Причём ещё сделать общий на игру чек-бокс, с галочкой откат (разрешён/запрещён).
2. Макрос <<Back>> усложнить до return, возврат из подпрограммы.
В каком-то месте игры мы "посылаем" игрока в подпрограмму", делаем обработку в целой ветке параграфов и не забываем вернутся в точку откуда уехали.
Это полезно для действий, которые могут вызваться из любой точки игры, после которых нужно продолжить играть дальше. Это позволит, например, вынести боёвку в отдельную структуру, чтобы после сражения вернутся туда, где закончил.
Или например в книге-Игре Браславского "Верная шпага короля". Есть очень однообразные ночёвки с такими условиями.
Если игрок сыт, тогда можно лечь спать,
Если игрок не сыт, и у него есть еда, вычесть 1 еду и лечь спать,
Если игрок не сыт и у него нет еды, вычесть 2 выносливости.
Ну я упростил пример, сейчас в редакторе в принципе можно сделать такой обработчик одним параграфом, но если в структуре нужны несколько параграфов, текущими инструментами уже сделать не получится.
3. И как мой вопрос выше, можно ли автоматизировать импорт текста в редактор? В ручную получалось, но довольно таки не удобно, и не знаю, как вылавливать баги на большом тексте, любой пробел может стать критическим.
Отредактировано Ergistal (09.07.2012 01:44)
Неактивен
Ссылка ПО УСЛОВИЮ из первой локации "Узнать, что беспокоит персонажа" не появляется, хотя переменная меняет свое значение при нажатии на первую ссылку.
А вы изменяете значение переменой $перс случайно не в параграфе "инфа_путь"?
Если да, тогда ошибка понятна,
Переменные обрабатываются только на входе в параграф. И редактор увидит изменившееся значение $перс только после выхода из параграфа 1. Параграф "1" не обновляет переменные, которые вы изменили ссылкой с "+" внутри параграфа.
Может я не совсем понятно объясняю.
И мне кажется вам проще решить эту ситуацию внешним параграфом, без значка "+".
Мне кажется, программисту будет сложно обойти такую заморочку. Хотя я могу и ошибаться.
Неактивен
Тема закрыта