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

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

Всем привет. Давно хотел перевести игру под названием Sara Is Missing, она работает на джава “движке” разработчика, написанном на libGDX.

Вся загвоздка в файле content.fs — это сериализированный набор каких-то текстовых данных, причём в нестандартном формате. Переводя его через HEX, проблема возникает, когда текст выходит длиннее оригинального, по итогу вся структура файла “съезжает” и приводит к ломанию игры на старте. 

Все игровые файлы лежат в sim.exe, который можно вскрыть при помощи 7-zip или Winrar.

Исходники игры, если кого заинтересовало:
https://drive.google.com/drive/folders/1hyVdLdSx_p1bGEKQ7H4c5zUpTaDgAncO?usp=sharing
 

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

rus arial.rar — спрайтовый шрифт с добавлением кириллицы.
Путь для замены: sim.exe\com\badlogic\gdx\utils
(Генерировал с помощью runnable-hiero.jar)

Текст:
.fs файлы содержат текста сообщений, а .class файлы — надписи для GUI (путь: sim.exe\game23). 
В android-версии все эти классы запакованы в classes.dex.

Декомпиляция кода:
Логика игры хранится в sim.exe\sengine. Просмотреть код .class файлов удобно через JD-GUI.
Альтернативный вариант — скачать андроид версию, вытащить dex файлы и декомпилировать их.

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

Возможные форматы текстур:
JFIF, PVR, ETC1
Файлы содержат шапку 126 байт (иногда 128), начинающуюся с тега TextureFile. 
Они могут содержать как одно целое изображение, так и множество его фрагментов, поэтому просто удалить шапку будет недостаточно.
Если исходная текстура была большой, то она разрезается на части, не больше, чем 512х512. Порядок частей такой же, как они идут в двоичном файле. У некоторых текстур имеются мипмапы. В симулякре возможно чуть по другому, там ещё можно встретить фрагментированные изображения в виде отдельных текстур: 1|1.png.texture, 1|2.png.texture и т.д.

Для изучения можно вытянуть все картинки утилитой bulk_extractor:
@echo off
bulk_extractor -o D:\Output -R D:\TextureFiles
pause

Логика загрузки изображений:
sengine\graphics2d\texturefile
-----------------------------------------------------------------------------------------------------------------------------------------------------
Кстати в симулякре в режиме отладки можно выполнить команду для распаковки текстуры на диск:
Globals.dumpTexture(“menu/headphones.png”) 
Аргумент это путь в файле support.assets без расширения “.texture”
После выполнения результат появится в кеш папке по пути C:\<username>\game27\compiled\dump

Способ массовой распаковки всех текстур:
Скачайте архив и поместите содержимое в C:\<username>\game27
В файле tex.java замените путь на свой
Запустите игру, нажмите тильду, введите команду: Console.console.evalFile(“tex.java”);
Во время выполнения скрипта игра может зависнуть на 5-10 минут, это нормально. Когда развиснет, значит процесс завершился. Идём в C:\<username>\game27\compiled\dump и проверяем.

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

Скачать архив
Подменить файл Game.class по пути sim.exe\com\accurve\game23 (изменено значение поля RELEASE на false, чтобы включить режим отладки).
Запустить игру.
Теперь можно вызвать консоль по кнопке тильды (~) и использовать команды. Важно: надо всё делать на английской раскладке. 

При инициализации консоли импортируются классы из следующих пакетов:



import com.badlogic.gdx.*;
import sengine.*;
import sengine.graphics2d.*;
import com.accurve.game23.*;
import game23.hlapi.*;
import game23.*;
import game23.grid.*;

Пример простой команды:
ClassName.method(argument);
ClassName.field = new_value;

Также можно по пути C:\<username>\game23 положить autoexec.java, при запуске игры код из этого файла выполнится автоматически через консоль. Но только при включённой отладке.

Чтобы запустить свой скрипт файл:



Console.console.evalFile(fileName);

необходимо сперва выполнить команду 



import sengine.utils.Console;


---------------------------------------------------------------------------------------------------------------------------------------------------------
Для включения отладки в симулякре нужно ставить конфиг:
Создать текстовый файл по пути C:\<username>\game27\autoexec.cfg
В нём прописать:



Gdx.app.setLogLevel(Application.LOG_DEBUG);

Запустить игру.

При инициализации консоли импортируются классы из следующих пакетов:

import com.badlogic.gdx.*;
import sengine.*;
import sengine.graphics2d.*;
import sengine.animation.*;
import sengine.calc.*;
import sengine.utils.*;
import game27.*;
import game27.gb.*;
import game27.glitch.*;
import game27.model.*;
import game27.renderer.*;
import game27.triggers.*;
import game27.Globals;
import game27.triggers.Triggers;
import game27.triggers.ACT1;
import game27.triggers.ACT2;
import game27.triggers.ACT3;
Скрытый текст

В стим-обсуждениях можно найти инструкцию от разработчиков по созданию неофициальной локализации.
https://steamcommunity.com/app/712730/discussions/0/1742220290366328362/

Ниже перевод этого сообщения. Ссылки до сих пор рабочие, но самое интересное — раздел тестирования пуст. Я пробовал следовать этой инструкции на разных версия симулякры, но ничего не вышло. Возможно я просто что-то делал неправильно :(

На всякий случай бэкап файлов: экселевские таблицы, конфиг, документ.
P.S. По умолчанию в конфиге включена рекомпиляция, так что в дальнейшем игра будет загружаться с помощью новосозданных fs в кеш папке. Поэтому если игра перестала запускаться (чёрный экран или крахи), удалите содержимое C:\<username>\game27\compiled, и конфиг, в случае ненадобности.

Цитата

Я добавил в документ инструкцию о том как тестировать свою локализацию (смотрите раздел “Testing”).
https://docs.google.com/document/d/163xald8WbyuNL_3nBZJqVUzGZ0NJ6ffM96QTH3Ii3Sk/edit?usp=sharing

Сперва вам необходимо продублировать документы в Google Drive и добавить свой перевод. Затем скачать этот файл:
https://drive.google.com/open?id=1zSmD7RAsaVIamVdNjPBdFQc46KFXSVyo

Поместите его в C:\<username>\game27\autoexec.cfg
Отредактируйте файл и замените Google ссылки на свои.
Перезапускайте игру каждый раз, когда вносите изменения онлайн.
Нажмите кнопку тильды (~) во время загрузки игры, чтобы проверить сообщения об ошибках.
Игровые сохранения могут повредиться, если внести крупные изменения.

 

Simulacra, альтернативный вариант перевода — версия для Switch

 

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

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


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

версия что ты выше выкладывал?

 

 

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


Ссылка на сообщение
1 минуту назад, KASaLEX сказал:

версия что ты выше выкладывал?

 

 

Ага. Только расширение у неё надо на exe поменять. И докинуть в директорию jre — игра требует вложенной с ней в папку Жавы

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

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


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

реально работает, может где-то во временную папку файлы распаковывает сейчас спецом с вырезанными файлами на другом чистом пк проверю

 

 

 

на чистом не работает !

 

 

 

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


Ссылка на сообщение
5 минут назад, KASaLEX сказал:

реально работает, может где-то во временную папку файлы распаковывает сейчас спецом с вырезанными файлами на другом чистом пк проверю

 

 

 

на чистом не работает !

 

 

 

Оно на сайт перебрасывает, или ошибку Jav-ы выдаёт?

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


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

как обычно если файлы изменить

 

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


Ссылка на сообщение
4 минуты назад, KASaLEX сказал:

как обычно если файлы изменить

 

Странно. Вроде никакой временной папки, где потенциально могут лежать файлы нет (игра указывает на папку game23, но такой нет и в помине, хотя она у меня была в локальной папке пользователя — но даже без неё игра работает)

 

А, я тугодум. Я забыл переименовать формат

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

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


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

2022-01-08-191312.png

как раз там оно всё и лежит

 

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

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


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

Я сейчас подумал: папка compiled ведь создаётся во время компиляции программы в IDE Jav’ы для дебаггинга. А игра написана на libGDX. Что, если рядом с папкой compiled создать папку assets, в которую попробовать покидать файлы, и потом запаковать fs?

Не сработало. Чёрт

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

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


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

Такс, надо кое-что раскопать. Судя по исходникам Сары (да и по действиям методов в консоли) в FS запаковываются только известные игре данные. Данные эти, похоже, хранятся в hints в классе sengine.File. Сами hints представляют из себя WeakCache (да только не джавовский, а опять-же sengine-вский). Что дальше с этим делать, пока не знаю

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

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


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

2022-01-09-014329.png

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

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


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

Все файлы кодируются по одному принципу будь то .fs или текстуры, если взять к примеру текстуру от игры Simulacra  сменив название на, к примеру, logo  игра прекрасно отобразит текстуру с Simulacra  вместо логотипа этой игры. Вся логика очень просто, но как происходит подсчет этого хеша который записан в каждом файле не известно

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


Ссылка на сообщение
17 минут назад, KASaLEX сказал:

Все файлы кодируются по одному принципу будь то .fs или текстуры, если взять к примеру текстуру от игры Simulacra  сменив название на, к примеру, logo  игра прекрасно отобразит текстуру с Simulacra  вместо логотипа этой игры. Вся логика очень просто, но как происходит подсчет этого хеша который записан в каждом файле не известно

Про текстуры в принципе и логично, учитывая, что TextureFile наследуется от MassFile, коими и  являются .fs-файлы. Кстати если удалить текстуру из игры, то вместо неё в игре будет отображаться её более размытая версия

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


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

ты знаешь уже думал плюнуть и удалить все файлы нафиг так как голова последнее пару дней только этими файлами и забита…. ну думаю ещё разок гляну и…….. кажется я понял как хеш высчитать! сейчас проверю заменю файл ...держим кулачки

 

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


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

УРА ! Я разобрался как формируется хеш. С .fs там будет посложней так как очень большое количество блоков. Но принцип тот же просто нужно время, что бы разобрать полностью файл. 

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас



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

×