Автор Тема: [PS2] Ghost in the Shell: Stand Alone Complex  (Прочитано 1022 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн xtz

  • Пользователь
  • Сообщений: 6
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« : 12 Апрель 2025, 18:37:41 »
Приветствую всех

Пытаюсь вменяемо перевести на русский данное изделие, так как единственный существующий перевод - вусмерть кривой. Искренне прошу помощи. Скажу сразу, что опыта работы у меня с гулькин нос, поэтому разбирался со всем по мере столкновения, плюсом могу чего-то не знать и неверно выражаться, извиняюсь заранее.

Сначала проблем особо и не было. Текстуры - срослось, формат вроде бы и кастомный, но битмап+палитра от tim2 стандартные, можно руками выдрать-вставить, да и конвертер для них есть к тому же (хоть и в одну сторону). Субтитры к видео - ещё проще, они в виде TXT. Запаковка - вроде бы получилось через нейронку пакер-анпакер накатать, объясняя ей по два часа структуру контейнера (с программированием на Вы, поэтому извращаюсь), даже что-то собирает, какие-то архивы прям байт в байт без отличий, а что-то нет, но игра пока работает, не ругается.

А вот теперь к проблемам. Пока нашёл только три:

Текст (игровой) - в виду того, что с текстом работать я практически не умею, не смог совладать. Мне уже пытались помочь, но не получилось. Из того, что сказали, и я смог понять - вменяемых поинтеров не видно, текст побит на блоки/группы (grup). Если есть возможность, то подгонять под длину строки оригинала не сильно хочется.
Текст (меню) - тут проблема в том, что он находится в исполняемом эльфе. Перебить текст - запросто. А вот вставить по длине нормально, т.е. условно EASY на ЛЕГКО/ЛЁГКАЯ - уже никак, символов больше. Кудос перебили на ЛЕГК, но это бред. Дизасм - тёмный лес для меня, к сожалению.
Шрифт - это вообще отдельный вид извращения. Я представлял, что он будет в виде текстуры, поэтому искал среди них - не нашёл. Позже, меня чёрт дёрнул поковырять исполняемый, и я его нашёл. Их несколько. Я не знаю как это нормально объяснить, но хранятся они в виде байт. Т.е. байтами нарисованы символы. Попробовал выдернуть, поковырять через GIMP. В raw image 8bpp grayscale - открыло, как и должно быть по идее. Но нарисовать у меня вменяемо не получилось. Там символы наложены друг на друга, нижний - темнее, верхний светлее. Пробовал рисовать руками, шрифты заготовленные использовать - получилось только с 0 и 1, и то достаточно паршиво. Алфавит вообще сломался, либо нижний символ не отображается, либо у букв пикселей не хватает.

Намудрено до жути, либо мне кажется

« Последнее редактирование: 12 Апрель 2025, 19:12:32 от xtz »

Оффлайн lupus

  • Пользователь
  • Сообщений: 3849
  • Пол: Мужской
  • man with no face
    • ВКонтакте
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #1 : 13 Апрель 2025, 20:50:01 »
По тексту в эльфе, по идее, поинтеры там обычные четырёхбайтовые, достаточно от офсета строки отнять размер заголовка и получить нужный адрес, который уже искать хекс редактором.
По крайней мере, на псп именно так было.

По шрифту - раз уж буквы можно рассмотреть хекс редактором, то скорее всего, шриыт 1bpp без всяких свиззлов и прочего. Попробуй в тайл молестере открыть и поиграть с настройками.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5294
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #2 : 14 Апрель 2025, 00:23:34 »
Текст (меню) - тут проблема в том, что он находится в исполняемом эльфе. Перебить текст - запросто. А вот вставить по длине нормально, т.е. условно EASY на ЛЕГКО/ЛЁГКАЯ - уже никак, символов больше. Кудос перебили на ЛЕГК, но это бред.
Там выравнивание адреса на текст до 4 байт и место есть, нужно только изменить длину. Перестраивать всё равно придётся, но это не сложно. В (USA) версии в SLUS_210.06 с 2AA7F8 текст, выше с 2A91E0 по 16 байт информации о тексте, из них последние 8 байт - длина и смещение относительно 2AA7F8. Например, EASY с 2AA8A8, описание с 2A9310 (01 00 00 00 12 00 00 00 04 00 00 00 B0 00 00 00), длина 4, смещение B0 (поэтому 2AA7F8 + B0 == 2AA8A8). Если указать длину 8, можно использовать ещё 4 байта:
292045-0Программу перестройки несложно написать.
Шрифт - это вообще отдельный вид извращения.
Там в каждом полубайте младшие 2 бита - пиксель одного символа, старшие 2 бита - пиксель следующего. Пишется простой скрипт для импорта/экспорта.

Оффлайн xtz

  • Пользователь
  • Сообщений: 6
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #3 : 14 Апрель 2025, 00:39:50 »
Программу перестройки несложно написать.
Пишется простой скрипт для импорта/экспорта.

Просить написать наверное не буду, это уже наглость, но можно чутка об этом поподробнее? Как для чайников. Просто с программированием я не дружу от слова совсем
« Последнее редактирование: 14 Апрель 2025, 00:54:32 от xtz »

Оффлайн Ogr

  • Пользователь
  • Сообщений: 7623
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #4 : 14 Апрель 2025, 01:02:29 »
но можно чутка об этом поподробнее? Как для чайников. Просто с программированием я не дружу от слова совсем
это уже наглость
может быть, чтобы не наглеть, стоит потыркать нейросети насчет этого?  ;)

Оффлайн xtz

  • Пользователь
  • Сообщений: 6
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #5 : 14 Апрель 2025, 01:22:08 »
может быть, чтобы не наглеть, стоит потыркать нейросети насчет этого?

Да, видать придётся

Добавлено позже:
Ну, тут с текстом вроде как ещё получилось, слава богу, лишь бы потом ничего не вылезло ещё. Остался шрифт и другой текст. Пока первое вообще не понимаю, если честно
« Последнее редактирование: 14 Апрель 2025, 20:33:05 от ghostdog3 »

Оффлайн ViToTiV

  • Пользователь
  • Сообщений: 179
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #6 : 14 Апрель 2025, 09:21:38 »
xtz, так а в чём проблема со шрифтом, если ты его нашёл и можешь открыть? кинь файл со шрифтом

Оффлайн xtz

  • Пользователь
  • Сообщений: 6
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #7 : 14 Апрель 2025, 14:23:07 »
так а в чём проблема со шрифтом, если ты его нашёл и можешь открыть? кинь файл со шрифтом

В отрисовке вся проблема. Вечером кину один из нескольких

Добавлено позже:
ViToTiV,
« Последнее редактирование: 14 Апрель 2025, 20:32:53 от ghostdog3 »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5294
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #8 : 19 Апрель 2025, 19:03:27 »
Вот что я выяснил по ресурсам игры. Написал скрипты на Python 3 для помощи, нужно установить Pillow (PIL) для изображений (pip install -U pillow от админа). Я пишу адрес как в отладчике с добавлением CPU перед ним, для получения позиции в файле SLUS_210.06 вычесть 0xFF000 и наоборот. 4b - означает 4 байта Little-Endian.
Думаю перевести игру не сложно, но требуется время. С PAL версией было бы проще, там больше места для шрифта, но это PAL.
# Текст
Записывается в UTF-8, в шрифте указываются code point из Unicode. Например, в 1-м шрифте остались иероглифы, в SLUS_210.06 записано 9A 89 00 00 (Unicode 0x899A), отображается как 覚, в UTF-8 кодируется как байты E8 A6 9A. Можно расширить шрифт и кириллицу указать как в Unicode, текст будет проще редактировать, но один символ будет занимать 2 байта.
trans_elf_get.py - достаёт из SLUS_210.06 текст в all_text_eng.txt, trans_elf_insert.py - вставляет в SLUS_210.06 текст из all_text_rus.txt и сохраняет как SLUS_210.06_rus.bin. Скрипты делались как для однобайтовой кодировки и в trans_elf_insert.py нужно изменить charmap для кириллицы.
Для остального текста, если нужно увеличить размер, нужно разбирать структуру для перестройки и перестраивать fpk контейнеры. В RTDEN2US.BIN полно места для текста, т. к. выравнивание 0x800 байт, только смещения менять, но текст дублируется для Communication Log в IMAGE.BIN.
# Шрифт
Адрес задаётся в CPU 2674E8 для 1-го шрифта:
lui a1,0x003D ; CPU 3D71C0, ELF 2D81C0
...
addiu a1,a1,0x71C0
2-й CPU 267508:
lui a1,0x003E ; CPU 3DCF80, ELF 2DDF80
...
addiu a1,a1,-0x3080
3-й CPU 267530:
lui a1,0x003E ; CPU 3E2340, ELF 2E3340
...
addiu a1,a1,0x2340
Формат шрифта:
font (выравнивание 0x40) 4b, размер font от font 4b.
fimg 4b, размер fimg от fimg 4b, графика символов:
*  _f (выравнивание 0x10) 2b, размер _f от _f 2b, ширина 1-го и 2-го символов для отображения 4b 4b, ширина общая (изображения) 4b, графика, где каждые 4 бита младшие 2 бита индекс из палитры пикселя от 1-го символа, старшие 2 бита от 2-го символа.
fref 4b, размер fref от fref 4b, таблица символов:
* Unicode code point 4b, 80 или 82 для обозначения 1-й или 2-й символ 1b, смещение делённое на 16 относительно fimg + 8 3b. 80/82 и смещение можно считать 4b, тогда >> 4 (разделить на 16), а 4 бита 0 и 2 считать как 1-й и 2-й символы.
_i 2b, размер _i от _i 2b, ? 1b, ? == 02 1b, 2b высота.
* В SLUS_210.06 такие значения: 5F 69 08 00 00 02 20 00, 5F 69 08 00 00 02 1B 00, 5F 69 08 00 00 02 1D 00.
font_conv.py - сохраняет шрифты из SLUS_210.06 в fontX.png (нумерация от нуля).
Файл SLUS_210.06 нельзя легко расширить для шрифтов, поэтому можно убрать 3-й шрифт (заметил его только в титрах и в начале) и сделать ссылку на 1-й, также можно ужать по ширине и есть лишние символы в конце 1-го шрифта, во 2-м (для меню) шрифте почти не используются строчные буквы.
# Контейнер FPK (fpk\0 = 66 70 6B 00)
IMAGE.BIN в контейнере fpk, который используется в других играх от Cavia. Скрипт "Resident Evil Bin Fpk . Resident Evil Dead Aim (BIN) . fpk\0 . lst . fpk [resident_evil_bin_fpk.bms]" (https://aluigi.altervista.org/quickbms.htm) распаковывает IMAGE.BIN вроде правильно, но нужно нажимать клавиши для исправления некоторых имён файлов. fpk содержит другие fpk и есть сжатые fpk, которые начинаются с \0V3a. Для игры Drakengard есть распаковщик fpk https://github.com/Surihix/Drakengard1and2Extractor, но он не работает с fpk от Ghost in the Shell: Stand Alone Complex из-за некоторых отличий, также для сжатых V3a используется другой алгоритм сжатия, но он работает с ZIM изображения, есть шаблон структуры для Hex-редактора 010 Editor (нужно исправить) и можно доработать при желании.
Сжатые данные (V3a) можно разжать игрой и заменить в fpk, тогда можно изменить, как я поступил с текстом для Training.
Формат V3a: \0V3a (00 56 33 61) 4b, ? 4b, размер разжатых данных 4b, размер сжатых данных 4b.
# Текст в Training и на уровне 8
Текст для Training и на уровне 8 (https://youtu.be/VmSMesREWwM?t=7684) находится в сжатых данных, я разжал и заменил в IMAGE.BIN. По-хорошему нужно пересобирать fpk, но я добавил в конец и изменил позиции и размеры. Это делает скрипт image_bin_add_unc.py, он берёт IMAGE.BIN.fpk и файлы из папки uncomp_files, на выходе IMAGE.BIN. Текст в конце каждого *_unc.bin. Возможно где-то ещё есть сжатый текст.
# Разжатие данных
Код разжатия CPU 193ECC, в отладчике breakpoint на выполнение, в регистре a0 адрес на информацию, перейти на него и там по 4 байта будет: (0) начало сжатых данных, (1) текущий адрес на разжатые данные, (2) начало разжатых данных, (3) чего-то прочитано, (4) ?. Step Out и данные разжаты. Смотреть на (0) перед разжатием (сжатые данные могут быть перезаписаны), по этим данным будет понятно, где в IMAGE.BIN сжатые данные. Может вызываться больше одного раза для одних данных: если (3) != 0, значит не в 1-й раз, если (1) - (2) == размер разжатых данных (после разжатия на Step Out), то готово. Сохранять разжатые данные из RAM нужно сразу после последнего Step Out, иначе будут изменены.
Для данных Training и других уровней адрес в регистре a0 всегда был CPU 5AD090 и разжимало в CPU BFE1C0 (или другой адрес).
Я использовал Cheat Engine для копирования разжатых данных, сначала поиск начала данных, потом Memory Viewer > File > Save memory region и удалить начало от Cheat Engine.
# Изменения в переводе Kudos
Сравнил файлы, взял какую-то версию с psxplanet.ru "Ghost in the Shell - Stand Alone Complex (UNK) (fix).7z". В IMAGE.BIN перевели rden.wrd и wrd.wrd (основной текст), какие-то слова с 103B1000. В RTDEN2US.BIN зачем-то изменили байты аудио, перевели текст диалогов, повторяется в IMAGE.BIN для Communication Log. Субтитры в MOV00US.BIN, MOV01US.BIN, MOV02US.BIN.
# Переход на уровень
Через отладчик PCSX2 можно перейти на нужный уровень для тестирования. В Debug > Open Debugger в Breakpoint ПКМ > New: * Execute, Address 2543CC. Когда будет начата новая игра, отладчик остановится, двойной клик правой части для a0, a1, a2 меняем с 00000001 на нужный уровень и подуровни, потом Run. Например, для a0 a1 a2 = 02 01 01 - уровень 4, 03 01 01 - 7-й, 03 02 01 - 8-й, для Training 6 1 1, 6 1 2, 6 1 3, 6 1 4, 6 1 5, 6 1 7, 6 2 1, 6 2 2, 6 2 4, 6 2 3, 6 1 6, 6 2 5.

xtz, Зачем вам редактировать текстуры? Вы превосходного владеете английским или японским и знакомы со вселенной?

UPD2: Добавил разжатый уровень 8 и как переходить на нужный уровень.
« Последнее редактирование: 20 Апрель 2025, 01:09:26 от Sharpnull »

Оффлайн xtz

  • Пользователь
  • Сообщений: 6
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #9 : 20 Апрель 2025, 20:47:46 »
Sharpnull, спасибо огромное за подробное разъяснение, буду понемногу разбираться

xtz, Зачем вам редактировать текстуры? Вы превосходного владеете английским или японским и знакомы со вселенной?

Да я не то, что бы собирался. Просто при ковырянии ресурсов под руку попались. Поэтому разбирал их тоже, как раз с помощью шаблона от экстрактора Дракенгарда. Сомневаюсь, что текстуры тоже переводить буду, но мало ли

Добавлено позже:
Sharpnull, font_add как-то совершенно странно себя ведёт. Все символы превращаются в кашу, а скрипт выводит, что запаковал всего один символ. Пробовал обратно конвертировать оригинальные шрифты в png без изменений, которые были получены через font_conv - то же самое
« Последнее редактирование: 13 Июнь 2025, 05:55:45 от ghostdog3 »

Оффлайн grooomy

  • Пользователь
  • Сообщений: 1147
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #10 : 10 Май 2025, 22:28:11 »
Проходил много раз на PS2. Я считаю - лучшая игра по вселенной. Русский пиратский перевод не только кривой, но еще и игра зависает в парочке мест из-за него.
Желаю успеха с переводом. Глядишь выйдет чего.

Оффлайн xtz

  • Пользователь
  • Сообщений: 6
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #11 : 10 Май 2025, 22:38:27 »
grooomy, спасибо. Постараюсь до конца довести, бросать не охота, довольно далеко зашёл (не без помощи, конечно). Ну, по сравнению с предыдущими попытками. Там всё довольно быстро сходило на нет из-за сложностей и отсутствия опыта как такового

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 17
    • Просмотр профиля
Re: [PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #12 : 10 Июнь 2025, 05:54:08 »
игра зависает в парочке мест из-за него
А в каком именно месте зависает? и как именно, нужно подождать чтобы продолжить игру или нужно запускать английскую версию, доходить до следующего сейва и потом переключаться на русскую?

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 17
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #13 : 16 Июнь 2025, 17:51:05 »
Вообщем попробовал сам пройти чтобы узнать насколько плохой перевод в игре и есть ли какие то баги ломающие игру.
У меня игра вылетела на миссии с Татикома(8 миссия), после того как я встал на первый лифт. Если что использовал OPNPS2LD-v1.2.0-Beta-2173-1430917 и OPNPS2LD-v1.2.0-Beta-2182-0f736b9.
Что касается перевода, да он желает лучшего, перепутан пол, где-то нет пробелов, где-то перенос на новую строку не там где надо, почему то почти в каждой кат-сцене не переведено последнее предложение. Это только то что бросается в глаза, наверняка там еще много всяких ошибок.
« Последнее редактирование: 16 Июнь 2025, 18:49:24 от SegaMark »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 17
    • Просмотр профиля
[PS2] Ghost in the Shell: Stand Alone Complex
« Ответ #14 : Сегодня в 06:44:47 »
xtz, Есть какие нибудь успехи по переводу?