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

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

Некоторые маленькие игры создаются полностью на технологии Adobe (Macromedia) Flash или Adobe Flex.

Иногда встаёт вопрос: "как их русифицировать?"

В этой теме я постараюсь подробно описать, как мне удалось в такой игре заменить шрифт и перевести несколько строк текста без ограничений на длину строки (как решить эту проблему в играх не на Flash'е я немного писал тут: Длина строки).

Речь пойдёт об игре VVVVVV.

 

Spoiler

839590.jpg

Вся игра заключена в один файл: VVVVVV.exe (40 Мб)

Создана она на Flash'е (или на Flex'е), поэтому её exe-шник можно открыть и подредактировать в программе Flash Decompiler Trillix (или любом другом Flash-декомпиляторе).

Но сохранить отредактированный файл можно будет только как SWF, но нам нужен EXE.

Что представляет из себя файл VVVVVV.exe ?

На самом деле он "склеен" из двух файлов:

Flash-плеер.EXE и Flash-ролик.SWF

и в конец получившегося файла добавлено 8 байт:

4 байта: $FA123456

4 байта: размер SWF-ролика.

(так работают простейшие конверторы swf -> exe, в роли Flash-плеер.EXE они могут использовать Adobe Flash CS4\Players\FlashPlayer.exe, в нашем случае нельзя заменять оригинальный плеер игры)

Наша задача заключается в том, чтобы разделить VVVVVV.exe на Flash-плеер.EXE и Flash-ролик.SWF, отредактировать SWF, а затем опять склеить эти 2 файла в VVVVVV.exe, добавив в конец число $FA123456 и размер нового ролика. Для разъединения и склеивания можно воспользоваться какой-то готовой программой.

Разъединили.

Меняем шрифт (в оригинальном шрифте нет русских букв).

Открываем Flash-ролик.SWF во Flash Decompiler Trillix. Находим в разделе Images картинку со шрифтом:

839576.jpg Извлекаем, добавляем русские буквы: 839582.png

Заменяем в Flash Decompiler Trillix картинку со шрифтом на нашу. Сохраняем отредактированный SWF-ролик.

Чтобы посмотреть новый шрифт в игре склеиваем Flash-плеер.EXE и Flash-ролик.SWF, добавляем в конец служебные 8 байт. Запускаем, смотрим что получилось.

 

Spoiler

839604.jpg

Переводим текст меню.

Открываем наш Flash-ролик.SWF в HEX-редакторе, ищем ASCII-строку "start game".

 

Spoiler

4987de55b51bfbe29b6eaf53d0715718.jpg

Можно перевести, но символов недостаточно, чтобы написать "НАЧАТЬ ИГРУ".

Замечаем, что байт перед этой строкой обозначает длину строки: 0A (10.)

Но мало изменять лишь этот байт - игра не запустится или зависнет.

 

Spoiler

71134df1324c795fe8a4767dfda7fac9.jpg

Разбираем формат SWF-файла, чтобы узнать, как изменять длину любой строки.

Для этого я воспользовался официальной спецификацией формата SWF (на англ. языке): SWF File Format Specification, Version 10 (последнюю версию всегда можно взять с оф.сайта).

Итак, любой SWF-файл состоит из заголовка файла (SWFHeader) и идущих следом друг за другом независимых блоков (TAG-ов).

Если заголовок начинается с CWS, ролик сжат, и нужно его сначала чем-то распаковать. В нашем случае он начинается с FWS – всё в порядке.

Каждый TAG имеет свой формат и содержит разные данные (есть tag со шрифтом, tag со звуками, tag со скриптами и т.д.).

Каждый TAG можно изменять/удалять/добавлять независимо от остальных (в разумных пределах). Нужно лишь в заголовке файла изменять одно значение - FileLength (смещение: 04) - размер всего SWF-файла.

 

Spoiler

19f21adb3aed16dd9085f7edbebffa4d.gif

f2b11df75e79881806b849431e321462.gif

401bb1ea336ccc66732eca4873d36e17.gif

Написав по этой документации небольшую программку, я смог составить список всех TAG-ов в нашем Flash-ролике.SWF

 

Spoiler
[ SWF HEADER ]sgn: FWSver = 10FileLength = $22FF144--- FrameSize ---Nbits = 15Nbytes = 8X: 0-6400 Y: 0-588----FrameRate = 0FrameCount = 542[ TAGs ]startpos = $15TAGtype = $45 TAGlen = $04 TAGpos = $15 TAGname = FileAttributesTAGtype = $FF TAGlen = $01 TAGpos = $1B TAGname = TAGtype = $4D TAGlen = $1CA TAGpos = $1E TAGname = MetadataTAGtype = $41 TAGlen = $04 TAGpos = $1EE TAGname = ScriptLimitsTAGtype = $09 TAGlen = $03 TAGpos = $1F4 TAGname = SetBackgroundColorTAGtype = $29 TAGlen = $1A TAGpos = $1F9 TAGname = TAGtype = $2B TAGlen = $0A TAGpos = $215 TAGname = FrameLabelTAGtype = $24 TAGlen = $4E3 TAGpos = $221 TAGname = DefineBitsLossless2TAGtype = $52 TAGlen = $2545 TAGpos = $70A TAGname = DoABCTAGtype = $4C TAGlen = $23 TAGpos = $2C55 TAGname = SymbolClassTAGtype = $01 TAGlen = $00 TAGpos = $2C7A TAGname = ShowFrameTAGtype = $2B TAGlen = $06 TAGpos = $2C7C TAGname = FrameLabelTAGtype = $0E TAGlen = $146C TAGpos = $2C84 TAGname = DefineSoundTAGtype = $0E TAGlen = $28D0 TAGpos = $40F6 TAGname = DefineSoundTAGtype = $0E TAGlen = $1B8F TAGpos = $69CC TAGname = DefineSoundTAGtype = $0E TAGlen = $486B TAGpos = $8561 TAGname = DefineSoundTAGtype = $0E TAGlen = $1985 TAGpos = $CDD2 TAGname = DefineSoundTAGtype = $0E TAGlen = $146C TAGpos = $E75D TAGname = DefineSoundTAGtype = $0E TAGlen = $43EF33 TAGpos = $FBCF TAGname = DefineSoundTAGtype = $0E TAGlen = $1880 TAGpos = $44EB08 TAGname = DefineSoundTAGtype = $0E TAGlen = $830 TAGpos = $45038E TAGname = DefineSoundTAGtype = $0E TAGlen = $72E TAGpos = $450BC4 TAGname = DefineSoundTAGtype = $0E TAGlen = $72E TAGpos = $4512F8 TAGname = DefineSoundTAGtype = $0E TAGlen = $7C6A TAGpos = $451A2C TAGname = DefineSoundTAGtype = $0E TAGlen = $2284DA TAGpos = $45969C TAGname = DefineSoundTAGtype = $0E TAGlen = $1B96 TAGpos = $681B7C TAGname = DefineSoundTAGtype = $0E TAGlen = $C48 TAGpos = $683718 TAGname = DefineSoundTAGtype = $0E TAGlen = $F57 TAGpos = $684366 TAGname = DefineSoundTAGtype = $0E TAGlen = $938 TAGpos = $6852C3 TAGname = DefineSoundTAGtype = $0E TAGlen = $628 TAGpos = $685C01 TAGname = DefineSoundTAGtype = $0E TAGlen = $333F5D TAGpos = $68622F TAGname = DefineSoundTAGtype = $0E TAGlen = $40D601 TAGpos = $9BA192 TAGname = DefineSoundTAGtype = $0E TAGlen = $30DDAF TAGpos = $DC7799 TAGname = DefineSoundTAGtype = $0E TAGlen = $3F3E31 TAGpos = $10D554E TAGname = DefineSoundTAGtype = $0E TAGlen = $72E TAGpos = $14C9385 TAGname = DefineSoundTAGtype = $0E TAGlen = $348FCF TAGpos = $14C9AB9 TAGname = DefineSoundTAGtype = $0E TAGlen = $72E TAGpos = $1812A8E TAGname = DefineSoundTAGtype = $0E TAGlen = $13228 TAGpos = $18131C2 TAGname = DefineSoundTAGtype = $0E TAGlen = $72E TAGpos = $18263F0 TAGname = DefineSoundTAGtype = $0E TAGlen = $32780 TAGpos = $1826B24 TAGname = DefineSoundTAGtype = $0E TAGlen = $72E TAGpos = $18592AA TAGname = DefineSoundTAGtype = $0E TAGlen = $9CF TAGpos = $18599DE TAGname = DefineSoundTAGtype = $0E TAGlen = $1DC3 TAGpos = $185A3B3 TAGname = DefineSoundTAGtype = $0E TAGlen = $72E TAGpos = $185C17C TAGname = DefineSoundTAGtype = $0E TAGlen = $72E TAGpos = $185C8B0 TAGname = DefineSoundTAGtype = $0E TAGlen = $3E48 TAGpos = $185CFE4 TAGname = DefineSoundTAGtype = $0E TAGlen = $4E9FCA TAGpos = $1860E32 TAGname = DefineSoundTAGtype = $0E TAGlen = $199FB3 TAGpos = $1D4AE02 TAGname = DefineSoundTAGtype = $0E TAGlen = $89A TAGpos = $1EE4DBB TAGname = DefineSoundTAGtype = $0E TAGlen = $1267 TAGpos = $1EE565B TAGname = DefineSoundTAGtype = $0E TAGlen = $1E231 TAGpos = $1EE68C8 TAGname = DefineSoundTAGtype = $0E TAGlen = $27C71D TAGpos = $1F04AFF TAGname = DefineSoundTAGtype = $24 TAGlen = $233E TAGpos = $2181222 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $2365 TAGpos = $2183566 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $2233 TAGpos = $21858D1 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $26C2 TAGpos = $2187B0A TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $62D TAGpos = $218A1D2 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $1CFC TAGpos = $218A805 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $272C TAGpos = $218C507 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $176B TAGpos = $218EC39 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $1C TAGpos = $21903AA TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $F2E TAGpos = $21903CC TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $12B TAGpos = $2191300 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $12F TAGpos = $2191431 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $127 TAGpos = $2191566 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $FBD TAGpos = $2191693 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $B2 TAGpos = $2192656 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $131 TAGpos = $219270E TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $88 TAGpos = $2192845 TAGname = DefineBitsLossless2TAGtype = $24 TAGlen = $AE TAGpos = $21928D3 TAGname = DefineBitsLossless2TAGtype = $38 TAGlen = $227 TAGpos = $2192987 TAGname = ExportAssetsTAGtype = $52 TAGlen = $16C20A TAGpos = $2192BB4 TAGname = DoABCTAGtype = $4C TAGlen = $376 TAGpos = $22FEDC4 TAGname = SymbolClassTAGtype = $01 TAGlen = $00 TAGpos = $22FF140 TAGname = ShowFrameTAGtype = $00 TAGlen = $00 TAGpos = $22FF142 TAGname = End

 

Строка "start game" находится по смещению 22562DD, а это значит, что она содержится вот в этом TAG'е:

TAGtype = $52 TAGlen = $16C20A TAGpos = $2192BB4 TAGname = DoABC

(тип DoABC означает, что в этом теге содержится байт-код, который выполняет виртуальная машина ActionScript, а это усложняет отладку в программах вроде OllyDbg и SoftIce, однако, это же означает, что данный код не содержит абсолютных адресов, что упростит его изменение – мои догадки)

Начинается он со смещения 2192BB4, переходим сюда в HEX-редакторе. Попадаем на заголовок TAG'а. Первые 2 байта нас не интересуют (они содержат тип тега), далее идёт 4 байта, в которых указывается размер тега. И если мы увеличим длину строки в этом теге, то и размер тега нам тоже надо увеличить.

Итак, выяснили, чтобы заменить строку "start game" на "НАЧАТЬ ИГРУ" (наша строка на 1 байт длиннее) нужно сделать следующее:

1) заменить текст, вставив один лишний символ

2) перед строкой указать правильную длину строки: вместо 0A пишем 0B (11.)

3) указываем в заголовке тега длину на 1 больше, чем было

4) указываем в заголовке файла длину на 1 больше, чем было

Всё! Склеиваем Flash-плеер.EXE и отредактированный Flash-ролик.SWF, дописываем в конец 8 служебных байт, запускаем смотрим.

Если ничего не напортачили, всё будет работать. Вот, что у меня получилось после перевода таким методом двух пунктов меню:

 

Spoiler

5c7d53508b41be8137ce2397a20f7727.jpg

Осталось лишь отшлифовать шрифт, чтобы аккуратней был, и перевести весь остальной текст. И очевидно, что изменять каждую строку лучше не вручную... :)

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

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


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

Ого! Молодец! :D

Я нарисовал шрифт, вроде все размеры соблюдал, но почему-то буквы слитные.

6ca38b3f68ce.png

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


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

а как в Flash Decompiler Trillix заменять содержимое ? что то не нашел там такой функции!

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


Ссылка на сообщение
Меняем шрифт (в оригинальном шрифте нет русских букв).

Открываем Flash-ролик.SWF во Flash Decompiler Trillix. Находим в разделе Images картинку со шрифтом:

839576.jpg Извлекаем, добавляем русские буквы: 839582.png

Заменяем в Flash Decompiler Trillix картинку со шрифтом на нашу. Сохраняем отредактированный SWF-ролик.

enz° и остальные, такой вопросик: а как получается, что, при замене английских слов на русские в коде, символы подхватываются именно из той части картинки со шрифтом, в которой дорисованы русские символы? Вопрос касается не только SWF, но и в целом редактирования EXE-файлов.

Варианта перевода два, как я понимаю:

1) заменить латинские символы на русские, нарисовав их "поверх". И потом меняя в exe на соответствующие этим местам латинские символы добиться нужного написания. Нежелателен, потому что появляются затруднения с переводов некоторых слов, например "Enter".

2) дорисовать в файле шрифтов русские символы и писать в exe уже русскими буквами.

Второй вариант возможен? Как это реализовывается?

Прошу прощения за возможно "корявую" формулировку.

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

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


Ссылка на сообщение
... как получается, что, при замене английских слов на русские в коде, символы подхватываются именно из той части картинки со шрифтом, в которой дорисованы русские символы?

В данном случае картинка представляет собой таблицу (сетку) 16 x 16. Всего 256 ячеек. Первая ячейка определяет символ с кодом 0, вторая - символ с кодом 1, .., 32я - 32 (пробел), 33я - 33 (!) и т.д.

Русская буква Ё имеет код 168, значит на картинке она находится в 169м знакоместе (11я строчка, 9я колонка).

Наша задача – лишь нарисовать в этой ячейке нужный символ.

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


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

Спасибо за разъяснения!

Подскажите еще, как сделать прозрачность в вашем файле fonts,

ab0626522334ee629f2e64c72eb0bb26.jpeg

чтобы было как здесь? А то я в графических редакторах не мастак.

203e354e2e1dc5f5eec4376d405635fa.jpeg

UPD: все, разобрался.

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

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


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

с помощью проги Sothink SWF Quicker SWF-файлы русифицировать без проблем

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


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

ребят нашел тут игрушку своей меяты. http://www.4shared.com/zip/uMuGwZSV/pokemo...03-11-2012.html ;) в планах взяться за перевод, благо с игрой идет конструктор. Вся загвоздка в шрифтах они помоему в SWF в файле textbox.swf. Может кто поможет достать шрифт и добавить русский алфавмт? Отдельную тему не создаю потому что во-первых игра не доделана, а во-вторых она врядли кого-то заинтересует из переводчиков.

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


Ссылка на сообщение
ребят нашел тут игрушку своей меяты. http://www.4shared.com/zip/uMuGwZSV/pokemo...03-11-2012.html ;) в планах взяться за перевод, благо с игрой идет конструктор. Вся загвоздка в шрифтах они помоему в SWF в файле textbox.swf. Может кто поможет достать шрифт и добавить русский алфавмт? Отдельную тему не создаю потому что во-первых игра не доделана, а во-вторых она врядли кого-то заинтересует из переводчиков.
Ребята это опять я и опять с этой игрой мучаюсь. Нашел я шрифт он был в game.swf. http://yadi.sk/d/aA2Y7Ktf3PCJ8

Кто нибуть сможет мне его перерисовать или скинуть мне другой? Я волшебное слово знаю, Пожолуйста! :smile:

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

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


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

Здравствуйте я тут локализирую одну игру называеться “Road Of The Dead” возник вопрос
я вроде всё сделал как надо но игра выдаёт это https://imgur.com/a/nCsgx25

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


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

В swf файле сколько было шрифтов? Точно нужные шрифты заменили? И какой программой заменяли ресурсы?

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


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

@SkeleTos 

В шрифте нет DefineFontAlignZones отвечающий за расположение символов по осям X и Y.

Или же у вас DefineFontAlignZones остался от старого шрифта, из-за чего произошло смещение символов

А так же такое бывает, если скопировать из шрифта *.ttf символы непосредственно в шрифт в *.swf

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

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


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

@Tericonio А как этот DefineFontAlignZones  настроить чтобы символы были по своим осям X и Y?

 

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

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

    • Это уровень озабоченных школьников 12 лет.  У меня воздержание два месяца, войди в положение. Сам небось только что потеребонкал на Андропова или на кого там у вас , коммуняк, стояк постоянный?  На Берию? Ну ещё бы. Конечно. Берия похожий на сову, в его огромной шляпе, едет в огромной бронированной коммунистической машине и выцепляет не только былерин но и маленьких мальчиков. Уже представляю твои сны о таком. Хотел бы стать тем самым маленьким мальчиком?  Наверняка после такого просыпаешься весь в поллюциях но только как озабоченный дядечка лет 35-ти)) Абсолютно верно друг мой. В самую точку.  Латентным комунистам такого не понять, не осилить в силу ограниченности ума и зацикленности на вещах не имеющих ничего общего с прекрасным. Например с теми же трусиками.  Только когда на город опускается ночь, они с фонариками забиратся под одеяла и рассматривают там старые журналы со всеми теми "великими" личностями. Потихонько разминая свои пожухлые колбаски. .poluyan Признавайся, если б Берия притормозил перед тобой, приоткрыл дверь и недвусмысленно поманил тебя пальчиком сесть к нему на коленки. То ты сел бы не раздумывая, да?  И тогда сбылась бы твоя мечта:прокатится на машине с самим Берией и кое-что(наверное это была какая то эксклюзивная конфета подумал бы ты) посасать и возможно... даже слегка попрыгать у него на "коленках" ))) 
    • ору. ладно думай как хочешь. Мне то что. Комбайн всегда можно придумать и сделать, но пойдет один фиг не для всех игр. А для таких которые подходит давно уже придумано и сделано. Как сами говорите научитесь гуглить советую посетить соседнию тему с моим последнием сообщением. А не вкидывать нейро текст сюда. как это связано с универсальным софтом?
    • Вы балет то хот раз видели? там всегда на трусики приходят смотреть, что и должна демонстрировать в первую очередь данная игра!
    • Главное фотки данного подъема не выкладывай, нам фоток с твоими обедами вполне достаточно.)
    • DjGiza, ты сейчас озвучил главный миф людей, которые использовали нейросеть только для написания школьных рефератов.   Да, в обычном чате у LLM есть так называемый sycophancy bias (склонность поддакивать пользователю). Если ты напишешь ей «Земля плоская, согласись», она вежливо поддержит твою шизофрению. Но ты, видимо, вообще не понимаешь, как ИИ применяется в реверс-инжиниринге и разработке софта.   В программировании судья не нейросеть, а компилятор, интерпретатор и железо.   Если я скажу ИИ: "Структура заголовка WAD-архива в Ratchet & Clank весит 4 байта, напиши парсер", он "согласится" и выдаст код на Python с использованием struct. Но когда я запущу этот скрипт на реальном ISO-образе игры, интерпретатор упадет с struct.error или EOFError, потому что реальный заголовок весит 16 байт и содержит magic-числа. Железу, MIPS-ассемблеру и бинарному файлу абсолютно плевать, с чем там "согласилась" нейросеть в чате. Код либо работает, либо крашится.   Я не спрашиваю у ИИ "прав ли я, похвали меня". Я скармливаю ему сырые дампы памяти из PCSX2, хекс-таблицы и куски MIPS-кода, чтобы он помог мне написать алгоритм распаковки, регулярки для поиска указателей или обвязку на C++. Валидация моей идеи происходит не "кивком робота", а тестовым прогоном софта на эмуляторе. Если моя гипотеза по структуре памяти неверна — софт не соберет игру, и я пойду править код, а не плакаться на форум.   Смешно наблюдать, как вы с Tirniel и FGLososin хором пытаетесь найти хоть какую-то зацепку, чтобы обесценить современный подход к разработке. Сначала было: "Ты просто фармишь посты". Потом: "Нейронка несет околесицу". Теперь: "Нейронка тебе просто поддакивает".   Уровень вашей технической дискуссии скатился в песочницу. Когда у местной "экспертной" бригады заканчиваются аргументы по архитектуре тулкетов и работе с бинарниками, вы начинаете придумывать отговорки про "злых ИИ". Иди дальше фарми рейтинг и минусуй в карму, раз по сути возразить вашей команде больше нечего.
    • Напиши ии что думаешь вот так разве не правильно будет. Он с тобой 100% согласится если даже это не правда. Ты кинул что-то там ему, он тебе сказал гинеально правильно мыслишь. Это и есть выгоду в твою сторону, а не обьяснение тебе что скорее всего так не пойдет или придется работать много.
    • Понимаете, вы выступили против AI, но каковы ваши шансы в споре против AI? Получается AI знает, как лучше, а вы только думаете, что знаете. AI просто предоставит пруфы своего текста с habr-статей. AI может выставить ваши жизненные ценности на посмешище (зависит от ценностей), обольёт говном и размажет по стенке, а вы сделать ничего не сможете. Вот малая доля того, что может AI, которую вы не воспринимаете всерьёз для озвучки)
    • Это скорее сны Мирослава о тентаклях, о его подсознательных тайных желаниях. Как они, такие большие, проникают в него, заполняя каждую щёлочку, и как он не в силах противится этому, отдаётся им одним за одним. Каждый раз он просыпается весь спотевший, с чувством страха, но и одновременно очень счастливый от безумного удовлетворения своих потаённых фантазий и желаний. Да, с такими кошечками это кого хошь на ноги поднимет, да и не только. Я вот только смотрю видос, а у меня уже начинает приподниматься. Мирослав знает толк а подобных вещах. Что ни говори, а почти два месяца воздержания это не мало.
    • А я наоборот нашел то что его сразу излечит от всех боязней мониторов, лучей и отражений https://store.steampowered.com/app/3563080/Swords__Slippers/ кстати сам жду ее неистово с нетерпением
    • 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 заканчиваются технические аргументы, вы дружно начинаете кричать про нейросети, чтобы хоть как-то скрыть собственную некомпетентность в разработке. Смешно. Иди, запиши себе еще три поста в копилку рейтинга, может, за спам тебе на форуме ачивку выдадут.  
  • Изменения статусов

    • Perfect End Strange  »  SerGEAnt

      Привет, озвучку для Silent Hill 4: The Room выпустил энтузиаст под ником Perfect End Strange, а вы написали совсем другую студию, пожалуйста, исправьте эту оплошность
      · 0 ответов
    • Jimmi Hopkins  »  SerGEAnt

      я его уже открыл в свободный доступ, чтобы не потерялось среди новинок
      · 0 ответов
    • NekoNya  »  Onzi

      https://www.dropbox.com/scl/fi/4xncxr2tqy77vz4644q08/text_RU_FINAL.json?rlkey=xckxss3jkql4gjmc1ah6qjb5e&st=k5ql651f&dl=0 
       
      Вот, то что вышло. Извинюсь, что зря говорил, что помогу (
      · 2 ответа
    • serfly  »  SerGEAnt

      Доброго времени! Недавно столкнулся с проблемой автоперевода XUnity AutoTranslator BeplnEx iL2cc. Пару последних лет часто пользовался, теперь консольные команды виснут на стадии загрузки библиотек, хотя они есть там изначально. На GitHub есть подобные вопросы, но ни одного рабочего ответа я не нашел. А Вы что можете посоветовать?
      · 0 ответов
    • serfly  »  SamhainGhost

      Доброго времени. По локализации игры Wicked Seed. Шрифт размазан и в полях, другие можно попробовать? Например arialuni_sdf_2022? Я профан в этом, но интересно.
       
      · 0 ответов
  • Лучшие авторы


×