ym104432846
Вставьте ссылку на видео из Youtube, Rutube, VK видео
Задайте вопрос по видео
Что вас интересует?
00:00:00
Создание самообучающегося бота:
  • Разработка системы автоматического прохождения уровней в Geometry Dash
  • Использование триггеров для имитации действий игрока
  • Реализация памяти для хранения последовательностей прыжков
00:06:03
Проблемы и решения в обучении бота:
  • Сложности корректировки последовательности прыжков
  • Добавление стратегии адаптации прыжков при неудачных попытках
  • Оптимизация процесса обучения с помощью чекпоинтов
00:08:19
Выбор и адаптация уровня Decote:
  • Критерии отбора уровня для демонстрации возможностей бота
  • Адаптация механизма прохождения Decote под возможности бота
  • Решение технических проблем с точностью и стабильностью прохождения
00:21:07
Финальное тестирование и результаты:
  • Описание процесса финального тестирования бота
  • Анализ количества попыток и затраченного времени
  • Сравнение результатов бота с личным достижением автора
0: Всем привет, с вами разум сейчас на фоне вы видите уровень. В нём нет никаких спрятанных блоков, Батутов или невидимых конструкций. Это просто уровень. Но этот уровень может пройти сам себя без какого-либо вашего участия. Он знает, как прыгать через шипы.
1: Умеет облетать препятствия, а главное целиком работает за счёт триггеров. Никаких читов, никаких сторонних программ, никакой помощи извне. На данный момент самое сложное, что я делал в редакторе, уровень проходит сам себя я покажу.
2: Процесс его создания от начала и до конца. И, конечно же, покажу вам результат. Всем. Желаю приятного просмотра, да, и извиняюсь за долгое отсутствие. У меня было много учёбы. Итак, я должен построить уровень, который сам себя пройдёт.
3: Или, если точнее, систему, которая сможет научиться проходить любой уровень, который я ей дам. Но сейчас у нас только абсолютно пустой редактор. Я подумал, что начать надо с чего-то максимально базового, с основы самой геометрии дэш.
4: Вообще гд это очень простая игра, все что в ней нужно для управления и прохождения уровней это единственная кнопка мыши, которая при нажатии позволяет вам прыгать, летать и менять гравитацию, а также прыгать по другому, летать по другому и менять гравитацию по другому, но.
5: Так как уровень должен проходить себя сам, мы должны научиться как-то делать это все без участия игрока. Конечно, можно с нуля воссоздать физику каждого персонажа, тогда мы получим полный контроль над всеми движениями, но тут есть и проблемы, и это не только огромная сло,
6: Такой системы физика будет немного отличаться от обычной, а это означает, что мы получим не совсем честное прохождение, если так можно сказать, честное прохождение должно использовать оригинальную физику гд. Что возможно, только когда мы сами кликаем на мышку.
7: Но разве игра может делать клики? За нас вообще нет, но есть 1 исключение, что если мы уже зажали и держим кнопку, тогда с помощью триггеров мы можем попробовать управлять прыжками персонажа в гд. Для этого есть 2 триггера это.
8: Плеер, контрол и options и все, что может 1, это лишь остановить прыжок и все испортить. В то время опшенс триггер может напрямую включать и отключать реагирование на клики игрока. Вот так. Но что более важно, помимо этого он делает
9: Ещё 1 странную вещь. Обычно после зажатия кнопки ваши прыжки не продолжаются бесконечно. Да, на Кубе, может, это и так. Но как только вы перейдёте, например, на тарелку 1 прыжок и вам нужно делать новый клик. Однако опшенс триггер
10: Включении и возврате управления возобновляет прыжок, даже когда он, по сути, уже был совершён здесь, на этом видео я зажал всего 1 раз и больше не кликал. Итак, вы можете сделать сколько угодно прыжков, зажав всего 1 раз. Кстати, как видите, все прыжки на
11: Находится точно под опшен с триггерами. А значит, теперь с помощью триггеров я могу имитировать любые нажатия игрока. И это то, что нужно для моей сегодняшней постройки. Я также позаботился о том, чтобы мне не приходилось постоянно держать клавишу. Да, было
12: Довольно легко. Далее надо было как-то научиться проходить уровень. Как я уже сказал гд, это очень простая игра, так что все, что для этого нужно, это просто делать клики в Нужных местах. А для этого нам надо понять, где мы находимся.
13: Нам нужны координаты, так что я построил эту систему из нескольких муф триггеров и collision блоков она очень простая 1 блок закреплён за игроком по x. 2 блок стоит на месте каждый раз, когда 1 его касается, он сдвигается вправо и увеличивает координат.
14: На 1 за единицу координат я взял расстояние в 1 треть блока или 10 юнитов. Это в самый раз для того, чтобы делать достаточно точные нажатия, сравнимые по точности с нажатиями среднего игрока.
15: Далее я стал думать над тем, как будут делаться прыжки. Для начала я добавил счётчик, в который будет записываться координата следующего прыжка, и сделал так, что, когда координата Куба достигает этого значения, активируется опшен стрингер, который активирует прыжок. Однако
16: 1 прыжка недостаточно, чтобы пройти весь уровень. Для этого нужны будут десятки прыжков, а значит, их координаты нам нужно где-то хранить. Нам нужна память. Вообще принцип работы памяти довольно простой. Вся память поделена на
17: Каждая ячейка может хранить какое-то число, а также имеет свой адрес, по которому мы обращаемся к этой ячейке именно так работает память ваших телефонов и компьютеров я же повторил этот принцип в geometry dash, я поставил много счётчиков, которые будут.
18: Выступать ячейками памяти и рядом с ними поставил инстан каунт триггеры, в каждом из которых будет храниться адрес соответствующей ячейки, а также эзит айтом, триггеры для чтения и записи в ячейку я сделал память на 500 ячеек да, я использовали.
19: Чтобы сгенерировать все эти триггеры, так как вручную я бы точно ошибся, а бил хелпер 2 2, неправильно обрабатывает номера счётчиков, но не суть. Также выделил 2 отдельных счётчика под адрес и значение и сделал сигнал на чтение и запись с помощью вот этих кнопок.
20: В конце я добавил к каждой ячейке персист триггер, он делает так, чтобы значения аккаунтер в. Не обнулялись и сохранялись между попытками. И вот небольшая демонстрация того, как это все работает. Допустим, мы хотим записать число 15 в ячейку под номером.
21: 7. Запись.
22: Подаём сигнал на и, как видите, в 7 ячейке появилось значение 15.
23: 7. Подаём сигнал на запись, и, как видите, в 7 ячейке появилось значение 15.
24: Теперь адрес чтение ячейки.
25: Умираем, чтобы начать следующую попытку. Как видите, значение все ещё здесь. Теперь вводим, подаём сигнал на. И у нас появилось значение из 7. А это означает, что память работает правильно.
26: Теперь умираем, чтобы начать следующую попытку. Как видите, значение все ещё здесь. Теперь вводим адрес, подаём сигнал на чтение, и у нас появилось значение из 7 ячейки. А это означает, что память работает правильно.
27: Затем я построил систему, которая после каждого прыжка обращается к памяти и читает из неё координату следующего прыжка, что означает, что теперь я могу делать несколько прыжков подряд, так что если я вобью в память правильные координаты, то даже смогу пройти какой-то
28: Но не все так просто, потому что в конечном итоге бот должен будет проходить уровень сам, без моей помощи. То есть координаты прыжков, которые я ему только что дал, он должен будет определять самостоятельно. Нам только нужна эффективная стратегия, как это сделать?
29: И в начале идея была простая когда персонаж умирает, мы записываем его координату смерти, а на следующую попытку делаем прыжок на единицу раньше, так как прыжок, скорее всего, спасает нас от да не но об этом позже, если же куб не умирает.
30: Смерти всегда.
31: И в начале идея была простая когда персонаж умирает, мы записываем его координату смерти, а на следующую попытку делаем прыжок на единицу раньше, так как прыжок, скорее всего, спасает нас от смерти, да, не всегда, но об этом позже, если же куб не умирает.
32: Заходит дальше, чем в предыдущую попытку, то это хорошо. И, значит, все прыжки, которые были сделаны, были сделаны правильно, и мы их больше не
33: До этого трогаем.
34: Заходит дальше, чем в предыдущую попытку, то это хорошо. И, значит, все прыжки, которые были сделаны до этого, были сделаны правильно, и мы их больше не трогаем.
35: Я реализовал этот алгоритм с помощью и с ним. Бот уже мог сам проходить простейшие препятствия. И да, я иногда буду называть его вот как это происходит. Я запускаю бота на этом уровне, и в начале он умирает, но она
36: Триггеров ботом, имейте ввиду.
37: Я реализовал этот алгоритм с помощью триггеров, и с ним. Бот уже мог сам проходить простейшие препятствия. И да, я иногда буду называть его ботом. Имейте ввиду, вот как это происходит. Я запускаю бота на этом уровне, и в начале он умирает, но она
38: Описывает свою координату смерти и вот идёт следующая
39: Попытка.
40: Описывает свою координату смерти, и вот идёт следующая попытка.
41: И он прыгает, он только что сам перепрыгнул свои первые 2 шипа, и да, через тройные шипы он тоже прыгает потенциально он уже может пройти за трипл трайба и michigan, но для меня это было только начало, видите ли.
42: Да, я решил, что целью этого видео будет прохождение ботом оценённого уровня, но в то же время я не хочу, чтобы это прохождение было халтурой, а прохождение уровней из 50 одинаковых Тройных Шипов как раз ей и так как боту все равно сколько Тройных Шипов в
43: Является уровне, если он может
44: Да, я решил, что целью этого видео будет прохождение ботом оценённого уровня, но в то же время я не хочу, чтобы это прохождение было халтурой, а прохождение уровней из 50 одинаковых Тройных Шипов как раз ей и является, так как боту все равно сколько Тройных Шипов в уровне, если он может
45: Перепрыгнуть одни то перепрыгнет и оставшиеся 49. И, как вы видели, он уже может. Но я бы хотел, чтобы бот мог пройти и уровень с более разнообразным. Так что я решил, что пришло время выбрать, что
46: Это сделать геймплеем, это будет за уровень.
47: Перепрыгнуть одни то перепрыгнет и оставшиеся 49. И, как вы видели, он уже может это сделать. Но я бы хотел, чтобы бот мог пройти и уровень с более разнообразным геймплеем. Так что я решил, что пришло время выбрать, что это будет за уровень.
48: Это определённо должно быть не авто, хотя если уровень будет проходить себя сам, формально это, я думаю, можно выбрать hard или, может даже Хардер. Хотя это должен быть демон.
49: То будет авто. Нет, потому что ты
50: Это определённо должно быть не авто. Хотя если уровень будет проходить себя сам, то формально это будет авто. Я думаю, можно выбрать hard или, может даже Хардер. Хотя нет, это должен быть демон, потому что ты
51: То если ты не проходишь демоны, как мне говорили, так что, чтобы доказать, что я чего-то стою, я должен выбрать демон, который я буду, то есть демон, который будет проходить себя сам.
52: Окей, да, я решил, что если какой-то уровень и будет проходить сам себя, то это должен быть демон. И сейчас его нужно выбрать. Основными критериями выбора были 1. Демон не должен быть слишком лёгким, так что эти 2 отлетают. Также не
53: Должен быть слишком сложным. Простите, сегодня без bloodbath. В нём должен быть разнообразный геймплей, и в нём не должно быть, что по какой-то причине баг опшен стрингер, который я не работает на этом, а менять геймплей в уровне я крайне не хочу, к счастью.
54: Дуалов, потому использую режиме игры.
55: Должен быть слишком сложным. Простите, сегодня без bloodbath. В нём должен быть разнообразный геймплей, и в нём не должно быть дуалов, потому что по какой-то причине баг опшен стрингер, который я использую, не работает на этом режиме игры, а менять геймплей в уровне я крайне не хочу, к счастью.
56: Я нашёл уровень, который идеально подходит под все критерии. И это декот очень известный, справедливо оценён на имеет оригинальный среди других в своё время и не имеет частей на. Так что целью для
57: Изи демона геймплей, сильно выделявшийся дуалах.
58: Я нашёл уровень, который идеально подходит под все критерии. И это декот очень известный, справедливо оценён на изи демона, имеет оригинальный геймплей, сильно выделявшийся среди других в своё время, и не имеет частей на дуалах. Так что целью для
59: Будет его прохождение. Я скопировал демон в редактор, и давайте посмотрим, насколько сейчас бот сможет в нём продвинуться.
60: И подписался было халтурой.
61: Он смог продвинуться всего на 3 прыжка, но, кажется, я сам на это, но в то же время я не хочу, чтобы это прохождение. Что ж, раз так, давай.
62: И он смог продвинуться всего на 3 прыжка, но, кажется, я сам на это подписался. Но в то же время я не хочу, чтобы это прохождение было халтурой. Что ж, раз так, давай.
63: Посмотрим, почему он не может продвинуться дальше сейчас бот действует по следующему алгоритму он проверяет на раз свою координату y координату следующего прыжка, которую, возможно, когда они оказываются.
64: Пока он жив, имеет равны, бот делает прыжок.
65: Посмотрим, почему он не может продвинуться дальше сейчас бот действует по следующему алгоритму пока он жив, он проверяет на раз свою координату y координату следующего прыжка, которую, возможно, имеет, когда они оказываются равны, бот делает прыжок.
66: И загружает из памяти новую координату. Если бот умирает, он сравнивает координаты этой и предыдущей смерти. Если он не смог зайти хоть чуть чуть дальше, то он уменьшает координату последнего прыжка на единицу и первые 2 прыжка все работает отлично. Я
67: Отметил моменты прыжков вот таким партиком, чтобы вы видели, где он прыгает. 3 прыжок тоже не приносит проблем. На 4 же начинается веселье. Он умирает и пытается сделать прыжок раньше. Но ничего не получается, так как он слишком поздно сделал 3 прыжок и
68: 4 прыжок. Теперь, тем не менее, он продолжает уменьшать его координату, пока она не становится меньше. Координаты 3 прыжка теперь начинает по очереди уменьшать их. И, с 1 стороны, это здорово, потому что мы как раз хотели бы сдвинуть 3 прыжок на пара.
69: Невозможен обе.
70: 4 прыжок теперь невозможен, тем не менее он продолжает уменьшать его координату, пока она не становится меньше. Координаты 3 прыжка теперь начинает по очереди уменьшать их обе. И, с 1 стороны, это здорово, потому что мы как раз хотели бы сдвинуть 3 прыжок на пара.
71: Но правда, это никак не помогает ему продвигаться вперёд, так как он сдвигает старые прыжки, но не делает новые, так что он никогда не сможет зайти дальше. Я решил добавить дополнительные шаги в алгоритм, чтобы это исправить. Во первых, я сделал так, чтобы координаты
72: Следующего прыжка не могла стать меньше координаты предыдущего теперь, если 2 прыжка близко друг к другу, координата 2 просто фиксируется и не изменяется, вместо этого делается новый прыжок на единицу раньше точки последней смерти в чем плюс такой стратегии?
73: Теперь.
74: Следующего прыжка не могла стать меньше координаты предыдущего. Теперь, если 2 прыжка близко друг к другу, координата 2 просто фиксируется и не изменяется, вместо этого делается новый прыжок на единицу раньше точки последней смерти, в чем плюс такой стратегии теперь?
75: Можем проходить моменты, которые раньше было пройти невозможно, как, например, этот, в чем минус, это не помогает на 4 прыжке декода, потому что здесь, чтобы надо не только делать новые прыжки, но и двигать старые. Так что я добавил в алгоритм, что если
76: Продвигаться.
77: Можем проходить моменты, которые раньше было пройти невозможно, как, например, этот, в чем минус это не помогает на 4 прыжке декода, потому что здесь, чтобы продвигаться, надо не только делать новые прыжки, но и двигать старые. Так что я добавил в алгоритм, что если
78: Приблизились к точке смерти, то мы их все удаляем, кроме 1, который мы сдвигаем влево, на единицу. Это чем-то похоже на счёт в двоичной системе счисления, где мы сначала увеличиваем младшие, не трогая старшие.
79: Разряды. А когда они все заполняются, то мы их
80: Приблизились к точке смерти, то мы их все удаляем, кроме 1, который мы сдвигаем влево, на единицу. Это чем-то похоже на счёт в двоичной системе счисления, где мы сначала увеличиваем младшие разряды, не трогая старшие. А когда они все заполняются, то мы их
81: Обнуляем и двигаем влево. Старший разряд. С такой стратегией босс мог впервые продвинуться дальше 4 прыжка. И как думаете, насколько? Поставьте видео на паузу и попытайтесь предположить.
82: Так, ну что вы, это он прошёл всю, 1, весь начальный куб. Вот посмотрите, он только что это, а что насчёт кораблика? Он прошёл его даже я этого не он сделал. Это всего за 150 попыток. Тут мне
83: Сделали так вот, часть сделал, ожидал.
84: Так, ну что вы это сделали? Так вот, он прошёл всю 1 часть, весь начальный куб. Вот посмотрите, он только что это сделал. А что насчёт кораблика? Он прошёл его даже я этого не ожидал. Он сделал это всего за 150 попыток. Тут мне
85: Наверное, стоит объяснить, а как он вообще может играть? На, ведь на нём нужно не только нажимать, но и удерживать кнопку нужное время. На самом деле, тут после нажатия кнопки бот ещё какое-то время удерживает.
86: Кораблике вовремя. Все просто её. И если он
87: Наверное, стоит объяснить, а как он вообще может играть на кораблике? Ведь на нём нужно не только нажимать вовремя, но и удерживать кнопку нужное время. На самом деле тут все просто после нажатия кнопки бот ещё какое-то время удерживает её. И если он
88: Делать следующий прыжок. Пока это время ещё не вышло, то 2 прыжка сольются воедино и получится такой же эффект, как от зажатия. Благодаря этому бот может проходить части кораблика и волны. Но не все так радужно, потому что чем дальше он продвигается в
89: Тем больше времени у него уходит на то, чтобы делать новые прогрессы, так как для этого ему приходится тратить время на то, чтобы по многу раз с нуля доходить до части, которую он проходит. И вот тут я построил график зависимости потраченного времени от поставленного рекорда и
90: Видите, к концу он начинает возрастать очень быстро. Я также провёл примерные расчёты времени, которые ему понадобятся для прохождения целого полторы минуты. И знаете, что получилось примерно 28 часов. Ему понадобится на прохождение этого
91: Уровня.
92: Видите, к концу он начинает возрастать очень быстро. Я также провёл примерные расчёты времени, которые ему понадобятся для прохождения целого уровня полторы минуты. И знаете, что получилось примерно 28 часов. Ему понадобится на прохождение этого
93: Уровня это слишком много, и с этим точно надо что-то делать. И вот моё решение. Нам нужны чекпоинты, точки, до которых бот смог дойти в предыдущие попытки, из которых он будет спавниться на следующих попытках. Лишние
94: Раз не проходя начало уровня и экономя уйму времени, игра уже имеет чекпоинты, которые можно ставить в practice mode или в платформере, но проблема в том, что у нас нет никакого контроля над их установкой и удалением, 1 неправильно поставленный чекпоинт может
95: Поставить Крест на всем прохождении, так как бот не сможет его никак ни убрать, ни передвинуть, оставалось только 1 с нуля реализовать мою собственную систему чекпоинтов их выставление, сохранение и респавн игрока, причём сделать это в normal.
96: Игры, где чекпоинты, по идее, не предполагаются. И знаете, это намного проще, чем может показаться. Мы просто должны сохранить определённые параметры при выставлении чекпоинта, такие как координаты, скорость и режим игры.
97: У нас уже есть память для этого, а затем просто в начале следующей попытки переместить куб по сохранённым координатам и восстановить все параметры. Заспавнит нужные порталы и скорости. Начнём с координат. У меня уже была система определения координаты.
98: X игрека. Все скорости игрока, так что.
99: И я просто сделал аналогичную для определение других параметров я сделал с помощью ивент триггера это режим игры, гравитация, размер, и это по какой-то причине в event триггере нету события определения.
100: X. И я просто сделал аналогичную для игрека определение других параметров я сделал с помощью ивент триггера. Это режим игры, гравитация, размер, и это все по какой-то причине в event триггере нету события определения скорости игрока, так что.
101: Это пришлось сделать с помощью фоллоу триггера и collision блоков. Затем я сделал систему сохранения чекпоинтов. По сути, просто записываю все эти параметры в память, упаковывая их всего в 2 ячейки для экономии места. Как итог вот так выглядит сохранение чекпоинта.
102: Как видите, в память сразу записываются координаты игрек, икс режим, скорость, гравитация и размер. И оно даже работает правильно. Хотя, поверьте, далеко не с 1 раза. Следующий этап загрузка чекпоинта.
103: Для начала считываю сохранённые параметры и восстанавливаю их с помощью этих тогл триггеров, которые активируют все нужные порталы и скорости. Перемещение на нужную координату было немного сложным, так как, несмотря на то, что у вас есть её точное значение, вы не можете.
104: Игрока.
105: Для начала считываю сохранённые параметры игрока и восстанавливаю их с помощью этих тогл триггеров, которые активируют все нужные порталы и скорости. Перемещение на нужную координату было немного сложным, так как, несмотря на то, что у вас есть её точное значение, вы не можете
106: Записать его из счётчиков напрямую в муф триггер. Но я использовал тот факт, что любое число в диапазоне, скажем, от нуля до некоторого н можно получить, используя только степени двойки с коэффициентами 1 или 0, начиная с 0 степени и заканчивая вот такой
107: Степенью вы могли сталкиваться с этим фактом, когда учили переводы систем счисления на информатике. Я же применил его в моём механизме. Респавна чекпоинтов гд. Здесь степени двойки записываются в расстояние перемещений в муф триггеры, каждый из которых может
108: Степенью вы могли сталкиваться с этим фактом, когда учили переводы систем счисления на информатике. Я же применил его в моём механизме. Респавна чекпоинтов гд. Здесь степени двойки записываются в расстояние перемещений в муф триггеры, каждый из которых может активироваться
109: Или нет, в зависимости от и таким образом все вместе они могут переместить точку респавна на любую. Остаётся только телепортировать куб на эту точку с помощью телепорт триггера и чекпоинты.
110: Исходного числа координату готовы?
111: Или нет, в зависимости от исходного числа. И таким образом все вместе они могут переместить точку респавна на любую координату. Остаётся только телепортировать куб на эту точку с помощью телепорт триггера и чекпоинты готовы, когда у нас
112: У нас уже есть готовая система чекпоинтов. Пора задуматься о стратегии их выставления, так как это должно делаться автоматически. И тут есть Ровно 2 важных критерия. Во первых, чекпоинты не должны ставиться слишком часто, так что я установил минимальное расстояние между чекпоинтами.
113: Во вторых, мои чекпоинты не сохраняют вертикальную скорость. Например, если при установке чекпоинта игрок был в состоянии падения, то есть имел вертикальную скорость, то при респавне эта скорость будет равной нулю, что нехорошо. Так что я разрешил установку чекпоинтов только
114: Когда эта скорость равна нулю, что определяется по касанию вот этих 2 коллижн блоков, которые закреплены за игроком фоллоу триггерами и следуют за ним с разной задержкой. Как видите, эти блоки касаются, только когда иконка никуда не летит и не падает, и тогда спавнится этот улыбающийся.
115: Смайлик, который означает, что это место, подходящее для чекпоинта. Далее я сделал непосредственно установку чекпоинтов, которые обозначил такими треугольниками и совместил их с системой, отвечающей за прохождение уровня. Я проверил все на тестовом уровне и
116: Кажется, все работает, как можем видеть, здесь чекпоинт сохраняется, и следующая попытка начинается с этого места. После нескольких повторений бот довольно быстро доходит до конца.
117: Но есть проблема. Дело в том, что задача бота не только дойти до конца уровня, но также и пройти его целиком в 1 run, как это делают любые слееры. Так что изначально я думал, что он сначала будет делать прогрессы между чекпоинтами, а потом соеди.
118: В 1 общее прохождение проблема в том, что чекпоинты не всегда выставляются идеально, иногда возможно смещение относительно реальной позиции, из за чего при прогрессе с чекпоинтами и от нуля бот будет начинать часть немного разных.
119: Иконки позиций и поэтому
120: В 1 общее прохождение. Проблема в том, что чекпоинты не всегда выставляются идеально. Иногда возможно смещение относительно реальной позиции иконки, из за чего при прогрессе с чекпоинтами и от нуля бот будет начинать часть немного разных позиций. И поэтому
121: Записанные ранее клики могут оказаться неактуальными. Например, здесь чекпоинт сместился почти на четверть блока. Это слишком много для меня, и мне пришлось с этим что-то делать, поэтому сперва я увеличил точность чекпоинтов.
122: Добавив десятые доли к координате игрек и не обращайте внимания, что иногда они отрицательные. Главное, что после этого максимальная ошибка чекпоинта должна была стать не больше 1 20 блока, но даже такой точности было недостаточно для прохождения уровня вообще.
123: Чтобы показать, насколько большая точность требуется, я построил вот такой уровень это straight fly на кораблике, и я записал для него макрос прохождения как видите, уровень проходится, и благодаря макросу проходится каждый раз одинаково, а теперь я подвину.
124: Этот block буквально на пару пикселей, и вот кораблик уже умирает, причём он не просто смещается на те же несколько пикселей если включить ноклип, то можно увидеть, что он буквально наполовину уходит в хитбоксы Шипов. Таким образом становится понятно.
125: Понятно, что малейшее смещение чекпоинта может сломать все прохождение.
126: И тут, мне кажется, был только 1 верный вариант решения при каждой установке нового чекпоинта проверять, что до него возможно дойти, играя с нуля если чекпоинт был поставлен Ровно, то это займёт Ровно 1 попытку в противном случае.
127: Это может занять немного больше, так как бот будет вынужден играть с нуля и исправлять неточные клики, пока не дойдёт до точки чекпоинта благодаря этой стратегии получится, что уровень как бы проходит себя постепенно и с каждым новым чекпоинтом обновляет рекорд.
128: С этой стратегии я начал прохождение декода, и прохождение было отнюдь не простым в принципе, как и все, что я делал до этого по видео, может казаться, что идеи того, как все сделать и как заставить это работать, имеются у меня изначально и реализуются без серьё.
129: Проблем, но нет, за кадром остаются десятки часов, проб и ошибок, какие-то несработавшие идеи, ошибки в триггерах, исправления багов, различные небольшие оптимизации и, конечно, прохождение. Во время него бот часто застревал.
130: И не мог продвигаться дальше и кто знает, почему ошибка в алгоритме, или триггерах, или баг в гд все это мне приходилось из раза в раз выяснять и исправлять, сделать так, чтобы бот по сути, просто куча триггеров, которые умеют только.
131: Прыгать и умирать смогла пройти демон длиной полторы минуты было почти невозможно, на десятки часов в редакторе, ещё больше на тесты в normal mode, и я сделал это. В конце Концов бот смог-таки пройти демон сам.
132: На 100% от начала и до конца такого никогда не было. До. И скорее всего никто не повторит. Это после уровень проходит сам себя геймплей уровня не изменён. И я гарантирую вам, что после нажатия
133: На старт я зажму кнопку тяжёлой штукой и не притронусь к ней до окончания прохождения. Все будет делать только бот.
134: Да, но сначала бот должен научиться проходить этот уровень. Это важная часть прохождения, но она занимает много времени, так что я дам лишь краткий комментарий по тому, как проходило обучение в целом. Если
135: Если вам это не особо интересно, то вот тайм код финальной попытки можете сразу переключиться на него. Ну а я продолжу сразу поясню, что это далеко не 1, а примерно уже 35 попытка бота пройти этот уровень. Все прошлые попытки заканчивались тем,
136: Что бот в каком-то месте на уровне просто застревал и не мог пройти дальше. А я отправлялся разбираться, что же произошло. 1 из попыток закончилась тем, что игра в какой-то момент решила крашнуться на пустом месте, видимо, из за какого-то
137: Мода, так что я отключил.
138: Что бот в каком-то месте на уровне просто застревал и не мог пройти дальше. А я отправлялся разбираться, что же произошло. 1 из попыток закончилась тем, что игра в какой-то момент решила крашнуться на пустом месте, видимо, из за какого-то мода, так что я отключил.
139: Моды, кроме мегахакер к. Я использую для отображения попыток и наибольшего рекорда в правом верхнем углу можете иногда поглядывать на эти строчки. В левом верхнем углу тоже есть несколько строчек сделаны с помощью ui триггера, если что, это уже параметр.
140: Относящиеся к боту, когда он застревал, я использовал их, чтобы понять, что не так. Тут координаты, икс, игрек, координаты следующего прыжка. И если вам интересно остальное, то можете прочитать. Ну и конечно же, по партиклам в виде звёздочек вы можете
141: Определять, где бот делает прыжки, а по треугольным партиклам, где он ставит чекпоинты. Ну а теперь давайте вернёмся к уровню.
142: Уровень начинается с части на Кубе. Эта часть сама по себе довольно простая, и для бота она также не представляла особой сложности из интересного только что он смог скипнуть первые 2 синие сферы, сделав несложный тайминг. Далее идёт уже намного более.
143: Сложный парт на кораблике с очень узкими пролётами, которые требуют очень точных кликов на этой части у бота были проблемы, так как 1 же чекпоинт оказался неточным, и пришлось немного поиграть с нуля, чтобы исправить клики. Остальные чекпоинты на этой части.
144: Казались или полностью точными, или бот умирал всего за пару кликов до нового чекпоинта, и, соответственно, ему требовалось не так и много Прогрессов с нуля, в том числе бот немного задержался на переходе на тарелку, но в итоге кораблик все-таки был пройдён далее
145: Идёт тарелка часть прямолинейная и без кантерные моментов, так что у бота она не вызвала особых сложностей. Короткий переходный куб, и начинается 1 часть на волне. Волна это относительно простой режим игры для бота, так как она
146: Только строго вверх или строго вниз, поэтому на волне боту очень легко выставлять чекпоинты можно поставить буквально где угодно, а ещё они получаются очень точными касательно парта в декоде он имеет очень широкие проходы, и поэтому для бота он вдвойне простой.
147: Вот тут, несмотря на целых 3 стрелочки, что указывают лететь вверх, бот решает пройти этот момент через низ. Вполне логично, ведь бот, по сути, слеп и продвигается на ощупь, и это просто 1 дорога, которую он смог найти. Потом ещё немного Широких пролётов. Ничего.
148: Сложного. И бот уже на шаре. Эта часть вызывала проблемы на некоторых предыдущих попытках. Там вообще много чего было. Сейчас же бот, как говорится, отработал штатно, на некоторые прыжки бот потратил много попыток, чтобы пройти, например, тут бот
149: Нажал синюю сферу слишком поздно и не попал на платформу внизу. Ему нужно было сдвинуть этот прыжок. И к тому же ещё предыдущий. Он это умеет, но на это тратится много попыток. В итоге он смог зацепить самый край платформы и продвинуться дальше, дальше. Наш
150: Все было супер. Просто перед тем, как перейти далее небольшой комментарий по части шара. Дело в том, что для чекпоинтов мне пришлось использовать порталы в режиме фримот. Этот режим убирает граунды, и из за этого эта часть становилась невозможной вместе с чекпоинтами, так как
151: Тут и ещё снизу шар катится по земле, так что в этих 2 местах я поставил вместо неё невидимые блоки. Похожее я ещё сделал ранее на части волны, чтобы она просто не вылетала за пределы уровня. Не считаю это изменением геймплея, так как я просто.
152: Заменил граунд на блоки, на геймплей. Это никак не повлияло теперь к уровню. Часть на Кубе. Скорее всего, она будет сниться в кошмарах не только многим игрокам, но и моему боту, потому что на её прохождение бот потратил больше всего времени и попыток. И вот
153: Причина начинается часть, и на 1 же прыжке бот умирает. Но знаете почему? А потому что он слишком поздно кликнул 2 прыжка назад вот здесь, за 16 блоков до на моменте, который уже давно прошёл. Конечно, бот умеет отодвигать прошлые
154: Прыжки, но никогда же они находятся буквально на предыдущей части. Столь большое расстояние осложняется тем, что, во первых, нужно сдвинуть целых, а во вторых, забегая вперёд, это надо будет сделать 2 раза. Конечно, это займёт у бота много времён.
155: Уровня 2 прыжка.
156: Прыжки, но никогда же они находятся буквально на предыдущей части уровня. Столь большое расстояние осложняется тем, что, во первых, нужно сдвинуть целых 2 прыжка, а во вторых, забегая вперёд, это надо будет сделать 2 раза. Конечно, это займёт у бота много времён.
157: Если точнее, 30 минут и 900 попыток. И поверьте, это ещё быстро. На тестовых попытках это занимало до нескольких часов. К слову, ещё я посчитал, сколько бы на эту часть ушло времени. Если бы я не сделал систему чекпоинтов. Давай.
158: Вместе 900 попыток на 3 за 3 секунды от начала уровня примерно делить на 3600 примерно 8 с половиной часов ушло бы на эту часть, если бы я не сделал систему чекпоинтов. Хорошо, что я её сделал. И
159: Bot прошёл этот кусок относительно быстро. И знаете, что ждало бота в награду за это целая гора невыносимых кантерные прыжков с непонятными паттернами на оставшиеся части. Конкретно я говорю о все тех же прыжках, которые невозможны, если раньше ты прыгнул слишком поздно, как, например, вот это.
160: И просто о pixel perfect прыжках, которые очень рискованные для бота, особенно в сочетании с чекпоинтами к счастью, эта часть тоже позади далее идёт вот это произведение искусства на тарелке худшая часть уровня, но у бота она не вызвала.
161: Особых проблем не очень сложная переходная часть с какими-то странными прыжками почти все они дались боту быстро, хотя вот тут он все-таки немного задержался далее в уровне вот эти 2 прыжка с которыми явно что-то не так. И наконец то мы дошли до легендар
162: Части. На волне она далась боту гораздо сложнее, чем 1 волна. Дело в том, что бот может делать клики только в определённых местах и отпускать только через определённое время после клика. Поэтому на этой части с очень узкими извилистыми проходами боту было
163: Очень сложно. И пришлось немного поиграть с нуля из за неточного чекпоинта. В конце была ещё небольшая секция волны, и бот нашёл просто гениальный способ, чтобы её пройти. Не можем винить его за это. Ну и часть на
164: Кораблике. Я ожидал, что
165: Очень сложно. И пришлось немного поиграть с нуля из за неточного чекпоинта. В конце была ещё небольшая секция волны, и бот нашёл просто гениальный способ, чтобы её пройти. Не можем винить его за это. Ну и часть на кораблике. Я ожидал, что.
166: Это будет самая сложная часть узкие проходы, медленная скорость, ещё и перевёрнутый кораблик. Но неожиданно для меня босс справился с ней довольно неплохо. Чекпоинты были точными, и только в конце, на этом узком пролёте, они все-таки дали сбой, и пришлось немного поиграть.
167: Сначала, но после того, как я увидел, как бот с нуля пролетает это узкое место, я понял, что уровень пройдён, оставалась лишь супер простая часть на Кубе. Ничто не могло его остановить. Сейчас вы увидите финальные попытки обучения и прохо.
168: А также мою реакцию на него держите в голове, что все прохождение было сделано ботом самостоятельно и без моего вмешательства.
169: Ну а пока бот заканчивает обучение, у вас есть время, чтобы поставить лайк под это видео. Можете также подписаться на канал, так как подобного, скорее всего, вы больше нигде не увидите. Уровень проходит сам себя, прохождение
170: И уже 1 все следующая попытка должна быть финальной, и, скорее всего, она и будет, но нужно сделать тот самый небольшой шаг с нуля процентов и до 100.
171: Финальная часть.
172: Да.
173: Да гг.
174: О боже, это того стоило почти 3000 попыток, кстати, и почти 3 часа времени.
175: Что ж, это было прохождение огромными усилиями, и спустя много часов у бота все-таки получилось это сделать. Я искренне рад за него, и это было видно по моей реакции, но видео ещё не закончено, так как остался последний вопрос.
176: Вопрос, на который нужно ответить, сколько у меня было попыток на декоде, когда я проходил его 4 года назад и смог ли я построить бота, который играет лучше меня?
177: 1900 попыток на самом деле примерно сопоставимое количество. А значит я смог построить уровень, который смог пройти себя сам почти за то же количество попыток, что когда-то я потратил на прохождение этого уровня. Ок.
178: K. Было весело.
179: Вот так я и построил уровень, который может научиться проходить самого себя. Кстати, этот уровень будет выложен на моём аккаунте разум. Если вы захотите повторить это прохождение, то можете просто зайти на этот уровень и зажать кнопку на пару часов. Но если не хотите ждать так долго.
180: То я добавил лдм, при включении которого в память будут записаны значения координат прыжков прямо с победной попытки, которую я переписал вот из этой строки, и вы сможете сразу увидеть прохождение уровня, и ещё в описании к этому ролику я оставлю ссыл.
181: Ссылку на полную двухчасовую запись обучения и прохождения, если она вдруг кому-то понадобится и думаю на сегодня это все. Что ж, это был очень длинный ролик. Спасибо всем, кто досмотрел его до конца.
182: Ставьте лайки, подписывайтесь на канал, так как это все помогает его развитию. Всем ещё раз спасибо за просмотр. С вами был разум и всем пока.