Bone Tree Editor- development thread : Version 1.1 released

Started by TheShyGuy, September 13, 2010, 11:57:53 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

nice...i tried to make a 2d physics engine(when I was still very new to xna and c#...faiiil lool

how far did you get on that engine and btw your code has errors

Quote from: theshyguy on December 08, 2010, 03:17:46 AM
nice...i tried to make a 2d physics engine(when I was still very new to xna and c#...faiiil lool

how far did you get on that engine and btw your code has errors

I failed... (got caught up in this crap) :P

and errors you say :o
like what errors??

also, don't forget, the code is unfinished ;)
I guess yur kinda a beta tester :P

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.

December 08, 2010, 03:31:40 AM #62 Last Edit: December 08, 2010, 03:38:54 AM by theshyguy
lemme put it back in c# ill edit this post in a sec

Error 1 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 283 35 Miscellaneous Files
Error 4 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 301 35 Miscellaneous Files
Error 7 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 319 35 Miscellaneous Files
Error 10 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 337 35 Miscellaneous Files
Error 13 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 355 35 Miscellaneous Files
Error 16 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 373 35 Miscellaneous Files
Error 19 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 391 35 Miscellaneous Files
Error 22 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 409 35 Miscellaneous Files
Error 25 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 427 35 Miscellaneous Files
Error 28 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 445 35 Miscellaneous Files
Error 31 Character '&', hexadecimal value 0x26 is illegal in an XML name. C:\Users\\_mdl0.xml 463 36 Miscellaneous Files
Error 3 Entity '&' not defined. C:\Users\\_mdl0.xml 283 35 Miscellaneous Files
Error 6 Entity '&' not defined. C:\Users\\_mdl0.xml 301 35 Miscellaneous Files
Error 9 Entity '&' not defined. C:\Users\\_mdl0.xml 319 35 Miscellaneous Files
Error 12 Entity '&' not defined. C:\Users\\_mdl0.xml 337 35 Miscellaneous Files
Error 15 Entity '&' not defined. C:\Users\\_mdl0.xml 355 35 Miscellaneous Files
Error 18 Entity '&' not defined. C:\Users\\_mdl0.xml 373 35 Miscellaneous Files
Error 21 Entity '&' not defined. C:\Users\\_mdl0.xml 391 35 Miscellaneous Files
Error 24 Entity '&' not defined. C:\Users\\_mdl0.xml 409 35 Miscellaneous Files
Error 27 Entity '&' not defined. C:\Users\\_mdl0.xml 427 35 Miscellaneous Files
Error 30 Entity '&' not defined. C:\Users\\_mdl0.xml 445 35 Miscellaneous Files
Error 33 Entity '&' not defined. C:\Users\\_mdl0.xml 463 36 Miscellaneous Files
Error 2 Expecting ';'. C:\Users\\_mdl0.xml 283 36 Miscellaneous Files
Error 5 Expecting ';'. C:\Users\\_mdl0.xml 301 36 Miscellaneous Files
Error 8 Expecting ';'. C:\Users\\_mdl0.xml 319 36 Miscellaneous Files
Error 11 Expecting ';'. C:\Users\\_mdl0.xml 337 36 Miscellaneous Files
Error 14 Expecting ';'. C:\Users\\_mdl0.xml 355 36 Miscellaneous Files
Error 17 Expecting ';'. C:\Users\\_mdl0.xml 373 36 Miscellaneous Files
Error 20 Expecting ';'. C:\Users\\_mdl0.xml 391 36 Miscellaneous Files
Error 23 Expecting ';'. C:\Users\\_mdl0.xml 409 36 Miscellaneous Files
Error 26 Expecting ';'. C:\Users\\_mdl0.xml 427 36 Miscellaneous Files
Error 29 Expecting ';'. C:\Users\\_mdl0.xml 445 36 Miscellaneous Files
Error 32 Expecting ';'. C:\Users\\_mdl0.xml 463 37 Miscellaneous Files



it goes

error/description/file/line/column/project

edit: btw why is bounds relocation offset and relocation group all the same but you gave em different names?

December 08, 2010, 03:46:56 AM #63 Last Edit: October 06, 2022, 02:42:46 AM by DarkPikachu
I don't see why you don't just edit the xml using notepad :/

as for those 3 things:


also, I'm gonna lose net in a few moments so don't be surprise if I don't reply for a while...

EDIT: this is how those 3 things are used:

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.

hey, a little something I figured out:

the P3 offset is the textures used by the material

the P4 offset is for IDK yet

the data offset prbly contains the colors :D
(Green thunder, here I come) >:3

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.

how do you figure out whats for what?...would help to know where or atleast how your figuring out the mdl0..btw im not working on the editor or looking at the mdl0 right now...just animating a bit for my psa

December 08, 2010, 10:36:16 PM #66 Last Edit: October 06, 2022, 02:53:48 AM by DarkPikachu
Quote from: theshyguy on December 08, 2010, 10:04:57 PM
how do you figure out whats for what?
...would help to know where or atleast how your figuring out the mdl0...

Pharrox (along with about 2 others) and scattered notes were a big help...
I figured out the colors on my own

I'm working on materials right now (the most complicated thing)
^I'm using only knowledge of what I know about dev-ing games to figure the out unknown stuff

and the rest of the stuff I know just simply comes from working with other 3D formats such as .obj or .dae
I think I may have found the ambient, diffuse, and specular colors :af2:


I'm still trying to figure out the P4 and P5 offset stuff
P4 is nonexistant '00 00 00 00' while P5 offsets to bare data (no defined header)

also, all this data is mixed in with eachother due to it being called by the materials using it...
so material extension data isn't lined up over-top of one another like the rest of the file data

EDIT:
materials2 (prbly shaders) will be a tough and painful one to figure out DX

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.

December 09, 2010, 12:55:43 AM #67 Last Edit: October 06, 2022, 02:52:14 AM by DarkPikachu
here's what I know of materials so far:


it's easier to explain with images :P

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.

i wrote in a notepad...and it looks like my new idea might work =)... there wont be a need for move up/down or editing from txt boxes for the bone offset...just plain moving it within the (sortof) tree...

O.o
you mean like a fully interactive index change?? (click/drag)

I need to add bones to my char though
^(TopN, HipN, ThrowN, etc... (all the important bones))

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.

December 09, 2010, 01:21:12 AM #70 Last Edit: December 09, 2010, 01:25:19 AM by theshyguy
yeah basically you can move your bone anywhere you want...ill work on figuring adding bones...but that would mean redoing the mdl0 right?->fortwaffles made a bone(fake) adder and it doubles the mdl0 size. I think i read that he just repointed some data around or something

edit: lol new idea shouldnt take long to make

December 09, 2010, 01:28:10 AM #71 Last Edit: October 06, 2022, 02:50:41 AM by DarkPikachu
Quote from: theshyguy on December 09, 2010, 01:21:12 AM
yeah basically you can move your bone anywhere you want...ill work on figuring adding bones...but that would mean redoing the mdl0 right?->fortwaffles made a bone(fake) adder and it doubles the mdl0 size. I think i read that he just repointed some data around or something

didn't you say you've added bones?? :/
or did I mistake that for you just simply editing the existing ones??

and I tried fortwaffles...
I couldn't work with that...
granted they did show up as editable bones:


but when I checked the data, there was nothing there :/
I think it may have just modded the number of bones without physically adding them...

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.

the bone tree that you see is farther down in the data. It looks like any other bone(i think..been a while since i looked at it)

i don't think ive ever said i can add bones lol...you know the mdl0 so you should know what makes them real lol

December 09, 2010, 01:42:34 AM #73 Last Edit: December 09, 2010, 01:43:49 AM by Tcll
Quote from: theshyguy on December 09, 2010, 01:30:57 AM
the bone tree that you see is farther down in the data. It looks like any other bone(i think..been a while since i looked at it)

i don't think ive ever said i can add bones lol...you know the mdl0 so you should know what makes them real lol

heh... yea :P

I guess what I originally thought was right then :P
*comes to realization* DERP!

so you wern't talking about physically adding bones,
which would be a good reason for you not understanding what the relocation table is...
...I have so derp'd... XDD

so yea...
with that understood :P
you'd have to modify the following data offsets after the added bone...
...aw crap...
(practically redoing the entire MDL0 (editing the offsets))... :(

none of us are that far yet... DX>
dang...

well...
I say we learn then :P
since I don't have a clue about C# and can't prog a GUI for crap,
^but understand most of the MDL0 format (still not everything though)
while you don't get anything but bones, but can prog GUI's for crap :D

guess I'd better get busy =3=

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.

December 09, 2010, 02:50:52 AM #74 Last Edit: December 09, 2010, 03:10:10 AM by Tcll
hey, can you maybe help me out a little??
(I'll be in bed or in skool before you can really do anything) :P

I have some C# code, and I was wondering if you couldn't take a look at it...
maybe add descriptive comments and what not and send it back...

anyways:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using BrawlLib.SSBBTypes;
using BrawlLib.OpenGL;
using System.IO;
using BrawlLib.IO;
using BrawlLib.Imaging;
using BrawlLib.Modeling;
using BrawlLib.Wii.Models;

namespace BrawlLib.SSBB.ResourceNodes
{
    public unsafe class MDL0Node : BRESEntryNode
    {
        internal MDL0* Header { get { return (MDL0*)WorkingUncompressed.Address; } }

        public override ResourceType ResourceType { get { return ResourceType.MDL0; } }

        public override int DataAlign { get { return 0x20; } }

        private int _unk1, _unk2, _unk3, _unk4, _version;
        private int _numVertices, _numFaces, _numNodes;
        private Vector3 _min, _max;

        [Category("MDL0 Def")]
        public int Unknown1 { get { return _unk1; } set { _unk1 = value; } }
        [Category("MDL0 Def")]
        public int Unknown2 { get { return _unk2; } set { _unk2 = value; } }
        [Category("MDL0 Def")]
        public int NumVertices { get { return _numVertices; } set { _numVertices = value; } }
        [Category("MDL0 Def")]
        public int NumFaces { get { return _numFaces; } set { _numFaces = value; } }
        [Category("MDL0 Def")]
        public int Unknown3 { get { return _unk3; } set { _unk3 = value; } }
        [Category("MDL0 Def")]
        public int NumNodes { get { return _numNodes; } set { _numNodes = value; } }
        [Category("MDL0 Def")]
        public int Version { get { return _version; } set { _version = value; } }
        [Category("MDL0 Def")]
        public int Unknown4 { get { return _unk4; } set { _unk4 = value; } }
        [Category("MDL0 Def")]
        public BVec3 BoxMin { get { return _min; } set { _min = value; } }
        [Category("MDL0 Def")]
        public BVec3 BoxMax { get { return _max; } set { _max = value; } }

        //internal List<ResourceNode> _bones;
        //private List<MDL0PolygonNode> _polygons;
        public T FindResource<T>(int index) where T : ResourceNode
        {
            ResourceNode group = null;
            if (typeof(T) == typeof(MDL0PolygonNode))
                group = FindChild("Polygons", false) as ResourceNode;
            else if (typeof(T) == typeof(MDL0VertexNode))
                group = FindChild("Vertices", false) as ResourceNode;
            else if (typeof(T) == typeof(MDL0NormalNode))
                group = FindChild("Normals", false) as ResourceNode;
            else if (typeof(T) == typeof(MDL0UVNode))
                group = FindChild("UV Points", false) as ResourceNode;
            else if (typeof(T) == typeof(MDL0ColorNode))
                group = FindChild("Colors", false) as ResourceNode;
            else if (typeof(T) == typeof(MDL0BoneNode))
            {
                int count = -1;
                if ((group = FindChild("Bones", false) as MDL0GroupNode) != null)
                    return FindBone(group, index, ref count) as T;
            }

            if (group == null)
                return null;

            if (group.Children.Count <= index)
                return null;

            return group.Children[index] as T;
        }
        private ResourceNode FindBone(ResourceNode node, int index, ref int count)
        {
            if (count++ >= index)
                return node;

            foreach (ResourceNode n in node.Children)
                if ((node = FindBone(n, index, ref count)) != null)
                    return node;

            return null;
        }

        protected override bool OnInitialize()
        {
            base.OnInitialize();

            if ((_name == null) && (Header->_stringOffset != 0))
                _name = Header->ResourceString;

            _unk1 = Header->_modelDef._unk1;
            _unk2 = Header->_modelDef._unk2;
            _numVertices = Header->_modelDef._numVertices;
            _numFaces = Header->_modelDef._numFaces;
            _unk3 = Header->_modelDef._unk3;
            _numNodes = Header->_modelDef._numNodes;
            _version = Header->_modelDef._version;
            _unk4 = Header->_modelDef._unk4;
            _min = Header->_modelDef._minExtents;
            _max = Header->_modelDef._maxExtents;

            return true;
        }

        private List<IMatrixProvider> _nodes = new List<IMatrixProvider>();
        internal List<ResourceNode> _bones = new List<ResourceNode>();
        internal List<TextureRef> _texRefs = new List<TextureRef>();

        protected override void OnPopulate()
        {
            ResourceGroup* group;
            for (int i = 0; i < 11; i++)
                if ((group = Header->GetEntry(i)) != null)
                    new MDL0GroupNode().Initialize(this, new DataSource(group, 0), i);

            MDL0GroupNode bNode = FindChild("Bones", false) as MDL0GroupNode;
            MDL0GroupNode pNode = FindChild("Polygons", false) as MDL0GroupNode;
            MDL0GroupNode mNode = FindChild("Materials1", false) as MDL0GroupNode;
            MDL0GroupNode t1Node = FindChild("Textures1", false) as MDL0GroupNode;
            MDL0GroupNode t2Node = FindChild("Textures2", false) as MDL0GroupNode;
            MDL0DefNode nodeMix = FindChild("Definitions/NodeMix", false) as MDL0DefNode;
            MDL0DefNode drawOpa = FindChild("Definitions/DrawOpa", false) as MDL0DefNode;
            MDL0DefNode drawXlu = FindChild("Definitions/DrawXlu", false) as MDL0DefNode;

            //IMatrixProvider[] nodeCache = new IMatrixProvider[NumNodes];
            _nodes = new List<IMatrixProvider>(new IMatrixProvider[NumNodes]);

            //Pull out bones
            //foreach (MDL0BoneNode bone in _boneCache)
            //    nodeCache[bone.NodeId] = bone;
            if (bNode != null)
            {
                _bones = bNode.Children;
                foreach (MDL0BoneNode b in bNode._nodeCache)
                    _nodes[b.NodeId] = new NodeRef(b);

                //Pull out node groups
                if (nodeMix != null)
                    foreach (object o in nodeMix.Items)
                        if (o is MDL0Node3Class)
                        {
                            MDL0Node3Class d = o as MDL0Node3Class;
                            NodeRef nref = new NodeRef();

                            foreach (MDL0NodeType3Entry e in d._entries)
                                nref._entries.Add(new NodeWeight(_nodes[e._id], e._value));

                            _nodes[d._id] = nref;
                        }

                //Attach opaque textures
                if (drawOpa != null)
                {
                    foreach (object o in drawOpa.Items)
                        if (o is MDL0NodeType4)
                        {
                            MDL0NodeType4 d = (MDL0NodeType4)o;
                            MDL0PolygonNode poly = pNode.Children[d._polygonIndex] as MDL0PolygonNode;
                            poly._material = mNode.Children[d._materialIndex] as MDL0MaterialNode;
                        }
                }

                //Attach transparent textures
                //Parse entry 4?
                if (drawXlu != null)
                {
                    foreach (object o in drawXlu.Items)
                        if (o is MDL0NodeType4)
                        {
                            MDL0NodeType4 d = (MDL0NodeType4)o;
                            MDL0PolygonNode poly = pNode.Children[d._polygonIndex] as MDL0PolygonNode;
                            poly._material = mNode.Children[d._materialIndex] as MDL0MaterialNode;
                        }
                }

                bNode._nodeCache = null;
            }


            //Link polygons to nodes
            if (pNode != null)
                foreach (MDL0PolygonNode n in pNode.Children)
                    if (n.NodeId >= 0)
                        n._singleBind = _nodes[n.NodeId];

            //Get texture references and attach them to texture nodes
            if (t1Node != null)
                foreach (MDL0TextureNode t in t1Node.Children)
                    _texRefs.Add(t._textureReference = new TextureRef(t.Name));
            if (t2Node != null)
                foreach (MDL0TextureNode t in t2Node.Children)
                {
                    TextureRef tref = null;
                    foreach (TextureRef tr in _texRefs)
                        if (tr.Name == t.Name)
                        { tref = tr; break; }
                    if (tref == null)
                        _texRefs.Add(tref = new TextureRef(t.Name));
                    t._textureReference = tref;
                }

            //Attach material refs to texture refs
            if (mNode != null)
                foreach (MDL0MaterialNode mat in mNode.Children)
                    foreach (MDL0MaterialRefNode mref in mat.Children)
                        foreach (TextureRef tref in _texRefs)
                            if (tref.Name == mref.Name)
                            {
                                mref._textureReference = tref;
                                break;
                            }

            //Attach texture nodes to materials


            //Clear caches
            //_boneCache.Clear();

        }

        internal override void GetStrings(StringTable table)
        {
            table.Add(Name);
            foreach (MDL0GroupNode n in Children)
                n.GetStrings(table);
        }

        public override unsafe void Export(string outPath)
        {
            if (outPath.EndsWith(".dae"))
            {
                //Model model = GetModel();
                //Collada.Serialize(new object[] { model }, outPath);
            }
            else
                base.Export(outPath);
        }

        protected internal override void PostProcess(VoidPtr bresAddress, VoidPtr dataAddress, int dataLength, StringTable stringTable)
        {
            base.PostProcess(bresAddress, dataAddress, dataLength, stringTable);

            MDL0* header = (MDL0*)dataAddress;
            header->ResourceStringAddress = stringTable[Name] + 4;

            foreach (MDL0GroupNode node in Children)
            {
                VoidPtr addr = dataAddress + header->Offsets[node._index];
                node.PostProcess(addr, stringTable);
            }
        }

        #region Rendering

        internal bool _bound = false;
        internal bool _renderPolygons = true;
        internal bool _renderPolygonsWireframe = false;
        internal bool _renderBones = true;

        internal void Render(GLContext ctx)
        {
            if (!_bound)
                Bind(ctx);

            ResourceNode group;

            if (_renderPolygons)
            {
                ctx.glEnable(GLEnableCap.Lighting);
                ctx.glEnable(GLEnableCap.DepthTest);
                if (_renderPolygonsWireframe)
                    ctx.glPolygonMode(GLFace.FrontAndBack, GLPolygonMode.Line);
                else
                    ctx.glPolygonMode(GLFace.FrontAndBack, GLPolygonMode.Fill);

                if ((group = FindChild("Polygons", false)) != null)
                    foreach (MDL0PolygonNode poly in group.Children)
                        poly.Render(ctx);
            }

            if (_renderBones)
            {
                ctx.glDisable((uint)GLEnableCap.Lighting);
                ctx.glDisable((uint)GLEnableCap.DepthTest);
                ctx.glPolygonMode(GLFace.FrontAndBack, GLPolygonMode.Line);

                if ((group = FindChild("Bones", false)) != null)
                    foreach (MDL0BoneNode bone in group.Children)
                        bone.Render(ctx);
            }
        }

        internal void ApplyCHR(CHR0Node node, int index)
        {
            //Transform bones
            ResourceNode group = FindChild("Bones", false);
            if (group != null)
            {
                foreach (MDL0BoneNode b in group.Children)
                    b.ApplyCHR0(node, index);
            }

            //Transform nodes
            foreach (NodeRef nr in _nodes)
                nr.CalcBase();
            foreach (NodeRef nr in _nodes)
                nr.CalcWeighted();

            //Weight vertices
            if ((group = FindChild("Polygons", false)) != null)
                foreach (MDL0PolygonNode poly in group.Children)
                    poly.WeightVertices(_nodes);
        }

        private void Bind(GLContext ctx)
        {
            _bound = true;
            foreach (MDL0GroupNode g in Children)
                g.Bind(ctx);
        }

        internal void Unbind(GLContext ctx)
        {
            _bound = false;
            foreach (MDL0GroupNode g in Children)
                g.Unbind(ctx);
        }

        #endregion

        internal static ResourceNode TryParse(DataSource source) { return ((MDL0*)source.Address)->_entry._tag == MDL0.Tag ? new MDL0Node() : null; }

        internal void ResetTextures()
        {
            foreach (TextureRef tref in _texRefs)
                tref.Reload();
        }
    }
}


do what you can ;)
any help is good :D
(btw, this is another way I figure out stuff)

note: I can't understand C... code
so I kinda have to have someone translate it or comment it so I can read it...

EDIT:
hey, this'll prbly help with some stuff: (maybe not) :/
http://www.mediafire.com/?61mtbcgqv3la19s (modset 4.0)

[spoiler]Quote: Friedslick6
you have been through a lot of hassle. I've watched every topic you posted on this, and most of them seemed to disintegrate gradually.
But the coolest part was that you didn't stop working on it despite that.

Quote: Internet Explorer
you're doing more with your life right now than probably most other people around you. You're a valuable asset to the Smash community. So yeah, you should be proud.

quote: Greg
You do have a gift which I've seen many developers use to their advantage. You can become a great coder, and with all of those ideas I think you can really build something great.