Переход с QSP 5.7.0 на 5.9.x
Многие авторы, начинавшие разработку игр для плееров версии 5.7.0, боятся переводить проекты на более свежие версии из-за обилия изменений. Байт активно обновляет основную библиотеку QSP уже пять лет, и количество введённых изменений действительно может пугать.
Но на самом деле всё не так страшно.
Список по-настоящему критических изменений весьма скромен, и эта статья поможет безболезненно перевести проект на более новый и быстрый плеер.
Мы не будем подробно описывать все нововведения — они уже описаны в нескольких статьях. Сосредоточимся на практических шагах, попутно раскрывая наиболее значимые изменения в работе плеера по сравнению с версией 5.7.0.
Все нововведения уже отражены в онлайн-справке: wiki.qsp.org
Вот список статей, которые помогут более детально познакомиться со всеми изменениями:
- https://vk.com/@qsplayer-novovvedeniya-v-qsp-580,
- https://vk.com/@qsplayer-novovvedeniya-v-qsp-590,
- https://vk.com/@qsplayer-chto-novogo-v-qsp-591,
- https://vk.com/@qsplayer-novovvedeniya-v-qsp-592-594.
Инструменты
Для правки игры вам потребуются следующие инструменты:
-
Утилита TXT2GAM — конвертирует игру в формат текстового файла и обратно.
- Скачать можно с официального сайта или со страницы релизов на GitHub.
- Если не знаете, как пользоваться утилитой, прочитайте краткое руководство.
-
Анализатор QSP-кода — быстро сканирует игру в формате текстового файла и предоставляет список возможных ошибок, имена переменных, локаций, действий, предметов и прочее.
- Скачать можно по ссылке из темы на форуме, посвящённой Анализатору.
- Или из архива на меге "QSP/Программы". ← Смотрите папку "QSP-Analyser". Для первого раза лучше выбрать последнюю версию без модификаций.
- Краткая информация доступна на форуме и в архиве статей.
-
Для просмотра игры в формате текстовых файлов подойдёт любой текстовый редактор. Рекоме ндуем Sublime Text или VS Code — они поддерживают подсветку синтаксиса QSP.
- Для Sublime Text разработан пакет, включающий плагин для работы с qsps-файлами и подсветку синтаксиса QSP.
- Для VS Code существует специальное расширение.
Если вы используете системы контроля версий (например, Git), рекомендуем фиксировать каждое масштабное изменение в игре.
Первый этап переноса. Критичные изменения
Версия библиотеки QSP 5.8.0 получила несколько критически значимых изменений, которые сломали обратную совместимость. Игра, написанная для плеера 5.7.0, иногда будет некорректно работать на плеерах версии 5.8.0 и выше.
Поправить такую игру достаточно легко.
Сделайте полную копию вашего проекта на тот случай, если что-то пойдёт не так.
Анализ кода игры для QSP 5.7.0
- Сначала вам нужно сконвертировать игру в формат "qsps". Это делается с помощью утилиты txt2gam, или, если утилита подключена к Quest Generator, с помощью пункта меню "Экспорт → Текстовый файл формата TXT2GAM" в QGen.
Формат "qsps" и "TXT2GAM" — это одно и то же. - Далее нужно запустить Анализатор и "скормить ему игру":
- Запускаете утилиту и нажимаете кнопку с тремя точками в правом верхнем углу.
- Находите и выбираете текстовый файл с вашей игрой.
- Утилита автоматически запустит чтение файла и на вкладке "Анализ" в самом нижнем поле вы увидите список ошибок и предупреждений.
- В той же вкладке нажмите кнопку "Переменные". В случае успешного чтения файла в трёх полях с полосами прокрутки отобразятся списки используемых в игре переменных.
Это всё, что понадобится нам от утилиты "Анализатор". Не закрывайте окно, вам понадобится информация из него.

Разнотипные значения в массивах
Одно из самых масштабных изменений в QSP: больше нельзя хранить в одном массиве под одним индексом и числовое, и текстовое значение. Подробно это изменение описано в статье "Массивы уже не те" .
Если вы использовали старое поведение массивов как фичу (например, хранили названия и зд оровье юнитов под одним индексом), в плеерах версии 5.8.0 и выше это сломает работу игры.
! $unit - название, unit - здоровье
$unit[0] = "пехотинец" & unit[0] = 300
$unit[1] = "гвардеец" & unit[1] = 670
$unit[2] = "лучник" & unit[2] = 1500
$unit[3] = "артиллерист" & unit[3] = 10
В примере выше числовые значения затрут текстовые, а в плеерах версии 5.7.0 оба значения хранятся одновременно.
Решение простое. Чтобы починить игру, сломавшуюся из-за подобного использования массивов, мы конвертировали QSP-файл в текстовый формат и "скормили" его Анализатору.
Нужно сделать следующее:
-
Скопируйте списки текстовых и числовых переменных из соответствующих окошек Анализатора и сравните.
- Можно, например, вставить эти списки в Excel, отсортировать по алфавиту и сопоставить вручную.
-
Если в обоих списках присутствуют одноимённые массивы (например,
$unitиunit), переимен уйте текстовые массивы во всей игре. (Для приведённого примера$unitможно переименовать в$unit_name.) -
Массивы
$args/argsи$result/resultпереименовывать не нужно — это специальные массивы. Однако во всех локациях, где используются$args/args, первой строчкой обязательно проводите инициализацию (например,args[9] = args[9]), если используете текстовые индексы для элементов массива$args/args. -
Будьте аккуратны с переименованием массивов, которые не используют одновременное хранения числовых и текстовых значений под одним индексом, но хранят значения обоих типов под разными индексами.
Когда не останется одноимённых текстовых и числовых массивов (за исключением выше обозначенных случаев), игра в плане хранения данных в массивах станет совместима и с плеерами версии 5.7.0, и с плеерами версий 5.8.0 и выше.
Изменения в работе функций INSTR, ARRCOMP, ARRPOS
Необязательные аргументы функций INSTR, ARRCOMP и ARRPOS в плеерах 5.8.0 и выше переставлены в конец. В плеерах версии 5.7.0 и ниже эти аргументы шли в начале.
Например, в плеере 5.7.0 поиск подстроки в строке мог выглядеть так:
instr(7, "В корзине 23 красных и 47 синих яблок.", "красн") & ! 14
Если вы полностью переходите на новые версии плеера и совместимость с версией 5.7.0 вас не волнует, найдите все вхождения instr, arrcomp и arrpos в игре и переставьте необязательный аргумент в конец:
instr("В корзине 23 красных и 47 синих яблок.", "красн", 7) & ! 14
