форум группы Chief-Net форум группы Chief-Net
Перевод приставочных игр и не только!
drako site Перейти на сайт группы     Наш чат      Помощь      Поиск      Пользователи


 Страниц (1): [1]   

> Описание: IPS/IPS-EXT/IPS-EXT с обрезкой файлов
Guyver Администратор
Отправлено: 12 Июля, 2026 - 15:45:30
Post Id



Chief-Net


Покинул форум
Сообщений всего: 10486
Дата рег-ции: Окт. 2014  
Откуда: Магадан





Программа Patch Creator при создании патчей учитывает EOF-коллизии и способна создавать/применять патчи с RLE-сжатием и без него. Для работы с файлами больше 16 мБ она поддерживает формат IPS-EXT (при выборе файла более 16 МБ программа автоматически переключается в режим IPS-EXT).

Можно перетащить файл ips или ips32 на программу, тогда она запустится и попросит открыть файл, который вы собираетесь патчить.

Изначально программа создавалась больше для того, чтобы копировать размер рома, crc32 и md5 в ReadMe-файл при создании патчей и размещении их на сайте. А потом разрослась до создания/применения патчей...





При желании можно работать через командную строку и batch-скрипты (к примеру, для пакетного создания/применения патчей). Через командную строку программа намного быстрее работает с большими файлами.







-----
Я не волшебник - я только учусь...
 
 Top
Guyver Администратор
Отправлено: 12 Июля, 2026 - 15:49:59
Post Id



Chief-Net


Покинул форум
Сообщений всего: 10486
Дата рег-ции: Окт. 2014  
Откуда: Магадан





Памятка по консольным командам:

СОЗДАНИЕ ПАТЧА
CODE:
PC.exe create <оригинал> <модификация> <патч>
PC.exe c <оригинал> <модификация> <патч>


ПРИМЕНЕНИЕ ПАТЧА
CODE:
PC.exe apply <патч> <оригинал> <результат>
PC.exe a <патч> <оригинал> <результат>


СПРАВКА
CODE:
PC.exe help


ОТКРЫТЬ ПАТЧ В GUI
CODE:
PC.exe <путь_к_патчу>


Форматы:

*.ips — классический IPS (до 16 МБ)
*.ips32 — расширенный IPS-EXT (до 4 ГБ)
Формат определяется автоматически по размеру файлов.
ВАЖНО: пути и названия файлов с пробелами нужно "заключать в кавычки"!

-----
Я не волшебник - я только учусь...
 
 Top
Guyver Администратор
Отправлено: 12 Июля, 2026 - 15:51:21
Post Id



Chief-Net


Покинул форум
Сообщений всего: 10486
Дата рег-ции: Окт. 2014  
Откуда: Магадан





Примеры использования bat файлов:

Создание патча:

CODE:
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"

if not exist "PC.exe" (echo [ERROR] PC.exe not found! & pause & exit /b 1)
if not exist "original.sfc" (echo [ERROR] original.sfc not found! & pause & exit /b 1)
if not exist "modified.sfc" (echo [ERROR] modified.sfc not found! & pause & exit /b 1)

echo Creating patch...
"PC.exe" create "original.sfc" "modified.sfc" "patch.ips"

if !ERRORLEVEL! EQU 0 (echo [OK] Patch created: patch.ips) else (echo [ERROR] Failed!)
pause


Применение патча:

CODE:
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"

if not exist "PC.exe" (echo [ERROR] PC.exe not found! & pause & exit /b 1)
if not exist "original.sfc" (echo [ERROR] original.sfc not found! & pause & exit /b 1)
if not exist "patch.ips" (echo [ERROR] patch.ips not found! & pause & exit /b 1)

echo Applying patch...
"PC.exe" apply "patch.ips" "original.sfc" "output.sfc"

if !ERRORLEVEL! EQU 0 (echo [OK] Result: output.sfc) else (echo [ERROR] Failed!)
pause


Пакетное создание патчей:

CODE:
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"

if not exist "PC.exe" (echo [ERROR] PC.exe not found! & pause & exit /b 1)
if not exist "Original" mkdir "Original"
if not exist "Modified" mkdir "Modified"
if not exist "Patches" mkdir "Patches"

set /a OK=0
set /a FAIL=0

for %%F in ("Modified\*.sfc") do (
if exist "Original\%%~nxF" (
"PC.exe" create "Original\%%~nxF" "%%F" "Patches\%%~nF.ips"
if !ERRORLEVEL! EQU 0 (set /a OK+=1) else (set /a FAIL+=1)
) else (
echo [SKIP] %%~nxF - no original
set /a FAIL+=1
)
)

echo Done: !OK! OK, !FAIL! failed
pause


Пакетное применение патчей:

CODE:
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"

if not exist "PC.exe" (echo [ERROR] PC.exe not found! & pause & exit /b 1)
if not exist "Patched" mkdir "Patched"

set /a OK=0
set /a FAIL=0

for %%F in ("Patches\*.ips") do (
set "ORIG="
if exist "Original\%%~nF.sfc" set "ORIG=Original\%%~nF.sfc"
if exist "Original\%%~nF.nes" set "ORIG=Original\%%~nF.nes"
if exist "Original\%%~nF.gba" set "ORIG=Original\%%~nF.gba"

if defined ORIG (
"PC.exe" apply "%%F" "!ORIG!" "Patched\%%~nF_patched.sfc"
if !ERRORLEVEL! EQU 0 (set /a OK+=1) else (set /a FAIL+=1)
) else (
echo [SKIP] %%~nF.ips - no original
set /a FAIL+=1
)
)

echo Done: !OK! OK, !FAIL! failed
pause


Мод установки перевода:

CODE:
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"

echo Russian Translation Installer v1.0
echo Required: Game (Japan).nes
echo.
set /p OK="Continue? (Y/N): "
if /i not "%OK%"=="Y" exit /b 0

if not exist "PC.exe" (echo [ERROR] PC.exe not found! & pause & exit /b 1)
if not exist "Game (Japan).nes" (echo [ERROR] ROM not found! & pause & exit /b 1)

echo Creating backup...
copy "Game (Japan).nes" "Game (Japan).nes.bak" >nul

echo Applying patch...
"PC.exe" apply "translation.ips" "Game (Japan).nes" "Game (Russian).nes"

if !ERRORLEVEL! EQU 0 (echo [OK] Done! Run Game (Russian).nes) else (
echo [ERROR] Failed! Restoring backup...
copy "Game (Japan).nes.bak" "Game (Japan).nes" >nul
)
pause


Перетаскивание файла *.ips на файл *.bat:

CODE:
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"

if "%~1"=="" (echo Drag an .ips file onto this script! & pause & exit /b 1)
if not exist "PC.exe" (echo [ERROR] PC.exe not found! & pause & exit /b 1)

echo Patch: %~nx1
set /p ROM="Enter original ROM path: "

"PC.exe" apply "%~1" "%ROM%" "patched_output.sfc"

if !ERRORLEVEL! EQU 0 (echo [OK] Result: patched_output.sfc) else (echo [ERROR] Failed!)
pause


Ещё один пример простого скрипта:

CODE:
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"

if not exist "PC.exe" (echo [ERROR] PC.exe not found! & pause & exit /b 1)
if not exist "base.sfc" (echo [ERROR] base.sfc not found! & pause & exit /b 1)
if not exist "patch.ips" (echo [ERROR] patch.ips not found! & pause & exit /b 1)

if exist "final.sfc" del "final.sfc"

"PC.exe" apply "patch.ips" "base.sfc" "final.sfc"

if !ERRORLEVEL! EQU 0 (
echo [OK] Build complete: final.sfc
if not exist "Release" mkdir "Release"
copy "final.sfc" "Release\" >nul
) else (
echo [ERROR] Build failed!
)
pause


-----
Я не волшебник - я только учусь...
 
 Top
Guyver Администратор
Отправлено: 13 Июля, 2026 - 12:51:01
Post Id



Chief-Net


Покинул форум
Сообщений всего: 10486
Дата рег-ции: Окт. 2014  
Откуда: Магадан





Версия 1.0.0.1:

Недостатком ips патчей является то, что если файл оригинала больше, чем файл модификации, то при применении патча к оригинальному файлу он не обрезается до размера модификации и остаётся таким же большим. Поэтому в программу добавлена возможность создания патчей для таких случаев: "IPS-EXT (с обрезкой файлов)". Отличие такого патча от стандартного ips32 в том, что в его конце после EOF задаются 8 байт, в которые записывается размер файла модификации. И при применении такого патча файл оригинала обрезается до нужного размера. При этом другие программы будут работать с таким ips32 патчем как и раньше, так как они не воспринимают информацию после EOF, но не будут обрезать файл оригинала.



Что нового:
* добавлена возможность создавать/применять ips32 с обрезкой файлов
* в консольные команды добавлена команда trim
* увеличено быстродействие программы
* программа работает по двум алгоритмам: для файлов до 750 Мб и больше 750 Мб (этот алгоритм медленнее, так как память берётся не из оперативки)

новая консольная команда:
CODE:
PC.exe create trim <оригинал> <модификация> <патч>


Скачать файл: PC.zip
Скачан раз: 13


-----
Я не волшебник - я только учусь...
 
 Top
Griever Пользователь
Отправлено: 13 Июля, 2026 - 19:33:35
Post Id


VIP


Покинул форум
Сообщений всего: 517
Дата рег-ции: Июнь 2015  





Guyver пишет:

Недостатком ips патчей является то, что если файл оригинала больше, чем файл модификации, то при применении патча к оригинальному файлу он не обрезается до размера модификации и остаётся таким же большим.

Не хочется быть Бабой-ягой, но у ips куча других недостатков. Типа 1 мб на offset, отсутствие чексуммы, или (мой любимый) коллизия с EOF маркером.
Решение - переходить на другие форматы. BPS и UPS, кажется, корректно справляются с ситуациям, когда измененный файл меньше оригинального.
 
 Top
Guyver Администратор
Отправлено: 14 Июля, 2026 - 00:46:08
Post Id



Chief-Net


Покинул форум
Сообщений всего: 10486
Дата рег-ции: Окт. 2014  
Откуда: Магадан





EOF-Коллизии можно же избежать, сдвинув блок при создании патча (сделать смещение)? Так что это не недостаток, а недочёт при программировании.

Спойлер (Отобразить)


Отсутствие чексуммы, как по мне, это хорошо. Я могу патчить не оригинальные файлы, а хаки, к примеру...



А так я не уверял, что формат без других недостатков. Просто для моих любимых переводов на денди его хватает...

Я сделал BPS и UPS, всё прекрасно работает, патчи меньше и у них много преимуществ, но... Оказывается, форматы не очень-то и унифицированные. Я скачал несколько патчеров - и некоторые даже со своими созданными патчами не всегда дружат (!), я уж не говорю про сторонние... Как я подозреваю, не все они работают с маленькими файлами...

Спойлер (Отобразить)


Поэтому я не стал пока их использовать...

-----
Я не волшебник - я только учусь...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



> Похожие темы: Patch Creator
Темы Форум Информация о теме Обновление
Devilman (NES)
Перевод на русский язык с японского
Общедоступные переводы Ответов: 0
Автор темы: Guyver
14 Февраля, 2016 - 14:16:47
Автор: Guyver
wap версия сайта CHIEF-NET
...
Предложения по форуму и сайту Ответов: 0
Автор темы: Guyver
27 Июля, 2015 - 07:00:31
Автор: Guyver
V.I.P.
...
Предложения по форуму и сайту Ответов: 0
Автор темы: Guyver
27 Июля, 2015 - 06:58:51
Автор: Guyver
Считывание информацииы из txt файла
...
Программирование Ответов: 0
Автор темы: Guyver
24 Июля, 2015 - 11:18:58
Автор: Guyver
Screen Saver
Скриншотер, если кому вдруг понадобится...
Программирование Ответов: 0
Автор темы: Guyver
12 Июля, 2025 - 07:44:18
Автор: Guyver
 

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®