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

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

С недавнего момента, переводом игры Sara Is Missing занимается команда TDoT совместно с @Artie_Bow

Сейчас мы занимаемся текстовым переводом, а затем приступим к вычитке текста.

P.S. Демонстрация того, что нам удалось подменить файлы игры:
9e0c4c18-8a87-4087-9bf9-401eeb6a609a?cha

6d7ac302-eaed-4ebb-b766-20f92e300208?cha

382ba44c-8be6-43dc-9691-b9ea99459788?cha

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

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


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

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

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

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

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

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

Текст:
.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

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

Скачать архив
Подменить файл 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

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


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

P.S. Логика обработки content.fs лежит в java/sengine/File.java (к сожалению я её не осилил :()
Там есть такие интересные методы как unpackFS, packFS, unloadFS, loadFS.

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


Ссылка на сообщение
6 часов назад, Artie_Bow сказал:

Редактирование текста через HEX ломает структуру файла и приводит к критической ошибке при загрузке игры, если вместе с текстом меняется размер файла. Было бы здорово, если бы кто-то с ним разобрался, с его структурой. 

Перед каждой строкой есть ее размер в Big Endian. Как вариант попробуйте менять значение в зависимости от размера новой строки.

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


Ссылка на сообщение
10 часов назад, LinkOFF сказал:

Перед каждой строкой есть ее размер в Big Endian. Как вариант попробуйте менять значение в зависимости от размера новой строки.

Размер строк я меняю, но видимо этого недостаточно. Нужно править ещё какие-то значения, знать бы только какие.

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

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


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

@LinkOFF Может, проблема возникает в структуре sim.exe после вшивания в него отредактированного content.fs?

UPD. Я сейчас попробовал отредактированный content.fs засунуть в андроид-версию игры, и она тоже вылетает после загрузки, а значит проблема не в структуре sim.exe, нужно копать именно сам файл content.fs и там ещё что-то править.

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

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


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

Привет! Сам давно интересуюсь темой того, как работает эта игра. Для начала надо сказать, что у игры не свой движок. Игра работает на фреймворке LibGDX, но разработчики явно сами придумали методы обфускации. Далее: игра не задействует файл content.fs, хотя он и вызывает вылет игры. На самом деле все события игры вызываются из файла compiled.fs, который задействуется с запуска (но малейшее его изменение приведёт к неработоспособности игры).

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

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


Ссылка на сообщение
В 26.12.2021 в 17:40, cenya_filyushkin сказал:

Привет! Сам давно интересуюсь темой того, как работает эта игра. Для начала надо сказать, что у игры не свой движок. Игра работает на фреймворке LibGDX, но разработчики явно сами придумали методы обфускации. Далее: игра не задействует файл content.fs, хотя он и вызывает вылет игры. На самом деле все события игры вызываются из файла compiled.fs, который задействуется с запуска (но малейшее его изменение приведёт к неработоспособности игры).

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

Ну да, я в курсе про движок. Насчёт content.fs не соглашусь, он вполне используется. Ниже скриншоты, я отредактировал содержимое одной из смс без изменения длины текстового блока.
 

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

23af43901a1ba1b4aea29ba3101a2ec2.jpg275c394dffbb328da21ad193d65617b1.png

 

Будет не лишним, если ты расскажешь о картинках. Я только знаю кое что о зашифрованных видео. Что в этой игре, что в симулякре видеоролики зашифрованы одинаково. Расшифровать их можно при помощи сайта https://filext.com (кстати, аудиодорожка идёт отдельно от видео и без проблем воспроизводится). Ну и пример одного из расшифрованных видео, а также небольшая информация о нём в спойлере ниже (в т.ч. методы шифрования), может что-то похожее используется в файлах текстур.
 

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

 

d3419741d8dc355cf978467223b68c93.png52af21c4d63424a696d2a2b4df28a833.png

 

 

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

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


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

Хмм… Странно. У меня при изменении content.fs ничего не меняется (видимо, приколы ПК-версии игры). По поводу изображений: .jpeg.texture можно извлечь, если убрать из него всё до 0x80 байта (Но есть забавный момент, что некоторые .jpeg.texture-файлы на деле являются .png.texture, и наоборот). А вот как извлечь .png.texture — непонятно, ибо там нет ни малейшего намёка на структуру .png-файла (Заголовка там нет уж точно).

Кстати. Я смог перекомпилировать класс com.accurve.game23.Game изменив в нём одну переменную, что активирует дебаг-режим в ПК-версии игры (ссылка на jar: https://drive.google.com/file/d/1npYwQkK0gU2iamEwiE6IrRM9g4A7X15G/view?usp=sharing). Там можно вызвать консоль тильдой и вызывать разные команды (я так умудрился добавить иконку на главный экран и при этом поломать его отображение, скриншот ниже)javaw_2021-12-27_09-54-21-095.jpg?width=

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


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

Так, а вот сейчас что-то странное. Я попытался изменить текст сообщения на твой-же (размер не меняется), но моя игра при этом вылетает.

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


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

По сути дела текст в обычном txt формате лежит. Но очень здесь всё интересно реализовано 484 блока, думаю если заморочиться вполне реально сделать перевод. 

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

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


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

@KASaLEX вообще, как мы смогли выяснить, изначально текста диалогов скорее всего хранились в json и в дальнейшем были запакованы в .fs. Но есть вещь, которая меня ошарашила — если Debug-версию игры запускать не в jar, а в exe, то она будет работоспособной даже при удалённых из неё .fs-файлах, и даже будут все текста. json-ов в игровом архиве нет

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


Ссылка на сообщение
В 06.01.2022 в 22:51, cenya_filyushkin сказал:

@KASaLEX вообще, как мы смогли выяснить, изначально текста диалогов скорее всего хранились в json и в дальнейшем были запакованы в .fs. Но есть вещь, которая меня ошарашила — если Debug-версию игры запускать не в jar, а в exe, то она будет работоспособной даже при удалённых из неё .fs-файлах, и даже будут все текста. json-ов в игровом архиве нет

скорее всего у тебя рядом с exe лежат извлечённые файлы .fs которые игра и подтягивает. Дальше потратил я на это всё дело три вечера. Что могу сказать почти все файлы сжаты определенным образом, блоками идет блок сжатых данных потом в открытом виде и так далее. Если файл собрать разжав сжатые блоки и собрать получим оригинальный файл ….который игра не хавает. Проверка происходит по размеру разжатых данных, то есть если взять блок разжать получив оригинальный файл и снова сжать до меньшего размера или большего самого блока, игра будет работать если же изменить оригинальный файл и снова упаковать нет — идет проверка по размеру разжатого файла, даже лого с наушниками, что появляется в начале игры сжато таким образом, в файле данных о размере точно нет. Проверка происходит где-то в коде причем там должны храниться размеры всех файлов в таком случаи

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


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

скорее всего у тебя рядом с exe лежат извлечённые файлы .fs которые игра и подтягивает. Дальше потратил я на это всё дело три вечера. Что могу сказать почти все файлы сжаты определенным образом, блоками идет блок сжатых данных потом в открытом виде и так далее. Если файл собрать разжав сжатые блоки и собрать получим оригинальный файл ….который игра не хавает. Проверка происходит по размеру разжатых данных, то есть если взять блок разжать получив оригинальный файл и снова сжать до меньшего размера или большего самого блока, игра будет работать если же изменить оригинальный файл и снова упаковать нет — идет проверка по размеру разжатого файла, даже лого с наушниками, что появляется в начале игры сжато таким образом, в файле данных о размере точно нет. Проверка происходит где-то в коде причем там должны храниться размеры всех файлов в таком случаи

Миллион раз проверил — рядом fs нет, а поттягивает игра их только в случае, если запущена через jar.

1 час назад, KASaLEX сказал:

скорее всего у тебя рядом с exe лежат извлечённые файлы .fs которые игра и подтягивает. Дальше потратил я на это всё дело три вечера. Что могу сказать почти все файлы сжаты определенным образом, блоками идет блок сжатых данных потом в открытом виде и так далее. Если файл собрать разжав сжатые блоки и собрать получим оригинальный файл ….который игра не хавает. Проверка происходит по размеру разжатых данных, то есть если взять блок разжать получив оригинальный файл и снова сжать до меньшего размера или большего самого блока, игра будет работать если же изменить оригинальный файл и снова упаковать нет — идет проверка по размеру разжатого файла, даже лого с наушниками, что появляется в начале игры сжато таким образом, в файле данных о размере точно нет. Проверка происходит где-то в коде причем там должны храниться размеры всех файлов в таком случаи

И да, кстати. В Debug-режиме в jar-е игра пересобирает все fs в отдельный каталог (compiled). Перепакованный файл content.fs весит меньше того, что лежит в игре. И если этот content.fs положить вместо оригинального — игра так-же будет работать

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


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

подтягивает и через exe. только что сравнил две версии под андроид изменения в них только в .fs файлах, выходит что и данные для проверки размеров в каком-то из них

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


Ссылка на сообщение
Только что, KASaLEX сказал:

подтягивает и через exe. только что сравнил две версии под андроид изменения в них только в .fs файлах, выходит что и данные для проверки размеров в каком-то из них

Уж больно подозрительно, что exe Debug-версии игры игнорирует даже изменённые fs внутри неё, а нигде в иных местах у меня fs не лежат

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

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

    • Ну вот  смотрите женщин приблизительно половина значит   и в политике,  кино играх и так далее их должно быть представлено столько.
    • Они не перевоспитались. Но они стараются, чтобы гея за его вид внешний и ориентацию не забивали на улице, просто потому что он другой. И чтобы черного взяли на работу, вместо того чтобы ему везде отказали и он пошел в банду. Поэтому они везде и пихают их, чтобы показать обществу, что они тоже люди, что в этом плохого — я хз.  
    • Как говорится, тут прекрасно все. И к вам сразу же вопрос. Вот вы говорите квоты нужны для того, что бы появился шанс увеличить представление женщин в политике ради справедливости и равноправия. Вы это буквально только что сказали. А что это за “шанс” такой? Вот фашисты выбрали для себя по квоте 3х женщин вместо 3х мужчин и каким образом из этого процесса будет следовать некая справедливость и равноправие? По вашей же логике, вот у нас есть 3 угнетенных женщины и вместо них мы получили 3 угнетенных мужчины. И в чем тут справедливость? И что реально нужного дало такое равноправие? Да просто вбейте в гугле. Там будет что-то типа вот этого: “Согласно Национальному обследованию по виктимизации преступности, грабежи с белыми жертвами и чернокожими преступниками совершались более чем в 12 раз чаще, чем наоборот.” — т.е. даже более, чем 90%. Это статистика для ограблений.  
    • Местами остались неозвученные монолиги Оффи, к примеру, или голос радиоведущего. Но, в целом докрутить и выйдет конфетка. По голосу очень слабо заметно что нейросеть. 
    • Существует конечно и то и другое. Квоты не имеют отношение к расизму их делают как раз чтобы дань им шанс например  увеличить представление женщин в политике для справедливого и равного предоставления тоже самое относиться и к другим категориям. Пруфы есть на 90% преступлений черных то ? Ато это как с мигрантами в России они в статистике совершают  несколько % преступлений, а представляют как будто от них все преступления. Бритые в татуировках обычно скины, а вобще вы перечислили расовые стереотипы не более. Насчет социальной поддержки полностью согласен это необходимо. Я говорил, что не люблю глупости когда кричат плохая игра, фильм, аниме ведь там черные, женщины герои и так далее не обсуждая качество самого продукта.
    • Негро-фемо-ЛГБТ повестки, значит, не существует... А вот пропаганда скреп, да ещё оголтелая, существует... Любопытно.
    • Нда казалось бы коммунист не должен поддерживать расизм, сексизм и прочее, поскольку  ничего этого даже близко не было в СССР, а поддерживает. Я, даже, сейчас объясню в чем это выражается. Квоты на черных в кино — это расизм, потому что расизм это любое отношение к человеку по его расе. Более того, за расизм принимается то, что им не является. Если в России, скажем увидишь бритого мужика в татуировках, как думаете будет к нему предвзятое отношение? Будет, поэтому и к черным оно такое, так как те совершают 90% всех преступлений. Причины не важны,  но это, чаще всего, не расизм, хотя грань тут очень тонкая и как решается эта проблема? Социальная поддержка бедный семей, часть из которых как раз черные? Обучение и трудоустройство подростков? Нет… Квоты в кино и на определенных должностях, создание организаций аля БЛМ, которые вообще не решают проблему, а скорее наоборот. Такие решения одобряет коммунист, да? С геями и прочими тоже самое они есть, не потому что они есть в принципе, потому как на самом деле их относительно немного, количество растет, не потому что, все поголовно геи, а потому что быть геем, трансом и т.д., это получать привилегии, люди становятся геями из-за того, что так социальная лестница лучше работает. Проще получить работу. Про женщин все примерно тоже самое. Борьба за равноправие уже вышла на уровень маразма и теперь эта новая форма борьбы и в продуктах массовой культуры, а определенная несправедливость ко всем меньшинствам и женщинам в недалеком прошлом, перешла просто в другую крайность, не менее плохую, а может даже и более. Так что, коммунист, который понимает, от чего идут все корни этих проблем, должен ли все это поддерживать? Нормальный — нет (и я сейчас про повестку дня и ее продвижение, а не про наличие людей с определенными девиациями, других рас или пола), а тот кто смотрит либерала Вестника Бури — пожалуйста, все это либеральные, они же про-западные (так уж получилось, что именно там развитые центры капитализма, а значит свободная торговля им выгодна) ценности и этот оборотень под видом коммунизма взял в оборот тем, кому чистая либеральная пропаганда осточертела, а потом рассказывает, что не любит глупых людей, как самокритично то, емае
    • Что бы запоминать, нужно понимать смысл. Например, данное предложение, судя по смыслу, должно было написано так:
      ”Со знаками препинания не могу. Увы, никогда не могу их запомнить”. Иными словами, описали мысль и отделили ее точкой. Потом, написали к чему она относится и тоже это завершили точкой. И тогда можно будет понять, что вы точно хотели сказать.
    • перевоспитанные америкосы  , все, день прошел не зря.
    • Со знаками препинания не могу увы, никогда не мог их запомнить.
  • Изменения статусов

  • Лучшие авторы


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

×