Для начала немного отступления: я вроде бы плотно расписывал сюжет игры, там появилась еще большая вариативность, не говоря уже о том, что сам сюжет сильно прокачался. Добавил не только новые локации и описания к ним, но и ввел несколько новых, на мой взгляд, интересных дополнений к сюжету. Они скорее помогут вам понять, что происходило в прошлом и почему некоторые персонажи стали теми, кто они есть, но, пожалуй, больше не скажу вам ничего, ибо спойлеры...
Так какого черта тогда изменения в движке? Доделывал бы сюжет дальше?
Дело в том, что огромная вариативность и человеческий фактор всегда оставляют место для ошибок еще на этапе создания игры. Которые позже в тестировании выливаются в очень коварные баги, сложные для выявления. Например, подсчет значений параметра для условия в блоке. Простым языком, чтобы попасть в особенно хитрый блок, требуется сразу несколько параметров с определенными значениями, так еще и собранные хитрыми маршрутами. Посетил комнату А, взял предмет в комнате Б, не стал делать в С и так далее. Проверять всё это вручную, к тому же в соло-разработке, практически нереально. Вот я и решил немного поработать в движке над автотестами, а заодно привести в порядок некоторые аспекты движка, которые мозолили глаза.
К слову сказать, в «Плач капель», например, есть 1 недостижимый блок, просто потому что я ошибся в расчетах, это крайне некритичный блок, практически ни на что не влияющий, но сам факт, что он был найден вот только что благодаря автотестам.
Но давайте обо всем по порядку.
Все новые улучшения в движке.
Они добавлялись не в таком порядке, но логичнее будет рассказать вам и показать их в таком порядке, как я сейчас напишу.
Дашборд
Прежде всего, я наконец-то доделал дашборд с которым после авторизации намного проще выбирать тот или иной модуль для работы. Это несомненно еще не финальная его форма, но уже работать с ним стало приятно.
Тут и быстрые действия в самом верху, чтобы можно было сразу скакнуть к наиболее востребованным для меня модулям. Количество модулей будет увеличиваться, так что хоть сейчас быстрые действия и не настолько уж нужны, на будущее, когда это будет не 1 страница экрана, станет точно полезно.
Также помимо дашборда претерпели изменения и сами модули. (Пользователей не покажу из соображений безопасностей, но там тоже были улучшения)
Раздел новости.
Для вас изменения не видны, но я для себя улучшил отображение статей в черновиках, добавил фильтры, немного переделал карточки и так далее. Технически написание статьи и редактор не претерпели изменений. (Шапка на скриншоте старая, но я поправлю честно.)
Управление файлами.
А вот этот модуль сильно изменился. Во-первых, изначально он находился внутри редактора и был кривоватый. Но такая мощь, на мой взгляд, может быть доступна в принципе только для админа, так что в админку я это и перенес. Для чего он вообще нужен? Место на серваке не безгранично, какие-то игры могли быть созданы временно на тест, какие-то файлы в эти игры загружались, а как потом искать то, что уже не используется? Вот для такого я и создал этот модуль. Находим не используемые ни в одной из игр картинки или аудиофайлы — и удаляем.
В целом управление файлами содержит в себе две вкладки: «Аудио» и «Изображения».
Автотесты
И вот мы добрались до самого тяжелого модуля, где я надрывал зад почти на протяжении целого месяца (по ощущениям так, но, скорее всего, недели 2). Для налача - их 3 вида, но я расскажу подробно о каждом из них.
Пожалуй одним из самых важных автотестов был именно этот, так как в циклах посчитать все +- значения меняющиеся в параметре, не самая легкая затея. По этому я и написал этот скрипт автотеста в первую очередь. Тут можно провести анализ по всем параметрам в игре сразу или выбрать 1 конкретный. После анализа получаем краткую сводку
И можем более детально разобраться в отчете.
lever это не ошибка, а просто не используемый параметр, так как я решил что выход с помощью рычага будет в другом блоке. А вот cult_power я посчитал не верно. Ниже есть фильтры для поиска и более детально по каждому параметру отчет.
Это не сильно детализированный автотест, он пришел на замену старому автотесту, который был в редакторе (его я оттуда выпилил, разумеется), который просчитывал пути и просто находил недостижимые блоки. Я сииииильно оптимизировал скрипт, и теперь он работает слишком быстро, буквально за секунды даже на больших играх.
Краткие результаты анализа выводятся, но есть и более наглядный отчет.
Если будут найдены бесконечные циклы, ошибки и т. д., там ниже это всё выводится в отчете.
Самый мощный автотест, но не предназначенный для покрытия всей игры, скорее всего, процентов 60–70% вы сможете покрыть за пару дней (зависит еще от самой игры). Почему он самый мощный в таком случае? И почему только 60–70%?
Мощный, потому что он эмулирует запуск игры, нажатия на пункты меню, броски кубика и так далее, как это мог бы делать обычный человек. И вы можете запускать их параллельно, несколько воркеров будут проходить маршруты, отдавая приоритет непокрытым маршрутам, с учетом, что уже было покрыто ранее или другими воркерами за 1 проход игры.
Чтобы можно было запустить больше воркеров и это не мешало работе на компе во время их работы, есть headless режим. Будет выводиться консольный лог действий, но при этом само окно браузера видно не будет.
По сути это точно такие же действия, как с видимым окном, только в фоне, без отрисовки окна и действий. Понимаете теперь? Запускаем н-ное количество воркеров, я в основном запускал 10 в параллели, и даем н-ное количество проходов на каждый из них, чаще всего я выбирал 100. И вот, считайте, 10 тестировщиков проходят игру по 100 раз и записывают по своему прохождению отчет.
Да, там не будет четко 10х100 уникальных маршрутов. Так как есть некоторая погрешность и дублируемость из-за параллельности, но мои запуски показывали до 60-70% уникальности маршрутов.
Почему только 60-70% покрытия от всей игры?
Всё дело в уникальности путей. Я хочу делать в основном вариативные игры, с кучей условий, вариантов прохождения одной и той же локации и т. д. Но поскольку пройти игру можно разными способами, а у скрипта есть задание искать именно уникальные маршруты, то тут может возникать некоторая проблема в скорости. Условно вы запустили скрипт, 10 воркеров по 100, даже если считать, что каждый найдет уникальный путь на каждый проход, это 1000 маршрутов. В зависимости от длины игры и сложности маршрута автопроход займет, скажем, 5 минут в среднем. То есть 500 минут, почти 9 часов нам надо, чтобы открыть 1000 уникальных путей. А в игре «Плач капель» их 3 200 000. Вот и считайте. Я не говорю про «Волю Денурка», где сейчас на недописанном 289 980 000.
Что-то ты гонишь, в игре не так много вариантов пройти. Для человека вариантов пройти в самом деле не так много, если не учитывать один маленький нюанс — последовательность ваших действий и то, что в режиме игрока вы не видите параметры и условия достижения того или иного блока. Более простым языком, почему так много уникальных маршрутов (это просто пример): вы находитесь в коридоре, у вас 4 пути, комната 1, 2, 3, 4.
Но как именно вы пойдете? В какой последовательности: 1, 2, 3, 4 или 3, 2, 4, 1 или 1, 4, 2, 3 и так далее. Всё это уникальный маршрут, хотя местами логически это не сильно отличающиеся для вас варианты. Но последовательность может напрямую влиять на ваше прохождение. Например, вы выбрали 3, 2, 1, 4 и потом в 10 комнате не увидели ничего полезного, а если бы пошли 1, 4, 2, 3, тогда вы бы заметили что-то потустороннее, и ваша игра могла бы сложиться иначе.
Прогресс наполняется с каждым запуском.
Каждый раз, когда скрипты проходят и находят новый путь и блок, это записывается в основной файл, который хранит в себе все маршруты. То есть можно запускать периодически или запускать с очисткой, чтобы всю игру проверять заново, в любом случае я бы не ждал полного процента покрытия игры, это будет очень долго.
В конце получаем отчет, тут он с низким процентом покрытия, так как я запускал чистую новую проверку. Тут показываются сами пути и количество блоков, что уже были достигнуты за прохождения.
Также тут показывается топ 5 блоков, которые посещаются чаще всего, чтобы понимать их важность. Так как всего было 3 прохода, то все 100%, но на большем количестве процент будет меняться. И ошибочные переходы, если были какие-то ошибки, это на время теста я добавлял, чтобы можно было посмотреть, как будет в отчете.