
OLEGator84
Заслуженные переводчики-
Публикации
180 -
Зарегистрирован
-
Посещение
Все публикации пользователя OLEGator84
-
Заметил, что вставляете файлы вручную и решил написать вам скрипты распаковки \ упаковки *.pak файлов: FEZ_Pak_v.0.2.rar (зеркало) Протестируйте. Разобрал и собрал один файл - MD5 хэши совпадают.
-
да... бывают же такие кадры. :D А по делу: LinkOFF, расширение gfx это просто набор букв, который пришёл в голову разработчикам, он не содержит никакой полезной информации о формате файла. Чтобы помочь необходим сам файл и название игры, в которой он используется.
-
Похоже на то. Удалил из оригинала весь заголовок, вставил целиком заголовок от нормального DDS и всёравно битая картинка, но сдвинув на 4 байта, получил нормальную картинку. Gentium48.ctx.dds
-
Поигрался с заголовком, получилось вот такое изображение, немного съехавшее: Как получить: если размер файла 341 КБ, то это картинка 512x512 со сжатием DXT5 и мипмапсами. Делаем любую картинку с такими данными и берём от неё часть заголовка. в HEX редакторе 0x44 байт или 68 байт в десятичной системе. Потом подставляем эти байты в начало нашего *.ctx файла и сохраняем. Пробуем открыть - каша. опять идём в HEX редактор, встаём на позицию 0x7C (это конец заголовка DDS) и вставляем туда 8 байт нулей (тоесть файл увеличится в размере на 8 байт, все данные после заголовка сдвинутся дальше на 8 байт) В итоге вот то, что видно на картинке. В общем надо поиграться с этим сдвигом, чтобы достичь нужного результата. Как обратно всё пойдёт не знаю.
-
Расшифровка/распаковка .sf файла
OLEGator84 ответил в тему пользователя Vip0Denis в Вскрытие игровых ресурсов
Без образцов у вас практически нулевые шансы на помощь. Не каждый захочет качать весь клиент игры ради этого дела. Залей парочку файлов. -
Вот описание разметки шрифта, которое я смог понять: Она находится в *.asc файлах, некоторые данные мне не ясны и не знаю как оно будет в игре. Вот все файлы, относящиеся к шрифту: font_Fieldrunners 2.rar Написал скрипт для извлечения текста в удобный вид типа: [имя файла] ключ=текст $sScriptName = "Fieldrunners 2 Text Extractor v.0.1"$sLocalizable_csv = FileOpenDialog ($sScriptName, @ScriptDir, "Таблица локализации (*.csv)|Все (*.*)", 1); выбираем файлIf $sLocalizable_csv = "" Then Exit ; если ничего не выбрано, выходим$hLocalizable_csv = FileOpen ($sLocalizable_csv, 0) ; открываем файл для чтения$sLocalizableData = FileRead ($hLocalizable_csv) ; читаем целиком в памятьFileClose ($hLocalizable_csv) ; закрываем файл$aLocalizableData = StringSplit ($sLocalizableData, @CRLF, 1) ; разбиваем текст на строки$sFileName = StringTrimLeft ($sLocalizable_csv, StringInStr ($sLocalizable_csv, "\", 0, -1)) ; выделяем имя файла из пути$sAllText = "["&$sFileName&"]" & @CRLF ; объявляем переменныую для сбора текстаFor $i=1 To $aLocalizableData[0] ; крутим цикл столько раз, сколько строк в массиве$s1st = StringLeft ($aLocalizableData[$i], 1) ; читаем 1-ый символ строкиIf $s1st = "/" Or $s1st = "^" Or $s1st = "" Then ; если он равен "/" или "^" или пустой, то; ничего не делаем и пропускаем эту строкуElse ; иначе начинаем разбирать строку$i1Pos = StringInStr ($aLocalizableData[$i], "^", 0, 1); определяем позицию первого символа "^"$i2Pos = StringInStr ($aLocalizableData[$i], "^", 0, 2); определяем позицию второго символа "^"$sAllText &= StringMid ($aLocalizableData[$i], 1, $i1Pos-1) & "=" ; выделяем ключ$sAllText &= StringMid ($aLocalizableData[$i], $i1Pos+1, $i2Pos-$i1Pos-1) & @CRLF ; выделяем текст;MsgBox (0, "", $sAllText) ; для отладкиEndIfNext$sAllTextFile = FileSaveDialog ($sScriptName, @ScriptDir, "Текстовые файлы (*.txt)", 16, "Alltext.txt") ; отображаем диалог сохранения результатаIf $sAllTextFile = "" Then Exit ; если ничего не выбрано, выходим$hAllText = FileOpen ($sAllTextFile, 2+8) ; открываем файл для записи с затираниемFileWrite ($hAllText, $sAllText); записываем данные в новый файлFileClose ($hAllText); закрываем файлMsgBox (0, $sScriptName, "Done!") Запускать этим: autoit-v3-setup.exe Вот сам текст: Alltext.txt Проект перевода на Notabenoid: Fieldrunners 2 Data.pak - это поксореный архив (0xf8), после снятия ксора, открывается через WinRAR, после внесения изменений нужно опять пройтись ксором. Я использовал консольный xor.exe от Luigi Auriemma Всё проверил, данные заменяются, правда текст в размеры не влезает, но это походу можно подправить в файлах *.form Шрифт Stencil: Stencil Cyrillic.rar Остался один неясный момент: Как сопоставить символ на текстуре, который мы допустим нарисовали и задали ему координаты, с кодом символа? откупал китайскую версию первой части и понял как там это реализовано: в китайском комплекте присутствует некий *.map файл, в котором указаны коды символов в одну строку. Китайский образец: Fieldrunners 1 china.rar p.s. Сам координатором не буду...
-
Unity 3D Engine (*.assets)
OLEGator84 ответил в тему пользователя Haoose в Вскрытие игровых ресурсов
Заснял видеоматериал по редактированию текста на примере игры One Late Night: Unity_text_edit.exe (не пугайтесь расширения, это flash) зеркало -
работает, только там вместо блоков 05000000 идут блоки 01000000, так как это по всей видимости означет количество языков, а он тут один Английский. смещение: 0x00005758, там вот такая последовательность: E90A0000 E90A0000 00000000 или вот https://dl.dropbox.com/u/61913146/Little_In.../ABA2B834_u.txt
-
Да.... в файле куча таких блоков с текстами. На нём работает ручной режим, с указанием смещения, но это нужно повторять для каждого блока заново, а их там огого... И ещё копировать в другой файл, так как исходный перезапишется новыми данными. Я не знаю как полностью автоматизировать этот процесс. Я даже не представляю как автоматизировать обратный процесс запихивания текста.
-
Основное вроде всё разобрано, проблема со шрифтом, точнее с добавлением нормальных русских символов, по этому остаётся вариант с перерисовкой "умлаутов", вписывая русские буквы в их размеры. Так что художники берите текстуры, которые мне зоботливо предоставил Vials http://rghost.ru/private/42134307/a296f290...89c938323e70662 Составляйте табличку соответствия типа: АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяAАBБВEЛГДЕЖKЗMHOИPCTЙКXМНОПСТbУФХa6ЦШЩeлЪЫuЬЭабвonpcгyдxежзийкмноп и по ней потом сконвертируем текст. А текст просто нужно заботливо собрать из всех файлов, а их там не мало, это каждый просмотреть надо. И залить на нтабеноид, да ещё и не забыть какая строчка из какого файла была.
-
Переводу нужен координатор. Я с технической стороны помог чем смог.
-
Ну вот очередная моя попытка извлечь нормально только английский текст: LitInfTxtExt_v.0.2.exe (исходный код) Так как файлы, содержащие текст не совсем одинаковы, я применил два режима работы: Автоматический и Ручной. Автоматический срабатывает на тех файлах, которые соответствуют описанию выше. Ручной режим требует явного указания на структуру, с которой начинается информация о тексте. Как искать это смещение: Открываем файл в HEX редакторе, идем в самый конец и листаем вверх до того участка, откуда собственно текст начинается. Выше наблюдаем фрагменты типа ne, ed, se, rf, ln Это типы языков со смещениями строк, пролистываем их тоже. Потом идут фрагменты 0x05000000, тут уже внимательнее, надо найти то место, откуда они начинаются. Сразу перед ними будет XX000000 XX000000 00000000, где первые два значения это количества строк и строк всего. На первое нам и надо указать. Смотреть скриншот.
-
Нашел ещё исходники анпакера: http://pastebin.com/MvrSH5jv Ковыряюсь с файлами, которые содержат тексты, нашел некую структуру, где указан оффсет строки и её язык, попробую написать экстрактор английского текста из всего массива файлов. Проблема в том, что файлы с текстом различаются. В одних всё логично, а в других вдруг нет этих данных. Например: файл E2843AED_u. первые 4 байта 0x63000000 - это количество строк на одном языке = 99 в десятичной системе далее по смещению 0x00000014 читаем 4 байта 0xB81B0000 и переворачиваем 0x00001BB8 и получаем новое смещение, перейдя на которое видим: 0x63000000 - опять количество строк в одном языке, а следующие 4 байта 0xEF010000 - это количество строк всего (на всех языках), потом идут блоки по 8 байт столько раз, сколько строк в одном языке эти блоки выглядят так: 0x{00000000}05000000, где в фигурных скобках значение, каждый раз прибавляет 5, типа: 0x{05000000}05000000, 0x{0A000000}05000000 и тд. После этих блоков идёт новая порция блоков по 8 байт и их количество равно количеству строк всего. Выглядят они так: 0x{6E650000}7D1C0000, где первые 4 байта это тип языка, а остальные 4 байта это смещение строки, это смещение относительно начала блока с текстом, то есть после этих блоков по 8 байт. Потом идут строки с 0x00 в качестве метки конца строки. Так вот в других файлах я не нахожу значений количества и смещения на эту структуру и не получается выдрать эти строки программно.
-
Не то чтобы сжатые, так как там куча нулей. Просто ещё один хитрый контейнер. Но никакой нормальной структуры я в нём не вижу. Возможно некое сжатие есть в тех файлах, которые не сжимались в основном архиве (без окончания _u), но там в основном OGG модифицированный. Извлёк текст для ознакомления: 59573A37_txt.txt Скрипт, которым извлёк: $sBinFilePath = FileOpenDialog ( "Укажите файл, из котого надо извлечь текст", @ScriptDir, "Все (*.*)", 1) ; отображает диалог выбора файлаIf $sBinFilePath = "" Then Exit ; если ничего не выбрано, выходим$hBinFile = FileOpen ($sBinFilePath, 0+16) ; открываем файл для чтения в бинарном режиме$sAllText = "" ; переменная для хранения текстаWhile 1 ; крутим цикл, пока не кончится файл$bCurStr = Binary ("") ; переменная для формирования строкиWhile 1$bCurByte = FileRead ($hBinFile, 1) ; читаем по 1 байтуIf @error = -1 Then ExitLoop 2 ; если достигли конца файла, то выходим из обоих цикловIf $bCurByte = "0x00" Then ExitLoop ; если текущий байт равен "0x00", значит достигли конца строкиIf $bCurByte = "0x0A" Then ; заменяем символ переноса 7B30417D {0A}$bCurByte = Binary("0x7B30417D")EndIf$bCurStr &= $bCurByte ; формируем строкуWEnd$sAllText &= BinaryToString ($bCurStr, 4) & @CRLF; преобразовываем бинарь в текст UTF-8 и объединяемм строку с переменнойWEndFileClose ($hBinFile) ; закрываем бинарный файл$hTxtFile = FileOpen ($sBinFilePath & ".txt", 2+128) ; открываем новый текстовый файл для записи в UTF-8 с BOMFileWrite ($hTxtFile, $sAllText) ; записываем данныеFileClose ($hTxtFile) ; закрываем текстовый файлMsgBox (0, "", "Done!") Предварительно необходимо вырезать из бинарного файла именно фрагмент с текстами, чтобы файл состоял только из текста с 0x00 байтом разделителя.
-
Возможно разработчики намеренно изменили заголовки файлов, дабы усложнить нашу работу. Разрабы ответили на моё письмо:
-
Немецкий язык отпадает. Если строка длиннее, то сбиваются оффсеты на другие языки. Эффективно использовать английский, так как он последний, а строка читается до 0x00 и проблем с длинной нет. Всё встало на шрифтах. Где их искать?
-
Vials, хорошие исследования. Удалось заменить текст: Ещё не проверял на длину. Предлагаю заменять немецкий язык, переключается в C:\Users\[username]\AppData\Roaming\Little Inferno\settings.txt language = de
-
Хорошие новости! Решил я ещё раз глянуть на свежую голову и обнаружил ZLIB Вот скрипт распаковщик: Little_Inferno_unpacker.exe Исходный код: /Little_Inferno_unpacker.au3 Извлечь редактором ресурсов три файла (смотреть на скриншоте выше), потом запустить этот скрипт, указать один из файлов и ждать сообщения, что всё готово. Там куча всяких непонятных файлов. Нужно среди них искать тексты и шрифт.
-
Jazzis, А пробовал? Я думаю, движок игры не будет воспринимать GIF. Только PNG Как вариант: сразу весь текст написать на картинке.
-
Итак, что удалось выяснить: В ресурсах EXE файла находится 3 бинарных файла Внушительных размеров. Сохраняем их на диск и смотрим в HEX редакторе Видно, что это контейнер, в нём просматривается некая структура. Данные явно сжаты. Дальше я хз. Если кто подскажет чем пожаты данные, напишу скрипт.
-
Ну EXE файл считай готов. В него можно не соваться. Единственное, что я не перевёл это: в Настройка видео > заголовок Video Setup (если его тронуть, то пропадает остальной текст в этом меню) При загрузке уровня Loading... (если его трронуть, то сбирвается длинна, видно пол строки и пропадает остальное) На урвнях с боссом, в низу пишется название карты (сразу не заметил, а добавлять уже было лень) В настройках управления пришлось задействовать английские символы, так как там нельзя увеличить длинну строк. При переключении разрешения окна проявляется английский текст, решается перезаходом в игру. Редактировал я с помощью OllyDbg 1.10 и PETools А если ты имел ввиду корректировку моей версии перевода, то тексты находятся по смещению: 0x00362000 (открывать в HEX редакторе) в кодирвке UTF-8. После каждой строки я оставил пространство для манёвров (10 байт нулей) Со звуком проблема, даже субтитров нет. Это ещё нужно каждую фразу понять. Для рисования надо фотошоперов пригласить. p.s. Jericho_One, отлично перевёл MAP файлы.
-
Точно! Теперь и коктейль нормально влезет. :) И весь текст, пройдитесь по нему. Нужно заранее сделать все корректировки, так как потом будет проблематично править в EXE файле. [1]origstr=Start New Gamerusstr=Начать новую игру[2]origstr=Resume Levelrusstr=Выбрать уровень[3]origstr=Sound Setuprusstr=Настройки звука[4]origstr=Video Setuprusstr=Настройки видео[5]origstr=Controls Setuprusstr=Настройки управления[6]origstr=Game Optionsrusstr=Игровые опции[7]origstr=Download Soundtrackrusstr=Скачать саундтрек[8]origstr=Quitrusstr=Выйти[9]origstr=Pausedrusstr=Пауза[10]origstr=Resumerusstr=Продолжить[11]origstr=Quit Zombiesrusstr=Выйти из игры[12]origstr=Quit to Main Menurusstr=Выйти в главное меню[13]origstr=Are you sure you want to quit?russtr=Вы действительно хотите выйти?[14]origstr=Cancelrusstr=Отмена[15]origstr=Resume Levelrusstr=Выбор уровня (заголовок внутри меню)[16]origstr=Effects Volumerusstr=Звуковые эффекты[17]origstr=Music Volumerusstr=Музыка[18]origstr=Zombie Buzzwords:russtr=Зомбожаргон:[19]origstr=Enabledrusstr=Включено[20]origstr=Disabledrusstr=Отключено[21]origstr=Windowed Modesrusstr=Оконные режимы[22]origstr=Fullscreen Windowrusstr=Полноэкранный режим[23]origstr=Backrusstr=Назад[24]origstr=Weapon 1:russtr=Оружие 1:[25]origstr=Weapon 2:russtr=Оружие 2:[26]origstr=Weapon 3:russtr=Оружие 3:[27]origstr=Weapon 4:russtr=Оружие 4:[28]origstr=Weapon 5:russtr=Оружие 5:[29]origstr=Weapon 6:russtr=Оружие 6:[30]origstr=Weapon 7:russtr=Оружие 7:[31]origstr=Weapon 8:russtr=Оружие 8:[32]origstr=Weapon 9:russtr=Оружие 9:[33]origstr=Press a key...russtr=Нажмите клавишу...[34]origstr=Move Up:russtr=Двигаться вверх:[35]origstr=Movie Down:russtr=Двигаться вниз:[36]origstr=Movie Left:russtr=Двигаться влево:[37]origstr=Movie Right:russtr=Двигаться вправо:[38]origstr=Run:russtr=Бежать:[39]origstr=Jump:russtr=Прыгать:[40]origstr=Reload:russtr=Перезарядка:[41]origstr=Fire Hurts Dude:russtr=Урон от огня:[42]origstr=Molitov Hurts Dude:russtr=Урон от "Коктейля Молотова":[43]origstr=Enemy/Friendly Indicators:russtr=Индикация свой/чужой:[44]origstr=Camera Shake:russtr=Тряска камеры:[45]origstr=Auto Reload:russtr=Автоперезарядка:[46]origstr=Difficulty:russtr=Сложность:[47]origstr=Easyrusstr=Легко[48]origstr=Normalrusstr=Нормально[49]origstr=Hardrusstr=Трудно[50]origstr=Impossiblerusstr=Невыполнимо[51]origstr=Loadingrusstr=Загрузка[52]origstr=ofrusstr=из[53]origstr=things...russtr=элементов...[53]origstr=Awhhh...russtr=Ахх... p.s. да ещё и версия обновилась November 11, 2012 - v1.05 (Full Version Only) --------- Updated ----------- Всё энтузиазм закончился. Вот EXE файл + Шрифт : Zombies v1.05 (by bignic).rar В EXE файле перевёл почти все надписи. Но в некоторых местах пришлось оставить оригинал, так проявлялись глюки. Перевод MAP файлов на ноте: Zombies v1.05 (by bignic) / Зомби Сам я не знаток английского языка (немецкий учил), по этому могут быть неточности, правка приветствуется. Ещё можно перерисовать заставки перед боем с боссами, типа этих: И не забудьте названия карт в файле levels.txt Все текстовые файлы сохранять в кодировке UTF-8 без BOM Продолжайте...
-
Да, так и задействую. Вот ещё пара сомнительных строк: [41] origstr=Fire Hurts Dude: russtr=Повреждение от огня: Что подразумевается под огнём? Реальный огонь или Огнестрел? [42] origstr=Molitov Hurts Dude: russtr=Повреждение от "Молотова": Тут походу опечатка Molitov, и имеется ввиду коктейль молотова, Но строка получается длинноватой. Ваши предложения?
-
Shecurok, я стараюсь, пока энтузиазм не иссяк. Jazzis, да я переводил не вдумываясь. Действительно выглядит машинно. Скорректирую. Как перевести: Zombie Buzzwords: ? Да чтоб влезло в размер кнопки.
-
Две новости: 1. (хорошая): С кириллицей проблема решена: Файлы типа map_00.txt открывать например в AkelPad и сохранять в UTF-8 без BOM (Если сохранить с BOM игра зависнет). Шрифт нужно рисовать, на скрине Arial. 2. (плохая): Текст в юникоде (UTF-8), а это значит, что для каждого символа нужно 2 байта. Фраза на русском языке и так не укладывается в размеры английской, а тут нас ещё и обрезают (в EXE файле). Фраза в два раза меньше английской получается. ------ updated ------- Нарисовал шрифт: (Я не художник, по этому правка приветствуется) Написал простенький скрипт для извлечения текстов из map файлов: #include <File.au3>$aAllMaps = _FileListToArray(@ScriptDir, "*.txt", 1); собираем в массив имена всех текстовых файловIf @error Then Exit ; если ошибка, выходим$sAllText = "" ; объявляем переменную для текстаFor $i=1 To $aAllMaps[0] ; крутим цикл, столько раз, сколько элементов в массиве$hCurMapFile = FileOpen (@ScriptDir & "\" & $aAllMaps[$i], 0+256); открываем для чтения + UTF-8 без BOM$sCurMapFile = FileRead ($hCurMapFile) ; читаем весь файл в переменную$sCurMapFile = StringTrimLeft ($sCurMapFile, StringInStr ($sCurMapFile, "<objectives>")+13) ; отрезаем всё лишнее в начале$sCurMapFile = StringLeft($sCurMapFile, StringInStr ($sCurMapFile, "</objectives>",0, -1)-3) ; отрезаем всё лишнее в конце$sAllText &= "["&$aAllMaps[$i]& "]" &@CRLF& $sCurMapFile &@CRLF ; объединяем текстNext$hAllText = FileOpen (@ScriptDir & "\AllText.txt", 2+128) ; открываем новый файл для записи + UTF-8 с BOMFileWrite ($hAllText, $sAllText) ; записываем данныеFileClose ($hAllText) ; Закрываем файлMsgBox (0, "", "Done!") Сам текст: AllText.txt -------- updated 2 ----------- Удалось решить проблему с длинной строки в EXE файле. В кратце: Создал новую секцию с помощью программы PETools, далее в новую секцию записал русские строки в кодировке UTF-8, разделяя их 0x00. Потом с помощью отладчика OllyDbg нахожу определённую строку и меняю её адрес на новый, который в новой секции. Гемор ещё тот...