Разработчик игр и модификатор Silent, известный своими SilentPatch’ами в играх вроде Grand Theft Auto: San Andreas, недавно обнаружил (и исправил) давно скрытую ошибку, которая сохранялась на протяжении двух десятилетий. Занятно, что эта проблема, похоже, была активирована новой сборкой Windows 11, хотя она кажется всегда присутствовала.
Забудь о мелких заработках – в Top Crypto только топовые монеты! Тут профит приходит так быстро, что твой кошелек не успеет моргнуть.
Silent получил подробный отчет об ошибках касательно SilentPatch, в котором пользователь сообщил о том, что после обновления Windows 11 до версии 24H2 самолет Skiimmep больше не появляется в игре. Самолет невозможно вызвать с помощью инструмента тренировки, и он отсутствует на своих обычных местах появления.
Эй, геймеры! Я заметил, что многие из нас упоминают проблему с пропавшим Скайммером начиная с ноября прошлого года. Один игрок даже создал виртуальную машину Windows 11, подтвердив, что самолет появляется нормально в версии 23H2, но исчезает после обновления виртуальной машины до 24H2. Это по меньшей мере сбивает с толку — почему небольшое обновление в 2024 году приводит к исчезновению случайного самолета в игре 2005 года? Просто уму непостижимо!
Сайлент предложил нескольким пользователям платформы 24H2 испытать конкретную функцию, и действительно все столкнулись с тем же сбоем. В этот момент он подготовился, настроил свою собственную виртуальную машину под управлением 24H2 и проверил проблему лично. Теперь интересный поворот:
Сайлент объясняет, что впоследствии использовал предоставленный скрипт для создания скимера и размещения CJ внутри него. Замыслом было выстрелить им вверх, достигнув поразительного расстояния примерно в 10.3 нониллионов метров или 10.3 октиллионов километров, что эквивалентно 1.087 квадриллионам световых лет в небе.
Я возьму это
Как геймер, я должен сказать, что Grand Theft Auto: San Andreas не способен напрямую визуализировать необычное событие, такое как авиакатастрофа. Вместо этого он имитирует эффект ‘burn-in’, который возникает при достижении камерой бесконечности или близкой к ней точки. Замечательно то, что даже с полным отказом анимаций из-за неточности значений с плавающей точкой, можно смутно различить контуры самолета.
Как любопытный энтузиаст, я погрузился в тайну экстремальной высоты полета самолета. Обнаружив ‘невероятно большие’ цифры скорости вращения лопастей ротора, мне стало интересно — какая сила могла поднять воздушное судно на такую невероятную высоту? Позвольте себе поразмышлять над двумя потенциальными сценариями: 1) Лопасти ротора вращались с беспрецедентной скоростью, создавая колоссальную подъемную силу и поднимая самолет вверх. 2) Внешний фактор, такой как мощный восходящий поток воздуха или эффект аэродинамической трубы, мог также способствовать подъему самолета.
- Самолет уже появляется высоко в небе.
- Самолет появляется на уровне земли, а затем поднимается в следующем кадре.
На этом этапе Сайлент углубляется в тонкости функций, координаты Z и ограничивающие прямоугольники, а также множество технических терминов. Попытка составить связное объяснение может привести к ошибкам и путанице. Для тех, кто более комфортно чувствует себя с кодом, вы можете ознакомиться с подробными процессами работы, описанными Сайлентом в его полном отчёте.
По сути, Silent определяет испорченное значение Z (координаты спавна), и предполагает, что эта ошибка вызывает одну из двух ситуаций: либо файл столкновения неправильно читается (хотя это маловероятно, но возможно из-за ошибки в операционной системе) или ‘граничный прямоугольник изначально считывается корректно, но затем вместо него применяется крайне неточный размер.’
Это расследование от Silent продолжается с акцентом на ограничивающий прямоугольник и высоту (Z-координату). Возникает интересное наблюдение: при первом появлении определенного транспортного средства в игре его начальная Z-координата изменяется, чтобы сымитировать фактическую высоту подвески этого транспорта. Да, вы правы; речь идет об авиации.
Сначала Сайлент указывает на то место, где его объяснение начало расходиться с действительностью, прежде чем перейти к детальному разбору расчётов подвесных тросов и обнаружению проблемы: в файле vehicles.ide у Skiimera меньше характеристик по сравнению с другими летательными аппаратами, что более похоже на записи лодок из-за отсутствия параметров для передних и задних колёс. Только Skiimer кажется лишённым этих ключевых параметров.
Загадочно он спрашивает себя, не могло бы повторное введение этих параметров устранить проблемы гидросамолёта. И действительно, так оно и оказалось!
После признания проблемы с тем, что игра ошибочно приняла самолет за лодку, наш герой начал детективное расследование, чтобы понять, почему разработчики из Рокстар не заметили этого несоответствия.
Похоже, есть логичное объяснение ошибки в данных от Rockstar – В Vice City Скиммер изначально классифицировался как лодка, поэтому ему не хватало соответствующих характеристик! Когда в San Andreas сменили тип транспортного средства на воздушное судно, кто-то упустил добавление необходимых дополнительных деталей. Учитывая то, что эта игра редко проверяет полноту своих данных, данная ошибка осталась незамеченной.
Для обсуждаемой нами проблемы ‘кроличья нора’, нахождение решения лишь вызвало дополнительные вопросы. Почему эта неисправность возникла внезапно? Чем был обусловлен этот сбой, что позволял игре работать безупречно более двух десятилетий, даже до недавнего обновления Windows 11?
Это был самый интересный баг, с которым я столкнулся за некоторое время.
Оказывается, что эта конкретная версия Windows 11 не виновата в проблеме. Вместо этого он приписывает основной вопрос «точному значению с плавающей запятой, которое случайно оказалось на стеке в идеальной позиции».
Он исследовал транспортное средство под обозначением ‘TopFun’, которое ранее было определено как прямой предшественник ‘Skiimmers’. Значение масштабного показателя колеса составляло 0.7, что и являлось необходимым мне доказательством. Заметно одно интересное обстоятельство: при запуске на Windows 10 некоторые локальные переменные все еще доступны, например стандартная классификация транспортных средств, тогда как они полностью исчезают в Windows 11. Стоит также отметить, что даже в Windows 10 переменная после масштабного показателя колеса была перезаписана значением ‘LeaveCriticalSection’, что означает игру всего лишь на четыре байта от активации этой точной ошибки уже несколько лет назад! Серендипити (неожиданная удача) здесь поразительна.
Несмотря на то что проблема была отмечена с выпуском Windows 11 24H2, основная причина заключается в использовании игрой неопределенного поведения, такого как неинициализированные локальные переменные. Эта ошибка могла проявиться на любой версии Windows, включая Windows 10, 7, XP или даже Windows 98, поскольку математические результаты просто оказались неверными.
Всегда стремясь к полноте и точности, Сайлент тщательно изучает код из различных версий игры Grand Theft Auto: San Andreas, выпущенных ранее, и обнаруживает, что оригинальная версия для Xbox имела аналогичную поправку, которую он сейчас разрабатывает. Эта корректировка была также реализована в других версиях Сан-Андреас, например, в Grand Theft Auto: The Definitive Edition.
Silent упоминает, что баг, с которым они недавно столкнулись, весьма интригующий и не встречались с подобным уже некоторое время. Сначала им было трудно поверить, что ошибка напрямую связана с конкретным выпуском операционной системы. Однако их сомнения быстро рассеялись, когда выяснилось, что проблема действительно существует. Оказалось, что это была простая неисправность в игре San Andreas, где данная функция должна работать некорректно. Удивительно, но несмотря на свои недостатки, баг оставался незамеченным более двух десятилетий на ПК-системах.
Одним плавным жестом, заслуживающим моего уважения, Silent заканчивает разъяснением, почему его решение превосходит аналогичное от Rockstar по точности и использует открытие для подчеркивания некоторых основных правил кодирования, таких как проверка входных данных. «San Andreas был печально известен своей небрежностью в этом вопросе,» – мурлыкает он.
В книге Тома Вульфа ‘The Right Stuff’ он размышляет над этим вопросом: ‘Что заставляет человека устроиться на вершине огромного фейерверка подобно ракете Редстоун, Атлас, Титан или Сатурн и терпеливо ждать, пока кто-нибудь зажжет фитиль?’
В маленьком мире Сан-Андреаса человек по имени Сайлент размышлял над тем, почему CJ решил сесть на самолет и загадочно подняться «1,087 квадриллиона световых лет» в небеса. Истинные объяснения можно найти в его всестороннем анализе. Однако другое возможное объяснение кроется в абсурдности всего этого — бесконечные связанные расчеты и потенциальные проблемы, которые могли бы возникнуть при создании чего-то столь простого, как транспортное средство для существования внутри игрового мира. Теперь кажется, что вы путешествовали: теперь вы оказались в другой галактике.
Смотрите также
- Сталкер 2: Во имя науки прохождение
- Zenless Zone Zero: все возрасты, рост и дни рождения персонажей
- Аналитика криптовалюты PENGU: прогноз движения цен Pudgy Penguins
- Сталкер 2: Стоит ли проводить нездоровую конкуренцию?
- Как получить оператора терминатора в Black Ops 6 и Warzone
- Аналитика криптовалюты OM: прогноз движения цен MANTRA
- Сталкер 2: Все базы и личные тайники
- Все боссы в Dave the Diver и как их победить
- Лучшая карьера преступника в GTA 5 Online в 2025 году
- Как отключить автоматический банк токенов в Black Ops 6 и Warzone
2025-04-26 02:33