Jump to content

Looney tunes dash


Recommended Posts

  • Engineer
Posted (edited)
2 hours ago, Daniel said:

I need Full análisis of looney tunes dash

High expectations you have. It needs more than just providing a link to attract attention, imho.

Anyways, here's the blocks auf Forest_level2

<RunList name="" fusion="Forest_Level2" player="hi_BugsBunny" chaser="hi_elmerfud" mode="run" speed="66">
<blocks>
<block name="hi_For_Start"/>
<block name="hi_For_Straight_500"/>
<block name="hi_For_Straight_500"/>
<block name="hi_For_Straight_500"/>
<block name="hi_Forest_Temp1"/>
<block name="hi_For_Cap"/>
<block name="hi_For_Straight_250"/>
<block name="hi_Forest_Chasm"/>
<block name="hi_For_Cap"/>
<block name="hi_For_Alt_Long"/>
<block name="hi_For_Straight_500"/>
<block name="hi_For_Gap_Start"/>
<block name="hi_For_Gap_Mid_Quarter"/>
<block name="hi_For_Gap_End"/>
<block name="hi_Forest_Meadow1"/>
<block name="hi_Forest_Chasm"/>
<block name="hi_For_Line"/>
<block name="hi_For_Cap"/>
<block name="hi_For_PreFinish"/>
<block name="hi_For_Finish"/>
</blocks>
</RunList>

The model format is fmlb. I guess there was a solution on former Xentax, Search in the xentax archives given by id-daemon or in a wayback machine.

carrot runner, uncomplete

Edited by shak-otay
Link to comment
Share on other sites

  • Engineer
Posted (edited)
7 hours ago, shak-otay said:

The model format is fmlb. I guess there was a solution on former Xentax, Search in the xentax archives given by id-daemon or in a wayback machine.

and can also use my backup xentax themes (locally or online), there is a primitive search that returns 4 topics🙂

Of course, all these topics were created by the same person. and of course, Shak-otay answered there, and my plugin is also there which is also added to github fmt_fmlb.py.

*(in fact, if you search by the author’s name, then it’s 8 + 1 (from another account))

Spoiler

xjKAVAo.png

 

Edited by Durik256
  • Like 1
Link to comment
Share on other sites

  • Engineer

I re-researched the structure of the fmlb archive. but also there is also an interesting observation that in the game itself there are raw fml files (in text form). some correspond to their fmlb binary versions. This will be very useful for those who want to tinker with this.

  • Like 1
Link to comment
Share on other sites

  • Engineer
Posted (edited)

full research (pseudocode structure):

Spoiler
#FMLB:
    4 bytes magic (_FML)
    uint unk (0)
    uint unk (8)
    uint unk (3)
    uint numFiles
    uint dataOfs
    uint dataSize(+4)
    4 bytes ender (END>)
    16 bytes zeros

    for x in range(numFiles):
        uint type (0)
        uint zero (0)
        uint zero (0)
        64 bytes name (wiyh trash)
        uint data_ofs
        uint size
        ushort index
        ushort ender (>>)

#types indside FMLB:
    102 - hier
    103 - txload
    104 - material
    107 - geo
    108 - prim
    113 - clip
    114 - aniplug
    123 - colorset
    ... - other

#### all 16 byte alignment

# hier 
    64 bytes, nameHier
    uint numNodes
    vec3(float) bscenter
    float bsrad
    140 bytes, unkLabel (trash?)

    for x in range(numNodes):
        uint node_type
        64 bytes, nameNode
        vec4(float) unk
        28 bytes, unk (trash?)
        vec4(float) rgba
        uint zero
        ushort index
        ushort dep
        ushort strLen
        ushort strLen2
        uint unk

	if node_type == 1:
	    mat4(float) trfm
	    vec4(float) scl?
	    bytes[strLen] label

	elif node_type == 2:
	    mat4(float) trfm
	    vec4(float) scl?
	    64 bytes, zeros

	elif node_type == 3:
	    64 bytes, prim_name
	    144 bytes, trash
	    bytes[strLen] label

	elif node_type == 4:
	    bytes[strLen] label

	elif node_type == 5:
	    float unk
	    float numCurve

	    for x in range(numCurve):
	        vec4(float) curv

	elif node_type == 6:
	    64 bytes, label
	    bytes[strLen2] label2

	elif node_type == 7:
	    bytes[strLen] label

	elif node_type == 8:
	    bytes[strLen] label
	    mat4(float) trfm
	    vec4(float) scl?
	    64 bytes, zeros

	elif node_type == 9:
	    vec4(float) unk
	    24 bytes, trash

	elif node_type == 10:
	    mat4(float) trfm
	    vec4(float) scl?
	    mat4(float) unk0
	    mat4(float) unk1
	    16 bytes, trash

	elif node_type == 12:
	    bytes[strLen] label

	elif node_type == 13:
	    64 bytes, label
	    64 bytes, zeros
	    uint unk0
	    uint unk1

	elif node_type == 14:
	    bytes[strLen] label
	    mat4(float) trfm
	    vec4(float) scl?

# prim [860 bytes]
    64 bytes, name
    64 bytes, geo_name [~geo]
    64 bytes, mat_name [~mat]
    640 bytes, colorSet_name [~set]
    32 bytes

# txload [193 bytes]
    64 bytes, name
    128 bytes, nameFile [~map]
    uint ~allowcompression

# material [332 bytes]
    64 bytes, name
    64 bytes, ~texa
    64 bytes, ~texb
    64 bytes, ~texnm
    64 bytes, ~texdiffuseramp
    3 uint, 3 param
	~basis (default,vertex,particle)

#geo
    70 bytes, name (64+6)
    uint ~icount
    uint ~vcount
    uint ~unk(1)
    64 bytes trash(?)
    11 ushort (0-Vert; 1-Norm; 2-?; 3-?; 4-?; 5-uvs1; 6-?; 7-wi; 8-weight; 9-?; 10-trash)
    11 uint (0-iofs; 1-vofs; 2-nofs; 3-?,4-?,5-?; 6-uv1ofs; 7-?; 8-wi; 9-weight; 10-?)
    DATA[...] buf>(vert-vec3(float);norm-vec3(halffloat);uv1-vec2(halffloat);wi-vec4(ubyte);weight-vec3(halffloat);

# sound
    64 bytes, name
    64 bytes, path [~file]
    64 bytes, banks_name [~banks]
    3 uint, 3 param
	unk0 = 1
	~pan = 0
	~gain = 0.75
	
# soundbank
    64 bytes, name
    uint, ~channels

# clip
    64 bytes, BankName
    64 bytes, AnimName
    64 bytes, HierName
    ushort, frame
    ushort, numBones
    16 bytes, unk (trash IfII)

    for range(numBones):
        68 bytes, BoneName
        uint, numElem
        uint, trash
        for range(numElem):
            uint, fmt (1000-pos; 1002-rot; 1003-scl; 1010-uv1; 1011-color)
            uint, type (41-uint; 37-vec2(float); 38-vec3(float); 40-quat(float))
            ushort, numKeys
            ushort, unk (trash)
            array[keys]

 

and bonus, plugin as unpacker arc_fmlb.py

QbSkeZh.gif

 

Без имени-1.jpg

Edited by Durik256
Link to comment
Share on other sites

  • 4 weeks later...

Hi @Durik256i researched some things comparing fml and fmlb files and i used to complete structure:

#FMLB:

    4 bytes magic (_FML)

    uint trash (0)

    uint version (8)

    uint trash (3)

    uint numFiles

    uint dataOfs

    uint dataSize(+4)

    4 bytes ender (END>)

    16 bytes trash (0)

 

    for x in range(numFiles):

        uint type (0)

        ushort istxload (1 true) (0 false)

        uint padding (0)

        ushort isref (1 true) (0 false)

        64 bytes name (wiyh trash)

        uint data_ofs

        uint size

        ushort index

        ushort ender (>>)

 

#types indside FMLB:

    102 - hier

    103 - txload

    104 - material

    107 - geo

    108 - prim

    113 - clip

    114 - aniplug

    116 - collis

    123 - colorset

 

seek dataOfs + data_ofs + index

if type = 102 - hier

 

# hier 

    64 bytes, nameHier (wiyh trash)

    uint numNodes

    vec3(float) bscenter

    float bsrad

    140 bytes, trash

 

    for x in range(numNodes):

        uint node_type

        64 bytes, nameNode (wiyh trash)

        44 bytes, trash

        vec4(float) rgba

        uint padd

        ushort index

        ushort dep

        ushort strLen

        ushort strLen2

        uint padd

 

 if node_type == 1:

     mat4(float) trfm

     vec4(float) sc

     bytes[strLen] label

 

 elif node_type == 2:

     mat4(float) trfm

     vec4(float) sc

     64 bytes, trash

 

 elif node_type == 3:

     64 bytes, prim_name (wiyh)

     144 bytes, trash

     bytes[strLen] label

 

 elif node_type == 4:

     bytes[strLen] label

 

 elif node_type == 5:

     float run (1829.6)

     float numCurve

 

     for x in range(numCurve):

         vec4(float) curv

 

 elif node_type == 6:

     64 bytes, label (wiyh trash)

     bytes[strLen2] label2

 

 elif node_type == 7:

     bytes[strLen] label

 

 elif node_type == 8:

     bytes[strLen] label

     mat4(float) trfm

     vec4(float) sc

     64 bytes, trash

 

 elif node_type == 9:

     vec4(float) ~hi ~hifade ~med ~medfade 

     24 bytes, trash

 

 elif node_type == 10:

     mat4(float) trfm

     vec4(float) sc

     64 bytes, trash

     float visible

     16 bytes, trash

     float sc x

     16 bytes, trash

     float sc y

     16 bytes, trash

     float sc z

     16 bytes, trash

 

 elif node_type == 12:

     bytes[strLen] label

 

 elif node_type == 13:

     64 bytes, label (wiyh trash)

     136 bytes, trash

 

 elif node_type == 14:

     bytes[strLen] label

     mat4(float) trfm

     vec4(float) sc

 

if type = 103 - txload

 

# txload [193 bytes]

    64 bytes, name (wiyh trash)

    128 bytes, nameFile [~map] (wiyh trash)

    uint ~allowcompression

 

# material [332 bytes]

    64 bytes, name (wiyh trash)

    64 bytes, ~texa (wiyh trash)

    64 bytes, ~texb (wiyh trash)

    64 bytes, ~texnm (wiyh trash)

    64 bytes, ~texdiffuseramp (wiyh trash)

    3 uint, 3 param

 ~basis (default,vertex,particle)

 

#geo

    70 bytes, name (64+6)

    uint ~icount

    uint ~vcount

    uint ~unk(1)

    64 bytes, trash

    11 ushort (0-Vert; 1-Norm; 2-?; 3-?; 4-?; 5-uvs1; 6-?; 7-wi; 8-weight; 9-?; 10-trash)

    11 uint (0-iofs; 1-vofs; 2-nofs; 3-?,4-?,5-?; 6-uv1ofs; 7-?; 8-wi; 9-weight; 10-?)

    DATA[...] buf>(ushort;indices-vert-vec3(float);norm-vec3(halffloat);uv1-vec2(halffloat);wi-vec4(ubyte);weight-vec3(halffloat);

 

# sound

    64 bytes, name (wiyh trash)

    64 bytes, path [~file] (wiyh trash)

    64 bytes, banks_name [~banks] (wiyh trash)

    3 uint, 3 param

 unk0 = 1

 ~pan = 0

 ~gain = 0.75

 

# soundbank

    64 bytes, name (wiyh trash)

    uint, ~channels

 

# clip

    64 bytes, BankName (wiyh trash)

    64 bytes, AnimName (wiyh trash)

    64 bytes, HierName (wiyh trash)

    ushort, frame

    ushort, numBones

    16 bytes, (trash)

 

    for range(numBones):

        68 bytes, BoneName (wiyh trash)

        uint, numElem

        uint, trash

        for range(numElem):

            uint, fmt (1000-pos; 1002-rot; 1003-scl; 1010-uv1; 1011-color)

            uint, type (41-uint; 37-vec2(float); 38-vec3(float); 40-quat(float))

            ushort, numKeys

            ushort, (trash)

            array[keys]

But i am not 100% sure if is correct i need help to complete structure,if you want i can change unknow values and send screnshot of game and help to reserach Whats is exatly 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...