RU

Первые шаги...

Tom Run #2765 31.08.2024 11:55 97 comments 14048 views

Привет, мне понравилась идея создание текстовых игр и QSP движок показался прост в изучении, так как я в этом деле 0. Очень много вопросов закрываются путём изучения форума и справок по движку, и тут же огромная благодарность @aleksversus за его уроки. Но всё же вопросов, как всегда, больше чем ответов и это хорошо, поскольку это превратилось в хобби. Я надеюсь что вы поможете разобраться по ходу изучения в части из них, или направите в нужное направления, где это можно посмотреть (если похожую тему не найду).
На данном этапе я хотел бы создать игру на QGen - 4.2.0 beta 4 под плеер qsp - 5.7.0 для Windows.
И сразу хочу выразить большую благодарность всем тем кто будет мне помогать в решении (тупых) вопросов…

Для быстрого поиска:

Spoiler

Вопрос №1: Стиль кода

Вопрос №2: Ограничение переменных

Вопрос №3: Changelog

Вопрос №4: Error105

Вопрос №5: !BASE

Вопрос №6: Меню игры (массивы)

Вопрос №7: Модули

Вопрос №8: Метки

Вопрос №9: disablescroll = 0

Вопрос №10: loc

Вопрос №11: Список переменных (debugger)

Вопрос №12: Путь к игре

Вопрос №13: Однострочная запись

Вопрос №14: Знак <

Вопрос №15: Цикл

Решение №1: Файл .bat

Решение №2: Текст поверх картинки

Решение №3: Кнопка - Выход

Edited at 26.10.2025 17:35 (3 months ago)

Вопрос №3«Changelog»
Подскажите пожалуйста, вот вижу в разных проектах файлы - Changelog, и в них авторы указывают версию разработки программы по типу qsp 5.7.0 - 5.9.0 и т.д.
Дело в том что я не вижу в них какой-то системы, там полная анархия. К примеру пишут v.0.1.2, еще есть 984.456.4 или 0.0.0.0.0.0.8, и мне начинает казаться что это все придумывают рандомно (хотя все написано на Qgen).
Есть какой-то стандарт, или как правильно отслеживать изменения в коде?
Я слышал про Git краем уха, но что-то подсказывает что я там застряну еще на неделю. Может есть способ попроще?

Авторы сами выбирают формат версий. Главное, чтобы было понятно какая версия игры новее/старее.

Byte, понятно, спасибо.

Вопрос №4«Error105»
В общем был случай пол года назад, выключили свет и файл .qsp перестал работать (файл был открыт в qgen 4.0.0 beta 1).
Qgen - не открывает файл, а плеер дает ошибку 105
Теперь пользуюсь прогой - Corbian и делаю бекап.
Но всё равно интересно на будущее такой файл можно починить?
Файл - Error105.rar

Похоже, что файл совсем пустой.

Byte, пустые файлы весят до 100 байт, а этот 29.7 килобайт, я точно помню что там есть с десяток локаций (половина меню игры и пометки в ходе обучения).
Программка - qsp2txt.ex как и Qgen файл просто игнорит, хотя пустые файлы она легко конвертирует. Я пытался повторить данную ошибку чтоб понять как ее избегать в будущем, но так и не понял.
Вот подумал, может свет выключили в тот момент когда Qgen пересохранял файл, так как интервал был выставлен в 1 минуту, и в этот момент он повредился?

Создал примерно такой же файл с данными и по объёму он вышел больше 100 килобайт, может и в правду он при перезаписи стер старый файл, а новый не успел сохранить в полном объёме (это бы все объяснило). Но тут нужно понимать как это работает чтоб подтвердить или опровергнуть…

Файл не пустой он содержит 30426 пробела, похоже это и была часть информации под пересохранения.

Фактически файл содержит мусор - там всё забито одним и тем же байтом на первый взгляд.

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

Вопрос №5«!BASE»
Нашел файл file.qsp который отображает таблицу.
Открыл в Qgen, а он пустой. Конвертировал с помощью qsp2txt.exe и в текстовом файле отобразилась таблица:

# Начало
!BASE
*P 'Таблица'
!ENDBASE
-

Так вот нечего не меняя с помощью txt2gam.exe конвертирую обратно и вся таблица вываливается в локацию, и команды !BASE видны как простые комментарии.
Почему !BASE не остался за полем зрения Qgen, что я делаю не так?

Это известная проблема формата txt2gam - он не поддерживает сохранение базового описания локации и базовых действий “в том же месте”, добавляя их в “код локации”.
В планах улучшить формат и сохранять это там, где нужно.

Byte, ясно. Просто по такому принципу захотелось сделать подпись в коде, чтобы нельзя было изменить при помощи стандартного редактора (ну или константы запихнуть до которых не каждый читер смог бы добраться). Как всегда, идея провалилась…
Спасибо за ответ.

Ответ!
Я всё-таки его нашёл!
В Qgen выбираем: “Вид” - “Показать/Скрыть описание локации”. Всё что в этом окне - это и есть текст в !BASE
Знаю что это стандартная опция. Но те кто шёл по видео урокам как я, закрыли это окно в самом начале и забыли про него. В общем открыл заново велосипед =).

Вопрос №6«Меню игры (массивы)»
Подскажите, есть 100 массивов, нужно удалить 94 оставив 6 не тронутыми.

killvar
gs 'mas1' & gs 'mas2' & gs 'mas3' & gs 'mas4' & gs 'mas5' & gs 'mas6'

Таким способом я просто подключил массивы заново, но данные в них обнулились. Прописывать killvar для каждого массива будет вроде долговато тем более если не помнишь всех переменных. Может есть способ сохранить 6 массивов перед killvar?

Мне любопытно зачем это нужно. Обычно killvar используют при рестарте игры, чтобы сбросить состояние и начать “с чистого листа”.

Byte, игра состоит из меню (настройки, информация об игре и авторе и т.д.) и самой игры(Начать игру). Все настройки игры хранятся в массиве ‘menu’ (например - громкость музыки).
Если я выйду из игры в главное меню и начну новую игру то переменные останутся в памяти, как написано в стправке:

(в противном случае, может оказаться, что запертые двери уже открыты, жена похищена до свадьбы, а Баба-Яга уже отдала кому-то нужный клубочек).

Если я использую killvar в главном меню то сбросятся все настройки (например - громкость музыки).
Я прописываю gs ‘menu’ еще до старта меню… но при начале игры заново нужно стереть все переменные кроме настроек (массива ‘menu’).

Тут и возник вопрос: Как сохранить настройки выбранные игроком перед началом игры, и в случае начало новой удалить все переменные из уже существующей?

Так же я так и не смог понять из ответа на Вопрос№2 разницу между глобальными и локальными переменными.
Как я понял глобальные переменные - это все переменные которые я прописал.
Тогда что такое локальные? (может системные, по типу $counter, $onnewloc и т.д.)?
Может это станет ответом на мой вопрос:

  1. вызывать killvar без параметров, чтобы удалить все глобальные переменные. Здесь с помощью локальных переменных можно сохранить нужные старые глобальные переменные.

Но что это за магические локальные переменные которые не подвластны killvarу? Не запихивать же массив в $onnewloc…

Можно сделать 2 локации “начала” - одна прям самое начало, где прописано killvar и переход на вторую. на этой второй организовать меню настроек и прочее. если нужно совсем сбросить игру, то переходим на первое “начало”. если продолжаем настраивать, то переходим на второе “начало”.

Log in or Register to post comments.