что такое патчи для игр
Патч (программный)
Запла́тка, или па́тч (англ. patch /pætʃ/ — заплатка) — автоматизированное отдельно поставляемое программное средство, используемое для устранения проблем в программном обеспечении или изменения его функционала, а также сам процесс установки патча («пропатчивание»). Исправление может применяться к уже установленной программе, либо к её исходным кодам. Сюда входит исправление ошибок, изменение внешнего вида, улучшение эргономичности или производительности программ, а также любые другие изменения, которые разработчик пожелал сделать.
Размер патчей может варьироваться от нескольких килобайт до сотен мегабайт. В частности, очень большими патчи могут быть при изменении или замене непрограммных данных, таких как файлы с графикой и звуком. Такие ситуации часто возникают при обновлении компьютерных игр. Тем не менее, большой размер может быть вызван и многочисленностью вносимых изменений. При этом слова «патч», «заплатка» обычно используются для обозначения небольших исправлений, большие же патчи, серьёзно меняющие или обновляющие программу, часто называются «service pack» или «software updates».
По сравнению с первоначальной установкой программы применение патчей, как правило, занимает меньше времени, так как установливаются не все файлы программы, а только некоторая их часть (за исключением случаев глобального обновления программы или если обновление происходит сразу через несколько версий). Патчи, загружаемые из интернета, могут устанавливаться несколько дольше, поскольку помимо установки предварительно требуют время для загрузки на компьютер пользователя.
Если было выпущено несколько патчей, то разработчик может (обычно после наиболее полных изменений) сделать кумулятивный патч (лат. cumulatio – «увеличение, скопление»). Такой патч включает в себя изменения, находящиеся во всех предыдущих патчах, и вносит их в программу во время своей установки вместе с новыми. Это позволяет сэкономить время на поиск, загрузку и установку всех прежних версий патча.
Бывает, что сами патчи становятся причиной новых ошибок в работе. Поэтому опытные пользователи предпочитают выждать некоторое время, пока не появятся первые отзывы о результатах использования новой версии пропатченного ПО, и уже потом решают, стоит ли устанавливать данный патч. Особенно критичен данный момент для системных администраторов и при установке больших обновлений операционной системы.
Содержание
История
Позже для распространения патчей стали использоваться магнитные ленты. Когда же были изобретены дискеты, патчи стали отправляться на дискетах в конвертах по почте. Сегодня, в эру повсеместного интернета, конечные пользователи скачивают патчи с сайтов разработчиков.
Виды патчей
Разработчики программного обеспечения публикуют патчи в различной форме.
Применение
Коротко выполняемые патчами задачи можно описать следующими действиями:
Операционные системы
В случае обновления операционных систем и серверного программного обеспечения патчи играют важную роль в поддержании безопасности и устранении дыр в защите. Чтобы облегчить установку таких обновлений, операционные системы часто поддерживают автоматические или полуавтоматические механизмы обновления. При этом осторожные пользователи (в частности, системные администраторы) обычно отключают автоустановку патчей, пока не убедятся в стабильной работе исправленных версий на чужих примерах. В случае больших или очень важных патчей разработчики часто сначала сами проводят предварительное тестирование (бета-тестирование).
Программное обеспечение
В разработке программного обеспечения патчи иногда требуются для устранения проблем с часто используемыми или важными библиотеками и частями исходного кода. Такое обычно происходит в широкомасштабных проектах, и значительно реже — в малых.
В open source-проектах патчи, исправляющие частные проблемы или добавляющие некоторую функциональность, такую как поддержка других языков, обычно отправляются авторам или публикуются в сети. Например, на ранних стадиях разработки ядра операционной системы — Линус Торвальдс, его автор, получал тысячи писем с патчами к его версии от множества программистов.
Сервер веб-мастерами для добавления функциональности к NCSA HTTPd. По легенде, отсюда и возникло название — означающее, что это есть по сути коллекция патчей: «a patchy server».
Все изменения кода Firefox и других продуктов Mozilla Foundation существуют в виде патчей, которые учитываются с помощью «багов» в системе
Компьютерные игры
В отличие от обычных приложений, в которых исправляются обнаруженные ошибки и недочеты и вводятся новые функции, для компьютерных игр патчи играют особую роль. В них они могут быть предназначены для изменения правил или алгоритмов игры. Необходимость в выпуске таких патчей возникает порой при обнаружении возможности жульничества игроков.
Особенно важны такого рода патчи в многопользовательских играх, где превосходство за счет недоработок игры одного игрока над другими имеет более серьезные последствия, чем при одиночной игре против компьютерных соперников. Чтобы сделать невозможным дальнейшее распространение найденной возможности читерства, исправленной с выходом патча, а также избежать конфликта версий, многопользовательские игры часто не допускают к игре игрока, использующего версию игры, отличную от официальной.
Другим примером является защита от копирования. Патч может параллельно внести изменения в систему защиты игры, что может выражаться, например, в невозможности устанавливать последующие патчи и обновления, если установлена «пиратская» версия игры.
Патч встроенного ПО
Во многих устройствах программное обеспечение находится в памяти самого устройства в виде т.н. прошивки, которая включает в себя сразу и операционную систему, управляющую работой устройства, и собственно набор программ, обеспечивающих выполнение тех или иных его функций. Поэтому если разработчиком предусмотрена возможность замены его прошивки (перепрошивка), то применение патча на программное обеспечение устройства чаще всего представляет собой полную замену целиком всей прошивки на более новую версию. Обычно такой патч состоит из файла, содержащего обновленный программный код в двоичном виде, и специальной программы, записывающей его в память устройства вместо прежней версии. Пример такого вида патчей — перепрошивка БИОСа материнской платы компьютера или современного мобильного телефона, подключенного к компьютеру.
Поскольку по сути перезаписывается не какая-то часть программ или функций, а вся операционная система устройства, любая неожиданная ошибка или вмешательство в процесс перепрошивки (например, выключение питания) могут помешать корректно записать ее до конца, что в свою очередь чаще всего приводит к полной неработоспособности устройства.
Разработка патчей
Автоматизация установки
Зачастую современные программы обновлений могут управлять патчами. Автоматизация всего процесса упрощает задачу конечного пользователя — ему достаточно запустить программу, а та уже решит, нужно ли ставить патчи, и в каком порядке. Бывает и так, что программа скачивает обновления из интернета без участия пользователя. Такой способ часто применяется в поддержке серверного программного обеспечения и операционных систем. В ситуации, когда администратору приходится следить за несколькими компьютерами такой подход помогает поддерживать надёжность системы в целом. Обычно таким способом происходит установка обновлений безопасности.
Вспомогательные утилиты
Чтобы все изменения, совершаемые патчем, происходили автоматически без участия пользователя существуют специальные утилиты, с помощью которых создают самоустанавливающиеся патчи. В них записывается информация, какие файлы и должны быть заменены, или какие программы запущены после распаковки, если должны быть изменено содержимое файлов. Чаще всего полученный таким образом патч представляет собой самораспаковывающийся архив, содержащий обновленные файлы целиком.
Интересные факты
Microsoft Flight Simulator выпустила специальный патч после атак 11 сентября 2001-го на World Trade Center в Нью-Йорке. Из карты города были изъяты башни торгового центра. Это редкий пример патча, выпущенного из уважения к чувствам людей, а не для исправления ошибки в программе или усиления защиты от копирования.
Что такое патчи для игр и зачем они нужны. И куда их сувать
Запла́тка, или па́тч (англ. patch /pætʃ/ — заплатка) — автоматизированное отдельно поставляемое программное средство, используемое для устранения проблем в программном обеспечении или изменения его функционала, а также сам процесс установки патча («пропатчивание»). Исправление может применяться к уже установленной программе, либо к её исходным кодам. Сюда входит исправление ошибок, изменение внешнего вида, улучшение эргономичности или производительности программ, а также любые другие изменения, которые разработчик пожелал сделать.
Если было выпущено несколько патчей, то разработчик может (обычно после наиболее полных изменений) сделать кумулятивный патч (лат. cumulatio – «увеличение, скопление»). Такой патч включает в себя изменения, находящиеся во всех предыдущих патчах, и вносит их в программу во время своей установки вместе с новыми. Это позволяет сэкономить время на поиск, загрузку и установку всех прежних версий патча.
Бывает, что сами патчи становятся причиной новых ошибок в работе. Поэтому опытные пользователи предпочитают выждать некоторое время, пока не появятся первые отзывы о результатах использования новой версии пропатченного ПО, и уже потом решают, стоит ли устанавливать данный патч. Особенно критичен данный момент для системных администраторов и при установке больших обновлений операционной системы.
Компьютерные игры
В отличие от обычных приложений, в которых исправляются обнаруженные ошибки и недочеты и вводятся новые функции, для компьютерных игр патчи играют особую роль. В них они могут быть предназначены для изменения правил или алгоритмов игры. Необходимость в выпуске таких патчей возникает порой при обнаружении возможности жульничества игроков.
Особенно важны такого рода патчи в многопользовательских играх, где превосходство за счет недоработок игры одного игрока над другими имеет более серьезные последствия, чем при одиночной игре против компьютерных соперников. Чтобы сделать невозможным дальнейшее распространение найденной возможности читерства, исправленной с выходом патча, а также избежать конфликта версий, многопользовательские игры часто не допускают к игре игрока, использующего версию игры, отличную от официальной.
Другим примером является защита от копирования. Патч может параллельно внести изменения в систему защиты игры, что может выражаться, например, в невозможности устанавливать последующие патчи и обновления, если установлена «пиратская» версия игры.
Разработка патчера к игре
После написания первой игры перед нами встала задача, о которой мы даже не задумывались ранее. Это разработка патчера к игре. Для нашего патчера мы определили следующие требования:
Тогда то я решил все-таки собрать велосипед.
Алгоритм
Теперь предстояло нагуглить алгоритм сравнения больших бинарных файлов. Достойных кандидатов оказалось два. Это Rsync и алгоритм сортировки суффиксов из bsdiff.
Так как со вторым уже были проблемы, то я остановился на первом.
Его суть заключается в следующем. Разбиваем исходный файл на куски равного размера (далее чанки от англ. chunk).
Для каждого чанка считаем два хэша: сильный и слабый. Сильный хэш — это обычный MD5. Слабый хэш — это кольцевой хэш. Его особенность в том, что если хэш от n до n+S-1 равняется R, то последовательность байт от n+1 до n+S может быть посчитана исходя из R, байта n и байта n+S без необходимости учитывать байты, лежащие внутри этого интервала.
Точно так же нужно посчитать результирующий файл. На выходе у нас должно получится две последовательности хешированных чанков.
Далее мы начинаем сравнивать слабые хэши в файлах в поисках одинаковых чанков. Если хэши совпали, то сравниваем сильные хэши. Ключом алгоритма является создание двух сигнатур — быстрой и стойкой. Быстрая используется как фильтр. Стойкая используется для более точной проверки.
На выходе мы имеем список отличающихся чанков, которые и записываем в патч.
Создание патча
Для наших игр хорошо подходит система, где номер версии обозначается целым числом. Таким образом обычно мы имеем кучу папок с разными версиями текущего проекта: 1, 2, 3, и т.д.
Первое что надо будет сделать после нажатия кнопки — это определить какие файлы изменились, удалились, добавились. Для этого сравниваем папки через
и ведем список изменений. Если файл добавился, то считаем md5. Если изменился, то считаем новый и старый md5. Эти хэши нужны будут для того, чтобы определить можно ли применить патч и корректно ли он установился.
Эти данные собираются в архив с максимальным сжатием через SharpZipLib. В конце мы дописываем туда файлик patch_info.txt в котором хранятся данные о размере чанка, список файлов с их хэшами и действиями.
Пример:
* R — removed, A — added, M — modified
В зависимости от действия там лежит либо сам файл, либо патч к старой версии.
Теперь этот патч можно выложить на любой веб хостинг. Я тестил на дропбоксе.
Важно заметить что для нормальной работоспособности системы в папке с игрой должен лежать файл .\patcher\version.txt. В нем хранится информация о текущей версии игры. Ее считывает патчер и сам же меняет в результате процесса применения патча. Патч билдер старается следить чтобы вы не ошиблись, и версия в файле совпадала с версией указанной в имени папки.
Патчер
При старте патчер считывает файл настроек по пути ./patcher/configuration.xml и проверяет на валидность.
Пример файла с комментариями:
Первым делом патчер проверит свою версию из файла ./patcher/version.txt. Потом он проверит последнюю версию игры по ссылке из настроек. Если последняя версия больше то запускается процесс обновления по схеме:
Чтобы применить патч, сначала нужно получить список измененных файлов. Поэтому первым делом достаем из скачанного архива patch_info.txt, парсим его и пробегаем циклом по файлам.
Если файл подлежит удалению, то удаляем. Если добавлен, то распаковываем из архива. Если изменен то применяем патч если хэши совпадают (чтобы не испортить его).
В конце не забываем проверить новый md5 хэш.
Статистика
Для проверки я сразу же засунул в него клиент нашей игры на Unity3D, с которым отказался работать bsdiff.
Клиент версия 1 — 1669 Mb
Клиент версия 2 — 1692 Mb (мы добавили модельку с пачкой текстур)
Размер патча при размере чанка 1 Кб и максимальном сжатии архива — 11.8 Mb, что очень похоже на результаты работы патчера с bsdiff’ом
Время создания патча на моей машине меньше минуты, а применения около 10 секунд.
Что такое патчи для игр
Версия 2.00a
Или как русифицировать игры.
Начнём пожалуй с того, что слово «патч» происходит от английского слова «patch», означающее буквально следующее: заплатка, латать, чинить или заделывать.
Сфера применения.
Сейчас уже трудно сказать для какой именно цели изобрели патчи и всё, что с ними связано, но используют их (особенно в эмуляции) очень широко.
Подготовка
Итак, я думаю для начала хватит теории, перейдём к более приятному.
Что это?
Обратите внимание на то, что лежит в архиве патча.
Программы и форматы
С форматом разобрались, теперь перейдём к программам. Для патчей ips существует много известных и малоизвестных программ (даже я сделал нечто подобное). Самые распространённые из них:
IPS-WIN 2.0
Скачиваем и запускаем её.
Затем нажимаете кнопочку Patch! и дело сделано 🙂
Другие программы для патчей работают аналогичным образом.
У меня не получается!
Как правило проблемы с переводом игр возникают для Сеги или Супер Нинтендо. Но перед тем, как паниковать, посмотрите внимательно те патчи и РОМы вы используете или нет. Если это не помогло, то попробуем разобраться:
1. Запомните раз и навсегда: ФОРМАТ IPS корректно работает с файлами, размер которых не превышает 16 Мб! Для работы с большими РОМами используйте программу xSApply, которая уже входит в комплект с патчем и другими утилитами.
Создание патчей.
Для этой цели подойдут программы mkips (dos) и IPSEXE v.1.5 для windows. Остановимся на последней поподробнее.
Описание запутанное, но в принципе всё понятно.
че такое патч и как его ставить?
Начну пожалуй с того, что слово «патч» происходит от английского слова «patch», означающее буквально следующее: заплатка, латать, чинить или заделывать.
Сфера применения.
Сейчас уже трудно сказать для какой именно цели изобрели патчи и всё, что с ними связано, но используют их (особенно в эмуляции) очень широко.
Запла́тка, или па́тч (англ. patch /pætʃ/ — заплатка) — автоматизированное отдельно поставляемое программное средство, используемое для устранения проблем в программном обеспечении или изменения его функционала, а также сам процесс установки патча («пропатчивание»). Исправление может применяться к уже установленной программе, либо к её исходным кодам. Сюда входит исправление ошибок, изменение внешнего вида, улучшение эргономичности или производительности программ, а также любые другие изменения, которые разработчик пожелал сделать.
Если было выпущено несколько патчей, то разработчик может (обычно после наиболее полных изменений) сделать кумулятивный патч (лат. cumulatio – «увеличение, скопление»). Такой патч включает в себя изменения, находящиеся во всех предыдущих патчах, и вносит их в программу во время своей установки вместе с новыми. Это позволяет сэкономить время на поиск, загрузку и установку всех прежних версий патча.
Бывает, что сами патчи становятся причиной новых ошибок в работе. Поэтому опытные пользователи предпочитают выждать некоторое время, пока не появятся первые отзывы о результатах использования новой версии пропатченного ПО, и уже потом решают, стоит ли устанавливать данный патч. Особенно критичен данный момент для системных администраторов и при установке больших обновлений операционной системы.