Jump to content
Korean Random
SkepticalFox

space.bin (CompiledSpace) - packer/unpacker

Recommended Posts

Распаковщики-экстрималы, блин.

Поживем - увидим)

Я пока тебе на битбакет залезу и попробую в запись готового чанка с .xml-структурой.

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

Что еще надо разобрать?

Скинь архив с temps/*.chunk, пожалуйста.

 

Я в Дмитрове, есть два свободных дня. Железо поменялось, соотв-нно движка, питона и клиента 0.9.10 нет. Есть hex-редактор.


Вот цены б не было Kaitai... если б он не привязывал переведенный .py-код к своему классу KaitaiStruct. Вычищаю раздутый код.


BSMA decoder

'bsma.py'

import struct

def decode_bsma_section(_io):
    material_descr_size = struct.unpack('<I',_io.read(4))
    material_descr_num = struct.unpack('<I',_io.read(4))
    material_descr_list = [None] * (material_descr_num)
    for i in range(material_descr_num):
        material_descr_list[i] = MaterialDescr(_io)

    fx_size = struct.unpack('<I',_io.read(4))
    fx_num = struct.unpack('<I',_io.read(4))
    fx_list = [None] * (fx_num)
    for i in range(fx_num):
        fx_list[i] = struct.unpack('<I',_io.read(4))

    prop_descr_size = struct.unpack('<I',_io.read(4))
    prop_descr_num = struct.unpack('<I',_io.read(4))
    prop_descr_list = [None] * (prop_descr_num)
    for i in range(prop_descr_num):
        prop_descr_list[i] = PropDescr(_io)

    matrix_descr_size = struct.unpack('<I',_io.read(4))
    matrix_num = struct.unpack('<I',_io.read(4))
    matrix_list = [None] * (matrix_num)
    for i in range(matrix_num):
        matrix_list[i] = Matrix4x4(_io)

    vector_descr_size = struct.unpack('<I',_io.read(4))
    vector_num = struct.unpack('<I',_io.read(4))
    vector_list = [None] * (vector_num)
    for i in range(vector_num):
        vector_list[i] = Vector4(_io)
    return [material_descr_list, prop_descr_list, matrix_list, vector_list]
def MaterialDescr(_io):
    key_fx = struct.unpack('4s',_io.read(4))
    key_from = struct.unpack('4s',_io.read(4))
    key_to = struct.unpack('<I',_io.read(4))
    return [key_fx, key_from, key_to]

def Vector4(_io):
    row0 = [None] * (4)
    for i in range(4):
        row0[i] = struct.unpack('<f',_io.read(4))
    return row0


def Matrix4x4(_io):
    row0 = [None] * (4)
    for i in range(4):
        row0[i] = struct.unpack('<f',_io.read(4))
    row1 = [None] * (4)
    for i in range(4):
        row1[i] = struct.unpack('<f',_io.read(4))
    row2 = [None] * (4)
    for i in range(4):
        row2[i] = struct.unpack('<f',_io.read(4))

    row3 = [None] * (4)
    for i in range(4):
        row3[i] = struct.unpack('<f',_io.read(4))
    return [row0,row1,row2,row3]
def PropDescr(_io):
    key = struct.unpack('<I',_io.read(4))
    value_type = struct.unpack('<I',_io.read(4))
    _on = value_type
    if _on == 2:
        value = struct.unpack('<f',_io.read(4))
    else:
        value = struct.unpack('<I',_io.read(4))
    return [key, value_type, _on]


 

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

@Pavel3333, что-то написать на питоне вообще не проблема.

Не нужно на этим заниматься. Тем более испольовать для этого выхлоп kaitai...

Нужно анализировать секции и смотреть за что они отвечают. Пока это важно.

В BWAL загадки присутствуют.

Нам бы пустой space.bin создать, без материалов и моделей...

Для питон части у меня есть идея создать ассемблер/дизассемблер json<->space.bin

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

@SkepticalFox, у меня нет клиента и соответственно space.bin тоже. Я работаю на другом компьютере.

 

Будь добр, залей space.bin или его чанки. Разберу с удовольствием.

Share this post


Link to post

Short link
Share on other sites

Будь добр, залей space.bin или его чанки. Разберу с удовольствием.

мне сейчас слишком лень что-то заливать...

отдохнуть нужно.

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

Для питон части у меня есть идея создать ассемблер/дизассемблер json<->space.bin

 

 

зачем создавать то, что уже создано?

Я про ту замечательную штуку, которой ты поделился в личке.

Нам бы пустой space.bin создать, без материалов и моделей...

с hex-редактором это можно сделать. долго, потно и нудно, но можно. и без всяких декомпиляторов.

помнишь, я скрины кидал с измененной bwlc?

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

с hex-редактором это можно сделать. долго, потно и нудно, но можно. и без всяких декомпиляторов.

А я скажу, что не нужно тратить силы на монотонную ерунду.

Если у нас будет ассемблер, то нам не нужно будет его писать)

Ассемблер это круто)

Share this post


Link to post

Short link
Share on other sites

А я скажу

А я и не спорю.

Ассемблер так-то уже у нас есть. Осталось только дописать распаковщики и написать скрипт, который записывает в 0000000о.chunk в формате xml данные, которые обязан понять ассемблер для клиента 0.9.10.

 

Хотя знаешь, ты прав. Ассемблер для 0.9.10 не робит без клиента 0.9.10.

 

Я только за идею с json форматом. json я освоил, так что могу тебе потом помочь.

 

А сейчас осталось найти клятый space.bin у себя в закромах.

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

Ассемблер для 0.9.10 не робит без клиента 0.9.10.

И space.bin созданный им не откроется клиентом 0.9.14+

А уже 0.9.17.1 на дворе.

WG не спит и меняет все там с каждой обновой.

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

Я за json.

В итоге должно получится что-то вроде:

{
  "BWAL" : {
  },
  "BWLC" : {
  },
  "BSMA" : {
  },
  ...
}
Там тоже будут сырые данные и это будет не совсем дизассемлер, но для начала подойдет. Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

@Pavel3333, я начал возвращать наработки по некоторым секциям в питон из kaitai.

Конвертер в json прикольная штука получилась...

space_bin.zip

Теперь можно проводить тесты на большом количестве space.bin-файлов...

На bitbucket пока ничего не залью. Надо причесать кое-что..

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

@Pavel3333, залил все что было на bitbucket...

Проводил тесты только на одном space.bin

Нужно больше автоматизации и скриптов!

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

Клёвая шутейка.

Времени нет, извини. Сегодня в шесть свяжемся.

Сегодня и у меня нет времини.

Нужно добавить ассемблер space_bin.json -> space.bin

это будет довольно сложно...

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...