RU

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

Tom Run #2765 31.08.2024 11:55 97 comments 14024 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 локации:
‘Start’ - прописан killall & gs ‘menu1’ & gt ‘Menu’ (локация не видна игроку, подключает переменные для меню).
“Menu” - Главное меню (Старт игры, Настройки, Инфо, Выход, все по стандарту).
“Game” - сама игра (Старт игры).

Нужно перейти с игры (”Game”) по кнопке “Главное меню” (gt “Menu”), чтобы стерлась игра но при этом сохранились настройки (громкость и т.д., записанные в gs ‘menu1’).

Кажется я понял как это организовать, opensave ‘menu’ на локации “Menu” и savegame ‘menu’ на локации Настройки,
но если посетить Настройки во время игры, то savegame сохранит и всю игру =( ааа блин не понял…

Не вижу другого выхода, всё приводит к тому чтобы killvar не задел массив с настройками.
Как вариант написать целую игру в ~10 массивах, чтобы иметь возможность удалить их поименно (реализуемо, но глупо отказываться от переменных).

Как простой вариант обхода - временно сохранить нужные настройки в доп описании, потом их оттуда восстановить.
killvar затронет только переменные, но не доп описание.

Круто, как опробую - напишу. А я только подумал что всё сложно, а тут и решение случайно на 5 вопрос нашёл (Страница: 3). Еще по комментариям из видеоуроков нашёл плеер от Sonnix, к сожалению он мне не понравился. HTML это конечно круто видимо из-за этого и вес в 170мб, но главное, что рамку он так же полностью не убирает и еще по мелочам косяки. В общем 5.7.0 пока некем заменять. Знаю про новые версии, но уроки по 5.7.0 так что так пока проще.

Можно использовать QSP 5.9.0 и Q-Spider.

Скачал 5.9.0: рамки также видны как в 5.7.0, папка lib не понял для чего там, нет под Линукс и Мак как на 5.7.0 и главное Защитник Windows на него ругается, на 5..7.0 - нет. (думаю подожду версий постарше).
Q-Spider: похоже придумали программисты для программистов, потому что я в нем нечего не понимаю со стороны пользователя даже как скачать, пришлось качать все файлы из ссылки и что дальше? В окне также верхний toolbar по типу версий от Sonnixа, игры которые там есть не работают когда добавляю, пишет - Не удается найти эту страницу, Тема меняется с темной на светлую при каждом новом заходе, потому что нет файла типа qspgui.cfg. Лично меня он отталкивает к пользованию (просто не зашел).

Это мои наблюдения и я рад, что платформа развивается, надеюсь в скором времени увижу те версии которые мне понравятся, а пока 5.7.0 самый сбалансированный. Дело в том что текстовые игры и так не очень популярны и когда не хватает самого элементарного (например кнопки ВЫХОД) сильно заметно.
Позже напишу что не понравилось в 5.7.0 со стороны новичка, но плюсов для меня гораздо больше.
Опять же это лишь то чего не хватает именно мне в плеерах. Понравилась фраза - “нет плохого языка программирования, есть только программисты которые не умеют его использовать” - придаёт мотивации.

Версия классика 5.9.0 сейчас есть под Линукс, причем в большем количестве вариантов, чем 5.7.0. Версия под Мак скоро будет готова, думаю.
Про проблемы с Q-Spider лучше написать в дискорде - тогда с большой вероятностью они будут исправлены.

Что-то я завис, 1 элемент массива вернул на ура, но как дошло до 3-х тут и просел.

showstat 1
showacts 1
! Задаем 2 массива:
$LOL[0]='массив которого нет' & ! для наглядной работы
$LOL[1]='первая ячейка ЛОЛ'
$setting[0]='100%'   & ! громкость музыки
$setting[1]='40%'     &  ! громкость аффектов
$setting[2]='rus'        &  ! язык
! Выводим информацию для проверки:
act 'info':
    *pl 'ячейка 0 = <<$setting[0]>>'
    *pl 'ячейка 1 = <<$setting[1]>>'
    *pl 'ячейка 2 = <<$setting[2]>>'
    *pl 'ячейка 3 = <<$setting[3]>>'
    *pl 'ячейка ЛОЛ0 = <<$LOL[0]>>'
    *pl 'ячейка ЛОЛ1 = <<$LOL[1]>>'
end
! Тут творится магия:
act 'Выйти в "Главное меню"':
    clr
    pl '<<$setting[0]>>,<<$setting[1]>>,<<$setting[2]>>'
    killvar
    $args=stattxt              & ! выводит строку с 3 параметрами
    $setting[0]=stattxt      & ! тут должно быть 100%
    $setting[1]=stattxt
    $setting[2]=stattxt
end

Сократил массив до 3 самых важных ячеек, таким образом строка всегда будет одинакова.
Как розбить строку на 3 ячейки и вписать каждую на свое место? или я что-то не то делаю?
Подумал про регулярки, но они могут выводить текст? Насколько понял они только для поиска…

Можно разными способами, самое простое - это оператор scanstr: https://qsp.org/index.php?option=com_content&view=article&id=164&Itemid=76
Если без scanstr, то для небольшого массива можно с помощью strfind:

$pattern='([^,]+),([^,]+),(.*)'
$setting[0]=strfind($args, $pattern, 1)
$setting[1]=strfind($args, $pattern, 2)
$setting[2]=strfind($args, $pattern, 3)

Byte, правду говорят - учения это свет, а я пока брожу в потемках. Не, ну хоть могу себя утешать что использования регулярок было на правильном пути (осталось научиться ими пользоваться). Я пока пытаюсь понять всю картину проекта целиком, а уж потом начну углубляться в каждую из деталей. Спасибо большое!

Вопрос №7«Модули»
Могут подключаемые модули давать сбой?
Пару дней назад работал над проектом в 3‑х окнах, 1 основное и 2 addqst модуля. Не работал мой код, пока я не перекопипастил все локации в модулях. Вроде нечего не менял, но забыл посмотреть еще рас так как был очень рад тому что код заработал. У меня в то время знатно уже подгорало (потратил ночь на поиск неисправности) и на сарафанном радио передали мне вот такой текст:

USER:

Дело в самой функции адквест.
Я в свое время изрядно сам с ней накололся и зарекся ей пользоваться. Работает она через жопу. По факту, у тебя подключается тот файл, который ты подгрузил последним в списке. Вот и весь секрет.
Очень не советую этой радостью пользоваться.

Хотелось бы узнать это я такой невезучий или всё же может программа давать сбой?
Поточнее: Могут ли модули глючить?
Если:
нет - тогда буду внимательнее писать код.
да - тогда вы спасете меня от кучи бессонных ночей.

По идее всё, что делает addqst/inclib - добавление локаций из указанного файла, но только тех, которые еще не присутствуют в данный момент.
Например, если в основном файле игры есть локации “Начало”, “loc1”, “loc2”, то ADDQST/INCLIB для файла, содержащего “loc2”, “loc3”, “loc4”, добавит только локации “loc3” и “loc4”. Таким образом в игре будут локации “Начало”, “loc1”, “loc2”, “loc3”, “loc4”.
Можно использовать несколько модулей в одной игре - проблем быть не должно.

Если ADDQST/INCLIB действительно вызывает какие-то неожиданные ошибки, то мне нужны примеры таких игр, чтобы исправить баг (если он существует).

Byte, понятно, если еще рас столкнусь, то сохраню проект, спасибо за ответ.

Aleks Versus Moderator 14.10.2024 14:53 (1 year ago)

Именно ADDQST я использовал очень плотно. И число подключаемых файлов доводил до максимума. Никогда не было с ним проблем.

Возможно ты не понимаешь, как работает ADDQST. Он добавляет к игре только те локации, которых нет в списке локаций.

Если у тебя в 1.qsp есть локации 1, 2, 3, а в 2.qsp есть локации 2, 3, 4, то при подключении в таком порядке:

addqst '1.qsp'
addqst '2.qsp'

у тебя локации 2 и 3 будут из файла 1.qsp
а при подключении в обратном порядке

addqst '2.qsp'
addqst '1.qsp'

локации 2 и 3 будут из файла 2.qsp

Aleks Versus, его работу я понял, модуль где была проблема задействовал для смены языков и поначалу делал массив с числовыми ячейками, например:

$base_[0]="Язык"
$base_[1]="Русский"
$base_[2]="Перевод"

Скорей всего в этом и была моя ошибка, так как код перестал быть читаемым, теперь переделал все в такой вид:

$base_["Язык"]="Язык"
$base_["Русский"]="Русский"
$base_["Перевод"]="Перевод"

Проблем нету, гнался за оптимизацией - вышло все боком. Видимо если так и переписывать массив то уже с готовым кодом. Чисто текст подставить по ячейкам не сложно, но вот когда начал играться с этими ячейками началась каша. В общем ошибка новичка =). Спасибо что успокоил, не хотел отказываться от модулей, уж очень удобные они.

Log in or Register to post comments.