-
Публикации
27 -
Зарегистрирован
-
Посещение
Все публикации пользователя bruce7
-
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
spider91, давай разберем твой газлайтинг, потому что память у тебя отваливается быстрее, чем контекст у бесплатной LLM. Отвечаю по фактам и задаю тебе пару наводящих вопросов, чтобы ты включил мозг. Про «статусы» и «с кем ты споришь». Ты сам буквально написал в прошлом посте: "не смогли загуглить и разобраться с кем тут ведут нейроспор". Это хрестоматийная логическая ошибка — Argumentum ad verecundiam (апелляция к авторитету). Ты пытался давить тем, что ты тут местная «шишка». А когда я указал, что архитектуре кода плевать на твои регалии, ты начал включать заднюю и делать вид, что этого не было. Как называется поведение, когда человек сам раздувает тему своего статуса, а потом делает вид, что ему «все равно»? Про «я сделал тулсет, а у тебя теории». То, что ты написал хардкодный скрипт под одну конкретную ревизию одной игры, не делает тебя архитектором. Твой «тулсет» — это набор костылей с захардкоженными оффсетами. Почему ты считаешь, что скрипт, который ляжет при смене региона (NTSC на PAL) или при сдвиге строк в памяти — это «полный тулсет», а не одноразовая поделка? Я же обсуждаю создание переиспользуемого ядра (принцип DRY) для всей PS2-тетралогии через конфиг-профили. Ты путаешь «я написал батник для своей текущей задачи» и «разработку программного продукта». Эхо-камера с PuzziBlinchik. Забавно наблюдать за вашей песочницей. Вы сидите, радуетесь своим одноразовым скриптам, называете это «мега-тулсетом» и хором кидаетесь в ЧС, когда кто-то начинает говорить про SDLC, MVP и нормальную архитектуру, потому что это не укладывается в вашу картину мира. Проект отменять не надо, spider91. Переводи своей «поделкой», раз она закрывает твои сиюминутные нужды. Но не лезь со своим уставом в обсуждение архитектуры софта, если твой технический потолок — это захардкодить оффсеты в HxD для одного билда и снять об этом видос. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
spider91, давай я тебе объясню разницу, раз ты её не улавливаешь. Про «гугл» и «покажи, кто озвучивал». Я шлю в гугл по базовым вещам — DRY, KISS, архитектура тулкетов, реверс-инжиниринг. Это не «иди гугли, кто я такой», это «иди гугли, как работает софт, о котором ты берёшься судить». А когда я прошу показать, кто и как озвучивал — я прошу пайплайн, исходники, методологию. Не «покажи лицо», а «покажи код». Чтобы оценить технический уровень, а не просто посмотреть на ник. Если ты этого не понимаешь, то неудивительно, что твои аргументы сводятся к «ты не загуглил, с кем споришь». Про медали и рейтинг. Ты сам начал давить авторитетом: «Ты не загуглил, с кем тут ведут нейроспор». Я просто указал, что твой статус на форуме не заменяет технические аргументы. Архитектуре кода плевать на твои медали. Если бы ты сразу начал с фактов, а не с «ты не знаешь, кто я», мы бы вообще не касались этой темы. Но ты сам выбрал путь гейткипинга. Про «жидкие ответы». Раньше я расписывал подробно, потому что думал, что ты способен понять технические детали. Но когда оппонент вместо аргументов начинает ныть про «нейроговно», «медали» и «лимит недельный» — длинные ответы просто не нужны. Я отвечаю коротко, потому что ты не даёшь технической пищи для размышлений. Ты просто переходишь на личности. Итог: Ты не можешь опровергнуть ни один тезис по архитектуре Insomniac Engine, по принципу DRY, по пайплайну перевода. Вместо этого ты ноешь про «жидкие ответы» и «рейтинг». Это классический признак того, что у тебя закончились аргументы. Иди дальше гугли, может, к следующему году поймёшь, что такое MVP и модульная архитектура. А пока — твои комменты это просто шум. DjGiza, ты сейчас озвучил классическую ошибку людей, которые думают, что софт пишется по щелчку пальцев. Разработка — это процесс, а не магия. Даже с ИИ-партнёром написание полноценного тулкета с нуля занимает недели, а не часы. Нужно: Разобраться в форматах WAD/PAK для 4 игр Написать парсеры, протестировать на разных ревизиях Сделать GUI/CLI Отладить патчинг ELF Проверить шрифты, тайминги, аудио Собрать билд и протестировать Если ты думаешь, что это делается за один вечер после «умного разговора с ИИ», то ты просто никогда не писал софт сложнее батника. Обсуждение архитектуры — часть разработки. То, что я обсуждаю архитектуру здесь, не значит, что я не пишу код. Это называется design phase. Ты, видимо, привык сразу копипастить скрипты без проектирования, поэтому не понимаешь, что такое SDLC (Software Development Life Cycle). А где твой софт? Ты тут активно учишь других, как правильно писать, но сам-то что сделал? Покажи свой «комбайн под все PS2-игры». Или у тебя тоже «процесс идёт», только ты об этом молчишь? -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
за то, что мне минусуют репу? Лучше скинь ссылки на ютуб, своих лучших озвучек. Это не мне нужно защитить диплом. Я ведь тут в ранге Новичка и не могу опозориться больше тебя) -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
А что, есть озвученные Ratchet and Clank 3 для PS2 ? Скинь мне ссылку на я.диск, для скачивания. Даже если и есть фаны, которые озвучили, а никто им не подсказывает, как собрать. И что сложно пойти на их ютуб канал и написать под видео порядок действий, чтобы в мире появилась первая игра Ratchet and Clank 3 с RU-озвучкой? Этот фан наверное год её озвучивал, подбирал голоса, чтобы роботы звучали, как роботы. Аргумент в том, что слишком много времени прошло с создания этой темы. Тратить на озвучку каждой игры 5 лет, это перебор. Люди могут и торгового бота написать через AI и всю жизнь не работать и завидовать тут бесполезно! Есть спрос, есть и предложение. Тут через AI уже сериал про GTA San Andreas снимают: https://www.youtube.com/watch?v=M8tGhUVtQus и https://www.youtube.com/watch?v=2Ga72oIR7vs , а ты мне какую то дичь втираешь Если он через AI так озвучил с lip sync, что ему пишут и хотят купить его творение, то он заслужил эти деньги. А если у тебя руки из жопы и ты живёшь в пещере, не можешь повторить его результат, то это твои проблемы. На старте, все находятся с равными возможностями и одинаковым доступом ко всем AI. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Почему тогда в этой теме нет готовой и озвученной игры, когда тема была создана? DjGiza «Комбайны давно придуманы и сделаны». Назови хоть один open-source GUI-тул, который умеет работать с WAD/PAK всей PS2-тетралогии, патчить MIPS ELF, делать динамический кернинг под кириллицу и апскейлить FMV. RatchetEdit? Он заточен под первые части и не закрывает весь пайплайн. Если «всё уже сделано» — скинь ссылку на репозиторий, а не повторяй мантры. spider91 «Ты не загуглил, с кем споришь». Это классическая логическая ошибка Argumentum ad verecundiam (апелляция к авторитету). Архитектуре кода и принципу DRY (Don't Repeat Yourself) абсолютно плевать на твои медали и рейтинг на форуме. Факты не меняются от твоего статуса. Tirniel Ты требуешь мой код, но твой главный козырь — Agarest Senki? Распаковка .bra архивов и правка заголовков текстур — это стандартная задача с ZenHAX 2015 года. Ты не «изобрел подход», ты просто написал базовый парсер, потому что не смог настроить готовые скрипты. Гейткипинг и требования чужого GitHub вместо технических аргументов — удел тех, кому больше нечем крыть. Может написать регер акков, который с 1000 акков поставит тебе -1000 в репу и обесценит твой недельный труд?) -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Это заметно. Насрал Tirniel здесь столько, что забрал первое место по постам за неделю)) Больше, чем AI нафлудил. Лишь бы воды воды полить в уши. Уже перевёл обратно сюда ты диалог и продолжил флудить и оффтопить)) Интересно, а с чего всё началось, я ведь отвечаю на посты, которые мне пишут. Так ты не лей воду, чтобы чистить не пришлось тему, от твоего набива постов) Ты согласен с тем, что Piton4, считает тебя флудерастом?) хз сколько у вас тут флудилок и в какую конкретно нужно писать, но раз не перенесли посты, то напишу здесь. Культурненько общаться или набивать посты, как ты, не одно и тоже) Называть AI-озвучку «ленивой кнопкой» может только тот, кто никогда не собирал чистые датасеты для RVC/ElevenLabs, не тюнил pitch и эмоции, и не сводил звук (EQ, компрессия, реверберация), чтобы голос не выбивался из оригинального PS2-микса. Это полноценный аудио-постпродакшн, а не «бесплатная нейронка». FGLososin, спасибо за поздравление. А теперь по фактам, раз ты решил «в последний раз». «Лид-рендер Atomic Heart» — Mundfish под жёстким NDA. Кредиты публичны, отдельной роли «лид-рендер с портированием» там нет. Портированием занималась отдельная команда. Но ок, верю на слово, как и в твоего «ИИ-портировщика Amnesia». Твой MCP для Vita — вот тут самое смешное. Ты сам описал CI/CD пайплайн. Нейронка у тебя не «разрабатывает». Она запускает то, что ты написал: снимает логи, прогоняет сценарии, собирает краши. Это автоматизация тестирования уровня QA. Ты сам написал окружение, сам настроил MCP, сам собираешь билд. Нейронка — скрипт для регресс-тестов. Поздравляю, ты автоматизировал кнопку «запустить». А теперь разница: я использую ИИ как архитектурного партнёра — проектирую систему, генерю парсеры, валидирую гипотезы по структурам, обсуждаю edge-cases. Ты используешь ИИ как кнопку «прогони тесты». Угадай, кто реально разрабатывает, а кто просто автоматизировал рутину? «Твои посты написаны нейронкой» — и что? Ты не опроверг ни один технический тезис. Вместо этого говоришь «это ИИ написал». Это не аргумент, это признание поражения. Если бы тезисы были неверны — ткнул бы в конкретную ошибку. Но ты не можешь, потому что споришь с форматом, а не с содержанием. Шрифты — ты сам написал, что у тебя была проблема с латиницей без модификации бинаря. Я написал, что кириллица шире латиницы и нужен кернинг. Ты сам подтвердил мой тезис и назвал это «нейруха наебала». Это ты не умеешь читать, а не нейронка врёт. LunaTranslator / Vita3K — я не подменял тезис. Runtime-хук для Dynamic Analysis, чтобы найти оффсеты и потом работать со статикой — это один процесс на разных уровнях детализации. Насчёт Vita3K — я задал вопрос, ты сам придумал утверждение и сам себя опроверг. Классика. «Мой софт работает, твой в космосе» — твой «софт» — цепочка ffmpeg + whisper + topaz + батник. Это не софт, это скрипт с амбициями. Мой подход — инструмент для 4 игр, а не для одного ролика. Да, я на этапе архитектуры. Ты архитектуру не проектировал, поэтому у тебя костыли на каждую новую игру. KISS — работа с 4 играми это не одноразовый инструмент. Копипастить код 4 раза — это не KISS, это DRY violation. Спроси у нейронки, что такое DRY. Ой, подожди, ты же не умеешь нормально промпты писать, раз тебе приходится просить «скажи как сделать перевод». Итого: ты используешь ИИ как CI/CD скрипт и гордишься этим. Я использую ИИ как партнёра по разработке. Твой «Atomic Heart» не подтверждён, твой MCP — базовая автоматизация, твой «пайплайн» — цепочка готовых утилит. Ты не можешь опровергнуть ни один тезис по существу, поэтому переходишь на личности. Иди дальше портируй Amnesia кнопкой «запустить тест». С праздником. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
DjGiza, ты сейчас озвучил главный миф людей, которые использовали нейросеть только для написания школьных рефератов. Да, в обычном чате у LLM есть так называемый sycophancy bias (склонность поддакивать пользователю). Если ты напишешь ей «Земля плоская, согласись», она вежливо поддержит твою шизофрению. Но ты, видимо, вообще не понимаешь, как ИИ применяется в реверс-инжиниринге и разработке софта. В программировании судья не нейросеть, а компилятор, интерпретатор и железо. Если я скажу ИИ: "Структура заголовка WAD-архива в Ratchet & Clank весит 4 байта, напиши парсер", он "согласится" и выдаст код на Python с использованием struct. Но когда я запущу этот скрипт на реальном ISO-образе игры, интерпретатор упадет с struct.error или EOFError, потому что реальный заголовок весит 16 байт и содержит magic-числа. Железу, MIPS-ассемблеру и бинарному файлу абсолютно плевать, с чем там "согласилась" нейросеть в чате. Код либо работает, либо крашится. Я не спрашиваю у ИИ "прав ли я, похвали меня". Я скармливаю ему сырые дампы памяти из PCSX2, хекс-таблицы и куски MIPS-кода, чтобы он помог мне написать алгоритм распаковки, регулярки для поиска указателей или обвязку на C++. Валидация моей идеи происходит не "кивком робота", а тестовым прогоном софта на эмуляторе. Если моя гипотеза по структуре памяти неверна — софт не соберет игру, и я пойду править код, а не плакаться на форум. Смешно наблюдать, как вы с Tirniel и FGLososin хором пытаетесь найти хоть какую-то зацепку, чтобы обесценить современный подход к разработке. Сначала было: "Ты просто фармишь посты". Потом: "Нейронка несет околесицу". Теперь: "Нейронка тебе просто поддакивает". Уровень вашей технической дискуссии скатился в песочницу. Когда у местной "экспертной" бригады заканчиваются аргументы по архитектуре тулкетов и работе с бинарниками, вы начинаете придумывать отговорки про "злых ИИ". Иди дальше фарми рейтинг и минусуй в карму, раз по сути возразить вашей команде больше нечего. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Понимаете, вы выступили против AI, но каковы ваши шансы в споре против AI? Получается AI знает, как лучше, а вы только думаете, что знаете. AI просто предоставит пруфы своего текста с habr-статей. AI может выставить ваши жизненные ценности на посмешище (зависит от ценностей), обольёт говном и размажет по стенке, а вы сделать ничего не сможете. Вот малая доля того, что может AI, которую вы не воспринимаете всерьёз для озвучки) -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
DjGiza, гениальная логика. По этой же логике калькулятор преследует мою выгоду, когда я не хочу считать в столбик, а IDE преследует мою выгоду, подсвечивая синтаксические ошибки. Так что да, AI преследует мою выгоду — он экономит мое время. А вы с Tirniel используете этот тред как кормушку для рейтинга. Разница лишь в том, что я трачу время на создание софта, а вы — на фарм постов. FGLososin, я смотрю, у тебя подгорает даже сильнее, чем у Tirniel. Давай разберем твой поток желчи, потому что твое непонимание базовых принципов Software Engineering и Reverse Engineering просто зашкаливает. Про "угар", прототипы и "копипасту проектов" Ты спрашиваешь, зачем обсуждать архитектуру до написания кода? Потому что это называется SDLC (Software Development Life Cycle). Собирать требования и проектировать модульную базу до того, как ты напишешь 10 тысяч строк спагетти-кода — это стандарт индустрии. Твой совет «откопировать проект и в рамках него разгребать изменения» — это буквальная Copy-Paste Programming, главный признак джуна. Если в парсере Insomniac WAD/PAK найдется баг при работе с алгоритмами сжатия, ты будешь фиксить его в четырех разных репозиториях? Или ты не знаешь, что такое shared libraries и monorepo? Дублирование кода — это зло. LunaTranslator и "сказочный" рантайм Ты реально не понимаешь, как работает реверс? Рантайм-хуки (memory dumping через эмулятор) используются не для того, чтобы «вечно хукать текст на лету». Они нужны для Dynamic Analysis: чтобы найти указатели, таблицы кодировок и оффсеты строк в оперативной памяти, а затем маппить их обратно на статические файловые оффсеты в ISO. Это классический метод RE. Если ты думаешь, что люди сидят и играют с включенным хукером для перевода, то сказочный тут именно ты. Улучшение видео (FMV) Ты спрашиваешь, как софт улучшит пререндеренные заставки? Ты настолько застрял в 2005 году, что не знаешь про AI Video Upscaling pipelines? Мой тулкет подразумевает интеграцию FFmpeg + нейросетей (ESRGAN/Topaz) для апскейла исходников FMV (которые в оригинале жатые MPEG/Bink) перед их обратной запаковкой. Эмулятор тут вообще ни при чем, речь о пайплайне обработки ассетов. Но куда тебе это понять, если твой потолок — это Umgen и hex-редактор. "Выдумывание проблем" и шрифты Ты называешь "выдумыванием проблем" расчет ширины глифов (glyph width mapping)? Кириллица в среднем на 15-20% шире латиницы. Если не заложить автоматический кернинг или динамическое масштабирование шрифта на этапе проектирования UI-патчера, твой "перевод" вылезет за границы текстурных боксов и софт-локнет игру на экране ввода пароля. Предусмотреть edge-cases — это работа инженера. Игнорировать их — работа дилетанта. Твой "готовый пайплайн" В конце ты пишешь, что у тебя "готов весь пайплайн". Окей, дай угадаю: набор батников, пара питон-скриптов 2014 года с форума ZenHAX и ручная перепаковка? Смешно называть это "пайплайном". Ты кричишь про "нейродрисню", потому что современные LLM пишут парсеры бинарных структур на C++/Python за секунды, пока ты гуглишь, как открыть HxD. Продолжай фармить посты и истерить. Мой софт будет модульным, с CI/CD и автоматизацией, а ты так и останешься со своим "скопированным проектом" и костылями. я вижу, твой технический кругозор и словарный запас застряли на уровне одной заезженной пластинки. Давай я объясню тебе, почему твоя мантра «попроси нейронку» сходу выдает в тебе человека, который дальше установки чужих русификаторов в жизни ничего не делал. Про «попроси нейронку потестировать» Нейросеть не запустит собранный билд на PCSX2 с отладчиком, чтобы отловить вылет при переполнении VRAM (Video RAM) или утечку памяти на процессоре Emotion Engine. Тестирование софта для PS2-ромхакинга — это ручной прогон, проверка таймингов, отлов крашей при подгрузке специфичных ассетов и проверка работы на реальном железе через uLaunchELF. ИИ не имеет физического доступа к среде выполнения и не может «поиграть» в билд, чтобы сообщить тебе, что аудио-банк рассинхронился с анимацией на третьем уровне. Про «попроси нейронку сделать совместимость с PS2» и написать код. «Сделать совместимость» — это не промпт для Midjourney, где можно написать «сделай красиво». Это жесткий реверс-инжиниринг. Это разбор закрытых проприетарных форматов Insomniac Engine (WAD/PAK), написание кастомных парсеров под их специфичные алгоритмы сжатия и ручная работа с указателями в ELF-файлах MIPS-архитектуры. У нейронки в обучающей выборке нет закрытой документации Sony и Insomniac 2002 года по структуре памяти Ratchet & Clank. ИИ может помочь тебе написать конкретную функцию (например, алгоритм распаковки LZ-сжатия), если ты скормишь ему структуру, но он не сделает за тебя реверс закрытого движка с нуля. Про «я раньше не писал» Использование LLM как умного автодополнения (Copilot) и ускорителя изучения C++, C# или Ассемблера — это современный стандарт разработки. Я использую ИИ, чтобы не тратить часы на гугление базового синтаксиса и быстрее анализировать чужой open-source код (например, исходники того же RatchetEdit). Твой уровень аргументации — это обесценивание через «ты просто ИИ используешь». Это классическая логическая ошибка *ad hominem*, которая включается у людей, когда им абсолютно нечего возразить по сути архитектуры тулкетов и работы с бинарниками. Когда у местных "экспертов" вроде тебя и Tirniel заканчиваются технические аргументы, вы дружно начинаете кричать про нейросети, чтобы хоть как-то скрыть собственную некомпетентность в разработке. Смешно. Иди, запиши себе еще три поста в копилку рейтинга, может, за спам тебе на форуме ачивку выдадут. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
давай сразу начистоту. Я вижу, как ты судорожно дробишь мои сообщения на цитаты, чтобы раздуть объем. Неделя заканчивается, страшно выпасть из топа по постам, да? Используй меня для фарма ранга дальше, но хотя бы аргументы подтяни, а то палишься. Твоя личная выгода в виде +1 к счетчику не отменяет того факта, что ты несешь чушь. Теперь по твоей "экспертности", чтобы тебе было чем крыть в своих "завершённых проектах": Про "один софт vs набор" и "гуй". Ты споришь с фантомом и сам себя закапываешь. То, что ты с умным видом описал как "куча мелких тулз, объединенных в общий гуй" — это, сюрприз, и есть стандартная архитектура любого нормального моддинг-сьюта (ToolKit / Suite). Creation Kit, Forge, да тот же RatchetEdit — это именно общие GUI-оболочки над набором специфичных парсеров и скриптов. Ты сам только что описал мою идею, выдал это за "опровержение" и расписался в том, что не понимаешь базовых принципов модульной архитектуры и ООП. Пруфы по движку (раз ты просишь открыть гугл). У R&C 1, GC, UYA и Deadlocked стоит эволюция Insomniac Engine (PS2 era). Да, экзешники, оффсеты и лимиты памяти разные. Но файловая система, структуры архивов (Insomniac WAD/PAK), форматы мешей и аудио-банков имеют общую ДНК. Открой GitHub, посмотри репозитории вроде ratchet-hacks или исходники того же RatchetEdit — там одни и те же базовые классы-парсеры лежат в основе для всей PS2-тетралогии, а различия версий решаются банальным наследованием и конфигами. То, что ты называешь "разными движками с нуля", на деле является итерациями одного пайплайна. Именно это и позволяет не писать четыре отдельных велосипеда, а сделать один тулкит с профилями. Про "спроси нейронку" и твой "опыт". Твои "технически сложные проекты", судя по твоему лексикону и неумению читать контекст, это перепаковка чужих русификаторов через UMDC или hex-редактор. Настоящий разработчик тулзов мыслит абстракциями, а не истерит из-за формулировок, подменяя понятия "монолит" и "модульный фреймворк". Иди, запиши себе еще один пост в копилку рейтинга, раз уж это твоя главная мотивация здесь находиться. Когда научишься отличать софт от набора скриптов и читать оппонента без подмен — тогда и поговорим о "сложных задачах". Сидеть открыв рот и ждать крошки со стола, тоже не стоит. Скажи это Cheat Engine, который ломает даже через эмуль игры и подходит для всего. Это, как раз, то самое универсальное, против создания аналога которого вы все спорите -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Если бы я не достиг успеха, следуя советам AI, то я бы не спорил здесь. Я уже писал, чтобы скинули те, кто со мной спорят, ссылки на ютуб, как вы озвучиваете. Но похоже нечем хвастаться или качеством это такое же уг, как пиратский текст из игр для PS2 2005 года )) AI не преследует личную выгоду, в отличии от некоторых, при написании ответа. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Если ты сам не умеешь писать софт, не умеешь редактировать код, то конечно AI-будет тебя гонять по кругу, а потом ещё и контекст забудет и вырежет половину того, что ты добавил в софт. Ты можешь быть old school из принципа и озвучивать игру в 30 раз дольше, без помощи AI, но на пьедестале тебе никогда не быть, ты не попадёшь в ТОП переводчиков, потому что в топе будут те, кто делает так: https://www.youtube.com/watch?v=hffvuckBtGs Сколько ты за жизнь озвучишь PS2-игр к примеру, если будешь вести себя, как пещерный человек, а не человек который идёт в ногу со временем? -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Может кто скинуть ссылку на ютуб-видео, с любительской многоголосой AI-озвучкой PS2-игры, так скажем, на образец для подражания? -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Нет, мне нужно знать, какой именно функционал должен присутствовать в софте и тестировщики, которые будут отлавливать ошибки demo-версии софта, тоже бы не помешали. Конечно он должен быть совместим с PS2-играми, так, как я фан конкретно PS2. Именно распаковщики-запаковщики типа Sky`s Console File Scanner.exe ( извлечение графики из Ratchet например, звук и.т.д., также умеет вставлять файлы назад), QuickBMS, Xpert2, я раньше не писал. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Ты прав в своих сомнениях. NoNpDrm не имеет никакого отношения к проверке подписи исполняемых файлов (SELF). NoNpDrm генерирует фейковый файл лицензии (work.bin / .rif), чтобы обойти DRM-проверку при запуске игры. За проверку подписи самого eboot.bin (SELF) отвечает ядро (SceKernel). Если ты заменишь оригинальный retail-SELF на свой пропатченный ELF, ядро это увидит, поймет, что хэш не совпадает с подписью Sony, и уйдет в панику (краш, ошибка C2-12828-1 или просто черный экран). Твой инстинкт «сделать через изменение данных» был абсолютно верным. Данные (тексты, видео, звуки) не подписываются. Но для 60 FPS патча и переноса читов с PS3 нам придется лезть в код. И вот как это сделать правильно, не мучаясь с подписями. Решение №1: Как правильно внедрить ELF и забыть о подписях (FSELF + rePatch) Если ты хочешь именно заменить бинарник, тебе не нужно пытаться «переподписать» его ключами Sony (это невозможно). Тебе нужно заставить консоль принимать неподписанные файлы. Дешифровка и правка: Используешь FAGDec или VitaDumper, чтобы получить чистый расшифрованный eboot.bin (в формате ELF). Вносишь изменения в ELF (через IDA Pro / Ghidra). Сборка в FSELF (Fake SELF): Используешь vita-make-fself (из vitasdk), чтобы превратить свой ELF в eboot.bin с пустой (фейковой) подписью. Обход проверки ядра (Самое важное!): Чтобы консоль проглотила FSELF вместо Retail SELF, тебе нужен плагин, который патчит ядро. 0syscall6 — хороший вариант, он патчит ScePaf и SceKernel, отключая проверки. rePatch-reDux0 (или reF00D) — ИДЕАЛЬНЫЙ ВАРИАНТ. Этот плагин позволяет тебе просто кинуть твой пропатченный eboot.bin в папку ux0:rePatch/PCSG00XXX/ (где PCSG00XXX — Title ID игры). Плагин сам перехватит загрузку модулей и подсунет игре твой FSELF, полностью игнорируя оригинальный подписанный файл. Тебе даже не придется каждый раз перепаковывать игру! Решение №2: Runtime Hooking (Золотой стандарт для 60 FPS и читов) Если ты хочешь сделать качественный 60 FPS патч и портировать читы с PS3, лучше вообще не трогать eboot.bin. Вместо внедрения в SELF, мы пишем плагин для taiHEN (.suprx), который внедряется в оперативную память игры во время её работы. Почему это круче: Оригинальный eboot.bin остается нетронутым. Никаких проблем с подписями, NoNpDrm и FSELF. Портировать с PS3 проще: Ты не ищешь инструкции ARM, ты просто перехватываешь функции по адресам в памяти. Универсальность: Один .suprx плагин можно обновлять без переустановки игры. Как это сделать: Берешь шаблон плагина taiHEN (на C/C++). Используешь taiHookFunctionOffset или taiHookFunctionExport. Для 60 FPS: Находишь в игре функцию, отвечающую за vblank (вертикальную синхронизацию) или внутренний счетчик кадров (Frame Pacing), и хукаешь её, заставляя возвращать 1 вместо 2 (для 30->60 FPS) или патчишь float значение delta_time. Для читов: Перехватываешь функции обновления HP, таймеров и т.д. прямо в RAM. Перенос наработок с PS3 на Vita (Архитектурный ад, но решаемый) Ты упомянул: "вся работа между ps3 и psvita, в теории, легко переносится". Осторожно: это не совсем так. PS3 — это архитектура PowerPC (Cell Broadband Engine), Big-Endian. PS Vita — это ARM Cortex-A9, Little-Endian. Как переносить: Бинарный код не перенести. Ассемблер PPC и ARM Thumb/ARM32 — это разные языки. Переносится ЛОГИКА и АЛГОРИТМЫ. Если на PS3 ты нашел, что игра читает таймер из адреса 0x81234567 и умножает на 0.5, то на Вите тебе нужно открыть отладчик (VitaCheat через FTP или Cheat Engine через плагин), найти эту же переменную в памяти Vita и написать патч уже под ARM-адрес. Читы с PS3 служат тебе отличной «картой». Ты знаешь, что искать (например, "значение таймера находится рядом с указателем на объект игрока"), и просто ищешь этот же паттерн в дампе памяти Vita. Решение для Видео: Апскейл, 60 FPS и Субтитры Если думаешь отказаться от хардсабов (вшивания текста в видео) и озвучки, это огромный плюс к качеству. Чистое видео + софтсабы (текстовые субтитры движка) выглядят на OLED-экране Vita шикарно. Как сделать крутые 60 FPS видеоролики: Извлечение: Достаешь оригинальные ролики (обычно .pam, .mp4 или .usm). Конвертация в 60 FPS (Интерполяция): Простое увеличение FPS с 30 до 60 сделает видео дерганым. Тебе нужен Optical Flow (оптический поток) для генерации промежуточных кадров. Используй FFmpeg с фильтром minterpolate: ffmpeg -i input_30fps.mp4 -vf "minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=60'" -c:v libx264 -profile:v high -level 4.0 -crf 18 output_60fps.mp4 (Vita обожает H.264 High Profile Level 4.0. Битрейт можно задирать до 10-15 Mbps, аппаратный декодер Vita это переварит). Апскейл (Опционально): Если оригинал 720x408, можно аккуратно апскейлнуть до 960x544 (родное разрешение Vita) через Topaz Video AI или FFmpeg с lanczos, но иногда оригинал с легким блюром выглядит лучше, чем мыльный апскейл. Замена: Кидаешь новые видео в папку с игрой (через rePatch или прямую замену в app/). Подпись не нужна! Субтитры: Так как хардсабов нет, тебе нужно будет перевести и зашить текст в текстовые базы игры (обычно это .gxt файлы или проприетарные архивы). Для этого используются скрипты на Python (QuickBMS) для распаковки и утилиты вроде GXTConvert. Движок игры сам наложит идеальный, четкий текст поверх твоего 60 FPS видео. Итоговый Action-Plan: Забудь про мучительную переподпись eboot.bin. Используй taiHEN для написания .suprx плагинов (Runtime Hooking). Если все же нужно патчить сам ELF — используй связку FAGDec + vita-make-fself + rePatch-reDux0. Тестирование: Используй VitaShell и FTP для быстрой замены файлов и .suprx плагинов без переустановки VPK. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Tirniel, ты, конечно, стараешься выглядеть экспертом, но в каждом твоём тезисе — дыра размером с консоль. Давай разберём по пунктам, без воды, с фактами. «Единый движок — это недостижимо, универсальный комбайн — фантазия» Слушай, это смешно. Ты пишешь, что «это недостижимо», а я сейчас тебе покажу работающий инструмент, который делает ровно то, что ты отрицаешь. Wrench Editor — это набор моддинг-тулов для всех четырёх PS2-игр Ratchet & Clank: R&C1, R&C2, R&C3 и Deadlocked. Один софт — под четыре игры. И это не просто «парсер текста», а полноценный редактор уровней, моделей и ресурсов. Теперь про «движки». Первая часть Ratchet & Clank использует модифицированный движок Kinetica. А дальше Insomniac Games и Naughty Dog имели соглашение о свободном обмене технологиями — они делились наработками и оптимизациями между студиями. Это не «разные движки с нуля», а эволюция одной технологической базы. Так что твой тезис про «недостижимость» разбивается о репозиторий на GitHub, который обновлялся всего пару месяцев назад. Не знал? Бывает. «Шрифты могут быть запакованы так, что их не найти — кастомные решения неизбежны» Окей, допустим, шрифты бывают сложными. Но это не значит, что для каждой игры нужно писать велосипед. Возьми LunaTranslator — открытый инструмент, который поддерживает HOOK-эмуляторы для NS, PSP, PS Vita и PS2 и позволяет извлекать текст напрямую из памяти большинства игр на этих платформах. Он работает с PPSSPP (PSP), Vita3K (PS Vita) и другими эмуляторами. То есть проблема извлечения текста и работы с ресурсами уже решена для большинства игр. Не надо городить кастомные костыли — есть готовые инструменты, которые просто берут и делают. «Нейронка пишет чушь, она не способна выполнить сложную задачу» Ты, видимо, застрял в 2020 году. Нейросети — это инструмент, как молоток. Молоток сам дом не построит, но без него ты будешь забивать гвозди кулаком. Никто и не говорит, что нейронка сама всё сделает. Речь о конвейере: LunaTranslator извлекает текст через HOOK. Ты переводишь этот текст (хоть нейросетью, хоть вручную). Тот же инструмент или аналогичный вставляет перевод обратно. Это не «фантазии», это рабочие решения, которые уже используют сотни людей. Просто ты о них не знаешь, потому что не гуглил. «Куда проще создать прогу с нуля, чем разбираться в чужом легаси-коде» Это, пожалуй, твой самый убийственный для себя тезис. Ты предлагаешь переписывать с нуля то, что уже работает. Давай посчитаем: Wrench Editor — это годы работы сообщества. Там учтены сотни нюансов, о которых ты даже не догадываешься. LunaTranslator — это тысячи человеко-часов разработки и отладки. Apollo Save Tool для PS Vita — позволяет переподписывать файлы сохранений прямо на консоли. Тоже не «догадки», а работающий код. И ты предлагаешь взять и переписать это всё с нуля? Серьёзно? Ты, наверное, тот самый программист, который в каждом проекте переписывает printf, потому что «чужой код — говно». В индустрии это называется not invented here syndrome. И это не признак профессионализма, а признак того, что ты не умеешь работать в экосистеме. Ты предлагаешь писать отдельный софт под каждую игру — это ремесленничество. Инженер берёт готовые модули и склеивает конвейер. А ты боишься, что твои уникальные навыки ручного патчинга станут никому не нужны — поэтому и отрицаешь очевидное. «Попробуй сам» — ок, я возьму эти тулы и попробую. А ты попробуй открыть гугл, прежде чем рассуждать о недостижимом. Пока — твои «факты» — это просто страх, прикрытый пафосом. Я хочу, чтобы пещерные переводчики, которые озвучивают до сих пор одноголосо через сайт, текст → голос и запихивают эту озвучку обратно в игру, шли в ногу со временем и использовали современные нано-технологии, AI-решения, на максимум! Иначе, чем вы лучше пиратов, которые переводили интерфейс игр для PS2, от такого русского интерфейса, игра приятней не становилась. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Ты говоришь: «Насчёт подписей на вите не знаю, ибо никогда не делал» И это видно. Ты даже не удосужился загуглить, а уже строишь предположения. На самом деле, подписывать софт на PS Vita умеют даже школьники, которые вчера скачали хенкаку. Есть куча готовых инструментов: Apollo Save Tool — приложение для PS Vita, которое позволяет переподписывать файлы сохранения прямо на консоли. fake_np — утилита, которая конвертирует ISO и homebrew в подписанные файлы для запуска на Vita И это только верхушка айсберга. Есть целая экосистема SELF / Fake SELF (FSELF) — нативные исполняемые файлы Vita, для которых создаются фейковые подписи. Это стандартная практика для homebrew-разработки. Так что твоё «скорее всего что-то подобное должно быть» — это не догадка, а банальное незнание того, что уже давно существует и работает. Открой гугл, почитай вики, посмотри GitHub. А потом уже пиши, что «ерунда», а что нет. А пока — твои «догадки» и «скорее всего» — это просто попытка скрыть своё незнание за пафосными фразами. Скажи это разрабам Ratchet & Clank: Rift Apart или ты думаешь, что умнее их?) Игра станет весить в два раза больше? -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Зачем страдать фигнёй? Смысл озвучки в том, чтобы избавится от субтитров. Когда читаешь субтитры во время игры, это сильно отвлекает, а с озвучкой игра будет приносить намного больше удовольствия. Смысл озвучки в том, чтобы избавиться от субтитров! -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Vita3K.exe разве не улучшает видео или ты хочешь играть на оригинальной консоли, потому , что твои глаза кайфуют от пиксельных игр типа 9-Bit Armies? Сколько заплатил? На фрилансе нашёл переводчика? -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Слушай, spider91, я понимаю твою боль. Ты годами ковырял бинарники, подписывал ELF-файлы, искал актёров, вкладывал деньги — и тут какой-то чел предлагает «общий софт». Для тебя это как обесценивание всей твоей работы. Но давай честно: твои возражения — это не технические, а психологические. Ты говоришь «движки разные, форматы прыгают». Да, но R&C 1—3 и Deadlocked делала одна студия, с одной архитектурой. Даже если структуры отличаются, 70% кода для парсинга архивов и звука — общие. Делать под каждую игру свой велосипед — это не «качественно», это просто неэффективно. Ты сам пишешь софт, значит знаешь, что дублирование кода — зло. Просто ты боишься, что если появится нормальный тулкит с профилями, то любой сможет сделать перевод без твоих уникальных знаний. И тогда ты перестанешь быть незаменимым. Но посмотри правде в глаза: твои проекты всё равно требуют ручной правки ELF, поиска актёров(точнее голоса AI лучше, потому, что копируют оригинал, но на русском), денег. Никакой тулкит не заменит живого продюсера и знатока. Он лишь ускорит рутину. Ты же сам признаёшь, что «отдельный софт под каждую игру лучше» — но это логика ремесленника, а не инженера. Инженер делает инструмент, который можно переиспользовать. И да, твои постоянные подколы про «нейронку» и «длинные простыни» — это просто способ уйти от сути. Тебе не нравится, что кто-то может генерировать текст быстрее, чем ты? Так используй нейросеть как помощника, а не как врага. Она не заменит твой мозг, она освободит время. В общем, не надо прикрывать страх техническими отмазками. Если ты реально профи, то должен понимать, что модульный подход — это стандарт индустрии. Откажись от идеи — и ты просто покажешь, что боишься конкуренции. А если согласишься хотя бы обсудить архитектуру — вот тогда ты покажешь, что действительно уверен в своих силах. Так что давай, или докажи, что ты не боишься автоматизации, или признай, что тебе просто выгодно, чтобы всё оставалось «ручным» и сложным — чтобы другие не могли повторить твой успех. Смысл в том, чтобы все игры Ratchet and Clank стали, как ПК-версия Ratchet & Clank: Rift Apart, где есть полная официальная русская озвучка. Понял? И сейчас только AI может так же качественно озвучить многоголосо! Тебе денег не хватит, нанимать 10 актёров озвучки для каждой игры, чтобы озвучить все инглиш не RU-версии для PS2! Ты случайно не один из пиратов, которые текстом переводили игры для PS2, при чём даже ник перед игрой напечатать на экранной клавиатуре, бывает проблемно, с такими русскими буквами, не говоря о том, что там , где нужно пароль вводить, чтобы сразу попасть на уровень, нереально, потому что буквы заменены, сиди гадай, подбирай пароль. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Ну ты загнул про "полную ерунду" Давай по фактам. На практике всё совсем наоборот: общая кодовая база — это именно то, что делает создание универсального инструментария не просто возможным, а логичным и эффективным. Единый движок — это не теория, а подтверждённый факт Insomniac Games сознательно строила все свои игры на одной технологической базе. Они создавали один движок на поколение консолей и дорабатывали его на протяжении всего жизненного цикла. PS2: Первые четыре игры — Ratchet & Clank 1, 2, 3 и Deadlocked — работают на разных версиях одного и того же движка, который является модифицированной версией движка из игры Kinetica. Это подтверждается существованием инструментов вроде Wrench, который заявлен как «совместимый с R&C1, R&C2, R&C3 и Deadlocked». PS3: Для PS3 Insomniac использовала движок от Resistance как основу, на которой построены все части Ratchet & Clank Future. Инструменты вроде ReLunacy как раз и созданы для работы с этой общей базой, поддерживая Tools of Destruction, Quest for Booty, A Crack in Time и многие другие игры на новом движке. Поэтому общий core-модуль имеет смысл, а различия выносятся в профили/плагины под конкретную игру и ревизию. Правка исполняемого файла — это стандартная задача локализации и ромхакинга. Она не означает, что нужно делать четыре отдельные программы. Нормальный подход такой: база версий: хэши ELF/билдов, регионы, ревизии; база оффсетов и паттернов; модуль применения патчей; модуль извлечения/вставки текста; модуль работы со звуком/озвучкой; проверка лимитов, кодировок, шрифтов, таймингов. То есть исполняемый файл не «ломается руками каждый раз», а патчится по заранее известному профилю версии. Отдельный софт под каждую игру оправдан только тогда, когда игры полностью разные по форматам. Существующие инструменты — лучшее доказательство Wrench: Набор инструментов для PS2, который, как уже было сказано, покрывает все четыре игры. RatchetHax: Тренер и API на Node.js, который работает «для серии Ratchet & Clank на PS2 и PS3» и может использоваться для скриптов и модов, охватывая множество игр. Replanetizer / ReLunacy: Редакторы уровней для PS3, предназначенные для работы с «Ratchet & Clank HD collection» и «Ratchet & Clank: Future Series (PS3) and Resistance», грузят уровни из ToD, QfB, ACiT. Редакторы сохранений: Инструменты вроде rac-savegame-editor поддерживают сохранения для всех игр серии на PS2, PS3 и PS Vita. 3. Size Matters — исключение Эта игра была разработана не Insomniac Games, а студией High Impact Games. Они создали собственный движок, который «эмулирует» оригинальный. Это как раз тот редкий случай, когда движок действительно отличается, и он не входит в общую линейку игр Insomniac. «Индивидуальная модификация» — это не проблема, а задача Да, для каждой игры нужно править EBOOT, подключать загрузчик, хукать функции. Но это не делает всю идею бредовой. Это просто задача на уровне плагинов: ядро софта общее (работа с архивами, текстами, звуком), а для каждой игры — свой конфиг с адресами и патчами. Именно так устроены все нормальные моддинг-инструменты (вспомни хотя бы Cheat Engine с таблицами под разные версии). Это не "перегрузка", а нормальная архитектура. "Сразу все игры никто не переводит" — ну так это же не обязательно делать за раз. Можно начать с первой, потом добавить вторую, третью — благо база общая. А если писать под каждую игру отдельный софт с нуля, то это как раз и будет геморрой: копипаст, рассинхрон багов, тройная работа. Короче, твой скепсис понятен, но практика моддеров говорит об обратном. Всё уже сделано до нас — осталось только собрать эти наработки в один удобный конвейер для перевода и озвучки. Так что идея более чем рабочая. И да, длинные простыни можно прятать под спойлер — это вопрос оформления, но он не отменяет суть идеи. Твои опасения, что софт сможет за 5 часов сделать то, на что у тебя уходит месяц - вполне реальны. AI действительно очень быстро может обесценить твой труд... Но ручной труд тут тоже требуется, например требуется вручную загружать .mp4 видео, в AI для многоголосой озвучки, вручную ещё требуется подобрать голос под каждого персонажа и голоса должны совпадать на протяжении игры. Или софт будет вырезать только звук из видео, кодируя его в удобный .mp3 или .wav и останется только отправить на озвучку. Далее софт просто сам, как видео-редактор вставляет в видео, полученный звуковой файл .wav, lipsynch + кодирует в совместимый игрой формат. Так же можно склеить intro разработчика Insomniac со своим, просто указав путь к видео с расширением .mp4, а софт сам склеит кодирует в нужные FPS и разрешение видео + пропишет новый вес, даже если на входе будет 1920x1080_intro.mp4 P.S. Люди постоянно на форумах спрашивают, “с чего начать, какого … нет мануалов с практическими примерами. Как мы должны научится озвучивать игры PS2, если форумы с нужным софтом, которые юзали пираты, удалили в 2006”. Это же не SEGA-игры, где всё проще и игры с рейтом 80%+ давно переведены на русский. Просто кому-то выгодно не делиться инфой, не себе — не другим. -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Архитектура инструмента для распаковки и обратной упаковки ресурсов PS3-игры Ниже — безопасный подход к разработке утилиты для фанатского перевода, редактирования шрифтов, текстурных атласов, строк и субтитров в The Ratchet & Clank Trilogy (HD Collection) либо похожей PS3/Vita-игре. Подход рассчитан только на легальный моддинг: собственные носители, личные дампы, homebrew-среду и уже доступные для редактирования ресурсы. Он не включает обход DRM, подписи исполняемых модулей, ключи, защищённые EBOOT/SPRX или другие системные механизмы защиты. 1. Общий анализ задачи Какие структуры обычно встречаются в ресурсах PS3-игр Игровые данные редко состоят из независимых файлов «как на ПК». Обычно применяются контейнеры одного или нескольких уровней: Тип структуры Назначение Обычный архив Последовательность файлов с таблицей содержимого (TOC). bigfile / packfile Большой бинарный файл с ресурсами, доступными по offset и size. PSARC Контейнер Sony, часто содержащий сжатые файлы и таблицу записей. Внутренний контейнер Формат движка: строки, текстуры, модели, шрифты, субтитры в собственных бинарных блоках. Таблица смещений Список адресов начала ресурсов или секций. Таблица размеров Список размеров исходных или сжатых данных. Таблица имён / хешей Имена файлов либо хеши путей, если имена не хранятся открыто. Индексный бинарник Отдельный файл, сопоставляющий языки, архивы, шрифты, видео и ресурсы. Условная структура архива может выглядеть так: +-------------------------------+ | Header | | magic: "PACK" / "PSAR" / ... | | version | | file_count | | toc_offset | | data_offset | +-------------------------------+ | TOC / File entries | | entry[0]: offset, size, hash | | entry[1]: offset, size, hash | | ... | +-------------------------------+ | Name table / string table | +-------------------------------+ | Resource data | | file 0 | | padding | | file 1 | | padding | | ... | +-------------------------------+ Почему архив может перестать загружаться после перепаковки Даже если содержимое ресурса изменено корректно, движок может отклонить архив, если нарушена его структура: смещение файла в TOC указывает на старый адрес; поле размера не соответствует фактическому числу байтов; нарушено выравнивание данных; не обновлена CRC32 или другой хеш; изменился порядок записей; файл должен быть сжат, но записан несжатым; таблица имён, хешей или индексов не соответствует содержимому; сдвинулись внутренние указатели внутри самого ресурса; изменена endian-последовательность чисел; изменился формат текстуры, но метаданные остались прежними. Что обычно называют «проверкой веса» Фраза «проверка веса файла» технически неоднозначна. В игровых форматах это может означать: Возможное значение Что это на практике Размер файла Поле size в заголовке, TOC или внешнем индексе. Сжатый размер compressed_size, если ресурс хранится сжатым. Исходный размер uncompressed_size, нужный для выделения буфера и распаковки. Размер контейнера Поле archive_size или ожидаемый конец файла. Размер записи Размер блока в TOC, включая служебные поля. CRC Контрольная сумма, часто CRC32. Хеш MD5, SHA-1 или пользовательский алгоритм для проверки данных/пути. Выравнивание Размер округляется до 0x10, 0x80, 0x800, 0x1000 и т. п. Padding Заполняющие байты между ресурсами, часто 00, FF или специальный шаблон. Правильная цель инструмента — не отключать проверку, а определить формат и корректно пересчитывать зависимые поля. 2. Юридическая и этическая рамка Инструмент следует проектировать для работы только с: собственными легально полученными данными; личными дампами; тестовыми или homebrew-ресурсами; открытыми, распакованными, незащищёнными контейнерами; модами, распространяемыми без оригинальных игровых ассетов. Не следует: извлекать и распространять чужие коммерческие игровые ресурсы; публиковать игровые архивы, текстуры, видео и бинарники целиком; заниматься обходом DRM, подписей, шифрования, лицензионных проверок; модифицировать защищённые системные модули ради снятия ограничений. Если требуемая часть логики находится в защищённом EBOOT/SPRX либо зависит от криптографически защищённого контейнера, безопасная граница работы — анализ уже распакованных открытых ресурсов, использование существующих легальных средств извлечения и создание патчей/манифестов, а не распространение оригинального содержимого. 3. CLI-проектирование инструмента Утилита должна быть предсказуемой, воспроизводимой и по умолчанию не портить исходники. Пример имени: rctool. rctool list archive.bin rctool inspect archive.bin rctool extract archive.bin —out ./extracted rctool pack ./extracted —out ./archive_packed.bin rctool verify original.bin modified.bin rctool diff-toc original.bin modified.bin rctool font-report ./game_resources —dump-glyphs rctool atlas-verify font_atlas.dds font_metrics.bin rctool subtitle-report subtitles.bin rctool psarc list data.psarc rctool psarc extract data.psarc —out ./psarc_extracted rctool psarc pack ./psarc_extracted —out ./data_mod.psarc Полезные параметры —format auto|psarc|bigfile|custom —endian auto|big|little —alignment 0x800 —dry-run —strict —verbose —json-report report.json —manifest manifest.json —keep-order —verify-checksums —no-compress Принципы CLI Исходный файл никогда не перезаписывается по умолчанию. Любая распаковка создаёт манифест. Упаковка работает только на основе манифеста. —dry-run показывает будущие offsets, размеры и расхождения без записи файла. verify проверяет структуру независимо от запуска игры. Все неизвестные поля и подозрительные записи логируются. 4. Структура парсера ресурсов Парсер не должен быть «набором жёстких смещений». Лучше разделить чтение формата на явные слои. Базовые поля, которые нужно искать Поле Типичный размер Назначение Magic / signature 4—16 байт Идентификатор формата: например, PSAR. Version 2 или 4 байта Версия контейнера. Endianness Не всегда явно Обычно определяется по magic/version/count. Header size 4 байта Размер заголовка. File count 4 байта Число записей в TOC. TOC offset 4/8 байт Адрес таблицы файлов. Name table offset 4/8 байт Адрес строковых имён, если есть. Data offset 4/8 байт Начало области ресурсов. Entry offset 4/8 байт Смещение конкретного файла. Packed size 4/8 байт Размер хранимых данных. Unpacked size 4/8 байт Размер после распаковки. CRC/hash 4—32 байта Целостность данных или идентификатор пути. Flags 4 байта Сжатие, тип данных, язык, платформа и т. п. Alignment 4 байта или константа Требуемое выравнивание блока. Endianness PS3 часто использует big-endian, но это не означает, что каждый ресурс обязательно big-endian. В одном проекте могут сосуществовать: big-endian заголовки движка; little-endian DDS-текстуры; little-endian сжатые блоки; собственные форматы с фиксированным порядком байтов. Нельзя выбирать порядок байтов «по платформе». Его нужно подтвердить наблюдением. Пример: Bytes: 00 00 01 00 Big-endian: 0x00000100 = 256 Little-endian: 0x00010000 = 65536 Если архив содержит 256 файлов, big-endian здесь правдоподобен. Если 65536 — вероятно, интерпретация неверна. Указатели на внутренние секции В ресурсах могут быть внутренние адреса: font_table_offset glyph_count atlas_texture_id string_table_offset language_table_offset subtitle_track_offset video_cue_table_offset Важно установить, что представляет собой offset: абсолютное смещение от начала файла; относительное смещение от начала секции; относительное смещение от текущей структуры; виртуальный адрес, который не следует путать с file offset; индекс записи, а не смещение. 5. Безопасное исследование «проверки веса» Цель исследования: найти зависимые поля и правила их обновления. Рекомендуемый процесс 1. Сохранить нетронутый оригинал Работать только с копией: original/ work/ output/ reports/ Для каждой версии фиксировать: имя файла; размер; SHA-256 для локальной идентификации; дату; использованную версию инструмента. 2. Открыть бинарник в hex-редакторе Подходящие инструменты: ImHex; 010 Editor; HxD; wxHexEditor; любой hex-diff-инструмент. Искать: читаемый magic; повторяющиеся записи одинаковой длины; числа, похожие на offsets; возрастающие значения, кратные 0x10/0x800/0x1000; ASCII/UTF-8/UTF-16-строки; хеши длиной 4, 16, 20 или 32 байта. 3. Сопоставить TOC с реальными данными Для каждой записи проверить: offset + stored_size <= archive_file_size offset >= data_region_start offset % alignment == 0 Если ресурс начинается по offset 0x12000, а следующая запись начинается с 0x12800, то: real data range: [0x12000, 0x12800) allocated span: 0x800 stored size: может быть меньше 0x800 padding: allocated span - stored size 4. Выполнить минимальный контролируемый эксперимент Например, заменить один текстовый ресурс на вариант: той же длины; на 1 байт длиннее; на 16 байт длиннее; на 1 байт короче. Затем сравнить результаты упаковки или файлы, обработанные известным инструментом, если он существует. Так можно увидеть: какие поля меняются; где лежит size; меняется ли архивный размер; пересчитывается ли CRC; сохраняется ли прежний allocation span; сдвигаются ли последующие записи. 5. Построить таблицу наблюдаемых полей Пример рабочей таблицы: Offset Размер Предполагаемое поле Значение до Значение после Уверенность 0x0C 4 file_count 1532 1532 высокая 0x10 4 toc_offset 0x40 0x40 высокая 0x24 4 archive_size 0x028A4000 изменилось средняя 0x144 4 entry[0].offset 0x8000 0x8000 высокая 0x148 4 entry[0].size 0x1A2C изменилось высокая 0x14C 4 entry[0].crc32 изменилось изменилось средняя 6. Сравнивать CRC, MD5, SHA-1 и пользовательские хеши Если 4-байтовое поле меняется после изменения содержимого, проверьте кандидаты: zlib.crc32(data) & 0xFFFFFFFF Для распространённых хешей: hashlib.md5(data).digest() hashlib.sha1(data).digest() hashlib.sha256(data).digest() Но совпадение не следует предполагать: поле может быть: CRC от распакованных данных; CRC от сжатых данных; CRC от имени/пути; хешем другой секции; ID записи; пользовательским алгоритмом. 7. Реализовать dry-run До фактической упаковки вывести отчёт: Entry 0042: strings_ru.bin old offset: 0x00124000 new offset: 0x00124000 old packed size: 0x00003A20 new packed size: 0x00003B10 alignment: 0x800 padding required: 0x4F0 checksum: CRC32 9A0B1C2D status: valid 8. Не отключать проверки Если игра отвергает модифицированный архив, правильный вопрос: «Какие метаданные формат ожидает и как они вычисляются?» А не: «Как отключить проверку?» 6. Алгоритм распаковки Результат распаковки extracted/ manifest.json files/ 0000_unknown.bin 0001_menu_strings.bin 0002_font_atlas.dds 0003_font_metrics.bin reports/ extract_report.json suspicious_entries.json Пример манифеста { "format": "custom_bigfile", "source_file": "archive.bin", "source_size": 42614784, "endianness": "big", "header": { "version": 3, "file_count": 1532, "toc_offset": 64, "data_offset": 49152, "alignment": 2048 }, "entries": [ { "index": 0, "name": "0000_unknown.bin", "name_hash": "0xA1B2C3D4", "original_offset": 49152, "stored_size": 6700, "unpacked_size": 6700, "flags": 0, "compression": "none", "checksum_type": "crc32", "checksum": "0x19D5A0F3", "alignment": 2048 } ] } Пошаговый алгоритм Открыть файл в бинарном режиме. Прочитать минимальный заголовок. Проверить magic и версию. Определить endian-порядок. Прочитать размер заголовка и расположение TOC. Прочитать все записи TOC. Для каждой записи: извлечь offset, stored_size, unpacked_size, flags; проверить выход за границы файла; проверить выравнивание; извлечь блок; проверить CRC/hash, если алгоритм известен; определить сжатие по флагам или сигнатуре; распаковать известный формат, например zlib/deflate; сохранить файл и метаданные. Записать манифест. Создать отчёт о подозрительных местах. Подозрительные записи Нужно фиксировать, но не игнорировать: offset + size > archive_size; offset не выровнен; два файла перекрываются; размер распакованных данных не совпадает с unpacked_size; неизвестный compression flag; checksum не совпадает; пустой файл с необычными флагами; запись с offset 0, но ненулевым размером. 7. Алгоритм обратной упаковки Обратная упаковка должна быть детерминированной: одинаковый вход и параметры дают одинаковый результат. Основной порядок работы Прочитать manifest.json. Проверить, что все ожидаемые файлы существуют. Сохранить исходный порядок записей. Для каждого файла: прочитать изменённые данные; сжать тем же способом, что указан в манифесте; определить фактический stored size; обновить unpacked size; вычислить checksum нужного типа. Рассчитать новые offsets с учётом alignment. Создать новый TOC. Записать заголовок, TOC, имена и метаданные. Записать блоки данных и padding. Обновить размер контейнера, если он хранится. Выполнить внутреннюю проверку созданного файла. Сравнить структуру с оригиналом через verify и diff-toc. Важное решение: перемещать файлы или сохранять исходные места Есть два режима. Режим A: полная перепаковка Все offsets рассчитываются заново. Плюсы: подходит для значительных изменений; не ограничивает размер конкретного ресурса; проще алгоритмически. Минусы: все последующие данные могут сдвинуться; внешние ссылки на offset могут стать невалидными; архив может сильнее отличаться от оригинала. Режим B: in-place / фиксированные слоты Файлы остаются на старых offsets и не могут превысить выделенный span. Плюсы: минимальные отличия; безопаснее, если внешний бинарник хранит offsets; удобно для маленьких текстовых правок. Минусы: новый файл нельзя сделать больше доступного места; приходится перераспределять резерв или сокращать данные. Для первой версии полезно поддержать оба режима: rctool pack extracted —mode rebuild rctool pack extracted —mode in-place Проверки после сборки header.file_count == len(entries) entry.offset % alignment == 0 entry.offset + entry.stored_size <= archive_size no_ranges_overlap(entries) stored_size == len(stored_data) unpacked_size == len(unpacked_data) checksum(entry_data) == entry.checksum 8. Работа со шрифтами и атласами Шрифт в игре часто состоит минимум из двух частей: текстурный атлас — изображение с пикселями символов; таблица метрик — бинарная структура, объясняющая движку, где искать глиф и как его рисовать. Иногда добавляются: таблица Unicode/codepoint → glyph index; kerning pairs; несколько атласов для разных размеров; fallback-шрифт; таблицы языков; стиль текста: обводка, тень, цвет, масштаб. Где может быть таблица глифов Она может находиться: рядом с текстурой в одном контейнере; в отдельном .bin, .fnt, .font, .dat; внутри бинарника движка; внутри локализационного пакета; в ресурсной записи, найденной по имени или хешу. Признаки таблицы: последовательность структур фиксированного размера; значения x/y/width/height, не превышающие размеры атласа; ASCII-коды 0x20—0x7E; количество записей, близкое к 96, 128, 256, 512, 1024; повторяющиеся значения advance/width; ссылки на одну и ту же текстуру. Варианты хранения символов Модель Пример Direct ASCII Glyph 65 = A. Unicode codepoint U+0410 → глиф А. Индексная таблица Codepoint → индекс → запись глифа. Custom encoding Байтовые коды игры отображаются в собственную таблицу. Смешанная схема ASCII напрямую, расширенные символы через lookup table. Типичная запись глифа struct Glyph { uint32_t codepoint; // U+0041, U+0410 и т. п. uint16_t atlas_index; // номер атласа uint16_t flags; float u0; // левая UV-координата float v0; // верхняя UV-координата float u1; // правая UV-координата float v1; // нижняя UV-координата int16_t bearing_x; // смещение пера по X int16_t bearing_y; // смещение пера по Y uint16_t width; uint16_t height; int16_t advance_x; // на сколько сдвигать курсор }; В другом формате UV могут быть не float, а пиксельными координатами: struct Glyph { uint16_t codepoint; uint16_t x; uint16_t y; uint16_t width; uint16_t height; int16_t advance; int16_t bearing_x; int16_t bearing_y; }; Добавление кириллицы без поломки латиницы Безопасная стратегия: Сначала извлечь существующие символы и создать отчёт. Определить диапазоны: ASCII: U+0020—U+007E; кириллица: U+0400—U+04FF; часто нужные символы: Ё, ё, №, длинное тире, кавычки. Не заменять латинские глифы, если их индексы используются напрямую. Добавить новые записи в свободный диапазон либо расширить таблицу только после понимания её структуры. Внести символы в codepoint lookup table. Добавить пиксели символов в атлас. Обновить UV/координаты, размеры и advance. Проверить fallback-логику: некоторые движки заменяют неизвестный символ ? или пустым глифом. Почему может понадобиться новый атлас Если в исходном атласе нет свободного места, новые глифы некуда разместить. Варианты: уплотнить существующие символы; использовать пустые/неиспользуемые глифы; увеличить разрешение атласа, если формат и движок это допускают; добавить второй атлас, если таблица поддерживает atlas_index; уменьшить размер шрифта; выбрать компактный набор символов. Нельзя просто увеличить DDS/текстуру, не проверив, где хранится ширина, высота, mipmap count и формат пикселей. Проверка границ глифа Для атласа 1024 × 1024: 0 <= x < 1024 0 <= y < 1024 x + width <= 1024 y + height <= 1024 Для нормализованных UV: 0.0 <= u0 <= u1 <= 1.0 0.0 <= v0 <= v1 <= 1.0 Автоматический font-report Отчёт должен содержать: Atlas: font_0.dds Resolution: 1024 x 1024 Glyph entries: 248 Unique codepoints: 246 Duplicate codepoints: U+003F, U+0410 Out-of-bounds glyphs: 2 Missing Russian characters: U+0401, U+0451, U+042A Unused atlas area: 31.4% Идеально также создать: CSV с метриками; JSON для дальнейшего анализа; PNG-превью с сеткой и подписанными glyph indices; перечень символов, реально используемых в переводе, но отсутствующих в шрифте. 9. PSARC и привязка к контейнеру Если ресурсы находятся в PSARC или похожем контейнере, его нужно рассматривать как отдельный слой. PSARC ├─ archive TOC ├─ block/deflate metadata ├─ file path table или hash table └─ внутренние ресурсы ├─ font atlas ├─ font metrics ├─ strings ├─ subtitles └─ texture packages Требования к PSARC-адаптеру Прочитать заголовок контейнера. Прочитать и сохранить TOC. Сохранить порядок файлов. Сохранить размеры блоков и признаки сжатия. Извлечь внутренние файлы. Создать отдельный PSARC-манифест. При сборке применить исходное выравнивание и порядок. Выполнить валидацию offsets, размеров и блоков. Внешние зависимости После изменения PSARC нужно проверить, есть ли другой файл, который хранит: путь к архиву; хеш ресурса; индекс файла в архиве; ожидаемый размер; offset; версию пакета; таблицу языков; список загружаемых ресурсов. Если такая зависимость найдена, корректно обновляется или валидируется именно её открытая ресурсная структура. Работа с защищёнными исполняемыми модулями и механизмами платформы остаётся вне рамок инструмента. 10. Субтитры и видео Субтитры могут быть реализованы несколькими способами. Вариант Что редактируется Строки текста + таймкоды Таблица строк и cue table. Текстуры субтитров Атлас изображений и таблица кадров. Предрендеренные изображения Последовательность текстур/спрайтов. Встроенные в видео Практически не редактируются без исходного видеопайплайна. Скриптовые события Команды показа текста с timestamp и ID строки. Что проверить формат времени: кадры, миллисекунды, ticks; FPS: 25, 30, 50, 60 или иной; ID строки и соответствие локализационной таблице; порядок cue-записей; длительность отображения; кодировку текста; максимальную длину строки; переносы, теги и управляющие символы; привязку к конкретному ролику или главе. Типичная структура cue struct SubtitleCue { uint32_t start_time; uint32_t end_time; uint32_t string_id; uint16_t style_id; uint16_t flags; }; При текстурных субтитрах вместо string_id могут быть: uint16_t atlas_id; uint16_t sprite_id; Нельзя менять порядок или количество записей без проверки того, как ролик или сценарий обращается к ним. 11. Рекомендуемый стек Python: лучший старт для исследования Python хорошо подходит для первого рабочего прототипа. Библиотека Назначение struct Чтение и запись чисел заданного endian-порядка. pathlib Безопасная работа с путями. argparse CLI. json Манифесты и отчёты. logging Диагностика. zlib CRC32, deflate, zlib. hashlib MD5/SHA-1/SHA-256 для исследования. dataclasses Описание header/entry структур. pytest Unit-тесты. Пример чтения big-endian числа: import struct file_count = struct.unpack(">I", data[0x08:0x0C])[0] Little-endian: file_count = struct.unpack("<I", data[0x08:0x0C])[0] C# Подходит, если нужен GUI: удобная работа с бинарными файлами; WPF/Avalonia для интерфейса; просмотр atlas/glyph table; drag-and-drop для архивов; Windows-ориентированный пайплайн. Rust / C++ Подходят для финального производительного инструмента: строгая работа с бинарными структурами; контроль ошибок; большие архивы; потоковая обработка; безопасное разделение модулей. Но начинать исследование формата обычно быстрее в Python. Инструменты анализа 010 Editor — шаблоны бинарных форматов. ImHex — pattern language, визуальный анализ. HxD — быстрый просмотр и сравнение. QuickBMS — быстрые экспериментальные скрипты для распаковки известных форматов. vbindiff / Beyond Compare / Hex Fiend / HxD — побайтовое сравнение. Kaitai Struct — декларативное описание формата и генерация парсеров. 12. MVP-архитектура rctool/ cli.py config.py formats/ base.py custom_archive.py psarc.py parsers/ header_parser.py toc_reader.py font_table_parser.py subtitle_parser.py services/ extractor.py repacker.py verifier.py diff_service.py manifest_service.py codecs/ compression_handler.py checksum_validator.py texture_adapter.py models/ archive_header.py archive_entry.py font_glyph.py manifest.py reporting/ logger.py json_report.py font_report.py tests/ test_header_parser.py test_toc_reader.py test_repacker.py test_alignment.py fixtures/ Назначение модулей Модуль Ответственность header_parser Чтение и валидация заголовка. toc_reader Чтение записей файловой таблицы. entry_extractor Извлечение конкретных блоков. compression_handler Сжатие/распаковка известных алгоритмов. checksum_validator CRC/hash-проверки и пересчёт. repacker Сборка контейнера, offsets и padding. manifest_serializer Сохранение метаданных извлечения. font_table_analyzer Глифы, метрики, codepoint table, UV. psarc_adapter Поддержка PSARC как отдельного формата. CLI interface Команды и параметры пользователя. logger/reporter Диагностика, отчёты, dry-run. 13. Тестирование Не хранить игровые ассеты в репозитории В репозитории должны находиться только: синтетические тестовые архивы; минимальные искусственные текстуры; тестовые таблицы глифов; обезличенные фрагменты заголовков при необходимости; генераторы фикстур. Не следует добавлять оригинальные данные игры. Набор тестов Unit-тесты чтение big-endian и little-endian значений; чтение header; чтение TOC; выравнивание 0x10, 0x80, 0x800, 0x1000; проверка диапазонов; CRC32; сжатие и распаковка; сериализация манифеста; проверка UV и границ глифов. Интеграционные тесты synthetic archive -> extract -> pack -> verify -> byte-identical result Если архив собирается без изменений, ожидаемый результат: original.bin == repacked.bin Побайтовая идентичность крайне полезна: она доказывает, что парсер и упаковщик верно воспроизводят формат хотя бы для неизменённого случая. Тесты изменения размера Файл без изменения длины. Файл увеличен на 1 байт. Файл увеличен до следующего alignment boundary. Файл уменьшен. Несколько файлов изменены одновременно. Сжатый файл, у которого packed size меняется непредсказуемо. Проверка отчётом rctool verify original.bin repacked.bin —structure-only rctool diff-toc original.bin repacked.bin 14. Типичные ошибки Ошибка Последствие Перепутан big-endian и little-endian Неверные offsets, sizes, counts; файл не читается. Не учтён padding Следующий ресурс начинается не там, где ожидает TOC. Изменён порядок записей Внешние индексы или хеш-таблицы указывают не на тот ресурс. Не обновлена offset table Движок читает старые адреса. Не обновлены size fields Переполнение, обрезание или отказ загрузки. Не пересчитан CRC/hash Формат определяет ресурс как повреждённый. Нарушено выравнивание Ошибка чтения блоков или проблемы DMA/потоковой загрузки. Неверно определено сжатие Невозможно распаковать ресурс. Строка сохранена в неверной кодировке Кракозябры, пустые символы, сбои parser-а. Не учтена нуль-терминация Следующая строка «склеивается» с текущей. Таблица глифов не соответствует атласу Неправильные буквы, визуальный мусор, вылет. Кириллица добавлена без codepoint table Игра не находит символы. UV выходят за границы Захватываются соседние глифы или пустые области. DDS/текстура пережата в другом формате Неподдерживаемый pixel format, неверные цвета или крах. Не обновлены mipmaps Артефакты или ошибка загрузки текстуры. Субтитры потеряли тайминги Реплики появляются слишком рано, поздно или не появляются. Изменена длина блока, но старые внешние offsets сохранены Ломается загрузка последующих данных. Техническое ТЗ для MVP Цель Разработать CLI-утилиту для анализа, извлечения, проверки и обратной упаковки открытых игровых ресурсных контейнеров, с сохранением структуры, порядка записей, offsets, размеров, выравнивания и контрольных сумм. Функциональные требования Автоматическое или заданное пользователем определение формата. Поддержка big-endian и little-endian. Чтение заголовка и TOC. Извлечение всех ресурсов. Генерация JSON-манифеста. Поддержка known compression codecs, начиная с none и zlib. Проверка CRC32 и известных хешей. Детерминированная перепаковка. Поддержка rebuild и in-place режимов. dry-run, verify, diff-toc. Анализ шрифтов: глифы, codepoints, метрики, UV, пересечения и границы. Отчёты JSON/CSV/text. Набор тестов на синтетических контейнерах. Нефункциональные требования не изменять входные файлы; не требовать доступа к защищённым системным компонентам; не содержать оригинальные игровые ассеты; давать понятные ошибки вместо молчаливой записи повреждённого файла; вести лог операций; обеспечивать воспроизводимость упаковки. Псевдокод парсера function parse_archive(path, format_config): file_size = get_file_size(path) stream = open_binary(path) raw_header = stream.read(MIN_HEADER_SIZE) magic = raw_header[0:4] if magic not in format_config.supported_magic: raise UnsupportedFormatError(magic) endian = detect_endianness(raw_header, format_config) header = read_header(stream, endian, format_config) validate_header(header, file_size) stream.seek(header.toc_offset) entries = [] for index in range(header.file_count): entry = read_toc_entry(stream, endian, format_config) entry.index = index validate_entry_range(entry, file_size) validate_entry_alignment(entry, header.alignment) entries.append(entry) names = read_name_table_if_present(stream, header, format_config) assign_names(entries, names) return Archive( path=path, file_size=file_size, header=header, entries=entries, endian=endian ) Псевдокод распаковщика function extract_archive(archive_path, output_dir): archive = parse_archive(archive_path) create_directory(output_dir) create_directory(output_dir / "files") create_directory(output_dir / "reports") manifest = create_manifest_from_archive(archive) suspicious_entries = [] stream = open_binary(archive_path) for entry in archive.entries: stream.seek(entry.offset) stored_data = stream.read(entry.stored_size) if length(stored_data) != entry.stored_size: suspicious_entries.append(entry, "truncated data") continue if entry.compression is known: unpacked_data = decompress(stored_data, entry.compression) else if entry.compression is none: unpacked_data = stored_data else: save_raw_data(entry, stored_data) suspicious_entries.append(entry, "unknown compression") continue if entry.unpacked_size exists and length(unpacked_data) != entry.unpacked_size: suspicious_entries.append(entry, "unpacked size mismatch") checksum_result = verify_checksum(entry, stored_data, unpacked_data) if checksum_result is invalid: suspicious_entries.append(entry, "checksum mismatch") output_name = create_safe_output_name(entry) write_binary(output_dir / "files" / output_name, unpacked_data) manifest.entries[entry.index].extracted_name = output_name manifest.entries[entry.index].verification = checksum_result write_json(output_dir / "manifest.json", manifest) write_json(output_dir / "reports" / "suspicious_entries.json", suspicious_entries) return manifest Псевдокод упаковщика function pack_archive(extracted_dir, output_path, mode): manifest = read_json(extracted_dir / "manifest.json") validate_manifest(manifest) prepared_entries = [] for entry_meta in manifest.entries in original index order: input_path = extracted_dir / "files" / entry_meta.extracted_name unpacked_data = read_binary(input_path) stored_data = compress( unpacked_data, method=entry_meta.compression, settings=entry_meta.compression_settings ) entry = copy_metadata(entry_meta) entry.unpacked_size = length(unpacked_data) entry.stored_size = length(stored_data) entry.checksum = calculate_checksum( entry_meta.checksum_type, stored_data, unpacked_data, entry_meta.checksum_scope ) prepared_entries.append((entry, stored_data)) if mode == "in-place": assign_original_offsets_with_capacity_checks(prepared_entries, manifest) else if mode == "rebuild": current_offset = manifest.header.data_offset for entry, stored_data in prepared_entries: current_offset = align_up(current_offset, entry.alignment) entry.offset = current_offset current_offset += length(stored_data) archive_size = current_offset else: raise InvalidModeError(mode) validate_no_overlap(prepared_entries) validate_all_alignments(prepared_entries) header = rebuild_header(manifest.header, prepared_entries, archive_size) toc = serialize_toc(prepared_entries, manifest.endianness) output = open_binary_for_write(output_path) write_header(output, header) write_toc(output, toc) write_name_table_if_needed(output, manifest) for entry, stored_data in prepared_entries: seek_or_pad_to(output, entry.offset) output.write(stored_data) write_padding_to_alignment(output, entry.alignment) close(output) result = parse_archive(output_path) verify_repacked_structure(result, prepared_entries) return result Поля, которые нужно исследовать в неизвестном формате Минимальный список: Magic/signature. Версия. Endianness. Размер заголовка. Число записей. Смещение TOC. Размер одной TOC-записи. Смещение таблицы имён. Смещение области данных. Offset каждой записи. Packed size. Unpacked size. Compression flags. Encryption flags — только для идентификации; не для обхода. CRC/hash и область, по которой они считаются. ID/хеш имени. Alignment. Padding pattern. Поле общего размера архива. Внешние ссылки на архив, индекс или ресурс. Внутренние offsets конкретных форматов — шрифт, атлас, локализация, субтитры. Версия текстурного формата, ширина, высота, mip levels, pixel format. Таблица Unicode/codepoint → glyph index. Метрики glyph table. Таблицы языков и string IDs. Формат subtitle cue и единицы таймингов. Вопросы для формата, который пока неизвестен Для точного анализа полезно получить не весь игровой архив, а безопасные технические сведения и небольшие обезличенные фрагменты: Первые 0x100—0x400 байт заголовка в hex-формате. Размер файла в байтах и hex. Hex-дамп предполагаемой TOC: 5—10 записей. Предполагаемый размер записи TOC: 16, 20, 24, 32 или 48 байт. Несколько известных offsets и соответствующие им размеры. Название/расширение контейнера: .psarc, .pak, .dat, .bin, .arc и т. п. Начало одного извлечённого ресурса: первые 0x40—0x100 байт. Сравнение оригинального и изменённого файла, если существует образец, созданный известным инструментом. Какие данные точно известны: имя ресурса, размер текстуры, число символов шрифта, ожидаемая строка. Скриншот или экспорт структуры из ImHex/010 Editor. Для шрифта: размер атласа, несколько известных символов, их предположительные координаты. Для субтитров: пример одной реплики, её таймкод в игре и соответствующий фрагмент файла. PS3 или Vita-версия, регион и версия игры: структуры ресурсов могут отличаться. Не нужно передавать защищённые исполняемые файлы, ключи, лицензионные данные или полный коммерческий архив. Безопасный план работ в 5 шагов Шаг 1. Инвентаризация Создать копии исходных файлов. Зафиксировать размеры и SHA-256 локально. Определить контейнеры, текстуры, шрифты, локализации и субтитры. Найти открытые ресурсные архивы, пригодные для анализа. Шаг 2. Read-only анализ Реализовать inspect, list, verify. Определить magic, endian, header, TOC, offsets, sizes и alignment. Создать отчёт о структуре без записи файлов. Шаг 3. Распаковка и воспроизводимая сборка без изменений Реализовать extract. Сохранить manifest. Реализовать pack. Достичь побайтового совпадения original == repacked для тестового контейнера без изменений. Шаг 4. Контролируемые изменения ресурсов Изменить один текстовый ресурс. Затем протестировать шрифт и один небольшой атлас. Проверить size, CRC, offsets, padding и загрузку на собственной тестовой среде. Использовать in-place режим, если внешние ссылки не изучены. Шаг 5. Специализация под перевод Реализовать анализ таблиц строк. Добавить font-report, проверку кириллицы и atlas-границ. Реализовать subtitle-report. Подготовить распространение в виде патча, манифеста или инструкций, а не полного набора оригинальных ресурсов. Итоговая рекомендация Практически лучший путь — начать не с «универсального перепаковщика PS3-игр», а с узкого исследовательского инструмента: inspect -> list -> extract -> manifest -> rebuild unchanged -> verify -> edit one resource Критическая контрольная точка: инструмент должен сначала уметь распаковать и собрать неизменённый архив так, чтобы результат был побайтово идентичен оригиналу либо, если формат намеренно недетерминирован, структурно и checksum-совместим. Только после этого разумно переходить к текстам, шрифтам, атласам, кириллице и субтитрам. Предлагаю написать универсальный комбайн-софт, для распаковки-запаковки PS3 игр. С заменой латиницы на кириллицу, с подтверждением , если длина разная, автоматическим подбора похожего шрифта игры. Но нужны ответы на вопросы. Какой функционал обязательно должен быть. GUI или CLI оболочка и. т. д. Скорее всего получится переводчик именно под все игры Ratchet and Clank. -
Кто-нибудь через Claude Sonnet 4.6 , написал распаковщик .iso для PS2 Ratchet and Clank 3, с автоматической отвязкой проверки веса файлов, во время обратной сборки игры? ツ
-
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
больше апов темы, больше юзеров узнаёт о Ratchet and Clank, больше желающих озвучивать игру = profit Так, что чаще пишите отчёты по озвучке, лучше ежедневные. А то так и не поиграете никогда на Vita в озвученную игру... -
The Ratchet & Clank Trilogy (HD Collection)
bruce7 ответил в тему пользователя AlexLAN в Русификаторы
Ты пишешь: «Благодаря СССР русский стал международным языком науки» — и тут же: «Русский умирает, потому что не описывает новое». В 20-м веке именно на русском писали Ландау, Капица, Курчатов. Открыли ядерную физику, квантовую химию, космонавтику — и для всего хватило русского языка. Если язык справился с ядерным синтезом в 50-х, он справится и с ChatGPT в 2026-м. Просто сейчас статьи публикуют на английском не из-за «гибкости», а из-за того, что гранты и международные журналы базируются в США и Великобритании. Это геополитическая и экономическая доминация, а не лингвистическое превосходство. Ты путаешь причину и следствие: английский стал международным не потому что гибкий (он как раз топорный), а потому что Британская империя, а потом США захватили мировые рынки. Если бы Союз выиграл холодную войну, сейчас все бы учили русский, и лингвисты бы спорили, почему в нем так легко склеивать приставки. О чём и был изначально смысл моей подачи. Без одобрения Российской Империи, в Европе не одобрялись важные дела, РИ была одной страной и больше территориально, чем кучка республик в СССР. А стоило потерять авторитет в Европе и GTA San Andreas вышла на инглише, а не на русском. Про 500 тысяч против миллиона и прирост 100 против 4000 — это вообще смех. Ты сравниваешь тёплое с мягким. Оксфордский словарь включает всё, что движется: средневековые ругательства, названия жуков, химические формулы, диалекты из Алабамы. А русский академический словарь — это только литературная норма, без всяких деревенских говоров. Если считать все наши наречия, мы тоже за миллион перевалим. А ты берёшь и радостно циферки друг на друга накладываешь, даже не вникнув. По поводу прироста: у них любое слово, которое мелькнуло в твиттере — сразу в словарь. У нас — только когда оно лет 10 в серьёзном употреблении. Если бы мы считали как они, то за 2025 год добавили бы «кринж», «вайб», «скуф» — и сразу бы стало не 100, а 500. Но РАН не спешит, и это не значит, что слов нет. Просто словари печатают с задержкой. Ты путаешь бумажку с реальностью. Ты ржал над словом «серверная» — ну зря. Оно в обиходе с 90-х, просто его не вносили, потому что оно было профессиональным жаргоном. А сейчас его знает каждый офисный планктон — вот и добавили. В английском слово computer тоже не сразу попало в словарь. Это норма, а не отставание. Ты бы хоть историю лексикографии почитал, а не хайповал на пустом месте. Твой любимый тезис: «английский гибче» — это вообще перл. Ты кричишь «докажи», а доказательства — вот они, элементарные. Русский берёт корень идти и навешивает приставки: прийти, уйти, выйти, зайти, перейти, дойти, сойти, отойти, подойти, обойти, разойтись — все с разными оттенками. Один корень дал 12 глаголов! А в английском? Go — и всё. Чтобы сказать похожее, надо лепить фразовые глаголы: go in, go out, go away, go through. И это не логично, это просто зазубривать приходится: give in — сдаться, give up — бросить, give out — раздать. Попробуй это выучить — голова кругом. Именно потому у них мало приставок, они вынуждены городить новые слова для каждого нюанса. А нам достаточно пары суффиксов — и новое явление описано. Так что твоя «гибкость» — это на самом деле бедность словообразования. В английском крайне бедная аффиксация (суффиксов и приставок — кот наплакал), поэтому они вынуждены придумывать новые корни для каждого мало-мальски нового явления. А русский спокойно берёт корень пилот и делает беспилотник (уже есть), пилотируемый, пилотажный — одной ногой от одного корня. Именно поэтому в английском ежегодно больше новых слов — им нужно новое слово для каждого оттенка, потому что их язык агглютинативный (склеивающий). А русскому достаточно приставки. Про «языковой фашизм» и ударения — ты сам себя закапываешь. Ты говоришь: «политика не при чём», но тут же поливаешь грязью тех, кто поправляет «звОнит». Ну слушай, если тебе так плевать на норму, почему тебя так бесит, когда тебя поправляют? В английском тоже есть строгие правила: в школе поставят двойку за «I ain't got none», хотя в речи это сплошь и рядом. Норма — это не для того, чтобы ты комплексовал, а чтобы житель Владивостока и житель Калининграда поняли друг друга в деловой переписке. А слово нету все знают, все говорят — оно никуда не пропало. Просто в словаре его нет, и что? Тебе это мешает в баре заказать пиво? Нет. Ты просто ищешь повод обидеться на школьную программу.