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

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

В 06.07.2024 в 13:13, Tericonio сказал:

Редактирование скомпилированных скриптов ACS

 

В 07.07.2024 в 19:10, Tericonio сказал:

Редактирование карты через HEX

написал скрипты для упрощения процесса (QuickBMS включён в архив):

перетащить wad файл карты или dat/acs файл скрипта на unpack.bat для распаковки

перетащить wad файл карты или dat/acs файл скрипта на pack.bat для запаковки

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

get Name basename
string Name + ".txt"
idstring "ACS\x00"
get FSize long
findloc StrOffset string "STRL"
goto StrOffset

get ID long //STRL
get StrSize long

get Zero long
get StrCount long
get Zero long

//offsets
for i = 0 < StrCount
get StringOffset long
next i
log MEMORY_FILE 0 0
append
//strings
for i = 0 < StrCount
get Text string
put Text string MEMORY_FILE
put 0x0d byte MEMORY_FILE
next i
append

get MFSize asize MEMORY_FILE
log Name 0 MFSize MEMORY_FILE

 

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

get Name basename
get Ext EXTENSION
string Name + ".txt"
idstring "ACS\x00"
get FSize long
findloc StrlOffset string "STRL"
log MEMORY_FILE2 0 StrlOffset //before STRL
goto StrlOffset

get ID long //STRL
get StrlSize long

get Zero long
get StrlCount long
get Zero long

open "" Name 1
open 1
get TxtSize asize 
//parse txt
for 	
	getCT Text string 0x0d
	strlen TextSize Text
	math TextSize + 1
	putarray 0 -1 Text //save to array 0
	putarray 1 -1 TextSize //save length to array 1
	savepos Pos
	if Pos = TxtSize
		break
	endif 
next

getarray StringCount 0 -0x80000000


log MEMORY_FILE 0 0 // MF for STRL entry
//make new STRL entry
open MEMORY_FILE
append

//offsets
xmath BaseOffset "StringCount * 4 + 12"
set StringOffset long BaseOffset
for i = 0 < StringCount
getarray TextSize 1 i
put StringOffset long
math StringOffset + TextSize
next i 

for i = 0 < StringCount
getarray Text 0 i
put Text string
next i 

get MFSize asize
set NewStrlSize long MFSize
math NewStrlSize + 12
math NewStrlSize x 4 //alignment 4 bytes

open MEMORY_FILE2
put ID long //STRL
put NewStrlSize long

put Zero long
put StringCount long
put Zero long
log MEMORY_FILE2 0 MFSize MEMORY_FILE //append new STRL entry

xmath Delta "NewStrlSize - MFSize - 12"
putDstring "" Delta //append padding

xmath Offset "StrlOffset + StrlSize + 8"
xmath Size "FSize - Offset + 8"

open 0
log MEMORY_FILE2 Offset Size //append part after STRL entry
get MF2Size asize MEMORY_FILE2
xmath NewFSize "MF2Size - 8"
putVarChr MEMORY_FILE2 4 NewFSize long //new size
append
string Name > 4
string Name P "%Name%.%Ext%"
log Name 0 MF2Size MEMORY_FILE2 //write new acs to file

 

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

idstring "PWAD"
get FName basename
get Segments long
get SegOffset long
goto SegOffset

for i = 0 < Segments
get Offset long
get Size long
getDstring SegName 8
if i < 1
elif SegName = "SCRIPTS" || SegName = "TEXTMAP" || SegName = "DIALOGUE"
	string Name P "%FName%\%SegName%.txt"
	log Name Offset Size
elif SegName = "BEHAVIOR"
	string Name P "%FName%\%SegName%.acs"
	log Name Offset Size
elif SegName = "ZNODES"
	string Name P "%FName%\%SegName%.XGL3"
	log Name Offset Size
endif
next i

 

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

get FName basename
get Ext EXTENSION
get FSize asize
idstring "PWAD"
goto 0
get PWAD long
get Segments long
get SegOffset long
goto SegOffset
log MEMORY_FILE 0 0 //new wad
log MEMORY_FILE2 0 0 //SegTable
log MEMORY_FILE3 0 0 //
put PWAD long MEMORY_FILE
put Segments long MEMORY_FILE
set NewOffset long 0x0c
put NewOffset long MEMORY_FILE

//read seg data
for i = 0 < Segments
get Offset long
get Size long
getDstring SegName 8
if SegName = "SCRIPTS" || SegName = "TEXTMAP" || SegName = "DIALOGUE"
	string SegName + ".txt"
	open FName SegName 1
	string SegName > 4
	get SegSize asize 1
	append
	log MEMORY_FILE 0 SegSize 1
	append	
	put NewOffset long MEMORY_FILE2
	put SegSize long MEMORY_FILE2
	putDstring SegName 8 MEMORY_FILE2
	math NewOffset + SegSize
elif SegName = "BEHAVIOR"
	string SegName + ".acs"
	open FName SegName 1
	string SegName > 4
	get SegSize asize 1
	append
	log MEMORY_FILE 0 SegSize 1
	append	
	put NewOffset long MEMORY_FILE2
	put SegSize long MEMORY_FILE2
	putDstring SegName 8 MEMORY_FILE2
	math NewOffset + SegSize
elif SegName = "ZNODES"
	string SegName + ".XGL3"
	open FName SegName 1
	string SegName > 5
	get SegSize asize 1
	append
	log MEMORY_FILE 0 SegSize 1
	append	
	put NewOffset long MEMORY_FILE2
	put SegSize long MEMORY_FILE2
	putDstring SegName 8 MEMORY_FILE2
	math NewOffset + SegSize	
else 
	append
	log MEMORY_FILE Offset Size 0
	append
	put NewOffset long MEMORY_FILE2
	put Size long MEMORY_FILE2
	putDstring SegName 8 MEMORY_FILE2
	math NewOffset + Size
endif

next i

get MFSize asize MEMORY_FILE
putVarChr MEMORY_FILE 8 MFSize long //write new SegTable offset

get MF2Size asize MEMORY_FILE2
append
log MEMORY_FILE 0 MF2Size MEMORY_FILE2 //append new SegTable 
append
get MFSize asize MEMORY_FILE
string Name P "%FName%.%Ext%"
log Name 0 MFSize MEMORY_FILE //write to file

 

 

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

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


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

@xoixa 

Для BEHAVIOR из *.wad ещё необходимо добавить смещения на 01 00 00 00 01 00 00 00 53 50 54 52 хоть они и не так критичны, можно и через HEX кусок вставить, всё равно сами смещения не меняются и размер файла тоже из-за внесения смещений тоже не поменяются.

Но даже без них уже намного меньше работы :beach:

Но может со временем, что-то на эти смещения будут вести какие-то другая часть переменных. 

Изменено пользователем Tericonio

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


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

Те кто будут проходить игру с моим русификатором, если появляются переменные, к примеру (DIALOG-01-76), то мне необходим номер этого диалога, поскольку для некоторого кода в скриптах при отображении этого текста возможно должен убираться знак $, в некоторых местах эта переменна нужна, а где-то нет.

Самому всё это протестировать — это будет очень долго и сложно.

Так же если касается и не переведённого текста, если есть скидывайте в эту ветку такие моменты.

Это касается всех будущих обновлений.

В новом обновлении: Добавлены будут все карты, где есть текст для планшетов и объектов или входа в локации, добавлены 3 шрифта (один из них точно работает, поскольку относится к тексту при открывании запертых дверей), так порядка 50 строк пришлось изменить, новых строк порядка 100.

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

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


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

Обновление 0.61

Убрал переменные диалогов с карты, которые могли привести к появлению самой переменной — необходим тест.

Поправлено около ~50 мест разного характера, как диалоги, объекты, действия.

Добавлено нового текста — около 30 строк включая, Станцию улучшения оружия, Перемещение между локациями, и некоторые объекты.

Поправлен код бутылки пива, делая текст прозрачным — но необходим тест, переменную текста поднял выше альфа-канала, но пока не понятно, для чего альфа канал существует, может для прозрачности стекла??

Добавлены 4 шрифта для разных переменных отображающих текст, — Закрытые двери, Автомат Гвин, и повышение здоровья.

Внесены в некоторые скрипты уменьшенный масштаб текста, чтобы вмещался в рамки контуров.

Текст о повышении здоровья ещё можно уменьшить, если он ещё большой.

Благодаря @xoixa , изменение карт стало намного легче редактировать и вносить изменения, что уменьшило время.

 

По поводу тестов:

Если какой-то текст не то отображает или видна переменная, или где-то не переведено,  мне необходимо сохранение до выявления этого места желательно подойдя почти до срабатывания этого места, а так же сам текст который необходимо изменить.

Изменено пользователем Tericonio
  • Лайк (+1) 3
  • Спасибо (+1) 1

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


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

Обновление старых сохранений, для их последующей загрузки под новые русификаторы (Может не сработать)

Переходим в папку Save в корневой папке игры, находим последний файл сохранения или создаём новый файл сохранения через игру.

Распаковываем autosave*.zds или save_manual*.zds через 7-zip в той же директории.

Открываем файл карты se_*.map.json и находим

 "MAIN","modsize": 123456

 ”QCKDIS","modsize": 123456

 ”ENEMYVO","modsize": 123456

За место 123456 размер этого файла за минусом 8 — 16 байт при сохранении

Если игра оригинальная то смотрим какой размер в моём Моде, в Language.pk3/ACS/ — в этой папке будут расположены все *.dat файлы, из-за которых игра выкидывает в Главное меню, если файлы менялись

 "MAIN" в оригинале 43312 (уже отнято 8 байт), в Моде 43772 (уже отнято 8 байт)

 ”QCKDIS" в оригинале 3568 (уже отнято 8 байт), в Моде 3872 (уже отнято 8 байт)

 ”ENEMYVO" в оригинале 73628 (уже отнято 8 байт), в Моде 73504 (уже отнято 8 байт) (В версии 0.61 его пока ещё нет)

Замещаем эти байты se_*.map.json и перекидываем в архив сохранения наши json файлы.

И пробуем загрузить наше сохранение, если получилось загрузить значит можно дальше играть не с 0.

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

  • Похожие публикации

    • Автор: SerGEAnt
    • Автор: Albeoris

      Ссылка на игру: Nintendo Switch
      Front Mission 2: Remake
      Разработчик: Forever Entertainment Издатель: Forever Entertainment Дата выхода: 5 октября 2023 Наша команда:
      Переводчики: @Pet, @Silversnake14 Редакторы: @White_Rabbith Техническая часть: @Albeoris, @Pet Разбор ресурсов:
      Движок — Unity (Steam), Unity IL2CPP (Nintendo) Извлечение текста— ОК Замена шрифтов — Не требуется, доступны из коробки. Замена текстур — Пока не требуется. Перевод:
      Объем — 800 000 знаков, переведено на 16.06.2024 — 99.53%. Редактура — идёт полным ходом. Формат — совместный перевод в облаке. Вставка в игру — Успешно вставляется в PC версию. Релизы — не реже раза в месяц после релиза на PC, альфа-версия перевода релизной версий от 16.06.2024 доступна в тут. Желающие задонатить, могут сделать это через YooMoney или Patreon. Планы:
      ✔️ Раздобыть образ игры на Nintendo Switch — 05.10.2023 ✔️ Выпотрошить ресурсы из образа Nintendo Switch — 06.10.2023 ✔️ Найти живые тулы для работы с образами: найдены NSCB и NxFileViewer. ✔️ Найти или сдампить ключи шифрования: найдены на торрентах и в Google, делиться нельзя. ✔️ Распаковать ресурсы из основной игры: готово. ✔️ Распаковать ресурсы из патча: получилось благодаря помощи @welltall2, спасибо; я пытался распаковывать файлы предварительно не расшифровав .nca, после расшифровки всё получилось. ✔️ Найти бандл с ресурсами локализации: нашёл поиском “Good luck” в файле sharedassets0.assets ✔️ Распаковать Unity бандл sharedassets0.assets: готово, при помощи UABE. ✔️ Найти файлы локализации: нашёл поиском “Good luck” в файле I2Languages-sharedassets0.assets-40683.dat ✔️ Разобрать формат сериализованного Unity-объекта с ресурсрами локализации: разобрал, написал шаблон для 010 Editor. ✔️ Сконвертировать I2Languages в .txt файл для каждого языка: готово. ✔️ Разбить English.txt на отдельные файлы: готово, выбрал .resjson — удобно редактировать в блокноте и можно склеить обратно в .txt. ✔️ Залить получившиеся 472 файла в облако: готово. ✔️ Приступить к переводу — 07.10.2023 ✔️ Добавить к фразам имена говорящих — 15.10.2023 ✔️ Понять — где лежат имена говорящих: готово, в FAR Manager нашёл ссылки в level* asset-файлах, взял самый маленький, нашёл ссылки на ключи и имя говорящего рядом. ✔️ Распаковать .asset-файлы: готово, опять же помог UABE. ✔️ Найти нужный UnityObject: готово, опять же FAR и поиск по ключу. ✔️ Разобрать сериализованный формат: готово, начал с разбора в лоб, но решил поковырять исходники UABE и дошёл до AssetsTools.NET. Сборка для IL2CPP игр использует старую версию библиотеки и бажит, вместо этого сдампил заглушки типов при помощи Il2cppdumper, для этого понадобилось выдрать из образа Switch файлик “main”, содержащий собственно код игры (аналог libil2cpp.so); на вытащенных .dll-заглушках и заставил работать AssetTools (у них классная документация на вики). ✔️ Найти все ссылки на тексты во всех asset’ах и вытащить имена актёров: готово, тексты хранятся в сериализованных Conversations и SimpleConversations, структуру которых отлично видно в дебаге, а типы читаются в декомпилированных .dll при помощи dnSpy. В процессе удалось вытащить не только имена, но также выражение лица, ссылки на ответы на вопросы, если фраза предполагает взаимодействие с игроком, и прочие особенности говорящего в момент произнесения фразы; таким образом 6093 строчки из 11267 обзавелись указаниями на говорящего — это практически все диалоги в игре, за исключением некоторых бажных или отсутствующих в игре (тексты есть, но на них никто не ссылается). ✔️ Вышло обновление v131072, нужно распотрошить: готово, тексты актуализированы, всего 719 правок, значительных изменений в тексте нет — 15.10.2023 ✔️ Вышла демка в Steam, нужно распотрошить: готово, тексты актуализированы, всего 5337 правок относительно обновления на Switch v131072 — 12.04.2024 ✔️ Вставить тексты в игру: готово, тексты успешно подгружаются и корректно отображаются, проблем с шрифтами на данный момент не выявлено — 13.04.2024 ✔️ Выпустить тестовую версию с переводом демки — 19.04.2024; готво, распакуйте архив в папку с игрой (для Steam Deck используйте инструкцию от FM1). ✔️ Реализовать подгрузку измененных текстов на лету для удобства переводчиков — до 19.04.2024 21.04.2024: готово, игра на лету подтягивает тексты из папки с игрой, обновляя текущий проигрываемый диалог. ✔️ Дождаться релиза игры — 30.04.2024; всё работает, минимум изменений в текстах. ✔️ Выпустить альфа-версию перевода первых всех миссий — до 12.05.2024 16.06.2024 ⬜ Решить технические проблемы — до конца работы над переводом: ✔️ Запретить редактирование имён персонажей (при включении локализации мы будем автоматически отключать возможность отредактировать имена главных героев, так как в противном случае очень много текста придётся загонять под иминительный падеж; будет возможность вернуть редактирование, но уже на свой страх и риск, мы будем ориентироваться на дефолтные имена персонажей). Для разрешения редактирования имён персонажей, отредактируйте или удалите файл: \FRONT MISSION 2 Remake\Front Mission 2 Remake_Data\StreamingAssets\Mods\FFRTT - Russian Localization\BepInEx\config\Memoria.FrontMission2\Localization.cfg ✔️ Найти потерявшиеся элементы интерфейса (как минимум вкладка графических настроек остаётся без перевода по неизвестной причине, вероятно захардкожен текст)— нашли и перевели, просто файлов не было в демке, и я их пропустил ✔️ Вынести во внешние файлы захардкоженые позывные для перевода дефолтных — готово; не стали выносить файлы, вместо этого позывной по умолчанию, будет равен имени героя в верхнем регистре Изменить эту настройку можно здесь: \FRONT MISSION 2 Remake\Front Mission 2 Remake_Data\StreamingAssets\Mods\FFRTT - Russian Localization\BepInEx\config\Memoria.FrontMission2\Localization.cfg ⬜ Разобраться с изменением отображения полоски AP, почему-то она стала чёрной ⬜ Расширить некоторый интерфейс, чтобы в него помещались переведенные строки (список будет пополняться) ⬜ Моды — в свободное время: ✔️ Добавить спидхак — готово, включается по F1, конфигурируется в настройках. ⬜ Добавить читы для удобства редакторов ⬜ Ускорить некоторые анимации для того, чтобы сделать “быстрый” режим игры действительно быстрым ⬜ Добавить отображение радиуса атаки ⬜ Убрать отображение недоступного оружия (запросы на другие геймплейные моды можно присылать в личку)  
      Известные баги демки, которые НЕ касаются перевода:
      Если у вас на старте виснет игра с открытым меню настроек — качайте этот фикс, вероятно разрешение вашего широченного монитора отсутствует в списке досутпных. Если у вас всё было хорошо, а потом игра точно также стала виснуть на старте или загрузке — вероятно, вы играли с разных компов или с ноутбука и подключали/отключали монитор, открывали/закрывали крышку — та же самая проблема, только в профиль, публичного релиза фикса нет, но если вы с этим столкнулись — пишите, поможем.  
      Известные баги релиза, которые НЕ касаются перевода:
      Если продолжить диалог клавишей пробел или щёлкнуть в верхней части экрана после окончания миссии, диалог может зициклиться. Щёлчёк по диалогу или использование отмены закрывает диалог, как обычно. Ждём ответа разработчиков, возможно, попробуем починить сами.  
      Тестовое задание для желающиех приссоединиться к редактированию текста (присылайте перевод в личку):
      Кстати, мы ищем редактора на 2025 год для работы над текстами Front Mission 3.


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

×