danner, "Planescape: Torment" в формате книги-игры


Сб Фев 21, 2009 22:36
Jumangee
Во всех бочках затычка

Если тебе нужно только скрыть все параграфы кроме текущего, то посмотри вот это http://quest-book.ru/forum/viewtopic.php?p=7527#7527
это конечно только идея, но что-то наподобии этого я думаю замутить для он-лайн интерактивных книг-игр

Добавил через 1 час 34 минут:

Я думал ты книгу забросил, а ты продолжаешь её писать?

Вс Фев 22, 2009 5:38
danner
2  Свободный искатель

Не-не-не! Скрыть переходы по условию.

Добавил через 1 минута 38 секунд:

Jumangee
Я думал ты книгу забросил, а ты продолжаешь её писать?

Иногда добавляю текстовку, когда делать нечего Smile

Вс Фев 22, 2009 12:58
Jumangee
Во всех бочках затычка

Переходы? Только??? Даже параграфы скрывать не надо???
И другой автоматизации не надо?

Добавил через 8 минут 46 секунд:

Да, и ещё – если будет какие-то критерии показать/скрыть переход, то, наверное тогда нужен и save/load этих условий, чтобы можно было продолжить игру позже. Так?

Вс Фев 22, 2009 22:43
Jumangee
Во всех бочках затычка

В общем, сделал "набросок" того что тебе нужно. Не идеал, но, в целом довольно функционально – можно сделать и полный интерактив. Скрываются переходы и параграфы, плюс, реализовано нечно набодобии листа персонажа. Редактировать не легко, но и не слишком трудно. Надеюсь понравится Smile
Вбито примерно 14 параграфов. Распаковать и запустить файл "index.html"


Пн Фев 23, 2009 11:46
danner
2  Свободный искатель

Вау, я впечатлен, ща буду разбираться

Пн Фев 23, 2009 12:21
noname
Бывалый авантюрист

посмотрел в блокноте. чё-та сложно разобраться с непривычки. ява-скрипт не так уж прост и удобен. на дельфях сделать проще, но мне не нравится разделение текста, графики и кнопок, которые будут иметь место быть. а если делать дельфи+html, то проще не будет- будут просто другие сложности.

более-менее нормальное решение- делать на Акурке. там можно делать ссылки, а так же вставлять несколько картинок. для примера можно глянуть игру ‘похищенные’.

недостатки Акурки:
1. её язык слегка отличается от URQL
2. она имеет глюки
3. она уже(вроде как) не поддерживается автором

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

p.s.
графическая альтернатива Акурки- FireURQ пока не готова. есть стабильно работающая досурка, но...

Пн Фев 23, 2009 15:00
Jumangee
Во всех бочках затычка

Сложностей с яваскриптом быть не должно – вам не надо лезть в дебри, а посмотреть только внутренности между <div id="book">...</div>

Наверное стоит описать используемую структуру.
Итак, всё что нужно это содержимое между
<div id="book">...</div>
– это есть вся книга. Книга состоит в свою очередь из параграфов

<div id="p_НОМЕРПАРАГРАФА">...</div>

Где НОМЕРПАРАГРАФА это идентификатор параграфа по которому в последствии можно будет перейти к этому параграфу (можно использовать не только цифры, но и слова, но насчёт русских слов – не знаю).
Далее, параграф состоит сразу из нескольких подразделов. Опишем их по порядку важности.
Обязательно должен быть разделитель содержащий текст параграфа, он выглядит так:

<div class="text">бла-бла-бла это текст параграфа!!!</div>

в общем-то ничего сложно.
Далее, идут "необязательные элементы:

<div class="onload">код на яваскрипт выполняемый при переходе НА этот параграф</div>
<div class="action">текст действия</div>

Как ни странно, действия совершенно нет необходимости описывать "специально" – их есть смысл использовать только тогда, когда в параграфе есть игровые ограничения на возможность выбора, если ограничений нет – то можно описать переходы в тексте параграфа. Действий может быть сколько угодно.
Отдельно остановлюсь на самом процессе перехода. Его следует оформлять по правилам гиперссылок за одним нюансом. Вместо самих гиперссылок мы используем яваскрипт, выглядит это так:

Было:
<a href="#145">пройти в комнату 2 (145)</a>
Стало:
<a href="javascript:void(0)" onclick="showArticle(145);">пройти в комнату</a>

Изучить применение onload лучше всего на внутренностях примера, там нет слишком сложных моментов.
Скажу ещё вот что: к "книге" прилагаются два специальных раздела, один – описывает "шаблон" листа персонажа, а второй – это код яваскрипт выполняемый каждый раз при переходе на любой параграф. Они тесно связаны между собой и их рекомендуется менять только знающим людям. Плюс, в примере есть параграф-шаблон, его удобно применять для того чтобы не писать структуру вручную, он так и называется "p_шаблон".
Теперь небольшой пример:

<div id="book"
<div id="p_10">
<div class="onload">
// ничего не делать
</div>
<div class="text">
Текст параграфа....
</div>
<div class="action">идём <a href="javascript:void(0)" onclick="showArticle(10);">вперёд</a>
</div>
<div class="action">идём <a href="javascript:void(0)" onclick="showArticle(20);">направо</a>
</div>
</div>
</div>

Код примера не удобно читать из-за отсутствия отступов, их съедает браузер, но если их использовать то вам будет намного проще.

Вт Фев 24, 2009 12:16
Jumangee
Во всех бочках затычка

Теперь немного опишу яваскрипт используемый в "onload".
Т.к. мне не известно что вообще будет, а чего не будет в книге-игре, я создал один универсальный глобальный массив который можно использовать для хранения всех данных, называется он globals. Это т.н. ассоциативный массив, т.е. обращаться к данным в нём нужно по идентификатору-строке, например так:

globals[‘ПАРАМЕТР’] = 12;

Здесь мы устанавливаем значение "ПАРАМЕТР" равным 12. Проверить параметр легко, например так:

if (globals[‘ПАРАМЕТР’] == 12)
{
// да, параметр равен 12 – делаем какие-то действия
}
else
{
// параметр не равен 12
}

Обратите внимание на использование ДВОЙНОГО знака = при проверке значения – это критично. Строка-идентификатор может быть любой (да, можно использовать русский язык). Можно создать свой, отдельный массив, например для хранения инвентаря персонажа (в globals это можно, но просто не удобно). Ещё, в globals[‘article’] все находится значение текущего параграфа – менять не желательно, но можно проверять или использовать для отладки игры.

Теперь, по поводу скрытия отдельных действий-переходов.
Все действия ("action"ы) идут в параграфе по-порядку, согласно которому действия получают номера – начиная с 0(!). Т.е. если в параграфе перечислены 2 действия, то первое действие имеет номер 0, второе – номер 1.
Теперь, например в событии "onload" можно сделать некоторую проверку, и, если нам что-то не нравится – скрывать какое-то действие:

<div class="onload">
if (globals[‘ПАРАМЕТР’] != 12)
{
// параметр НЕ равен 12 – делаем какие-то действия
setActionVisible(0, false); //дословно: установить видимость 0го действия в false (ложь)
}
</div>

Теперь, если параметр не равен 12 ("!=" читается как "не равно"), то действие 0 показано НЕ будет.

Ср Фев 25, 2009 0:22
Jumangee
Во всех бочках затычка

Ну так как, кому-нить интересно?
Могу написать что-нить чтобы конвертировать книгу в такой вид

Ср Фев 25, 2009 5:45
danner
2  Свободный искатель

А вот div это совершенно необходимо? Как-то непонятно получается, табличная разметка вроде попроще...
Ну и HTML-текст сделанный из Worda это ваще по ту сторону добра и зла... Редактировать в блокноте очень сложно...
Но все равно! Прорыв налицо, теперь можно попробовать хотя бы и есть к чему стремиться Smile

Jumangee
Ну так как, кому-нить интересно?
Могу написать что-нить чтобы конвертировать книгу в такой вид

А конвертировать из чего?

Ср Фев 25, 2009 10:46
Jumangee
Во всех бочках затычка

Div‘ы используются только как "контейнеры" данных, к разметке в данном примере не имеют никакого отношения.
А конвертировать.... почему бы не из myis?
Это былобы довольно естественно, единственное – для написания "onload" скриптов придётся использовать поле комментариев, но это не критично я думаю.
Ну, или можно ещё какую-то разметку придумать, а потом конвертировать её в формат для воспроизведения.

Чт Фев 26, 2009 12:19
Jumangee
Во всех бочках затычка

Сделал экспортер для myis – "Экспорт в формат JSIQ". Он формирует содержимое "book" но без всего остального. С помощью него можно потренироваться.

Вт Апр 01, 2014 20:35
Х_Юрий
5  158  1  2  Герой легенд

Добавлю не столько помощь, сколько размышления по проекту – ну впрочем как обычно...
Я – не просто фанат Planescape – он пророс в меня как ежевика в лабиринт Рейвел.
Поэтому всё, что связано с Планами, мне очень интересно.
Попробовал версию danner-а.
Он – как я понимаю – очень любит творчество Криса Авеллона. Кстати, кто-нибудь помог Tides of Numenera?
Поэтому ему респект.
Но...
Поиграв в предложенный вариант, мне показалось, что – даже если реализовать идею на полноценном движке, будет не то.
1. Боевой аспект – как не пыжься – никакой, просто никакой по сравнению с оригиналом – по визуальному воздействию.
2. Звука нет. А все эти щорохи – это часть философии Планов
3. Анимация Анны – да да то что вы подумали – тоже часть Планов
4. Объемы текста огромны – по сравнению с боевым действием текстового квеста – а в оригинале мы имеем дневник, в котором отражены важные моменты, куда заглядываем реже! чем в книге-игре потому что у нас бои, у нас лечение, у нас перебежки – короче мы живём
Если делать развилки сюжета от себя – по чесноку, а таланта хватит? А знаний сеттинга? Не всё так просто
Резюме: мир Планов в Planescape: Torment изначально – понимай написание диалогов и так далее – показывался нам в расчёте на игровую динамику, переделать в текстовый квест – на мой взгляд – не получается
Возможно если делать всё с нуля – как приквел или сиквел или побочную ветку – выйдет лучше


_________________
Если не сможешь идти по трупам гениев, то они будут идти по твоему...

Jing Wu Hen