Перейти к содержимому
Zone of Games Forum
7ytbfdr56nu

Распаковка и запаковка ресурсов игр для 3DO

Рекомендованные сообщения

3DO это ретро приставка из 1993 года, идея создания которой принадлежит основателю EA Games.
3DO как и Sega Saturn  не выдержали конкуренцию с Playstation, во многом из-за высокой цены.
Игры для 3DO выпускали на CD

Решил поделится своим недавним опытом по русификации(озвучки) игр для 3DO на примере игры Shockwave 2: Beyond the Gate 
Озвучка не простая, а закадровая, сгенерированная переводчиком видео от яндекса.

Дальнейшее описание структуры диска и форматов файлов справедливо для Shockwave 2: Beyond the Gate
Другие игры 3DO могут иметь другую структуру и использовать другие типы файлов с другими форматами сжатия и т.д.

Весь звук игры находится в stream файлах в папке ShockWave2\FrontEnd\Streams
и в файлах миссий без разширения в папке ShockWave2\ (их я буду называть m-файлы)

На первом диске находятся данные для 1,2,3,4,7,8 уровней:
m1a, m1b, m1c это файлы миссий первого уровня
m2a, m2b это файлы миссий второго уровня
и т.д.
На втором диске для 1,5,6,7,8 уровней

Эти файлы что-то вроде архива, внутри которого находятся файлы для уровня
ANIM CEL stream и какие-то еще

Форматы файлов:
Файлы stream внутри содержат SNDS и FILM - звук и видео, соответственно
ANIM - это группа CEL кадров и возможно что-то еще
CEL - это текстура(картинка)

Для озвучки нас интересуют SNDS файлы
внутри stream находится один аудио файл
внутри m-файлов находится несколько stream файлов, внутри которых по одному аудио-файлу
для нас удобней будет не распаковывать m-файлы

Инструменты, которые я использовал:
bin2iso для конвертации образа из bin/cue в ISO 2048
unCD-ROM для распаковки файлов из ISO образа
quickBMS универсальный инструмент для распаковки и запаковки игровых файлов
ffmpeg мультимедиа-фрейморк для разных конвертаций(aifc в wav, в основном)
ZStreamChunksReader специальный инструмент для файлов приставки 3DO
audacity аудио-редактор для "монтажа" звука

Процесс состоит из 3 этапов:
1.Извлечь аудио файлы
2.Озвучить
3.Запаковать аудио файлы обратно, сначала в файл stream или m-файл, а потом и в ISO

 

 
Скрытый текст

 

0. Конвертируем образ в ISO. Извлекаем файлы в папку

bin2iso первой строчкой ожидает увидеть путь к bin файлу, поэтому
открываем cue файл блокнотом и удаляем первую строку с нолями, если они там есть
в командной строке пишем



bin2iso disc1.cue disc1.iso

извлекаем файлы



uncd-rom disc1.iso

1.Достаём аудио в понятном формате из m-файлов и stream
Для этого можно использовать ZStreamChunksReader.
На вкладке Audio Convertation(1) жмём на кнопку Add Files(2)
и выбираем все нужные нам файлы. Они появятся в списке справа
UW1cXuCvK
На вкладке Audio Data Ripper(3) жмём Search Audio(4)
Программа создаст MAP файлы, в которых содержится информация о расположении аудио и других файлов внутри
SBrRSvGNa
Снова заполняем список(2) m-файлами и stream. Теперь жмём Extract Audio(5)
Мы получили аудио данные в сыром виде(sound), без заголовка и сжатые методом SDX2
Для конвертации в wav нужна информация о частоте дискретизации(22050Hz) и количестве каналов(моно, стерео)
Узнать информацию о конкретном файле можно при сканировании одного файла(не списком) кнопкой Search Audio

У Shockwave 2: Beyond the Gate всё аудио в 22050 Hz
Стерео:
I1_1 - начальная заставка
CD - фразы "вставьте диск 1 или 2"
cv - архив записей
ev - катсцены между уровнями
Моно:
всё остальное, в том числе m-файлы

Опять заполняем список на вкладке Audio Convertation(1), но на этот раз полученными sound файлами
Выбираем соответствующие свойства 22050 Hz и моно или стерео. Не забудьте поставить 0 в поле Header lenght to cut
Жмём на кнопку SDX2 to WAV
В итоге, мы получили исходный звук из игры в формате PCM 16-bit без сжатия и с заголовком wav файла

В процессе работы заметил, что ZStreamChunksReader не точно вырезает-конвертирует файлы.
В конце волны бывают артефакты, которые звучат как щелчок.
Поэтому, для распаковки написал bms скрипт SHDRv2.bms
Он достаёт sound файлы из чего угодно(даже из ISO) и сохраняет их в виде sound и aifc файлов
aifc файлы содержат заголовок с информацией, необходимой для конвертации в wav
извлекаем из file (в командной строке)



quickbms SHDRv2.bms file


конвертируем в wav (в командной строке)



ffmpeg -i file.aifc -filter:a "volume=-10dB" file.wav


тут я сразу уменьшаю громкость оригинала на -10db для удобства наложения озвучки


для автоматизации процесса использую bat файл



for %%a in (m*) do quickbms SHDRv2.bms "%%a"

for %%a in (*.aifc) do ffmpeg -i %%a -filter:a "volume=-10dB" %%~na.wav

del *.aifc
@pause


он извлекает всё аудио из m-файлов (m*)(для stream файлов заменить на (*.stream) )
конвертирует все aifc файлы в wav и удаляет aifc файлы(они нам больше не понадобятся)

В теории, этим скриптом можно извлечь всё аудио из ISO образа без распаковки(не проверял).

 

Скрытый текст

 

Для получения перевода с озвучкой, я использовал rutube и расширение tampermonkey
со скриптом Voice Over Translation

Скрипт поддерживает много разных хостингов видео. Я выбрал рутюб

1. Склеил wav и создал видео-файлы из картинки+звук для заливки на rutube
создать txt с именами файлов в папке (в командной строке)



dir /b /a /-p /o:gen >files.txt


склеить файлы в один wav (в командной строке)



ffmpeg -f concat -i concat.txt -c copy cv.wav


внутри concat.txt такая структура



file 'CV1A_1.wav'
file 'CV1A_2.wav'
file 'CV1A_3.wav'
file 'CV1C2_1.wav'


и т.д.
создать видео со звуком из картинки (в командной строке)



ffmpeg -loop 1 -i shock-wave-2-beyond-the-gate-logo.jpg -i cv.wav -c:v libx264 -c:a mp3 -strict -2 -pix_fmt yuv420p -shortest cv.avi


где cv.wav это имя файла из склеенных wav
Получили cv.avi для заливки на rutube

2. Получаем озвучку
Залил файлы на rutube и в скрипте после озвучки скачал чистый mp3 с озвучкой
V5p6z9hxJ
Видео доступные по ссылке не могут быть обработаны скриптом

3. Миксуем озвучку с оригинальным звуком из игры
Я делал в audacity. Можно использовать любой удобный вам аудио-редактор
Длительность аудио не может быть больше чем в оригинале.
Если фраза на русском длиннее оригинала, менял темп в редакторе
На выходе у нас должна получиться куча wav файлов PCM 16-bit 22050Hz с соответствующими оригиналу количеством каналов и длиной,
готовых к запаковке обратно

 

Скрытый текст

 

1. Конвертируем wav обратно в голый SDX2
В ZStreamChunksReader загружаем готовые wav файлы в список(2)
Жмём Pack to SDX2
Получили кучу aifc файлов. Это наш звук, пожатый алгоритмом SDX2 с заголовком aifc и хвостом
Для вставки аудио обратно в stream или m-файл нужно голое аудио без заголовка
Вот тут я то ли не понял, то ли ZStreamChunksReader не работает как надо:
ZStreamChunksReader версии 0.8.2 содержит в архиве инструкцию по работе с программой. Там написано 
"сделать из него “сырой” файл выполнив операции Search Audio и Extract Audio в итоге получив .SOUND файл."
Вот это не работает. Пишет No Data Extracted

2.Обрезаем заголовок и хвост у aifc файлов
помещаем quickbms и скрипт SSNDstrip.bms для него в папку с aifc файлами
и в командной строке пишем



for %f in (*.aifc) do quickbms SSNDstrip.bms "%a"


Получили кучку SSND файлов, готовых к вставке обратно в stream и m-файлы

3.Вставляем аудио обратно
Убедитесь, что MAP файлы лежат рядом с соответствующими stream и m-файлами
В ZStreamChunksReader на вкладке Audio Data Insert жмём кнопку Insert Audio
Сначала выбираем куда вставлять(stream или m-файл), затем - что вставлять (SSND файл)

С m-файлами на этом этапе есть нюанс. Помните, мы не стали распаковывать m-файлы?
Нужно предварительно склеить SSND файлы из конкретного m-файла для вставки в этот m-файл
Нюанс заключается в том, что m-файл, в отличии от stream, содержит несколько аудио файлов,
а ZStreamChunksReader вставляет только один аудио файл

Для склейки используем команду (на примере m4a m-файла)



copy /b m4a*.SSND m4a.SSND


Важно! Файлы для склейки должны быть пронумерованы в правильном порядке,
таком же, в котором они извлекались из m-файла. Нужно добавить 0 к одноциферным SSND
0>00 1>01 2>02 и т.д.

4. Запаковываем файлы в ISO
Я использовал скрипт iso2files.bms для quickbms
Он читает данные из unCD-ROM.log (его создает unCD-ROM при распаковке) и заменяет файлы внутри ISO
Таким образом, нет необходимости пересобирать весь диск и переподписывать его.
С unCD-ROM.log есть нюанс: скрипт iso2files.bms еще сырой, поэтому, нужно подправить файл unCD-ROM.log блокнотом,
чтобы все пробелы после "PosInFile:" и "Size:" были нолями. Вот так:
было "PosInFile:   71800  Size:    25858" стало "PosInFile:00071800  Size:000025858"

В папке с ISO должен находится подправленный файл unCD-ROM.log и quickbms, а файлы на замену  - рядом в папке с названием как у ISO 
Например, если образ disс1.iso, то в папке disc1 должны лежать stream и m-файлы,
которые вы хотите вставить, но БЕЗ папок ShockWave2\FrontEnd\Streams или ShockWave2\
Команда



quickbms -r -w iso2files.bms disс1.iso


запишет файлы из папки disс1 в образ disс1.iso

Готово!

 

 

Изменено пользователем 7ytbfdr56nu
  • Лайк (+1) 1
  • +1 1

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас



Zone of Games © 2003–2024 | Реклама на сайте.

×