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

Распаковка Still Wakes the Deep (UE 5.3.2)

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

Still-Wakes-the-Deep-640x360

Доброго времени суток! Хотим локализировать новинку “Still Wakes the Deep”, но познаний в распаковке, в экспорте звуков и их импорте обратно в игровые архивы — нет. Игровые архивы удалось распаковать с помощью программы “FModel”, файлы идут в формате .uasset и .ubulk, но вот что делать дальше — не понимаю, версия движка игры UE 5.3.2. Поможет кто-то из знающих? Заранее спасибо!

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

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


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

Извлечение и конвертации звука из игры Still Wakes the Deep

0. Извлечь .uasset и .ubulk файлы(Habitat/Content/Habitat/Audio/WwiseAudio/) из Habitat-Windows.ucas в папки Media и ExternalSources
0. Установить audiokinetic wwise 2021.1.* (скачать автономный установщик можно, например здесь (нужна регистрация))
0. Распаковать все файлы из архива рядом с папками Media и ExternalSources
1. Запустить ubulk2wav.bat для переименования и разжатия звука согласно файла names.txt (в папку wav)
2. Переозвучить файлы из папки wav (озвученные файлы должны быть с теми же характеристиками что и оригиналы (имя, длительность, дискретизация, количество дорожек) в формате wav PCM s16). Лишние wav файлы без озвучки лучше удалить
3. Запустить wav2ubulk.bat. В папке pack_me появятся файлы, готовые для запаковки в utoc+ucas

 

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

@echo off
set packpath=pack_me\Habitat\Content\Habitat\Audio\WwiseAudio

:convert
echo convert wavs to adpcm wems
REM Create ExternalSourcesList list.txt for WwiseCLI tool
echo ^<^?xml version=^"1.0^" encoding=^"UTF-8^"^?^> > list.txt
echo ^<ExternalSourcesList SchemaVersion=^"1^" Root=^"^"^> >> list.txt
for %%s in (wav\*.wav) do echo 	^<Source Path=^"%%~fs^" Conversion=^"ADPCM As Input^" /^> >> list.txt
echo ^</ExternalSourcesList^> >> list.txt

REM Convert wavs to wem
"%WWISEROOT%\Authoring\x64\Release\bin\WwiseCLI.exe" dummy.wproj -ConvertExternalSources list.txt -ExternalSourcesOutput wem
RMDIR /S /Q .cache, Originals
del /A:h wem\Wwise.dat
del list.txt

:rename
echo rename Name.ID.wem to ID.ubulk and move to pack_me folder with corresponding uasset
if not exist "%packpath%\ExternalSources\" md "%packpath%\ExternalSources\"
if not exist "%packpath%\Media\" md "%packpath%\Media\"

::%%1 size	%%2 mediaID	%%3 name
for /f "tokens=1,2,3 delims=," %%1 in (names.txt) do IF exist "wem/%%3.%%2.wem" move /Y "wem\%%3.%%2.wem" "%packpath%\Media\%%2.ubulk" & copy /Y "Media\%%2.uasset" "%packpath%\Media\%%2.uasset"
for %%1 in (wem\*.wem) do move "wem\%%~n1.wem" "%packpath%\ExternalSources\%%~n1.ubulk" & copy "ExternalSources\%%~n1.uasset" "%packpath%\ExternalSources\%%~n1.uasset"

:size
echo put new size in uassets
for %%1 in (%packpath%\Media\*.ubulk) do quickbms -o size.bms "%%1" "%packpath%\Media"
for %%1 in (%packpath%\ExternalSources\*.ubulk) do quickbms -o size.bms "%%1" "%packpath%\ExternalSources"
:end
@pause

 

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

get NewSize asize #new ubulk size
open FDDE "uasset" #open uasset file
get UassetSize asize
get UassetName filename

#parse uasset file
get Null long
get Offset long
math Offset + 6
goto Offset
get NameSize long
getDString Name NameSize #ubulk name
math Offset - 0x12E
goto Offset
get Dummy longlong
savepos SizeOffset
get OldSize long #ubulk size

#write new size to uasset
log MEMORY_FILE 0 UassetSize
putvarchr MEMORY_FILE SizeOffset NewSize long 
log UassetName 0 UassetSize MEMORY_FILE  */

 

ps. Все файлы с голосом пожаты ADPCM, насколько я понял. Если понадобиться пожать звук в Vorbis, в файле wav2ubaulk.bat заменить

Conversion=^"ADPCM As Input^"

на

Conversion=^"Vorbis Quality High^" 

 

Изменено пользователем xoixa
  • Спасибо (+1) 1

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


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

@xoixa Огромная благодарность, правда проверить всё смогу только завтра. Одного только не понял, как правильно запаковать эти файлы в utoc+ucas.

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


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

Итак, могу сказать, что способ действительно рабочий.
Видео демонстрация вступления: 

 

@spider91 Отдельное спасибо за запаковку, удалось проверить быстренько. 

В 04.08.2024 в 12:20, xoixa сказал:

Установить audiokinetic wwise 2021.1.* (скачать автономный установщик можно, например здесь (нужна регистрация))

Программу установил, как я понял, запаковывать в utoc+ucas с её помощью нужно или я неправильно понял? А инструкцию небольшую можно?

В 04.08.2024 в 12:20, xoixa сказал:

3. Запустить wav2ubulk.bat. В папке pack_me появятся файлы, готовые для запаковки в utoc+ucas

Батник работает, файлы появились в папке pack_me.

Изменено пользователем PROFFESIONAL
  • +1 1

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


Ссылка на сообщение
1 час назад, PROFFESIONAL сказал:

Программу установил, как я понял, запаковывать в utoc+ucas с её помощью нужно или я неправильно понял?

это софт для работы со звуком для видео игр. C его помощью сжимаем звук из wav в wem. С помощью WwiseCLI.exe, если быть точным

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сейчас популярно

  • Продвигаемые темы

  • Последние сообщения

    • Ты это, свои хотелки за вероятное будущее-то не выставляй. Есть нормы русского языка, которым люди следуют. А в это время ты своё незнание пытается выставить в свете того, что авось когда-нибудь твои ошибки станут нормами языка. Даже если вдруг когда-нибудь и станут, но сейчас-то нет. Любой интерпретатор с тобой не согласится. А компилятор и вовсе тебя красным подчёркнутым матом покроет и пошлёт править ошибки. Пойми, что ты всё-таки ты не средневековый крестьянин, да и не деревенский рубаха-парень, да и стилизовать себя под него ты явно не пытаешься, чтобы твои детские ошибки были хоть как-то оправданы. К обычным оЧепяткам, оговоркам и простым мелким ошибкам в т.ч. с запятыми и т.п. тут никто не докапывается (обычно), но когда ты пытаешься выставлять своё банальное невежество за норму — это уже перебор всё-таки. Ну а если на то дело пошло, тол даже у просторечного стиля есть свои нормы, правила и нормы, которым следуют, когда нужно расписать персонажа подобного типажа. Это не просто взять и наобум налепить ошибок и исковеркать слова.
    • [vFonts.r01] В связи с внедрением разработчиков русского перевода от сообщества в игру, оставил только аутентичные кириллические шрифты.
    • Языки в мире вообще не совершенны и полны логических ошибок сами по себе, особенно французский. И ничего. Как-то никто вопросов не задает. Русский язык тоже не идеальный и время от времени в нем что-то меняют. Что-то с не правильного становится со временем правильным.  Сейчас правильно ставить ударение в слове звонит на второй слог. Хотя люди всё больше ставят ударение на корень в глаголах, чем на окончание. И скорее всего это скоро станет официальным “правильным” вариантом, может уже стало, я не особо слежу за этим, давно об этом читал. В языках программирования, главное выдерживать стиль, чтобы твой код понимали другие. В обычных языках я считаю, это тоже самое главное. Пока тебя понимают — всё ок. Если докапываться до каждой буковки и до каждой запятой, то вместо диалога у людей будет вечное редактирование ошибок. Если ты хотел показать мне, что такое не приятно читать, то надо было стараться сильнее. Я привык даже вот к такому: “приФфки, а ти ни ХоТил Бы ню такъс чтобы нимноЖечка, поФфармить асечки  то Ж я баЮсь одна миня моГутЪ убиФфать там злие пвпсчеры а ток ти са мной будефф и мы всих убфьем, мурь?”
    • Спасибо за развернутый ответ. Поживу тогда с костылем. Того, что работает мне с головой хватает
      В любом случае благодарю за вашу работу. Скрипт шикарный. )
    • Вообще-то зашито. Все млекопитающие играют в игры. Естественно, животные не играют в компьютерные игры, как и люди не играли до изобретения компьютеров. Тоже неправильный пример, т.к. без еды прожить нельзя, а без близости с другим человеком можно.
    • Да, как я и предполагал, за исключением дополнения в виде наблюдателя времени друзей.

      Экосистема менеджеров (Tampermonkey, Greasemonkey, Violentmonkey и др.), а также сред выполнения скриптов, встроенных в другие расширения (как в AdGuard), довольно разнообразна. Да, все они служат одной цели, но их внутренние реализации могут существенно отличаться. В основе их работы лежит концепция песочницы - изолированной среды, которая создается из соображений безопасности, чтобы пользовательский скрипт не мог бесконтрольно хозяйничать на странице, например, похищая личные данные. Но строгость этой песочницы и набор инструментов, которые предоставляются скрипту для общения с внешним миром, сильно варьируются. Хотя все они стремятся следовать общему стандарту Greasemonkey API, их реализации отличаются. Tampermonkey, на сегодняшний день, является наиболее функционально полным и стабильным менеджером, который реализует даже самые специфические, но ставшие стандартом де-факто в сообществе, возможности API, такие как unsafeWindow и гибкое управление кросс-доменными запросами. Другие менеджеры зачастую являются форками (ответвлениями) более старых версий или независимыми разработками, которые догоняют “золотой стандарт” по функциональности с разной скоростью. Иногда это приводит к тому, что в них отсутствуют определённые функции.

      Например, некоторое время назад была проблема с работой другого моего скрипта в OrangeMonkey (который использовал наш главадмин SerGEAnt). Она была связана с тем, как расширение обрабатывало разрешения на кросс-доменные запросы и взаимодействие с веб-редактором CKEDITOR, который используется на многих форумах на движке Invasion Board. Скрипту требовался доступ к API редактора, но OrangeMonkey не предоставлял необходимого моста для выхода из “песочницы”, что приводило к ошибке. В то же время в Tampermonkey этой проблемы уже не было, так как его разработчики реализовали более продвинутые механизмы взаимодействия с контекстом страницы. Это классический пример рассинхронизации в разработке, где одно расширение уже адаптировалось под новые веб-технологии, а другое - ещё нет. AdGuard, конечно, довольно мощнейший инструмент для блокировки контента и защита приватности, но выполнение пользовательских скриптов является его вторичной, хоть и очень полезной, функцией. Поэтому вполне объяснимо, что его песочница может быть более строгой, а среда выполнения не предоставляет некоторые узкоспециализированные, но критически важные для сложных скриптов API, такие как unsafeWindow. Это не столько недостаток, сколько фундаментальное различие в философии разработки: приоритет отдается максимальной безопасности, иногда в ущерб расширенной функциональности пользовательских скриптов. Теперь давайте пройдёмся по результатам. Это как раз то, о чём я писал в предыдущем сообщении. Во время разработки скрипт все еще мог получить список игр из window, но где-то с полторы недели назад Valve немного изменила свой фронтенд. Они всё активнее используют современные фреймворки, которые строят страницу динамически, а данные хранят внутри своей инкапсулированной экосистемы (состояние компонентов). Раньше переменные могли просто объявляться в глобальной области видимости, теперь же они "живут" внутри фреймворка, и доступ к ним снаружи затруднен. В какой-то момент массив с ID игр из списка желаемого (g_rgWishlistData), который раньше был легко доступен, стал инициализироваться таким образом, что его можно прочитать только через прямой доступ к JavaScript-контексту самой страницы. Именно для этого понадобился unsafeWindow. Он как ключ, который позволяет скрипту, работающему в изолированной песочнице, дотянуться до переменных на основной странице. Костыль (var unsafeWindow = window;) - это хороший фикс для предотвращения падения скрипта от ReferenceError, но он лишь создаёт псевдоним для window песочницы, в которой g_rgWishlistData по-прежнему не существует. AdGuard не предоставляет этот ключ, поэтому скрипт не может найти ID и сообщает об ошибке. Здесь причина схожа, но связана не столько с доступом к переменным, сколько с изоляцией сессии аутентификации. Ваше тестирование подтверждает, что среда AdGuard, скорее всего, выполняет скрипты в настолько изолированном контексте, что они не имеют полного доступа к вашей браузерной сессии на сайтах Steam. Для работы этих модулей необходима авторизация. Её отсутствие или изоляция приводят к неработоспособности: Наблюдатель: Его основная задача - отслеживать изменения в вашем списке желаемого и библиотеке. Для этого скрипт обращается к эндпоинту Steam /dynamicstore/userdata/:
      https://store.steampowered.com/dynamicstore/userdata/
      Когда вы авторизованы, сервер Steam отдает специальный JSON-файл, содержащий ID ваших игр из rgWishlist, rgOwnedApps и т.д. (в этом JSON также содержатся ваши настройки персонализации магазина, но нет и не может быть логина, хэша пароля, платёжной информации или токенов аутентификации). Скрипт использует эти ID, чтобы затем сделать отдельные, публичные запросы к API Steam и получить информацию по каждой конкретной игре. Когда скрипт через GM_xmlhttpRequest делает запрос к /userdata/, этот запрос должен содержать ваши аутентификационные данные. Если среда выполнения (AdGuard) не передает их, для сервера Steam этот запрос выглядит как анонимный, и он возвращает пустой ответ. Таким образом, у модуля просто нет исходных данных для работы - он не знает, за какими играми ему нужно следить, и его панель остается пустой. Время друзей: Механизм абсолютно такой же. Чтобы показать, сколько времени ваши друзья провели в игре, скрипт должен сначала узнать, кто ваши друзья. Эта информация находится на персонализированной странице сообщества Steam (friendsthatplay), например:
      https://steamcommunity.com/my/friendsthatplay/1245620
      она генерируется сервером динамически, специально для вашего аккаунта. Для анонимного пользователя или для скрипта, работающего в изолированной сессии без доступа к актуальным данным, такой страницы не существует - Steam просто не вернет нужные данные. Соответственно, без доступа к этой странице скрипт не может извлечь имена друзей и их наигранные часы и делает логичный вывод - “друзья не играли”. Фильтр “Только ваши DLC”: Этот фильтр в каталоге поиска полностью зависит от вашей личной библиотеки. Его механизм прост: при отображении каждого товара скрипт проверяет, является ли он дополнением (DLC). Если да, он определяет ID основной игры (parent_appid) и ищет его в вашем списке rgOwnedApps, полученном из того же /userdata/. Если вы не авторизованы или сессия недоступна, список rgOwnedApps пуст, и фильтр просто не сможет найти ни одного подходящего DLC. Помощники подарков (Gift Helpers): И на странице игры, и в списке желаемого, для корректной работы им необходима точка отсчета - цена и валюта в вашем регионе. Эту информацию Steam предоставляет пользователю через переменные g_strCountryCode и g_rgWalletInfo. Без них скрипт не может запросить локальную цену и выполнить правильную конвертацию для сравнения с ценой друга. Тем не менее, как вы и заметили, помощник на странице игры у вас сработал. Это связано с наличием в этом модуле специального костыля: если скрипт не может определить данные текущего пользователя, он по умолчанию использует данные для российского региона в качестве базовых. Это позволяет функции работать, но сравнение цен может быть неточным, если вы на самом деле находитесь в другом регионе. Для помощника в списке желаемого этот костыль уже не помогает, так как тот модуль при попытке получить ID игр со страницы. Вот как-то так.
    • *радостно думает — ведь Сам попросил… , достает набор томов Русского Языка и основ правописания*  — p.s. Знаки препинания, обоснованные правилами, не всегда могут передать ход мысли. Поэтому наличие лишних (,) иногда (,) в “общательно-форумных” целях (,) можно считать некоторым Самовыражением. Но вот отсутствие...)
    • Обновил русификатор - теперь русские шрифты основаны на оригинальных, и выглядят намного лучше.
    • Всем ку! Скиньте перевод пожалуйста!
    • Ты енто, тогось, не путай просторечие устаревшее “деревенское” словарное специально говорное с ихними тамошными твоейными ошибками по незнанию, чай культурный человек, городской же ж должен быть, а то ты чавой-то ентого опять ты напутал. Знаешь же ж, что мы тут все из дерЁвни, агась, при том ещё ж и не столичной дерЁвни, а чукчи, не иначе, агась. P.S. весь мозг сломал, пока печатал, понадобилось две чайки кофе и грибы.
  • Изменения статусов

    • Дмитрий Соснов  »  Tirniel

      Привет! ты разбираешься в компьютерном железе, сможешь помочь с советом по апгрейду старого компа?
      · 1 ответ
    • SHAMAH

      Куда вход на сайт убрали и ЗАЧЕМ? Хотел файл скачать, там только медленная загрузка и “зарегистрируйтесь”. Все. Пришлось вручную страницу входа прописывать.
      · 0 ответов
    • Nosferatu  »  behar

      Добрый вечер.
      Подскажите пожалуйста, у вас не осталось случайно исходников для фикса на широкоформатные мониторы для игры Vampire The Masquerade Redemption?
      Если да, то не могли бы вы ими поделиться, а если нет, то прошу прощенья что побеспокоил.
      Заранее спасибо.
      · 0 ответов
    • AlcoKolyic  »  makc_ar

      Здраствуйте! Извините, а можно попросить ссылку на место где можно взять перевод (патч или образ игры с переводом) El Shaddai: Ascension of the Metatron для ps3, пожалуйста? А то в теме к этой игре у меня не получилось найти работающие ссылки… Первая ведет в группу в которой удалены большинство постов, а пост с этой игрой ведет на сайт https://psnext.ru который сейчас не имеет отношения к видеоиграм. 
      · 0 ответов
    • oleg72  »  Boor

      https://www.skidrowcodex.net/fate-reawakened-goldberg/
      · 0 ответов
  • Лучшие авторы


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

×