Ссылки Команда Главная Форум Гостевая
МЕНЮ
Новости
01.01.2017
Переводы
01.01.2017
Проекты
10.05.2010
Программы
26.05.2012
Документация
26.11.2016
Прохождения
08.05.2011
Разное
07.06.2009
    rss
БАННЕРЫ
Наш баннер
Сайт JurasskPark
Griever Stuff
Новая реальность
Emu-Land
ConsolGames
CHIEF-NET
PSCD.RU
Langrisser
Battletoads
Valid HTML 4.01 Transitional
Правильный CSS!
HotLog
 

 

 

 

 

Сборка NDS ROMа с помощью BAT-файла

Написать эту маленькую документацию меня заставила злость. Вчера, когда собирал ROM Наруто с помощью DSLazy и опять вместо кнопки "nds packer" нажал "nds unpack"!!!

скриншот

И это уже не первый раз!!! Ну почему автор сделал такое неудобное расположение кнопок, что постоянно нажимаешь не на ту??? ?(????)
Решил посмотреть батник dslazy.bat, что лежит с программой. Меня заинтересовал код распаковки и запаковки.

IF %~1 == UNPACK (
rd /Q /S NDS_UNPACK
mkdir NDS_UNPACK
ndstool -v -x current.nds -9 NDS_UNPACK/arm9.bin -7 NDS_UNPACK/arm7.bin -y9 NDS_UNPACK/y9.bin -y7 NDS_UNPACK/y7.bin -d NDS_UNPACK/data -y NDS_UNPACK/overlay -t NDS_UNPACK/banner.bin -h NDS_UNPACK/header.bin
)

IF %~1 == PACK (
ndstool -c current.nds -9 NDS_UNPACK/arm9.bin -7 NDS_UNPACK/arm7.bin -y9 NDS_UNPACK/y9.bin -y7 NDS_UNPACK/y7.bin -d NDS_UNPACK/data -y NDS_UNPACK/overlay -t NDS_UNPACK/banner.bin -h NDS_UNPACK/header.bin
)

Решил пояндексить ещё примеры BAT-файлов для DSLazy. Третья ссылка была на тему форума Шедевра "Princess Maker 4 DS Special Edition", где HoRRoR выложил код BAT-файла распаковки ROMa.

@echo off
set rom=pm4.nds
set dir=rom_data
echo Preparation...
rd /Q /S %dir% > nul
mkdir %dir% > nul
echo Extracting...
ndstool -v -x %rom% -9 %dir%\arm9.bin -7 %dir%\arm7.bin -y9 %dir%\y9.bin -y7 %dir%\y7.bin -d %dir%\data -y %dir%\overlay -t %dir%\banner.bin -h %dir%\header.bin > nul
echo Done!
pause

Весь код заключается в следующем:
1) В начале присваиваем переменной rom название ROMa с которым будем работать.
2) В переменной dir указываем папку rom_data, куда будем распаковывать ROM.
3) Далее у нас идёт проверка на наличие данной папки и если её нет, то создаем.
4) И наконец сама распаковка, куда в отличие от оригинального кода, где вместо ROMa указан current.nds, а папка для распаковки жестко прописана как NDS_UNPACK - сюда вставлены переменные, которые в начале мы объявляем.

Хорошо скажете вы, но это же код HoRRoRa, а не твой! Согласен! :) Но! BAT-файл сборки тут не указан + мы сделаем бекапирование файлов.
По сути у нас уже написан готовый оригинальный код сборки.

ndstool -c current.nds -9 NDS_UNPACK/arm9.bin -7 NDS_UNPACK/arm7.bin -y9 NDS_UNPACK/y9.bin -y7 NDS_UNPACK/y7.bin -d NDS_UNPACK/data -y NDS_UNPACK/overlay -t NDS_UNPACK/banner.bin -h NDS_UNPACK/header.bin

Здесь нужно только current.nds заменить на %rom%, а NDS_UNPACK/ на %dir%\.

@echo off
set rom=NAME_ROM
set dir=rom_data

echo Compressing...
ndstool -c %rom% -9 %dir%\arm9.bin -7 %dir%\arm7.bin -y9 %dir%\y9.bin -y7 %dir%\y7.bin -d %dir%\data -y %dir%\overlay -t %dir%\banner.bin -h %dir%\header.bin > nul
echo Done!
pause

Далее разъясним, что из себя представляет backup. Это точная копия файла созданная на данный период времени. То есть после сборки ROMa, нам нужно сохранить этот РОМ в другой папке с указанием времени компиляции, чтобы проще было их различать.
В CMD есть команда DATE для отображения текущей даты (и изменения на новую) и команда TIME для отображения текущего времени (и изменения на новое).

@echo off
rem Объявляем в переменные CURDATE и CURTIME текущею дату и время.
set CURDATE=%DATE%
set CURTIME=%time%
rem Выводим эти значения
echo %CURDATE%
echo %CURTIME%

скриншот

Как мы видим, время выводится с сотовыми долями. По сути, они нам не так важны. Но нам нужна эта переменная одна, чтобы она указывалась в имени файле. Нет проблем. Просто объединим её таким образом.

echo %CURDATE%_%CURTIME%

скриншот

Гм... Странное дело. После года идёт пустое место. Уже как-то некрасиво идёт.
Мы можем у каждой переменной выводить необходимые нам знаки с помощи конструкции :~n,x , где n - с какого символа начинаем выводить, а х - сколько символов выводим.

@echo off
rem Объявляем в переменные CURDATE и CURTIME текущею дату и время.
set CURDATE=%DATE%
set CURTIME=%time%
rem Выводим эти значения
echo %CURDATE:~0,10%_%CURTIME:~0,8%
pause
Казалось бы, что всё правильно. Но это не так!
В Windows запрещено в именах использовать двоеточие, поэтому нам надо их убрать или заменить на что-то другое. Я решил использовать точку с запятой.

скриншот

echo %CURDATE:~0,10%_%CURTIME:~0,2%;%CURTIME:~3,2%;%CURTIME:~6,2%

Внимание! Сразу хочу обратить внимание. Такое имя нам не даст сохранить т.к. знак двоеточие надо экранировать. Для этого просто откроем кавычку ".
Для перемещения файла будем использовать команду COPY с параметром /Y, чтобы не спрашивать подтверждение файла. Да у нас и не смогут одинаковые файлы быть. У нас же время постоянно меняется. :) И параметр /V проверяет правильность копирования файла.
В итоге у нас получился следующий код.

Первый батник для распаковки 1_Unpack.bat.

@echo off
set rom=NarutoRUS.nds
set dir=rom_data

echo Preparation...
rd /Q /S %dir% > nul
mkdir %dir% > nul
echo Extracting...
ndstool -v -x %rom% -9 %dir%\arm9.bin -7 %dir%\arm7.bin -y9 %dir%\y9.bin -y7 %dir%\y7.bin -d %dir%\data -y %dir%\overlay -t %dir%\banner.bin -h %dir%\header.bin > nul
echo Done!
pause

Первый батник для распаковки 2_Packing.bat.

@echo off
set rom=NarutoRUS
set dir=rom_data
set archives=backup
set CURDATE=%DATE%
set CURTIME=%time%

echo Compressing...
ndstool -c %rom%.nds -9 %dir%\arm9.bin -7 %dir%\arm7.bin -y9 %dir%\y9.bin -y7 %dir%\y7.bin -d %dir%\data -y %dir%\overlay -t %dir%\banner.bin -h %dir%\header.bin > nul

mkdir %archives% > nul
copy /Y /V %rom%.nds %archives%\%rom%_"%CURDATE:~0,10%_%CURTIME:~0,2%;%CURTIME:~3,2%;%CURTIME:~6,2%.nds
echo Done!
pause

Хочу обратить внимание на одну вещь.
В первом батнике у имени файла есть окончание .nds , здесь мы его не должны писать (ну никто не запрещает писать, просто в имени будет .nds перед временем).
Проверяем работу BAT-файлов. Наша папка.

скриншот

Запускаем 1_Unpack.bat для распаковки ROMa.

скриншот

Надпись "Не удаётся найти указанный файл." появляется из-за того, что папки rom_data нет, поэтому мы её и создаём. Когда папка буде сразу, то такая надпись появляться не будет.

скриншот

Теперь пробуем запаковать.

скриншот

Три раза нажал запаковать ROM.

скриншот

Всё работает.
BAT-файлы можете скачать отсюда.