Jump to content
Korean Random
SkepticalFox

space.bin (CompiledSpace) - packer/unpacker

Recommended Posts

прошло три года, а я так и не увидел эту красивую физику разрушения домов.

Share this post


Link to post

Short link
Share on other sites

Ну и чё робит?

Если бы я продолжил заниматься, то всё бы работало.

Там с геометрией и с террейном сложновато было...

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

Если бы я продолжил заниматься, то всё бы работало.

Там с геометрией и с террейном сложновато было...

хрен с ним с террейном, ннада бы геометрию дампить уметь. мне, если честно, уже лень этим заниматься.

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

Ооооочень полезная штука! (очень странно, что раньше не видел)

https://github.com/mikeoverbay/Terra

Там и со space.bin есть работа, надо бы посмотреть: https://github.com/mikeoverbay/Terra/blob/master/Terra/Modules/Mod_space_bin.vb

Жаль, что на Visual Basic)))

BWT2 там есть!

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

@SkepticalFox, интересненько. а мы лопатили и реверсировали...

Ну мы лопатили и долопатились, что теперь нам известно на порядок больше, чем в его проекте)

У него лишь есть минимально необходимое для работы его программы.

кстати, с днём мучёбы!

Это да, надо сессию закрывать наконец)) Edited by SkepticalFox
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Это да, надо сессию закрывать наконец))

Я уже в 10-м. А ты на каком курсе хоть, если не секрет?)

Share this post


Link to post

Short link
Share on other sites

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

http://monstrofil.xyz/docs/doc/html/client_programming_guide/ch04.html

http://monstrofil.xyz/docs/doc/html/client_programming_guide/ch06.html

 

 

    Public Sub get_BWT2_data(ByVal t_cnt As Integer)
        'terrain 2 data
        Dim ms As New MemoryStream(space_table_rows(t_cnt).data)
        Dim br As New BinaryReader(ms)
        ms.Position = 0
        'There is some data at the start that makes no sense.
        Dim d_size As UInt32 = br.ReadUInt32
        BWT2.grid_Meter_size = br.ReadSingle
        For k = 0 To 3
            br.ReadUInt32() ' no idea what these 4 uint32s are for
        Next
        ms.Position = &H24
        BWT2.t_1_start = ms.Position
        BWT2.t_1_d_Length = br.ReadUInt32
        BWT2.t_1_entry_count = br.ReadUInt32
        Dim size As Integer = Sqrt(BWT2.t_1_entry_count)
        ReDim BWT2.location_table_1(BWT2.t_1_entry_count)
        ReDim maplist(BWT2.t_1_entry_count + 1)
        For k = 0 To BWT2.t_1_entry_count - 1
            BWT2.location_table_1(k).key = br.ReadUInt32
            BWT2.location_table_1(k).location = br.ReadUInt32
            BWT2.location_table_1(k).loc_str = BWT2.location_table_1(k).location.ToString("x8")
            maplist(k).name = BWT2.location_table_1(k).loc_str
            BWT2.location_table_1(k).cdata_str = BWT2.location_table_1(k).loc_str + "o.cdata"
        Next

        BWT2.t_2_start = ms.Position
        BWT2.t_2_d_Length = br.ReadUInt32
        BWT2.t_2_entry_count = br.ReadUInt32

        ReDim BWT2.index_list_2(BWT2.t_2_entry_count)
        ReDim BWT2.sorted_table(BWT2.t_2_entry_count)
        For k = 0 To BWT2.t_2_entry_count - 1
            BWT2.index_list_2(k).index = br.ReadUInt32
        Next
        Dim sb As New StringBuilder
        sb.Length = 0
        For c = 0 To size - 1
            'sb.Append(":")
            For r = 0 To size - 1
                'sb.Append(maplist((c * size) + r).name)
                If maplist((c * size) + r).location.x > 0 Then
                    sb.Append("( " + maplist((c * size) + r).location.x.ToString("000.0"))
                Else
                    sb.Append("(" + maplist((c * size) + r).location.x.ToString("000.0"))

                End If
                sb.Append(":")
                If maplist((c * size) + r).location.y > 0 Then
                    sb.Append(" " + maplist((c * size) + r).location.y.ToString("000.0") + ")" + " ")
                Else
                    sb.Append(maplist((c * size) + r).location.y.ToString("000.0") + ")" + " ")
                End If
            Next
            sb.Append(vbCrLf)
        Next
        'Console.WriteLine(sb.ToString)
        For k = 0 To 6
            br.ReadUInt32() '7 : no idea what these are
        Next
        BWT2.t_3_start = ms.Position
        BWT2.t_3_d_Length = br.ReadUInt32
        BWT2.t_3_entry_count = br.ReadUInt32

        ReDim BWT2.location_table_3(BWT2.t_3_entry_count)
        For k = 0 To BWT2.t_3_entry_count - 1
            BWT2.location_table_3(k).LX = br.ReadSingle
            BWT2.location_table_3(k).min = br.ReadSingle
            BWT2.location_table_3(k).LY = br.ReadSingle
            BWT2.location_table_3(k).UX = br.ReadSingle
            BWT2.location_table_3(k).max = br.ReadSingle
            BWT2.location_table_3(k).UY = br.ReadSingle
        Next
        Dim index As UInt32 = 0
        For k = 0 To BWT2.t_2_entry_count - 1
            index = BWT2.index_list_2(k).index
            BWT2.sorted_table(k).LX = BWT2.location_table_3(index).LX
            BWT2.sorted_table(k).min = BWT2.location_table_3(index).min
            BWT2.sorted_table(k).LY = BWT2.location_table_3(index).LY
            BWT2.sorted_table(k).UX = BWT2.location_table_3(index).UX
            BWT2.sorted_table(k).max = BWT2.location_table_3(index).max
            BWT2.sorted_table(k).UY = BWT2.location_table_3(index).UY
            Console.Write("UX: " + BWT2.location_table_3(k).LX.ToString("0000.0") + vbTab)
            Console.Write("UY: " + BWT2.location_table_3(k).LY.ToString("0000.0") + vbTab)
            Console.Write("LX: " + BWT2.location_table_3(k).UX.ToString("0000.0") + vbTab)
            Console.Write("LY: " + BWT2.location_table_3(k).UY.ToString("0000.0") + vbCrLf)
        Next

        br.Close()
        ms.Dispose()
    End Sub
Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

 

 

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

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

Share this post


Link to post

Short link
Share on other sites

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

Да я уже сам разобрал многое.

BWT2 также содержит в себе блок space.settings/terrain, вот его я сейчас и выискиваю в бинаре

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Расковырял BWT2 немного, BWfr тоже поковырял)

Уже неплохой прогресс...

 

BWT2 в space.bin из WoT 0.9.12 не содержит space.settings/terrain, а вот из 0.9.17.1(скорее всего и раньше) уже содержит его.

Нужно писать тесты, чтобы не напутать ничего.

Распаковать все .chunk и сравнивать с unknown-секциями в BWT2.json)

Edited by SkepticalFox
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

WTCP расковырял от 0.9.12

 

0.9.12 говоришь. Ну еще 10 000 вёдер и золотой ключ у тебя в кармане.

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

0.9.12 говоришь.

А смысл с новыми версиями работать?

Они релизят слишком часто обновы, а у меня интернет плохой.

Кстати, отличие WTCP в 0.9.12 от актуального клиента только в добавлении visibilityMask, которая в 0.9.12 была в BWSV

 

Ну еще 10 000 вёдер и золотой ключ у тебя в кармане.

Ну смотря что понимать под ключом)

На данный момент уже можно многое редактировать внутри space.bin)

декали/частицы/освещение/деревья/звуки/респауны/водоемы/эффекты линзы

 

Не сделано на данный момент - объекты на картах(самая весомая часть space.bin) и террейн(там совсем немного осталось)

Остальные секции вообще можно не трогать и оставлять как есть)

 

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

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

Там же ничего сложного - освещение добавить через BigWorld.PyChunkLight(), а модели через BigWorld.Model() и BigWorld.addModel()

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

террейн(там совсем немного осталось)

Прогресс идет...

Общая структура полностью стала видна.

Осталось распознать все unknown_* блоки

Edited by SkepticalFox

Share this post


Link to post

Short link
Share on other sites

Прогресс идет...

Общая структура полностью стала видна.

Осталось распознать все unknown_* блоки

поздравляю!

у меня появилось время, я его проведу очень насыщенно.

BWSG все еще нужно разобрать?

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