RU

Видеоуроки по QSP

Aleks Versus Moderator 28.05.2018 07:07 24 comments 14369 views

Наконец я подготовил первую серию видеоуроков по 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 Домашнее задание

Edited at 06.01.2020 10:17 (6 years ago)

Хмм как идея вот штука для облегчения записи перехода или обработки локации с помощью 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"")).'

Здесь надо было передавать аргумент поэтому так записывал. А можно было бы ((текст|локация)) если не нужны аргументы при передаче.

Aleks Versus Moderator 28.05.2018 14:32 (7 years ago)

oleksandrigo,
я делаю в своих играх нечто подобное, да. Правда синтаксис несколько отличается.

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

[page=366]делаете шаг вперёд[/page]

на земле лежит[obj]яблоко|спелое яблоко[/obj].

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

прост оставлю тут + и пойду)))
Умеешь объяснять))) несмотря на тот факт, что, казалось бы, уже кучу всего знаю, но некоторые моменты были новы.

з.ы. Вспоможительные, плиз на вспомогательные, если только это не особенность

Aleks Versus Moderator 20.06.2018 07:26 (7 years ago)

ejikplains:

з.ы. Вспоможительные, плиз на вспомогательные, если только это не особенность

Слово “вспомогательные” не совсем то, но ок, исправил.)

Edited at 08.12.2018 05:38 (7 years ago)
Последний из Гаяр Moderator 06.12.2018 21:09 (7 years ago)

Aleks Versus,
А таймлайн какой-то можно будет прикладывать?
Ролики долгие и нужное найти непросто

Aleks Versus Moderator 07.12.2018 01:20 (7 years ago)

Последний из Гаяр,
отличная мысль. Почему-то она мне в голову не приходила. Попозже сделаю.

Ого, Алекс крутой! А я только сейчас эту тему увидела.

Aleks Versus Moderator 12.12.2018 10:55 (7 years ago)

Ajenta,
спасибо :)

Aleks Versus Moderator 23.01.2019 21:39 (7 years ago)

Урок 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

Aleks Versus Moderator 29.01.2019 08:55 (7 years ago)

Урок 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

Продолжа в том же духе)

Aleks Versus Moderator 01.03.2019 23:27 (6 years ago)

Урок 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

Aleks Versus Moderator 31.03.2019 09:55 (6 years ago)

Урок 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

Aleks Versus Moderator 19.05.2019 17:28 (6 years ago)

Урок 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 урок довольно полезный =)

Log in or Register to post comments.