Заметки о Kirikiri в разрезе Лебединой песни

В этом посте я помещу ту информацию, которую мне удалось изучить в рамках работы над этим проектом и которая, быть может, пригодится кому-то ещё.
Маны не читал. Всё написанное ниже – результат многочисленной граблетерапии и велосипедостроения. Если вы знакомы с возможностями движка и можете предложить более простое решение или просто имеете аналогичный опыт, пишите в комменты, я буду весьма признателен.
И не забываем про ебанутейшую тягу Нотабеноида заменять компьютерные кавычки на ёлочки, т.е. в скриптах нужно использовать двойные кавычки, а не ёлочки :)

Точка останова скрипта

Если в процессе работы вы столкнулись с ничего не говорящим сообщением об ошибке и не можете точно лоцировать источник возникновения ИС в коде скрипта, то можете вставить в скрипт системную команду, вызывающую системное диалоговое окно.
[iscript]
System.inform('Какой-то текст!');
[endscript]

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

Сохранения кешируются!

Так, если вы правите скрипт (например, подгоняете количество строк под размеры блоков) и не хотите скипать до текущего момента длиннющий скрипт, то, казалось бы, логично выполнить быстрое сохранение, выйти, внести правки в скрипт, скомпилить скрипты и загрузить то быстрое сохранение... Это логично, но, к сожалению, далеко не всегда работает.
Я встречал такие косяки:
  • если правился тот блок, на котором я сохранился, то после быстрой загрузки изменения не применяются, при этом если начать скипать с начала текущего скрипта, то всё нормально.

  • после некоторых правок попытка выполнить потом быструю загрузку вызывает сообщение об ошибке, но если начать скрипт сначала, то всё нормально.

  • после некоторых правок и последующей казалось бы успешной быстрой загрузки при начале нового скрипта может выдаваться сообщение об ошибке. При этом если начать скипать скрипт сначала до конца ошибок не возникает.

Перевод строки в тексте

Порой очень хочется перевести строку без реакции со стороны пользователя (т.е. просто перенос текста на новую строку, без необходимости клика). Всё просто – за это отвечает следующая команда:
[r]


Переход по клику на новый блок текста или новую строку

Команды движка, отвечающие за...
...переход к следующему блоку по клику:
[tp]

...переход к следующей строке по клику:
[tl]

Если точнее, обе команды просто ждут реакции со стороны пользователя, т.е. не обязательно, что за ними должен быть следующий блок текста, а не служебные команды, допустим.

Команды создания блоков для вывода текста

Начну с того, что блоки бывают двух типов – прозрачные/невидимые и непрозрачные/с фоном.

Прозрачный блок создаётся командой типа:
[bln rgn=«(x1,y1,dx,dy)»]
где x1 и y1 – смещение верхнего левого угла блока от верхнего левого угла экрана, а dx и dy – размеры по x и y, соответственно (возможно, что dy не размер по высоте, а центр блока, как cy в команде ниже – не знаю, повода углубляться в изучение этого вопроса не было).

Непрозрачный блок создаётся командой типа:
[m_load_move gyo=«n» center_m_y=«cy»]
где n – максимальное количество строк, которое уместится внутри этого блока без вылезания за его границу; cy – вертикальное позиционирование середины блока относительно верхней границы экрана.

Выравнивание по вертикали текста внутри блока

Тут всё просто: текст можно выравнивать, а можно и не выравнивать. В первом случае происходит центрирование текста по вертикали, во втором – текст пишется сверху вниз, т.е. происходит выравнивание по верхней границе блока.

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

Как бы то ни было, команда одна:
[blnc gyo=«n»]
где n – количество строк текста в фрагменте

Разница в её применении... Или неприменении :D

Пример 1:
Нужно разместить видимый блок, рассчитанный на вывод фрагмента из 5 строк, в который по центру нужно разместить фрагмент, занимающий две строки.
Делаем это так:
[m_load_move gyo=«5» center_m_y=«400»]
[blnc gyo=«2»]
Однажды в студёную зимнюю пору[r]
лошадка прилипла пиписькой к забору
[tp]

Пример 2:
А теперь мы этот же текст разместим в том же видимом 5-строчном блоке, только не будем центрировать его по вертикали:
[m_load_move gyo=«5» center_m_y=«400»]
Однажды в студёную зимнюю пору[r]
лошадка прилипла пиписькой к забору
[tp]

Т.е. при таком раскладе можно вообще не указывать высоту фрагмента. А можно и указать, но тогда вместо [blnc gyo=«2»] нужно указать [blnc gyo=«5»].

Отладка отдельно взятого скрипта

Чтобы запустить произвольный скрипт вовсе не обязательно уныло проходить всю игру до него, достаточно внести правки в файл «scr.ks». Например, для вызова скрипта ssa067.ks достаточно оставить в нём только такой вот код:
[call storage=«ssa067.ks»]


Смена шрифта текста фрагментов (на Tahoma)

Если шрифт не поменять, то будут ужасные огромные пробелы между буквами.
В принципе, шрифт должен бы указываться в файле «Config.tjs» в строках:
;defaultFontSize = 20;
;defaultBold = false;
;defaultRubySize = 7;
;defaultRubyOffset = 0;
;userFace = «Tahoma»;
;defaultEdge = true;

Пусть вас не смущает точка с запятой в начале строк, для этого конкретного файла это нормально

Но даже если вы и внесёте эти правки, то никаких изменений в Лебединой песне не последует. Всё потому, что тут для указания шрифта разработчики использовали вот такой грязный хак: в файле «mode_scenario.ks» шрифт указан вот так:
[deffont size=«20» face=«Tahoma» bold=«false» edge=«true» edgecolor=«0x000000» rubysize=«7» rubyoffset=«0»]
Это уже исправленная версия строки

Тут же, как несложно догадаться, указываются и прочие параметры шрифта. Но такой подход порочен, потому что область действия шрифта будет ограничена.
Далее, как в том анекдоте, у нас есть два выхода:
  1. Вносим правки в файл «Config.tjs», после чего идём в «mode_scenario.ks» и комментируем упомянутую выше строку, используя точку с запятой. Лично я считаю этот путь более правильным

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


В любом случае, чтобы всё корректно работало, нужно после этих операций удалить или переименовать (если он дорог вам как память) файл «datasc.ksd» в папке «savedata».

ЗЫ Этот метод может не оказывать влияния на вывод имён персонажей в других ВН на этом движке, но для Лебединой песни эта проблема неактуальна. Если вы столкнулись с ней в рамках работы над переводом, пишите – поизучаю проблему.

Смена шрифта в окне истории (на Tahoma)

Шрифт, отвечающий за вывод текста на экране истории, настраивается в уже знакомом нам файле «Config.tjs» в функции «HistoryLayer_config()»
Просто найдите код функции, там всё понятно. Там не только шрифт, но и ещё кое-что можно поднастроить при желании.


Этот пост будет ещё пополняться. Так, после релиза Песни, я выложу сюда исходник инсталлятора, который подойдёт для любой ВНки на этом движке, и ссылки на инструменты, которыми я пользовался для компиляции/декомпиляции.
Написал DOOMer 13 мая 2014, 12:20 Общение 2 комментария

Комментарии

А вот если файл .tjs вдруг открывается в непонятной хрени и с началом TJS2100... Это значит, что Вы попали... :(

Veshurik 22.09.17 в 15:52 · # ·
0

Чтобы не потерять, сюда кладу ссылку на пост про картинки:

http://vayurik.ru/archives/941

DOOMer 25.09.17 в 20:14 · # ·
0
Перевод
Перевод:
текст с английского на русский
Создан:
13 апреля 2013, владелец: mamavl
Скачали:
1933 чел. (сегодня – 126)
Права доступа:
войти все
видеть чужие версии все
скачивать результат все
оценивать перевод все
комментировать перевод все
переводить все
читать блог все
комментировать блог все
писать в блог все
анонсировать модераторы
редактировать оригинал модераторы
редактировать описание модераторы
управлять группой модераторы
Участие в группе нет группы
Готово:
91.47% КП = 1.0