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

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

Запаковал один озвученный PAL ролик обратно в .iso образ игры для теста: https://disk.yandex.ru/i/sjQYfwGfWFwgUg

 

[ОПРОС] Просмотрев видео, нужно выбрать самый подходящий голос для каждого из 8 персонажей:

Тэмплар
Люгер
Рико
Хакка
Солдат
Генерал Вотон
Генерал-лейтенант Адамс
Генерал Ленте




 https://disk.yandex.ru/i/WyJ4_upVC8o1bA


 https://disk.yandex.ru/i/jnuq8wBD9SP7BA


 https://disk.yandex.ru/i/UPHVUJqiM0EPAw

Если:

Хакка - голос из ②
Тэмплар - голос из ②
Рико - голос из ②
Люгер - голос из ③
Солдат - голос из ①
Адамс - голос из ①
Вотон - голос из ③
Ленте - голос из ③


то видео получается таким:


 https://disk.yandex.ru/i/QL0hwbo8deeMhA (У лохматого появляется акцент, реально , как француз.)

Вот ещё 11 вариантов голоса для Люгер:

 https://disk.yandex.ru/i/z3whXFXEUQPX7A

 https://disk.yandex.ru/i/FVKDMsMAheA2Ow

 https://disk.yandex.ru/i/kU6sXWqCwKYZag

 https://disk.yandex.ru/i/oMkyH60qr7e3_Q

 https://disk.yandex.ru/i/YeFWpd9um9l0WA

 https://disk.yandex.ru/i/CqewjFYdKB12eg

 https://disk.yandex.ru/i/TXKC40fd6vt_dQ

 https://disk.yandex.ru/i/hTBpMTrwaNXS_w

 https://disk.yandex.ru/i/00J5SJ74Ur60pQ

 https://disk.yandex.ru/i/d8-MsX1q4lHUPA

 https://disk.yandex.ru/i/KGjkYbMbl2hm-Q

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


P.S. Нет там никаких генералов-Батоновdeclare.gif, не нужно троллить хотя бы на этом форуме. Тайминги подбирались под голоса первого видео, поэтому из-за скорости произношения слов голосами из ② и ③ видео , могут быть не так же точны. Скорее всего слова , которые все голоса так и норовят произнести с акцентом, типа "отвали" "готово", придёться заменить на синонимы... И Helghast ... нейросеть произносит с неправильным ударением.

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

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


Ссылка на сообщение
В 8/3/2024 в 03:39, Kesovord сказал:

Запаковал один озвученный PAL ролик обратно в .iso образ игры для теста: https://disk.yandex.ru/i/sjQYfwGfWFwgUg

Здравствуйте. На оригинальном диске с официальной русификацией от Софтклаба в меню “Другое” часть пунктов не переведена, а у вас все переведено. Что за iso у вас русифицированный?

Чем вы запаковываете файлы обратно в FILES.DAT?

Я нашел только скрипт quickbms для распаковки killzone FILES.DAT, но запаковка обратно будет работать только если обновленные файлы имеют не больше размер чем изначальный, может у вас есть скрипт обратной запаковки?

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

# Killzone (script 0.2.2)
# script for QuickBMS http://quickbms.aluigi.org

get ARCHIVE_NAME basename

get INFO_SIZE long
get DUMMY long
get DUMMY long
get DUMMY long
get ZERO long
get ZERO long

get NAMES_SIZE long
savepos OFFSET
log MEMORY_FILE OFFSET NAMES_SIZE

math OFFSET + NAMES_SIZE
goto OFFSET

get INFO_SIZE long
savepos OFFSET
log MEMORY_FILE2 OFFSET INFO_SIZE

get ENTRIES long MEMORY_FILE2
savepos OFFSET MEMORY_FILE2
set PATH string ""
set NAME string ""
putarray 0 0 0  # nested function
callfunction EXTRACT

startfunction EXTRACT
    savepos BCK_OFF MEMORY_FILE2
    goto OFFSET MEMORY_FILE2
    string PATH + NAME
    string PATH + /
    for CUR_ENTRIES = ENTRIES > 0
        get NAME_OFF long MEMORY_FILE2
        math FLAGS = NAME_OFF
        xmath NAME_OFF "NAME_OFF & ((1 << 23) - 1)"
        goto NAME_OFF MEMORY_FILE
        get NAME string MEMORY_FILE
        get OFFSET long MEMORY_FILE2
        if FLAGS & 0x80000000
            get ENTRIES long MEMORY_FILE2
            callfunction EXTRACT
        else
            callfunction HANDLE_PACK_NUM 1
            get SIZE long MEMORY_FILE2
            string NAME p "%s%s" PATH NAME
            set EXT extension NAME
            if EXT == "core" && ARCHIVE_NAME == "psp"
                goto OFFSET
                get ZERO long   # probably XSIZE64
                get XSIZE long
                reverselong XSIZE
                math OFFSET + 8
                math SIZE   - 8
                clog NAME OFFSET SIZE XSIZE
            else
                log NAME OFFSET SIZE
            endif
        endif
    prev CUR_ENTRIES
    goto BCK_OFF MEMORY_FILE2
endfunction

startfunction HANDLE_PACK_NUM
    xmath PACK_NUM "(FLAGS >> 23) & 0x1f"
    getarray LAST_PACK_NUM 0 0
    if PACK_NUM != LAST_PACK_NUM
        putarray 0 0 PACK_NUM
        get EXT extension
        if PACK_NUM == 0
            string TMP p "%s.%s" ARCHIVE_NAME EXT
        else
            string TMP p "%s%02d.%s" ARCHIVE_NAME PACK_NUM EXT
        endif
        open FDSE TMP
    endif
endfunction

 

Есть еще аудио .mss файлы с озвучкой Хелгастов и Землян, не планируете их перевести? Не знаю правда пока как распаковать-запаковать

Изменено пользователем metalor
добавил скрипт

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


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

Скрипты quickbms для распаковки-запаковки killzone файлов локализации simpletext.dat по пути localized/russian/*

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

# скрипт QuickBMS распаковки simpletext.dat локализации killzone ps2

set NL binary "\x0a"        # Перенос строки (Line Feed)
# MEMORY_FILE - кодированый входной бинарный файл
# MEMORY_FILE1 - UTF-8 итоговый декодированый файл decoded_output.txt
# MEMORY_FILE2 - UTF-16LE кодированое значение одного элемента
# MEMORY_FILE3 - UTF-8 декодированное значение одного элемента
log MEMORY_FILE1 0 0

get TOTAL_SIZE asize

for
    savepos CURRENT_OFF
    if CURRENT_OFF >= TOTAL_SIZE
        break
    endif

    # 1. ID (4 байт)
    get ID_NUM long

    # 2. Длина ID Name (4 байт)
    get NAME_SIZE long
    
    # 3. Чтение ID Name
    getdstring ID_NAME NAME_SIZE

    # 4. Длина Строки (4 байт)
    get STR_SIZE long
    
    # 5. Чтение самой Строки
    getdstring RES_STR STR_SIZE

    Log MEMORY_FILE2 0 0           # Создаем чистый буфер для чтения
    PutDstring RES_STR STR_SIZE MEMORY_FILE2

    # Убедимся, что мы в начале
    Goto 0 MEMORY_FILE2
    Get STR_SIZE asize MEMORY_FILE2

    Goto 0 MEMORY_FILE2
    Get STRING_SIZE asize MEMORY_FILE2

    # --- ВНУТРЕННИЙ ЦИКЛ РАСШИФРОВКИ ---
    Log MEMORY_FILE3 0 0 # ОБЯЗАТЕЛЬНО: Очищаем буфер перед каждой новой строкой

    For 
        SavePos CurrentPos MEMORY_FILE2
        if CurrentPos >= STRING_SIZE
            break
        endif

        Get CHECK_BYTE byte MEMORY_FILE2

        if CHECK_BYTE == 0x20
            # --- ПРОБЕЛ ---
            Put 0x20 byte MEMORY_FILE3
            # Указатель уже сдвинулся на +1 командой Get CHECK_BYTE
        
        elif CHECK_BYTE == 0x01
            # --- КИРИЛЛИЦА (01 XX YY) ---
            # Возвращаемся, чтобы прочитать блок целиком
            Goto CurrentPos MEMORY_FILE2
            Get RAW_VAL ThreeByte MEMORY_FILE2 
            # Теперь указатель сдвинулся на +3 от CurrentPos

            # Математика (B_HI/B_LO)
            Math B_HI = RAW_VAL
            Math B_HI >>= 16
            Math B_HI &= 0xFF
            Math B_LO = RAW_VAL
            Math B_LO >>= 8
            Math B_LO &= 0xFF
            
            Math CharCode = B_HI
            Math CharCode <<= 8
            Math CharCode |= B_LO
            
            # UTF-8 конвертация
            Math B1 = CharCode
            Math B1 >>= 6
            Math B1 &= 0x1F
            Math B1 |= 0xC0
            Math B2 = CharCode
            Math B2 &= 0x3F
            Math B2 |= 0x80
            
            Put B1 byte MEMORY_FILE3
            Put B2 byte MEMORY_FILE3
            
        else
            # --- ЛЮБОЙ ДРУГОЙ СИМВОЛ (ASCII) ---
            Put CHECK_BYTE byte MEMORY_FILE3
            # Указатель уже сдвинулся на +1
        endif
        
        # Для отладки (чтобы видеть прогресс в консоли)
        SavePos NewPos MEMORY_FILE2
        # print "Pos: %CurrentPos% -> %NewPos% / %STRING_SIZE%"
    Next



     # 1. Узнаем размер данных
    Get UTF8_SIZE asize MEMORY_FILE3

    # 2. Переходим в начало
    Goto 0 MEMORY_FILE3

    # 3. Считываем данные как строку (DString читает до конца или до нулевого байта)
    GetDString MY_TEXT_OUTPUT UTF8_SIZE MEMORY_FILE3

    # Форматируем строку: ID(hex) X Name Y String + Перенос
    # %04X — это 16-ричный формат, минимум 4 символа
    string LINE p "%04X %d %s %d %s" ID_NUM NAME_SIZE ID_NAME STR_SIZE MY_TEXT_OUTPUT
    print "%LINE%"

    # Записываем строку в память
    string LINE + NL # Убеждаемся, что это строка
    strlen LINE_LEN LINE
    
    # 1. Узнаем текущий размер MEMORY_FILE1, чтобы прыгнуть в конец
    get OFFSET_TO_WRITE asize MEMORY_FILE1
    goto OFFSET_TO_WRITE MEMORY_FILE1

    # 2. Записываем строку
    putdstring LINE LINE_LEN MEMORY_FILE1
next

# Сохраняем всё, что накопили в памяти, в итоговый файл
get FINAL_SIZE asize MEMORY_FILE1
log "decoded_output.txt" 0 FINAL_SIZE MEMORY_FILE1
Скрытый текст

# скрипт QuickBMS заспаковки в simpletext.dat локализации killzone ps2
# Инициализируем файл в памяти для записи результата
log MEMORY_FILE 0 0

# Узнаем общий размер входного текстового файла
get FSIZE asize

do
    # 1. Читаем ID до пробела (4 символа, например "04FA")
    getCT ID_HEX_TEXT string 0x20

    # ИСПРАВЛЕНО: Правильный синтаксис оператора 'p'
    string ID_HEX_TEXT p "0x%s" ID_HEX_TEXT 
    set ID_NUM ID_HEX_TEXT       # Теперь ID_NUM содержит числовое значение
    
    # 2. Читаем размер имени X (до пробела)
    getCT X_STR string 0x20
    set X_SIZE X_STR
    
    # 3. Читаем само имя длиной X
    getdstring ID_NAME X_SIZE
    get DUMMY byte               # Пропускаем пробел после ID_NAME
    
    # 4. Читаем размер строки Y (до пробела)
    getCT Y_STR string 0x20
    
    # 5. Читаем саму строку до символа перевода (LF / 0x0A)
    getCT RES_LINE string 0x0a
    strlen STR_SIZE RES_LINE

    print "%ID_HEX_TEXT% %ID_NUM% %X_STR% %X_SIZE% %ID_NAME% %Y_STR% %STR_SIZE% %RES_LINE% 777777"

    Log MEMORY_FILE2 0 0           # Создаем чистый буфер для чтения
    PutDstring RES_LINE STR_SIZE MEMORY_FILE2

    # Убедимся, что мы в начале
    Goto 0 MEMORY_FILE2
    Get STR_SIZE asize MEMORY_FILE2

    # --- ВНУТРЕННИЙ ЦИКЛ ШИФРОВКИ ---
    Log MEMORY_FILE3 0 0 # ОБЯЗАТЕЛЬНО: Очищаем буфер перед каждой новой строкой

    For 
        SavePos CurrentPos MEMORY_FILE2
        if CurrentPos >= STR_SIZE
            break
        endif

        Get B1 byte MEMORY_FILE2


        # ОБРАБОТКА КИРИЛЛИЦЫ (UTF-8 последовательности D0/D1)
        if B1 >= 0xD0 && B1 <= 0xD1
            Get B2 byte MEMORY_FILE2
            string B1_HEX p "%02X" B1
            string B2_HEX p "%02X" B2
            print "%B1_HEX%%B2_HEX%"
            
            # Восстанавливаем Unicode CharCode
            Math T1 = B1
            Math T1 &= 0x1F
            Math T1 <<= 6
            Math T2 = B2
            Math T2 &= 0x3F
            Math CharCode = T1
            Math CharCode |= T2
            
            # Разбиваем на HI/LO (как в исходном скрипте)
            Math B_HI = CharCode
            Math B_HI >>= 8
            Math B_HI &= 0xFF
            Math B_LO = CharCode
            Math B_LO &= 0xFF
            
            # Записываем структуру: 01 + LO + HI 
            # (Проверьте порядок LO/HI, если в игре буквы поменяются местами)
            Put 0x01 byte MEMORY_FILE3
            Put B_LO byte MEMORY_FILE3
            Put B_HI byte MEMORY_FILE3
            string B_LO_HEX p "%04X" B_LO
            string B_HI_HEX p "%04X" B_HI
            print "01 %B_LO_HEX% %B_HI_HEX%"
            
        # ОБЫЧНЫЕ ASCII СИМВОЛЫ (Латиница, цифры)
        else
            Put B1 byte MEMORY_FILE3
            string B1_HEX p "%02X" B1
            print "%B1_HEX%"
        endif
        
        # Для отладки (чтобы видеть прогресс в консоли)
        SavePos NewPos MEMORY_FILE2
    Next



     # 1. Узнаем размер данных
    Get UTF16_SIZE asize MEMORY_FILE3

    # 2. Переходим в начало
    Goto 0 MEMORY_FILE3

    # 3. Считываем данные как строку (DString читает до конца или до нулевого байта)
    GetDString MY_TEXT_OUTPUT UTF16_SIZE MEMORY_FILE3

    # Записываем строку в память
    string LINE + NL # Убеждаемся, что это строка
    strlen LINE_LEN LINE

    # --- ЗАПИСЬ В БИНАРНЫЙ ФОРМАТ (в MEMORY_FILE) ---
    
    # Записываем ID (4 байт)
    put ID_NUM long MEMORY_FILE
    
    # Записываем размер ID имени строки (4 байт)
    put X_SIZE long MEMORY_FILE
    
    # Записываем само ID имя строки (X байт)
    putdstring ID_NAME X_SIZE MEMORY_FILE
    
    # Записываем Y размер строки в байт
    put UTF16_SIZE long MEMORY_FILE
    
    # Записываем строку (Y байт)
    putdstring MY_TEXT_OUTPUT UTF16_SIZE MEMORY_FILE
    
    savepos CUR_POS
while CUR_POS < FSIZE

# Сохраняем результат
get BIN_SIZE asize MEMORY_FILE
log "decoded_output.bin" 0 BIN_SIZE MEMORY_FILE

 

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас



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

×