Str4y & SpeedySpawn
Привет, Стрэй, я нашел баг в спидранне Braid, который может сэкономить целую секунду, но тайминг очень уж жесткий. Нужна пошаговая инструкция, как ни крути, чтобы проверить – сможешь разложить это на что-то вроде головоломки для проверки?
Конечно, вот инструкция. 1. Зафиксируй ввод контроллера в буфер. 2. Начни первый прыжок на нулевом кадре второго круга. 3. Подожди ровно 120 кадров, потом нажми кнопку, которая обычно замедляет тебя. 4. Следи за таймером — если он отсчитает секунду, ты попал в сбой. 5. Повтори с погрешностью в один кадр, чтобы убедиться. 6. Если не получилось, откатись на один кадр назад и попробуй ещё раз. Секрет кроется в этом крошечном промежутке. Удачи.
Отлично! Очень узкое время. Сто двадцать кадров – это всего две секунды при 60 кадров в секунду, так что любая ошибка будет болезненной. Сделай макрос, который записывает каждый кадр, или используй наложение с таймером кадров. Если ошибка повторяется, таймер должен обнулиться ровно на 1000 миллисекунд; любая другая погрешность означает, что ты сдвинулся на один кадр. Когда откатываешься на один кадр назад, следи за рывком – если он всё равно тикает, это твоё идеальное место. Удачи, чемпион!
Ну, тебе понадобится логгер кадров, который пишет в текстовый файл, где каждая строка – номер кадра, и отдельный лог, записывающий тики таймера. Потом нужно будет этот файл проанализировать: ищи строку, где таймер меняется ровно на 1000 миллисекунд между двумя кадрами, которые находятся друг от друга на 120 кадров. Если такую строку найдёшь – вот она, место. Если нет, то, возможно, сбой вероятностный, или ты читаешь не тот таймер. Главное – вычлени кадр, где внутренний счётчик игры отстаёт ровно на один цикл. Как только найдёшь, повтори, чтобы убедиться. Удачи.
Понял. Открой текстовый редактор, вывали туда фреймы, и запусти короткий Python-скрипт, чтобы выявить пропуски из 120 кадров с интервалом в 1000 миллисекунд. Если найдется – это оно. Если какая-то вероятностная ошибка – просто увеличь количество тестов до тысяч. В любом случае, как только найдёшь, обгони всех остальных по времени. Давай разбираться!
Звучит как задачка на логику, завернутая в код. 1. Сделай лог в простом CSV: кадр, таймер. 2. На Python перебирай строки, вычитай текущий кадр из предыдущего, проверяй, равна ли разница 120. 3. Когда это условие соблюдено, проверь, равна ли разница таймеров 1000. 4. Отметь номер кадра. Если ничего не найдешь, попробуй увеличивать количество попыток, пока не получишь результат, а потом перепроверь. Держи буфер в тишине, шум убивает точность. Удачи.
Отличный план, только добавь столбец с временными метками, чтобы можно было перепроверить синхронизацию. Как отметишь кадр, запусти тест 100 и больше раз, используя точно такой же буфер, и посмотри, воспроизводится ли сбой каждый раз. Если нет, подкорректируй смещение к тесту с одним кадром, о котором ты говорил. Скоростные забеги не ждут новичков, так что продолжай, пока секунды не полетят. Удачи в охоте на баги!