RU

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

Tom Run #2765 31.08.2024 11:55 97 comments 14019 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)

Метки работают внутри локации, но не между локациями. Можно пример кода, который не работает?

Вопрос №8«Метки»
Byte, странно, я удалил сообщение еще до ответа. В общем разобрался, я хотел перепрыгнуть на метку с гиперссылки. Потом пересмотрел видео и понял что рас нельзя с действия прыгать, то “EXEC” это то же действия, только для ссылок.
Говорят, что правильно заданный вопрос это половина нужного ответа. Так и есть, я уже с десяток вопросов не опубликовал потому, что ответы приходили в их написании.
В общем ложная тревога, но спасибо за оперативность! =)

Решение №2«Текст поверх картинки»
Отобразить текст поверх картинки оказалось вполне реально!
Это костыль, но в плеерах 5.7.0 - 5.9.0 он работает.
Всё решает - rowspan=2
Таким способом можно выводить картину поверх картинки.
Пример - Table_1.rar
Может кто-то уже догадался, но для меня это было открытие =), решил поделиться.

Вопрос №9 «disablescroll = 0»
Мне нужно чтобы текст выводился в середине кода (к примеру есть 2 абзаца и нужно вставить 3‑й между ними).
Вроде тут все просто, но как всегда есть подвох, нужно чтобы при этом работал disablescroll = 0.
При заходе на локацию или использование $curloc экран задирается в верх, то есть скрол не работает. Он работает только при вызове GS или dinamic.
Я создал 2 локации, на 1‑й - 2 абзаца, а на 2‑й *clr и 3 абзаца и вызываю GS все работает, скрол внизу. Но это по сути 2 одинаковых локации, может есть более изящный способ, при котором 1 игра не будет по весу как 2?

Не совсем понятно что именно там происходит, но можно вызывать gs ‘та же самая локация’, параметры
Затем на самой локации менять поведение в зависимости от переданных параметров.

Byte, я в самом начале не стал заморачиваться с args и подумал потом к ним вернусь. Потом - забыл за них. Теперь заменил killvarы на argsы и код стал в разы меньше. Спасибо!

Вопрос №10 «loc»
Подскажите, хотел задать переменную loc, но она подсвечивается как функция. В справке есть переменная $loc и то как пример.
Для чего нужна эта функция - loc?

Подумал ошибка с подсветкой, но в Qgen 4.1 она так же подсвечивается.

Функция LOC проверяет наличие локации с заданным именем. Скорее всего в справке ошибка.

В редакторе QGen в нижней части окна должны появляться подсказки по ключевым словам, когда наводим курсор на слово / набираем текст (см. вложение).

Еще при наборе текста в QGen можно нажать Ctrl+Space - тогда появится подсказка с возможными ключевыми словами.

Точно, нужно было включить строку состояния, спасибо!
При нажатии Ctrl+Space в 4.0 текст заменился на КАПС, а в 4.1 появилось новое слово - local, которого тоже нет в справке. С каждым разом что-то новенькое =)

Сегодня не мой день, думал уже что познаю тайны вселенной и тут понеслось:

gt 'loc',$args

не работает, походу массив args стирается до того как попасть на следующую локацию.
Теперь еще вот это не работает:

if loc '555' = -1: *pl 'YES' else *pl 'NO'
*pl 'Значение текущей локации = ' + loc '555'
*pl 'Значения локаций которой нет = ' + loc '111'

Выводит -1 в текст, но не срабатывает в условии, походу пора спать…

1. GT с параметрами должен работать и на 5.7, и на 5.9. Скорее всего где-то ошибка в коде.
2. У LOC поменялся приоритет в версии 5.8, и указанный код должен работать на версиях 5.8 - 5.9. Однако в 5.7 со старым приоритетом нужно было ставить скобки: if loc(’555’) = -1: … т.к. операция сравнения имела более высокий приоритет и LOC применялась к (’555’ = -1).
3. В версиях 5.8/5.9 функции, работающие с булевыми значениями, возвращают “1” вместо “-1”. Вот такой код будет работать и на 5.7, и на 5.8/5.9:

if loc('555'):p 'Локация существует!'

или даже так:

if loc '555':p 'Локация существует!' & ! можно без скобок/указания приоритета, так как в условии всего 1 операция

Это происходит, потому что на всех версиях QSP любое ненулевое значение является “истиной”, 0 является “ложью”. Но когда используется явное сравнение с -1, то возникает проблема.

1. Да точно, написал отдельно код - всё работает. Я передал args через 2 gt и 3 gs локации и в какой-то момент он потерялся. Плохая была идея, перепишу всё попроще.
2. Так она тоже не работает:

Однако в 5.7 со старым приоритетом нужно было ставить скобки: if loc(’555’) = -1:

хотя странно, в Qgen 4.1 она работает, а в 4.0 нет (открываю через 1 и тот же плеер). Опять не понятно при чём здесь редактор…

if loc('555') = -1: *pl 'YES' else *pl 'NO'
*pl 'Значение текущей локации = ' + loc('555')
*pl 'Значения локаций которой нет = ' + loc('100')
if loc('555'): *pl 'YES' else *pl 'NO'

КАРТИНКА
3. Тут всё понял, спасибо за разъяснение.

Если в QGen 4.1 работает, а в QGen 4.0 нет, то запускаются разные плееры.

Видимо какой-то лаг, перезапустил все заново и отображаются одинаково (на скрине открывались оба плеера 5.7.0 с разными показаниями. Это я к тому что не придумывал). Хотя условия сравнения вида if loc(’555’) = -1: так и не работает, работает только в таком if loc(’555’):. Все норм, просто не привык читать условия без сравнения.

Log in or Register to post comments.