Видеоуроки по QSP
Наконец я подготовил первую серию видеоуроков по QSP.
Это заняло почти полтора года, и многие из вас уже освоили всё, что я здесь рассказываю, но надеюсь эти видеоуроки помогут новичкам, которые постоянно появляются в нашем сообществе.
Пару слов в оправдание, зачем это нужно.
Во-первых, я позавидовал instead`у, где такие уроки есть.
Во-вторых, некоторые люди лучше учатся и легче усваивают материал, когда этот материал наглядно демонстрируется, а не просто записан в книжке.
Ну и в-третьих, я постарался выстроить уроки по принципу “от простого к сложному” и попутно всё ОЧЕНЬ подробно объяснить, чего, на мой взгляд, пока что нет ни в справке, ни в имеющихся учебниках. (К сожалению, из-за этого уроки получились затянутыми и занудными, но придётся потерпеть)
На этом я конечно не остановлюсь и буду продолжать пилить уроки, теперь уже с некоторой периодичностью. Ещё пять-шесть уроков будут посвящены основам, затем начнём повторять и разбирать разные плюшки из темы “Как сделать?” и документации.
По ходу я постараюсь запиливать видеоинструкции на сложные темы (парочка таких уже есть).
Вопросы и критика приветствуются. Нудный голос, тяжкие вздохи и убогий звук исправить будет сложно, но чем чёрт не шутит.
Добро пожаловать на мой канал.
Урок 0. Вводный
Spoiler
1:29 Что нам понадобится для написания игр:
2:05 Quest Soft Player 5.7.0 — плеер
3:41 Quest Generator 4.0.0 Beta — редактор
6:30 Настраиваем редактор для работы
8:54 outro
Урок 1. Вывод текста. Часть 1
Spoiler
0:39 Создаём локацию
2:19 Выводим текст в окно основного описания *p
4:36 Команда *pl. Вывод текста и с последующим переводом каретки на новую строку.
7:00 Команда *nl. Перевод каретки на новую строку с последующим выводом текста.
8:07 Очищаем окно основного описания. Команда *clr *clear
9:24 Выводим текст в окно дополнительного описания pl p nl
9:50 Очищаем окно дополнительного описания clr clear
11:33 упрощённая форма команды *pl
12:42 outro
13:03 Памятка
Урок 2. Вывод текста. Часть 2
Spoiler
00:54 Апострофы
01:13 Фигурные скобки
02:07 Многострочный текст
04:18 Зачем текст помещается в кавычки, апострофы или фигурные скобки
05:57 Как выводить на экран кавычки, апострофы и фигурные скобки
08:05 Экранирование кавычек и апострофов
10:38 Outro
Урок 3. Действия
Spoiler
02:27 Наше первое действие, оператор ACT, однострочная форма записи
05:01 Как это работает. Порядок выполнения кода
06:31 Многострочная форма записи ACT
09:31 Порядок выполнения кода
12:13 Распространённая ошибка начинающих авторов при написании действий
20:03 CLA — оператор для очистки окна действий
25:58 Комбинируем команды в действиях
27:18 DELACT — оператор, удаляющий действие по названию
30:37 Outro
Урок 4. Переходы
Spoiler
00:24 Что такое локация, и чем является локация в QSP
01:01 Пишем титульный лист. Локации-страницы
02:03 Страница об авторе
03:00 Страница информации об игре
03:36 GOTO — оператор перехода на новую локацию
04:08 Порядок выполнения кода
05:45 Действие перехода
12:06 Типы локаций по использованию в разных играх
12:53 Порядок выполнения кода в игре, на локациях. Как работает плеер
15:46 Пишем локации-комнаты, наполняем игру содержимым
27:19 Проверяем работоспособность локаций и действий переходов, которые мы написали
31:25 Outro
Без номера. Программки-помощники
Spoiler
00:27 Trizbort trizbort.com
03:40 Рисуем карту локаций в программе Trizbort
13:25 Программа MS Visio
18:00 Outro
Урок 5. Предметы
Spoiler
01:02 ADDOBJ — оператор добавления предмета в окно предметов
03:50 Действие поднятия предмета
06:18 DELOBJ — оператор удаления предмета из окна предметов
06:50 Действие сброса предмета
09:09 Предметы кончились, но мы продолжаем выбрасывать. Что будет?
11:09 KILLOBJ — оператор очистки окна предметов
13:58 Outro
14:00 Памятки
Урок 6. Формы записи
Spoiler
00:44 Порядок выполнения кода игры. Как работает плеер
04:33 Две и больше команд в одной строке кода
08:00 Два однострочных действи в одной строке кода
12:55 Порядок воспроизведения плеером нескольких вложенных друг в друга действий
22:16 Предостережение в заключение
23:33 Outro
Урок 7. Операции и выражения
Spoiler
00:26 Порядок выполнения команд. Как работает плеер. Закрепление
01:32 Операторы и значения
03:59 Типы значений: текстовые и числовые
06:29 Выражения
09:26 Операция сложения
10:32 Конкатенация через амперсанд (Склейка строк операцией &)
13:22 Конкатенация через плюс (Склейка строк операцией +)
14:03 Плюсуем число к строке
16:05 Операция вычитания
17:38 Операции умножения и деления
19:51 Операция MOD — вычисление остатка от деления
21:23 Порядок выполнения операций в выражении
24:58 Операции сравнения. Если выражение ложно, в результат выдаётся 0, Если выражение правдиво, в результат выдаётся -1
28:40 Операция отрицания NO
31:23 Унарный минус
32:00 Операция (или функция) OBJ. проверяет наличие предмета. 0 — предмета нет, -1 — предмет есть.
33:46 Логическое И и логическое ИЛИ (AND и OR)
36:22 Outro
Урок 8. ПодВыражения
Spoiler
00:17 Выражения
00:30 Значения выражений
01:10 Как плеер выполняет команду, вычисляет значение выражения
02:45 Числа в константах
02:57 Подвыражения (Вложенные выражения)
06:30 Сложное выражение с подвыражениями
08:50 Тонкости при работе с вложенными выражениями.
11:22 Домашнее задание
11:50 Outro
Урок 9. Переменные
Spoiler
00:18 Проверяем домашнее задание
01:48 Знакомимся с переменными
02:44 Имена переменных
03:21 Различия в именах текстовых и числовых переменных
03:36 Присваиваем переменным значения
12:50 что будет, если записать переменную без оператора
14:30 Лирическое отступление
15:07 Важный момент. Инициализация (объявление) переменных
16:12 Применяем наши новые знания
22:50 Ограничения на использование переменных
25:11 Outro
Урок 10. Конструкции условий. Часть 1
Spoiler
01:34 Оператор условия IF
05:41 Многострочная форма записи оператора условия
09:25 Действие по условию
11:54 Ключевое слово ELSE — код, который выполняется, если условия не срабатывают.
17:35 проверяем, как работает код
24:22 Условие в действии
28:45 Outro
Урок 10. Конструкция условий. Часть 2
Spoiler
00:18 Проектируем перемещение по локации с помощью конструкций условий
05:12 Ключевое слово ELSEIF — иначе если. Если не сработало первое условие, проверяем второе
06:10 и т.д.
11:49 Гуляем по подъезду
16:15 Outro
Урок 11. Операторы, функции, аргументы
Spoiler
00:24 Операторы
01:17 Понятие аргумента
02:00 ADDOBJ — оператор, которому можно передавать два аргумента
04:12 Функции
04:32 RND — возвращает значение от 1 до 1000
06:30 $curloc — возвращает название текущей локации
08:22 $selobj — возвращает название выделенного предмета
10:33 RAND — возвращает случайное число в указанных пределах
12:52 Порядок вычисления выражения с функциями
16:24 Два аргумента к функции RAND
18:41 MAX — функция, которая выбирает наибольшее значение из перечисленных (функция, которой можно передать более двух аргументов)
20:53 MIN — функция, которая выбирает наименьшее значение из перечисленных
22:14 Информация для закрепления
23:23 Outro
Урок 12. Интерфейс и системные переменные
Spoiler
01:19 Меняем настройки плеера
07:56 Включаем/отключаем окна из кода игры
08:36 SHOWOBJS — оператор управления окном предметов
09:31 SHOWACTS — оператор управления окном действий
09:54 SHOWSTAT — оператор управления окном дополнительного описания
10:06 SHOWINPUT — оператор управления полем ввода
10:26 Настраиваем игру, используя операторы управления окнами
12:47 Системные переменные
13:17 bcolor — цвет фона игры
15:07 RGB — функция, вычисляющая числовой код цвета по составляющим, которые передаются в аргументах
17:16 Опыт по получению цветовых составляющих нужного цвета
18:58 fcolor — цвет шрифта игры
19:56 fsize — размер шрифта
20:56 $fname — шрифт, семейство шрифта
22:11 оформляем нашу игру вырвиглазными цветами
27:03 $backimage — фоновый рисунок в окне основного описания
34:00 Outro
34:55 Post-Scriptum
Урок 13. HTML
Spoiler
часть 1
00:35 Что такое HTML
01:24 Создаём первый HTML-документ
03:25 Форматируем HTML-документ с помощью тегов
03:58 Открывающий тег <i> — курсив
05:01 Закрывающий тег </i>
06:25 Как ведёт себя тот же текст в QSP
07:25 Включаем режим обработки HTML. Системная переменная USEHTML
10:50 Справочники по HTML
12:05 Теги <b> и </b> — жирное начертание
12:39 Комбинирование тегов
13:20 Правильно закрывайте теги!!!
14:52 Теги <center> и </center> — центрирование по горизонтали
15:45 Теги <div> и </div> — выделяем текст в блок
16:10 Атрибут align — выравнивание текста по горизонтали
19:25 Тег
— перевод строки
21:09 Тег <hr> — горизонтальная линия
21:54 Теги заголовков <h1> и </h1> … <h6> и </h6>
24:26 Теги <font> и </font> — меняем внешний вид текста
25:20 Атрибут color — меняем цвет текста
28:17 Атрибут size — меняем размер текста
32:40 Атрибут face — меняем шрифт части текста
34:33 Теги <span> и </span> — меняем внешний вид текста
35:21 Атрибут style — задаём набор свойств для стилизации
35:37 Свойство color — задаём цвет текста
35:59 Свойство font-size — задаём размер шрифта
36:15 Свойство font-weight — задаём жирность шрифта
38:39 Outro
часть 2
01:11 Тег <img> — вставка изображения в текст
01:40 Атрибут src — путь к файлу изображения
03:28 Вставляем изображение в название действия
04:45 Атрибут width — задаёт ширину картинки
06:27 Таблицы:
06:43 Теги <table> и </table> — содержимое таблицы
07:50 Структуры таблицы: <tr> и </tr> — строка, <td> и </td> — ячейки таблицы
09:29 Атрибут border — толщина границ таблицы
11:08 Атрибут width — ширина ячеек таблицы
13:23 Пишем сложную таблицу
16:05 Атрибут align — выравнивание текста по горизонтали внутри ячейки
18:39 Атрибут colspan — растягиваем ячейку на ширину нескольких столбцов
20:05 Атрибут valign — выравнивание текста по вертикали
20:40 Типичная ошибка новичка: паразитные переводы строк после таблицы
23:44 Гиперссылки
24:45 Теги <a> и </a> — гиперссылка
25:26 Атрибут href — адрес страницы, на которую надо перейти
26:40 Расширенные возможности гиперссылок в QSP. Ключевое слово EXEC
28:38 Решаем проблему с нехваткой кавычек (экранирование)
33:10 Типичная ошибка новичка: преждевременное раскрытие подвыражений
37:54 Ссылаемся на код действий из ссылок
42:15 Домашнее задание
Хмм как идея вот штука для облегчения записи перехода или обработки локации с помощью html. Кидать лучше в onNewLoc
Spoiler
!{ Форматы ссылок:
((текст)) - при клике перейти (gt) на локацию с названием "текст"
((текст||)) - при клике обработать (gs) локацию с названием "текст"
((текст|локация)) - при клике перейти (gt) на указанную локацию, текущее описание заменяется новым
((текст||локация)) - при клике обработать (gs) указанную локацию, новое описание добавляется к текущему
((текст|||строка кода)) - при клике выполнить строку кода
((текст|локация|строка кода)) - то же, что и ((текст|локация)), но перед переходом выполнить строку кода
((текст||локация|строка кода)) - то же, что и ((текст||локация)), но перед обработкой выполнить строку кода
}
$text = $maintxt
$regex = '\(\(([^\)\|]+)(\|{0,3})([^\)\|]*)(\|?)([^\)]*)\)\)'
:loop
position = strpos($text, $regex)
if position:
$words = strfind($text, $regex, 1)
$firstDee = strfind($text, $regex, 2)
$location = strfind($text, $regex, 3)
$secondDee = strfind($text, $regex, 4)
$stringCode = strfind($text, $regex, 5)
if $location = "" and $stringCode = "":
if $firstDee <> "":
$link = '<a href="exec: gs ''<<$words>>'' "><<$words>></a>'
else
$link = '<a href="exec: gt ''<<$words>>'' "><<$words>></a>'
end
elseif $stringCode <> "" or $location <> "":
if len($firstDee) = 1:
$link = '<a href=''exec: dynamic "<<$stringCode>>" & gt ''<<$location>>'' "><<$words>></a>'
elseif len($firstDee) = 2:
$link = '<a href=''exec: dynamic "<<$stringCode>>" & gs ''<<$location>>'' "><<$words>></a>'
else
$stringCode = $location
$link = '<a href=''exec: dynamic "<<$stringCode>>" ''><<$words>></a>'
end
end
$text = replace($text, strfind($text, $regex), $link)
jump 'loop'
end
*clr
$text
пример
*p 'В класе сидят ученики. Один из них ((Кунын|||gt ""Dialog1"", ""Kunin"")), который вам до сих пор должен полтинник.'
*pl
*nl 'Пара '
if provBaba = 0:
*p '((девчёнок|||gt ""Dialog1"", ""Baba"")) хихикающих как гиены.'
elseif quest_progres['Влюбленность!'] = 1:
*p '((девчёнок|||gt ""Dialog1"", ""Baba"")).'
else
*p 'девчёнок, то и дело посматривают на вас.'
end
*nl
*nl 'Ваш классный руководитель ((Анигелина Семёновна|||gt ""Dialog1"", ""U4ilka"")).'
*nl
*nl 'И стандартный ((школьный задира|||gt ""Dialog1"", ""Zadira"")).'
Здесь надо было передавать аргумент поэтому так записывал. А можно было бы ((текст|локация)) если не нужны аргументы при передаче.
oleksandrigo,
я делаю в своих играх нечто подобное, да. Правда синтаксис несколько отличается.
Как показывает практика, разные игры требуют разных возможностей от движков, а потому универсальное что-то написать очень сложно. В веренице миров мне например нужны были в основном ссылки, задействующие локацию поднятия предмета и локацию, которая будет выполнять переход. Поэтому я использовал такие конструкции:
[page=366]делаете шаг вперёд[/page]
на земле лежит[obj]яблоко|спелое яблоко[/obj].
Поэтому, да, я планирую урок, который покажет, как облегчать себе работу и делать динамическую обработку текста локации, но я склоняюсь к более простому примеру. Сделать что-то вроде типографа Олегуса только полегче.
прост оставлю тут + и пойду)))
Умеешь объяснять))) несмотря на тот факт, что, казалось бы, уже кучу всего знаю, но некоторые моменты были новы.
…
з.ы. Вспоможительные, плиз на вспомогательные, если только это не особенность
ejikplains:
з.ы. Вспоможительные, плиз на вспомогательные, если только это не особенность
Слово “вспомогательные” не совсем то, но ок, исправил.)
Aleks Versus,
А таймлайн какой-то можно будет прикладывать?
Ролики долгие и нужное найти непросто
Последний из Гаяр,
отличная мысль. Почему-то она мне в голову не приходила. Попозже сделаю.
Ого, Алекс крутой! А я только сейчас эту тему увидела.
Ajenta,
спасибо :)
Урок 14. Массивы
Spoiler
Часть 1
00:28 Проверка ДЗ. п.1. Действие по условию
04:25 Проверка ДЗ. п.1. Описание по условию
06:30 Типичная ошибка новичка при использовании goto в действии
09:40 Оператор wait
13:33 Проверка ДЗ. п.2. Текст с гиперссылкой
15:25 Системная переменная lcolor — изменяем цвет всех гиперссылок в игре
16:15 Проверка ДЗ. п.3. Описание с использованием html-тегов
16:39 Проверка ДЗ. п.п.4,5,6,7. Создаём три предмета для покупки у торговца
24:12 Что такое массивы и в чём их отличие от переменных
26:22 Удобство массивов по сравнению с переменными
27:30 Вводим переменные для возможности сброса книг на любой локации
39:21 Заменям переменные на массивы.
46:36 Outro
Часть 2
01:30 размер массива, функция arrsize
05:25 массив размером в одну ячейку
06:01 поиск индекса по значению в массиве, функция arrpos
09:36 Уничтожение ячеекмассива, оператор killvar
11:36 Поиск наибольшего и наименьшего значений в массивах, функции max и min
12:55 Копирование массивов, оператор copyarr
17:10 Текстовые индексы. Правим код
18:06 Текстовые индексы. Что делает плеер
23:00 Текстовые индексы. $curloc
30:18 Outro
Урок 15. Служебные локации. $onnewloc
Spoiler
00:15 Код, который мы писали в прошлый раз.
01:14 Служебные локации
02:12 Классификация служебных локаций
02:42 События
03:17 Событие перехода на новую локацию
03:34 Локация-обработчик перехода на новую локацию. onNewLoc
05:55 Нюансы работы локации-обработчика перехода на новую локацию
09:22 Использование локации-обработчика переходов / разгрузка неслужебных локаций
11:12 Проверяем, как это работает, и выявляем недостатки такого подхода.
13:29 Три способа, как избежать выполнения кода локации-обработчика перехода там, где выполнение этого кода не нужно.
13:48 Первый способ. Отключение обработчика
15:32 Второй способ. Выставление запрета через переменную-маркер
17:20 Третий способ. Введение списка локаций, на которых код не должен срабатывать.
19:26 Заключение
20:13 Post-Scriptum
21:12 Outro
Продолжа в том же духе)
Урок 16. Метки. Циклы
Spoiler
01:12 как выглядят метки
01:18 символы, которые не стоит использовать в названии метки
01:36 метки и другие команды в одной строке
02:23 JUMP — оператор для перехода к метке
04:26 практикуемся в написании меток
–– 04:30 две одинаковые метки
–– 06:00 метки в разных локациях
–– 07:10 область действия/блок кода
–– 07:32 метка внутри действия, написанного в поле “выполнить при посещении”
–– 09:30 метка внутри действия, написанного в окне “базовые действия”
–– 11:14 попытка “прыгнуть” из действия на локацию
–– 14:03 перемещение по меткам внутри действия
14:38 понятие цикла
15:27 блок схема алгоритма простого цикла
17:09 пишем наш первый цикл
22:52 пишем циклы для закрепления
26:32 применяем цикл на практике, то есть в коде игры
32:03 счётчики
32:41 циклы без счётчиков
34:36 заключение и домашнее задание
36:48 outro
Урок 17. Алгоритмы и блок-схемы
Spoiler
00:30 понятие алгоритма
01:40 блок-схемы и их элементы
05:22 простой линейный алгоритм в виде блок-схемы
–– 07:16 тот же алгоритм в виде кода
08:16 простой разветвлённый алгоритм
11:59 первая задача домашнего задания
19:01 вторая задача домашнего задания
22:54 третья задача домашнего задания
27:40 outro
Урок 18. Локация обработчик события “выделение предмета”
Урок 19. Всплывающее меню
Spoiler
00:00Урок номер 18. Локация-обработчик события выделение предмета
00:58 Создаём локацию-обработчик выделения предмета
03:00 unselect — оператор, снимающий выделение с предмета
04:08 Создаём описания предметов, которые выводятся при щелчке по предмету
08:45 Стандартные действия над предметами, появляющиеся по щелчку на предмете
11:20Урок номер 19. Всплывающее меню. Контекстное меню.
11:28 Примеры меню в играх
12:20 Пишем наше первое меню
15:25 оператор menu
16:17 порядок работы плеера при вызове меню
18:51 вывод меню при нажатии на действии
20:09 вывод меню из гиперссылки
20:56 вывод меню при щелчке по предмету
22:40 пишем контекстное меню для предметов
–– 23:53 как сделать разделитель
34:17 Пропущенный пункт меню, незаполненная ячейка
35:27 Иконка на пункте меню
36:24 Заключение
36:51 Примеры шикарных игр на QSP: Sanctuary и Great Winter
38:14 Outro
Урок 20. Локация-счётчик. $counter
Spoiler
00:30 Вспоминаем былые времена
01:05 Что такое локация-счётчик
01:17 Создаём локацию-счётчик
02:29 Запускаем и проверяем, как она работает
04:16 Порядок выполнения кода при наличии локации-счётчика
06:12 Где нужно и где можно использовать локацию-счётчик
08:00 Пишем отложенное действие
09:19 Проверяем, как работает отложенное действие
09:59 Как ускорить появление отложенного действия
10:20 Оператор SETTIMER
11:55 Почему время — примерное
12:25 Функция MSECSCOUNT
15:52 Сравниваем работу плеера при частом и редком обращении к локации-счётчику
17:30 Пишем код, который считает, сколько времени прошло с начала игры (дни, часы, минуты…)
23:48 Привязываем задержку к реальному времени
27:56 Пишем отложенную подсказку
38:18 Замедляем скорость вывода отложенной подсказки, не используя SETTIMER и пороговое время
40:05 Отложенное событие при нажатии на действие
44:44 Резюмируем (делаем выводы)
45:40 Обещания на будущее
46:40 Полезный совет
46:54 Outro, анонс будущих уроков
47:11 Поддержите платформу (ссылки в описании)
48:08 Посетите группу в vk (ссылки в описании)
20 урок довольно полезный =)