Первые шаги...
Привет, мне понравилась идея создание текстовых игр и 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: Кнопка - Выход
Нужно чтобы новая игра начиналась со старыми настройками.
Сбрасывать всю игру не нужно, она сбрасывается при заходе в игру.
К примеру сейчас 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, понятно, если еще рас столкнусь, то сохраню проект, спасибо за ответ.
Именно 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_["Перевод"]="Перевод"
Проблем нету, гнался за оптимизацией - вышло все боком. Видимо если так и переписывать массив то уже с готовым кодом. Чисто текст подставить по ячейкам не сложно, но вот когда начал играться с этими ячейками началась каша. В общем ошибка новичка =). Спасибо что успокоил, не хотел отказываться от модулей, уж очень удобные они.