Jump to content
Korean Random
SkepticalFox

space.bin (CompiledSpace) - packer/unpacker

Recommended Posts

@Mixaill, спасибо!


Зачем усложнять?
Заголовки паковать через f.write() надо

т.е. паковать надо строку, а не строку байтов юникода? я немного запутался.

 

Жди, паковщик почти завершен.

Share this post


Link to post

Short link
Share on other sites

Жди, паковщик почти завершен.

А распаковщик нет)

До сих пор не понимаю, как лучше все организовать...

Share this post


Link to post

Short link
Share on other sites

До сих пор не понимаю, как лучше все организовать...

Класс CompiledSpace, имхо, плохая идея.

лучше просто написать метод.

1. проходим секции из space.bin (в шапке есть код)

2. берем у каждого заголовок

3. В методе создаем список из этих самых заголовков секций.

Важно! элементы списка должны быть записаны в том порядке, который был в space.bin!

4. проходим находим класс секции по заголовку из словаря типа 

{
...
'header':HEADER_Section
'BSMA':BSMA_Section
...
}
4. Все XXXX_Section - классы. обращаемся к атрибуту-функции get_data_from_stream(stream)

5. Создаем json-файлы

 

У меня это почти реализовано.

 

Держи.

json2space_py.zip

если заглянуть в json2space.py, увидишь список

sections=['bwtb',
      'bwst',
      'bwal',
      'bwcs',
      'bwsg',
      'bsgd',           #-
      'bwt2',
      'bsmi',
      'bsmo',
      'bsma',
      'sptr',
      'bwfr',
      'wgsd',
      'wtcp',
      'bwwa',
      'bwep',           #-
      'wgco',           #-
      'bwps',
      'cent',
      'udos',
      'wgde',           #-
      'bwlc',
      'wtau',
      'wtbl',           #-
      'wgsh']           #-
ну так вот. все секции с комментарием "#-" - не закончены. нужен реверс.

 

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

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

/0/

не знаю такого мемеса...

Не все так просто!

Т.е. класс CompiledSpace таки нужен?

Но у нас стоит задача написать распаковщик и запаковщик, зачем так усложнять код?

...

ПыСы ты хоть json2space_py.zip посмотри, я много чего переписал. Дело за малым - нужно переделать xxxx_section.py.

Share this post


Link to post

Short link
Share on other sites

Но у нас стоит задача написать распаковщик и запаковщик, зачем так усложнять код?

А где именно я усложняю код?

Хотя да. to_dict и from_dict стоит тоже в базовый класс вынести...

Но без наследования никак не обойтись.

Код будет раздуваться из-за повторяющихся методов.

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

Но без наследования никак не обойтись.

Ок, тогда сейчас внесу наработки в

class DecompiledSpace:
...

Share this post


Link to post

Short link
Share on other sites

@Pavel3333, эм...

Сейчас нужно скорее секции разбирать...

Я сейчас занимаюсь удалением дублирования в файлах.

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

угу, понял. а я пока над bswg карпею, вроде кое-что в kaitai написал, но это не полностью.

Share this post


Link to post

Short link
Share on other sites

@Pavel3333, я вот уже давно думаю, что стоит скачать клиент 0.9.12 и искать сходства с 0.9.10...

Это самый разумный вариант, но я его еще даже не попробовал)

Share this post


Link to post

Short link
Share on other sites

почему бы нет?

потом в каком-нить текстдиффе искать отличия.

вроде модели ангаров не менялись... не помню уже.


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

есть ремоделлинг - танк со стеклом.

на стекло наложен шейдер lightonly_alpha.

после введения в игру разделения на dx9/dx11 в бою перестало нормально отображаться стекло. в ангаре и на реплеях всё нормально. грешу на шейдер.

не знаешь, с чем это связано?

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

не знаешь, с чем это связано?

Возможна защита от модов на прозрачность... Обсуждали же уже раньше https://koreanrandom.com/forum/topic/33967-/

 

Ключи строк в BWST у картохи упакованы вроде хеш-функцией FNV. Стоит проверить...

При создании упаковщика это нам понадобится...

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

@SkepticalFox, помнишь про распаковщик картохин?

он ведь берет dll из папки игры.

есть надежда на то, что dll-ки могут быть документированы в тырнетах. или могут быть декомпилированы, как библиотеки на C#.

Share this post


Link to post

Short link
Share on other sites

есть надежда на то, что dll-ки могут быть документированы в тырнетах. или могут быть декомпилированы, как библиотеки на C#.

 

bf557a7aa601e754cf8a7d90d13634f5.jpg

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Удачи, найти то, чего там нет :heh:

По факту там есть все, но нужно уметь читать это.

Мы уже серьезно продвинулись в создании базового распаковщика.

Потом придется писать более сложный скрипт, чтобы эти сырые json-данные представить в виде более удобном для редактирования.

Сейчас важно, чтобы эти json/xml собрались в том же виде обратно в space.bin

Edited by SkepticalFox
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...