Home Gallery Resources The Team Rules chat Login Register
Pages:  [1] 2 3 4 ... 33
Author Topic: Vertex Hacking: Advanced Techniques  (Read 29889 times)
0 Members and 1 Guest are viewing this topic.
mariokart64n
Hacker & 2D/3D Modder
Supreme Kitten
********
Offline Offline

Posts: 543


All Hail To The Mario Baby!

  • Awards Super Saiyan Topic Heart Container Famous Hacker Favorite'd Tutorial Writer

  • View Profile Awards
    « on: May 24, 2010, 10:23:54 AM »


    THIS TUTORIAL IS OBSOLETE! BRAWLBOX ALLOWS FOR FULL MODEL IMPORT


    [WARNING: this tutorial is just a quick mockup, and isn't 100% complete]



    Hello everybody!

    I'm mariokart64n, I've been doing texture and model hacks\mods for the past 5 years.
    admitlying I wasn't good at using paintshop or 3dsmax, until 2 years ago.. it took 3 years! just to get the hang of it. so that being said, this topic is a guide geared towards the elite modders, you should already have a good grasp of how to navigate and use 3dsmax, and any sort of 2D editor, such as Adobe's Photoshop.

    if you are new to 3dsmax, and never used a 3D editor in the past, or have no concept of what HEX is.. then this is the wrong guide for you. please refer to KC-MM's video on vert hacking, to get an idea oh what we are doing here.
    #Invalid YouTube Link#

    Otherwise, lets get this show on the road!... Smiley

    Overview:
    Basically we'll be taking the basic technique of the above video and improving apon the procedure to give us more control over how we edit.

    by using the aid of 2 other apps, we can now create full body edits, like never before!
    Below are the basic steps of what you'll be doing. please read them before watching the 2hour Video Tutorial.


    Outline:
    1. import the DAE from AIS
    2. Edit whatever you want
    2B under the conditions I stated before
    ..dont add delete.. change to poly
    3. once you are ready to export back, you need to create a patch
    4 create a patch by starting a new scene in max
    5 import the DAE again
    6 highlight the mesh you were working on before and click "create patch" on my script it'll prompt you to open the vertset
    export the vert set as usually as per the old DDVB tut
    so it'll be named vertex.ddf
    a patch will be made ( this is a difference file ) to help roughly push most of the verts where they need to be
    7 then just open you edited max scene, highlight your edit mesh, click patch on my maxscript to apply the patch
    8 model should now cluster back into a raw
    but it wont be 100% right
    follow the end part of the DDVB tut
    you'll need to use some trial and error to fix the not working spots

    if you want, here is a theory video, talking about only the basic steps, which are stated above
    #Invalid YouTube Link#

    Frequently Asked Questions:
    [-UnderConstruction-]

    Video Guide:
    Please be aware half way through the video I lost all my data. I tried to finish the end of it, but it was 1AM in the morning. after rewatching it, my speech is really splurd lol anyway I apologize and if you need further clarification, I'll be glad to help.

    YOU CAN FIND THE FILES AND DOWNLOADS AT THE END OF THIS POST



    Vishkugeta Did a very excellent written guide on the process you might want to read it over, its sure to be more comprehensive then my videos.

    How to do the new vertex method without DasDonkey Vertex Box
    (+ Without Patching)

    In this tutorial I'm going to be making Ness' head bigger. You can do whatever you want, but this is just an example. Mariokart's new script makes it so DasDonkey Vertex box isn't needed anymore, and the only tutorials that mariokart has up are videos, so this is for people who want to take things at their own pace. The reason why it's good to not use DasDonkey Vertex Box anymore, is that vertex sets that previously didn't work (Peach's crown, Pokemon Trainer's hat/hair, etc) should work now.

    First, export the .brres of the first model data.



    You'll need to download AiS which converts the .brres into a .dae, so you can open it in 3DS max. For this to work, make sure that the .brres contains a model which is unedited. If it is edited, then AiS will not work and will simply make a log file. You can download AiS here: http://cid-c59ea3c98a300f31.skydrive.live.com/self.aspx/.Public/Programs/ais0.1.3.zip

    Next, export the vertex group that you want to edit in Brawlbox.



    Now open 3DS Max 8 (and note that this only works in Max 8 not 9, 2008, 2009 or 2010), and run mariokart64n's script:

    Code:
    fn readBEshort fstream = (
    short = readshort fstream #unsigned
    short = bit.swapBytes short 1 2
    return short
    )
    fn readBElong fstream = (
    long = readlong fstream
    long = bit.swapBytes long 1 4
    long = bit.swapBytes long 2 3
    return long
    )
    fn ReadBEfloat fstream = (
    fpt=readfloat fstream
    itger = bit.floatAsInt fpt
    hih = bit.intashex itger
    while hih.count < 8 do hih = "0" + hih
    shn = (substring hih 7 2) + \
    (substring hih 5 2) + \
    (substring hih 3 2) + \
    (substring hih 1 2)
    bit.intAsFloat (bit.hexasint shn)
    )
    -- fn floatSwap2 f = (
    -- i = bit.floatAsInt f
    -- h = bit.intashex i
    -- while h.count < 8 do h = "0" + h
    -- s = (substring h 7 2) + (substring h 5 2) + (substring h 3 2) + (substring h 1 2)
    -- bit.intAsFloat (bit.hexasint s)
    -- )
    fn WriteBEFloat fnum = (
    intgr = bit.floatAsInt fnum
    honey = bit.intashex intgr
    while honey.count < 8
    do honey = "0" + honey
    sign = (substring honey 7 2) + \
    (substring honey 5 2) + \
    (substring honey 3 2) + \
    (substring honey 1 2)
    xintgr=bit.intAsFloat (bit.hexasint sign)
    return xintgr
    )

    rollout DDV "Vertex Modding Patcher" width:311 height:257
    (
    button btn1 "Import Verts" pos:[8,12] width:144 height:40
    button btn3 "Create Patch" pos:[8,108] width:144 height:40
    button btn4 "Patch Model" pos:[8,156] width:144 height:40
    label lbl0 "-Mario_Kart64n, (June22, 2010)" pos:[153,238] width:156 height:23
    button btn5 "Fix AiS Import" pos:[8,204] width:144 height:40
    checkbox chk6 "Checkbox" pos:[165,202] width:14 height:13
    label lbl6 "Scale AIS Import" pos:[182,201] width:111 height:15
    button btn2 "Export Verts" pos:[8,60] width:144 height:40
    checkbox chk1 "Checkbox" pos:[165,55] width:14 height:13 enabled:false checked:false
    label lbl1 "Save as 3DS File" pos:[182,54] width:119 height:15 enabled:false
    checkbox chk2 "Checkbox" pos:[165,72] width:14 height:13 enabled:false checked:false
    label lbl2 "Save As Seperate Files" pos:[182,71] width:119 height:15 enabled:false
    checkbox chk3 "Checkbox" pos:[165,90] width:14 height:13 enabled:true checked:true
    label lbl3 "Save Changes to MDL0" pos:[180,89] width:119 height:15
    checkbox chk4 "Checkbox" pos:[165,108] width:14 height:13 enabled:true checked:true
    label lbl4 "Read Offset from File" pos:[180,107] width:119 height:15
    groupBox grp3 "Other Options" pos:[157,185] width:143 height:51
    editText edt1 " MDL0 Offset:" pos:[162,125] width:130 height:16
    checkbox chk7 "Checkbox" pos:[165,218] width:14 height:13 enabled:false checked:false
    label lbl7 "Rotate AIS Import" pos:[181,217] width:111 height:15 enabled:false
    label lbl5 "Don't Use EditPoly" pos:[181,164] width:119 height:15 enabled:false
    groupBox grp2 "Import Options" pos:[157,148] width:143 height:37
    groupBox grp1 "Export Options" pos:[157,7] width:143 height:140
    checkbox chk5 "Checkbox" pos:[165,165] width:14 height:13 enabled:false checked:false
    radioButtons rdo1 "" pos:[165,21] width:125 height:32 labels:#("Vertices", "Texture Corrdinates") default:1 columns:1

    local typedOffset=""

    on edt1 entered txt do(
    if txt != "" do(
    typedOffset=txt as float
    if typedOffset<=0 do(
    typedOffset=typedOffset*-1
    )
    local typedOffset
    )
    )

    on btn1 pressed do(
    fsource = GetOpenFileName \
    caption:"Brawl Vert Import" types: \
    "All files (*.*)|*.*|"
    f= fopen fsource "rb"
    fpath= getFilenamePath fsource
    fname = getFilenameFile fsource

    vertArray=#()
    uvwArray=#()
    faceArray=#()

    fSize=readBElong f
    mdlOffset=readBElong f
    dataOffset=readBElong f
    strOffset=readBElong f
    vertID=readBElong f
    vUkn1=readBElong f --flag? is XYZ?
    dataType=readBElong f
    entryStride=readBEshort f
    numVertices=readBEshort f
    eMinX=readBEfloat f
    eMinY=readBEfloat f
    eMinZ=readBEfloat f
    eMaxX=readBEfloat f
    eMaxY=readBEfloat f
    eMaxZ=readBEfloat f
    pad=readBElong f
    pad=readBElong f


    if entryStride==12 then(
    for x = 1 to numVertices do(
    vX=readBEfloat f
    vY=readBEfloat f
    vZ=readBEfloat f
    append vertArray[vX,vY,vZ]
    append uvwArray[0,0,0]
    )
    )
    else(
    for x = 1 to numVertices do(
    vX=readBEfloat f
    vY=readBEfloat f
    vZ=0
    append vertArray[vX,vY,vZ]
    append uvwArray[0,0,0]
    )
    )


    msh = mesh vertices:vertArray faces:faceArray   --build mesh
    msh.numTVerts = vertArray.count
    msh.name=fname
    buildTVfaces msh
    select msh

     messageBox "Done !"
     
     
    gc()
    fclose f
    )

    on btn2 pressed do(
    doVerts=chk5.checked
    doUVs=rdo1.state
    do3DS=chk1.checked
    doDUMP=chk2.checked
    doMDL=chk3.checked
    doOffset=chk4.checked
    if doUVs==1 do(
    obj=getCurrentSelection()
    obj.pos = [0,0,0]
    obj.rotation = quat 0 0 0 0
    local mdlSize=""
    local mdlOffset=""
    local numEntrtices=""
    --
    if doOffset==true then(
    fsource = GetOpenFileName \
    caption:"Select UVSet to Replace" types: \
    "All files (*.*)|*.*|"
    f=fopen fsource "rb"
    mdlSize=readBElong f-64
    mdlOffset=(readBElong f*-1)+64
    dataOffset=readBElong f
    strOffset=readBElong f
    vertID=readBElong f
    vUkn1=readBElong f --flag? is XYZ?
    dataType=readBElong f
    entryStride=readBEshort f
    numEntrtices=readBEshort f
    fclose f

    )
    else(

    for g = 1 to obj.count do(
    tmesh = snapshotAsMesh obj[g]
    num_verts = tmesh.numverts
    num_uvws = tmesh.numtverts
    num_faces = tmesh.numfaces

    mdlSize=(num_verts*12)+64
    mdlOffset= typedOffset+64
    numEntrtices=num_verts

    delete tmesh
    )

    )

    --
    fsource = GetOpenFileName \
    caption:"Select the MDL0 to inject to" types: \
    "MDL0(*mdl0)|*.mdl0|All files (*.*)|*.*|"

    fext= getFilenameType fsource
    fsize= getFileSize fsource
    fpath= getFilenamePath fsource
    fname= getFilenameFile fsource
    fclose f

    --
    deleteFile (fpath+fname+"_backup"+fext)
    copyFile fsource (fpath+fname+"_backup"+fext)
    f=fopen (fpath+fname+"_backup"+fext) "rb"
    s = fopen fsource "wb"

    print "ffff"
    print mdlOffset
    for wr = 1 to mdlOffset do(
    read=readbyte f
    write=writebyte s read
    )

    fseek f -34 #seek_cur
    lenCheck=readBEshort f
    fseek f 32 #seek_cur


    if numEntrtices==lenCheck then(



    for g = 1 to obj.count do(
    tmesh = snapshotAsMesh obj[g]
    num_verts = tmesh.numverts
    num_uvws = tmesh.numtverts
    num_faces = tmesh.numfaces

    padding=((mdlSize/8)-numEntrtices)



    for t = 1 to numEntrtices do(
    tv=getVert tmesh t
    nSwap=writeBEfloat tv[1]
    write=writelong s (bit.floatasint nSwap)
    nSwap=writeBEfloat tv[2]
    write=writelong s (bit.floatasint nSwap)
    nSwap=writeBEfloat tv[3]
    write=writelong s (bit.floatasint nSwap)
    )



    -- for p = 1 to padding do(
    -- write=writelong s 0
    -- write=writelong s 0
    -- )

    delete tmesh
    )

    fseek f (mdlOffset+(numEntrtices*12)) #seek_set
    for wr = 1 to (fsize-(mdlOffset+(numEntrtices*12))) do(
    read=readbyte f #unsigned
    write=writebyte s read
    )
    messageBox "DONE!"
    )
    else(
    gc()
    fclose f
    fclose s
    deleteFile (fpath+fname+fext)
    renameFile (fpath+fname+"_backup"+fext) (fpath+fname+fext)
    messageBox "ERROR! Wrong Offset?"
    )



    )
    if doUVs==2 do(
    obj=getCurrentSelection()
    obj.pos = [0,0,0]
    obj.rotation = quat 0 0 0 0

    --
    if doOffset==true then(
    fsource = GetOpenFileName \
    caption:"Select UVSet to Replace" types: \
    "All files (*.*)|*.*|"
    f=fopen fsource "rb"
    mdlSize=readBElong f-64
    mdlOffset=(readBElong f*-1)+64
    dataOffset=readBElong f
    strOffset=readBElong f
    vertID=readBElong f
    vUkn1=readBElong f --flag? is XYZ?
    dataType=readBElong f
    entryStride=readBEshort f
    numEntrtices=readBEshort f
    fclose f

    )
    else(

    for g = 1 to obj.count do(
    tmesh = snapshotAsMesh obj[g]
    num_verts = tmesh.numverts
    num_uvws = tmesh.numtverts
    num_faces = tmesh.numfaces

    padding=((mdlSize/8)-numEntrtices)


    mdlSize=num_verts*8
    mdlOffset= typedOffset+64
    numEntrtices=num_verts

    delete tmesh
    )

    )

    --
    fsource = GetOpenFileName \
    caption:"Select the MDL0 to inject to" types: \
    "MDL0(*mdl0)|*.mdl0|All files (*.*)|*.*|"

    fext= getFilenameType fsource
    fsize= getFileSize fsource
    fpath= getFilenamePath fsource
    fname= getFilenameFile fsource
    fclose f

    --
    deleteFile (fpath+fname+"_backup"+fext)
    copyFile fsource (fpath+fname+"_backup"+fext)
    f=fopen (fpath+fname+"_backup"+fext) "rb"
    s = fopen fsource "wb"

    print "ffff"
    print mdlOffset
    for wr = 1 to mdlOffset do(
    read=readbyte f
    write=writebyte s read
    )


    for g = 1 to obj.count do(
    tmesh = snapshotAsMesh obj[g]
    num_verts = tmesh.numverts
    num_uvws = tmesh.numtverts
    num_faces = tmesh.numfaces

    padding=((mdlSize/8)-numEntrtices)


    if num_uvws!=0 then(
    for t = 1 to numEntrtices do(
    tv=getTVert tmesh t
    nSwap=writeBEfloat tv[1]
    write=writelong s (bit.floatasint nSwap)
    nSwap=writeBEfloat tv[2]
    write=writelong s (bit.floatasint nSwap)
    )
    )
    else(
    for t = 1 to numEntrtices do(
    tv=getVert tmesh t
    nSwap=writeBEfloat tv[1]
    write=writelong s (bit.floatasint nSwap)
    nSwap=writeBEfloat tv[2]
    write=writelong s (bit.floatasint nSwap)
    )
    )



    -- for p = 1 to padding do(
    -- write=writelong s 0
    -- write=writelong s 0
    -- )

    delete tmesh
    )

    fseek f (mdlOffset+(numEntrtices*8)) #seek_set
    for wr = 1 to (fsize-(mdlOffset+(numEntrtices*8))) do(
    read=readbyte f #unsigned
    write=writebyte s read
    )


    )
    gc()
    fclose f
    fclose s
    )


    on btn3 pressed do(
    fsource = GetOpenFileName \
    caption:"Brawl Vert Import" types: \
    "All files (*.*)|*.*|"
    f= fopen fsource "rb"
    fpath= getFilenamePath fsource
    fname = getFilenameFile fsource

    vertArray=#()
    uvwArray=#()
    faceArray=#()

    fSize=readBElong f
    mdlOffset=readBElong f
    dataOffset=readBElong f
    strOffset=readBElong f
    vertID=readBElong f
    vUkn1=readBElong f --flag? is XYZ?
    dataType=readBElong f
    entryStride=readBEshort f
    numVertices=readBEshort f
    eMinX=readBEfloat f
    eMinY=readBEfloat f
    eMinZ=readBEfloat f
    eMaxX=readBEfloat f
    eMaxY=readBEfloat f
    eMaxZ=readBEfloat f
    pad=readBElong f
    pad=readBElong f

    for x = 1 to numVertices do(
    vX=readBEfloat f
    vY=readBEfloat f
    vZ=readBEfloat f
    append vertArray[vX,vY,vZ]
    append uvwArray[0,0,0]
    )

    obj=getCurrentSelection()
    obj.pos = [0,0,0]
    obj.rotation = quat 0 0 0 0
    max modify mode
    addModifier obj (edit_poly())
    subobjectLevel = 1
    -- modPanel.setCurrentObject obj.modifiers[#Edit_Poly]
    diffArray=#()
    directionArray=#()
    for x = 1 to numVertices do(
    $.modifiers[#Edit_Poly].SetSelection #Vertex #{}
    $.modifiers[#Edit_Poly].Select #Vertex #{x}
    vert=$.modifiers[#Edit_Poly].GetVertex x
    -- $.modifiers[#Edit_Poly].SetOperation #Transform


    mX=(vertArray[x][1])-(vert[1])
    mY=(vertArray[x][2])-(vert[2])
    mZ=(vertArray[x][3])-(vert[3])



    append diffArray[mX,mY,mZ]

    )

    deleteModifier obj 1

    createFile (fpath+fname+"_patch.pta")
    s = fopen (fpath+fname+"_patch.pta") "ab"
    vcount=writelong s numVertices
     for x = 1 to numVertices do(
    write=writefloat s (diffArray[x][1])
    write=writefloat s (diffArray[x][2])
    write=writefloat s (diffArray[x][3])
    write=writelong s 0x0
     )
     
     messageBox ("Patch Created !"  +"\n"+
    "\n"+
    "File Saved To:"  +"\n"+
    (fpath+fname+"_patch.pta")
    )

    gc()
    fclose s
    fclose f
    )

    on btn4 pressed do(
    fsource = GetOpenFileName \
    caption:"Brawl Vert Patcher" types: \
    "Patch(*pta)|*.pta|All files (*.*)|*.*|"
    f= fopen fsource "rb"
    fpath= getFilenamePath fsource

    vertArray=#()
    vcount=readlong f #unsigned
    for x = 1 to vcount do(
    vX=readfloat f
    vY=readfloat f
    vZ=readfloat f
    dmy=readshort f #unsigned
    side=readshort f #unsigned
    append vertArray[vX,vY,vZ,side]
    )

    obj=getCurrentSelection()
    obj.pos = [0,0,0]
    obj.rotation = quat 0 0 0 0
    max modify mode
    addModifier obj (edit_poly())
    subobjectLevel = 1
    --modPanel.setCurrentObject obj.modifiers[#Edit_Poly]
    for x = 1 to vcount do(
    $.modifiers[#Edit_Poly].SetSelection #Vertex #{}
    $.modifiers[#Edit_Poly].Select #Vertex #{x}
    vert=$.modifiers[#Edit_Poly].GetVertex x
    $.modifiers[#Edit_Poly].SetOperation #Transform
    mX=(vertArray[x][1])
    mY=(vertArray[x][2])
    mZ=(vertArray[x][3])
    $.modifiers[#Edit_Poly].MoveSelection  [mX,mY,mZ]
    $.modifiers[#Edit_Poly].Commit ()
    $.modifiers[#Edit_Poly].SetSelection #Vertex #{}
    )
    subobjectLevel = 0
    --modPanel.setCurrentObject obj.modifiers[#Edit_Poly]

    messageBox "Patched !"

    gc()
    fclose f
    )



    on btn5 pressed do(

    disableSceneRedraw()
    st = timestamp() --get start time in milliseconds
    undo off(
    geo=$polygon*
    -- print geo
    for x = 1 to geo.count do(
    addModifier geo[x] (Normalmodifier ())
    geo[x].modifiers[#Normal].flip = on
    addModifier geo[x] (smooth ())
    geo[x].modifiers[#Smooth].smoothingBits = 1
    collapseStack geo[x]
    m2010=chk6.checked
    if m2010==true do(
    --rotate geo[x] (quat -1 0 0 0)
    geo[x].scale = [2.54,2.54,2.54]
    )
    )
    delete $helpers
    for x = 1 to geo.count do(
    -- aBox = Box length:0.2 width:0.2 height:0.2 name:"dummy"
    aBox = Box()
    aBox.rotation = quat 0.707107 0 0 0.707107
    convertTo aBox TriMeshGeometry
    )
    dmy=$Box*
    myBoxes=#()
    myMeshes=#()
    for x = 1 to geo.count do(
    objA= dmy[x]
    objB= geo[x]
    append myBoxes objA
    append myMeshes objB
    )

    for x = 1 to geo.count do(
    myBoxes[x].name = myMeshes[x].name
    attach myBoxes[x] myMeshes[x]
    )

    for x = 1 to geo.count do(
    for i = 1 to 8 do(
    delete geo[x].verts[#{1}]
    )
    addModifier geo[x] (Morpher ())
    )

    addModifier $Polygon* (Edit_Mesh ())

    )
    et = timestamp() --get end time in milliseconds
    enableSceneRedraw()
    gc()
    print ("Operation Completed In: "+(((et-st)/60)as string)+" Seconds") --print time to finish
    )
    )

    createDialog DDV

    At the top of 3DS max, you'll find that it says MAXScript. Press new script and a box will open up. Copy mariokart's script and paste it in there. Then save it as whatever you like. (I saved it as "vertex"). Now you'll have to run the script and you'll see that a box that says "Vertex Modding Patcher" will open up.



    Import the .dae in 3DS max. To do this, you'll need COLLADA which you can download here: http://sourceforge.net/projects/colladamaya/files/COLLADAMax%201.4.1%20plug-ins/ColladaMax_FREE_3.05C.exe/ColladaMax_FREE_3.05C.exe/download



    You'll find that the model looks a bit messed up.



    However, this can be fixed easily. Make sure that "Scale AIS Import" is selected in the Vertex Modding Patcher and press "Fix AiS Import". Scale AIS Import will correct the size of the model so you don't need to make over exaggerated changes for something to look correct in Brawlbox.



    There, the model looks normal now.

    Now what you do, is choose the polygon that you want to edit. Since I'm editing Ness' face, I'll right click on his face and press "Hide unselected".



    Creepy, eh? XD

    Now in the Vertex Modding Patcher, click "Import Verts". Select the vertex set which you previously exported from Brawlbox.



    The vertex group is now opened up. They won't show up unless you click the button (the one with the three red dots), but you don't need them to show up anyways.



    Now that that's done, on the right you should see something that says "Modifier List". Below that is something that says:

    + Edit Mesh
       Morpher
    + Editable Mesh

    Click Morpher. Below, you should see buttons that say "-empty-" and "0.0" beside them.



    Right click on the first "-empty-" and press "Pick from scene". Then press "H" on your keyboard.



    This box should show up. Select your vertex set, and then press Pick.



    There, now leave that as it is. (We'll come back to it later) Above that, click "+ Edit Mesh" and now you can start editing as you wish like you normally would.



    Now that we're done with the editing...



    Go back to "Morpher" and raise the "0.0" up to 100.



    As you can see, the model looks messed up now. Don't worry though, that's normal.

    Next, you have to lay the model on it's back. You can either do the hard way or the easy way. The hard way being rotating the model by yourself and making sure the angles at the bottom (X, Y and Z) say 0, or by doing the easy way which is:

    Press "B" and then "P" on your keyboard. It changes the view of the window. "B" lays it on it's back, and "P" puts it back into your perspective view.



    Now click on your model and on the right side, right click on +Edit Mesh and press Collapse All.



    A warning will pop up, but just press "Yes".

    Now press "H" on your keyboard and select the vertex set.



    Go to Modifier List and then select Morpher. Right click the -empty- like before, but this time click the polygon/model and raise the 0.0 up to 100.



    In Brawlbox, export the model (FitNess00 in my case) and check the MDL0 Offset of your vertex set.



    Now go back to the Vertex Modding Patcher box and write down the MDL0 Offset in the box. Make sure that Read Offset from file is unchecked or you'll get an error. (in the pic it's not unchecked though, but don't mind that).



    Then press Export Verts and choose your model that you exported.



    Replace the model in brawlbox, and success! Now you can go edit other parts to make the model look even better.





    Alternatively Miacis Kusanagi has also created a text based guide. check that out if you still need guidance.
    http://forums.kc-mm.com/index.php?topic=13061.msg209472#msg209472




    Video Tutorials

    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#
    #Invalid YouTube Link#


    ... alright, have fun with that..



    History(Optional Read)
    Ok, AIS is the only other "functional" brawl converter. you can use this instead of that whack DDVB method of going through animator to get your 3ds file

    AIS however was built on free collada, now no longer in exsistance..  although google for MaxCollada, it's probably still floating around. but unlikely for max2011 or 2010, or 2009 .. Personally I'm running max8

    once you import the DAE "Collada" into 3dsmax, the names should match up to the names in brawlbox. so say you dumped polygon2's Vertset from brawlbox.. it'll be the exact same vert set used by the imported model from AIS. essentially brawl box and AIS are just reading the same data, therefore this data is interchnagable. by that i mean the verts, faces, and uvs.. etc etc.. I could if I wanted replace ta models skin weights, texture corrdinates etc just by exporting the off the mesh imported from AIS.

    the DDVB method is crappy, and outdated. though not as difficult to do, from a modders standpoint.
    my method requires more knowledge!

    sucks brawl box doesnt support export import.. shame on krystal..

    once you've gotten the AIS mesh is, edit it to your hearts content.. just don't delete or add anything to the model.. like faces, or vertices.. and remember. NEVER CONVERT TO EDITABLE POLY


    The "real" problem is when your ready to place those new edits now back into brawl...
    we just need to get that data back into a raw form, so we can re-inject using DDVB

    understand that the verts that are stored in the PAC/BRRES/MDL0 are effected by positioning data, and the bone matrix that form the fully assembled mesh. its extremely hard to compensate for that, without reversing the entire model format. and besides some really hard to follow source code.. there is no format spec on the MDL0 format Sad

    anyway.. I attempted to create a maxscript to generate a polyedit modifier, that you can use in 3dsmax. and sort of roughly patch back the positioning corrdinates of the RAW vertset.

    unfortunately, without reading the bones and their weight values, I cannot compensate for the matrix that would be effecting the verts.. so there is alot of trial and error that must take place in order for it to work again in brawl/ brawlbox


    Conclusion:
    basically my method has its pros and cons, just as the old DDVB method does
    but the advantage of full figure editing is something I'm willing to wager will put me above the rest
    although you could stick with the old DDVB method, only take my method and apply faces
    that way you dont work with full figure, and dont have out of alignment verts

    I'm basically remodeling from scratch in 3dsmax
    then moving verts dozens of times until it works properly in brawlbox lol

    sadly my maxscript isn't complete, and is more or less a BETA.. a very early beta.. it lacks the main function I was meaning to get to, which is direct injection. no more brawl box, or DosDonkeyVertexBox




    DOWNLOADS FILES AND LINKS YOU NEED!!

    http://www.megaupload.com/?d=SRO22PV1
    http://cid-c59ea3c98a300f31.skydrive.live.com/self.aspx/.Public/Programs/ais0.1.3.zip
    http://cid-c59ea3c98a300f31.skydrive.live.com/self.aspx/.Public/Programs/DasDonkey%20Box%20v1.0.zip
    http://www.scriptspot.com/3ds-max/scripts/meshmorpher
    http://www.scriptspot.com/3ds-max/scripts/conform-wrap-ms
    http://update.multiverse.net/wiki/index.php/Installing_the_3ds_Max_COLLADA_Plugin
    http://sourceforge.net/projects/colladamaya/files/COLLADAMax%201.4.1%20plug-ins/ColladaMax_FREE_3.05C.exe/ColladaMax_FREE_3.05C.exe/download



    The Script
    #Invalid YouTube Link#

    Code:
    fn readBEshort fstream = (
    short = readshort fstream #unsigned
    short = bit.swapBytes short 1 2
    return short
    )
    fn readBElong fstream = (
    long = readlong fstream
    long = bit.swapBytes long 1 4
    long = bit.swapBytes long 2 3
    return long
    )
    fn ReadBEfloat fstream = (
    fpt=readfloat fstream
    itger = bit.floatAsInt fpt
    hih = bit.intashex itger
    while hih.count < 8 do hih = "0" + hih
    shn = (substring hih 7 2) + \
    (substring hih 5 2) + \
    (substring hih 3 2) + \
    (substring hih 1 2)
    bit.intAsFloat (bit.hexasint shn)
    )
    fn WriteBEFloat fnum = (
    intgr = bit.floatAsInt fnum
    honey = bit.intashex intgr
    while honey.count < 8
    do honey = "0" + honey
    sign = (substring honey 7 2) + \
    (substring honey 5 2) + \
    (substring honey 3 2) + \
    (substring honey 1 2)
    xintgr=bit.intAsFloat (bit.hexasint sign)
    return xintgr
    )

    rollout DDV "Brawl VertexHacker Tool" width:311 height:257
    (
    button btn1 "Import Verts" pos:[9,10] width:144 height:40
    label lbl0 "-Mario_Kart64n, (Aug 11, 2010)" pos:[153,238] width:156 height:23
    button btn2 "Export Verts" pos:[8,56] width:144 height:40
    checkbox chk1 "Checkbox" pos:[165,59] width:14 height:13 enabled:false checked:false
    label lbl1 "Save as 3DS File" pos:[182,58] width:119 height:15 enabled:false
    checkbox chk2 "Checkbox" pos:[165,76] width:14 height:13 enabled:false checked:false
    label lbl2 "Save As Seperate Files" pos:[182,75] width:119 height:15 enabled:false
    checkbox chk3 "Checkbox" pos:[165,94] width:14 height:13 enabled:true checked:true
    label lbl3 "Save Changes to MDL0" pos:[180,93] width:119 height:15
    checkbox chk4 "Checkbox" pos:[165,112] width:14 height:13 enabled:true checked:true
    label lbl4 "Read Offset from File" pos:[180,111] width:119 height:15
    editText edt1 " MDL0 Offset:" pos:[162,129] width:130 height:16
    groupBox grp1 "Export Options" pos:[157,7] width:143 height:147
    radioButtons rdo1 "" pos:[165,21] width:147 height:32 labels:#("Vertices", "Texture Corrdinates") default:1 columns:1
    button btn3 "Create" pos:[15,138] width:60 height:30
    button btn4 "Patch" pos:[81,138] width:60 height:30
    label lbl8 "Don't Use EditPoly" pos:[31,119] width:119 height:15 enabled:false
    groupBox grp3 "Patching Options" pos:[7,101] width:143 height:76
    checkbox chk8 "Checkbox" pos:[15,120] width:14 height:13 enabled:false checked:false
    button btn5 "Fix AiS Import" pos:[165,205] width:128 height:25
    groupBox grp2 "AiS Fixing Options" pos:[155,154] width:143 height:79
    checkbox chk5 "Checkbox" pos:[166,173] width:14 height:13 enabled:true checked:false
    label lbl5 "Selected Only" pos:[182,172] width:111 height:15 enabled:true
    checkbox chk6 "Checkbox" pos:[167,189] width:14 height:13 checked:true
    label lbl6 "Scale" pos:[183,188] width:44 height:15
    checkbox chk7 "Checkbox" pos:[222,189] width:14 height:13 enabled:false checked:true
    label lbl7 "Rotate" pos:[239,188] width:44 height:15
    button btn6 "Import" pos:[14,198] width:60 height:30 enabled:false
    button btn7 "Export" pos:[80,198] width:60 height:30 enabled:false
    groupBox grp4 "VertexWeighting" pos:[6,180] width:143 height:72 enabled:false
    label lbl9 "Dump to LogFile" pos:[38,232] width:105 height:15 enabled:false
    checkbox chk9 "Checkbox" pos:[22,233] width:14 height:13 enabled:false checked:false

    local typedOffset=""

    on edt1 entered txt do(
    if txt != "" do(
    typedOffset=txt as float
    if typedOffset==undefined do(
    typedOffset=0
    messageBox "Error: User Input \n Value Cannot be Identified \n as either a dec or hex number"
    )
    if typedOffset<=0 do(
    typedOffset=typedOffset*-1
    )
    local typedOffset
    )
    )

    on btn1 pressed do(
    fsource = GetOpenFileName \
    caption:"Brawl Vert Import" types: \
    "All files (*.*)|*.*|"
    if fsource!=undefined do(
    f= fopen fsource "rb"
    fpath= getFilenamePath fsource
    fname = getFilenameFile fsource

    vertArray=#()
    uvwArray=#()
    faceArray=#()

    fSize=readBElong f
    mdlOffset=readBElong f
    dataOffset=readBElong f
    strOffset=readBElong f
    vertID=readBElong f
    vUkn1=readBElong f --flag? is XYZ?
    dataType=readBElong f
    entryStride=readBEshort f
    numVertices=readBEshort f
    eMinX=readBEfloat f
    eMinY=readBEfloat f
    eMinZ=readBEfloat f
    eMaxX=readBEfloat f
    eMaxY=readBEfloat f
    eMaxZ=readBEfloat f
    pad=readBElong f
    pad=readBElong f


    if entryStride==12 then(
    for x = 1 to numVertices do(
    vX=readBEfloat f
    vY=readBEfloat f
    vZ=readBEfloat f
    append vertArray[vX,vY,vZ]
    append uvwArray[0,0,0]
    )
    )
    else(
    for x = 1 to numVertices do(
    vX=readBEfloat f
    vY=readBEfloat f
    vZ=0
    append vertArray[vX,vY,vZ]
    append uvwArray[0,0,0]
    )
    )


    msh = mesh vertices:vertArray faces:faceArray   --build mesh
    msh.numTVerts = vertArray.count
    msh.name=fname
    buildTVfaces msh
    select msh

     messageBox "Done !"
     
     
    gc()
    fclose f
    )
    )

    on btn2 pressed do(
    doVerts=chk8.checked
    doUVs=rdo1.state
    do3DS=chk1.checked
    doDUMP=chk2.checked
    doMDL=chk3.checked
    doOffset=chk4.checked
    if doUVs==1 do(
    obj=getCurrentSelection()
    obj.pos = [0,0,0]
    obj.rotation = quat 0 0 0 0
    local mdlSize=""
    local mdlOffset=""
    local numEntrtices=""
    --
    if doOffset==true then(
    fsource = GetOpenFileName \
    caption:"Select UVSet to Replace" types: \
    "All files (*.*)|*.*|"
    if fsource!=undefined do(
    f=fopen fsource "rb"
    mdlSize=readBElong f-64
    mdlOffset=(readBElong f*-1)+64
    dataOffset=readBElong f
    strOffset=readBElong f
    vertID=readBElong f
    vUkn1=readBElong f --flag? is XYZ?
    dataType=readBElong f
    entryStride=readBEshort f
    numEntrtices=readBEshort f
    fclose f

    )
    )
    else(

    for g = 1 to obj.count do(
    tmesh = snapshotAsMesh obj[g]
    num_verts = tmesh.numverts
    num_uvws = tmesh.numtverts
    num_faces = tmesh.numfaces

    mdlSize=(num_verts*12)+64
    mdlOffset= typedOffset+64
    numEntrtices=num_verts

    delete tmesh
    )

    )

    --
    fsource = GetOpenFileName \
    caption:"Select the MDL0 to inject to" types: \
    "MDL0(*mdl0)|*.mdl0|All files (*.*)|*.*|"
    if fsource!=undefined do(
    fext= getFilenameType fsource
    fsize= getFileSize fsource
    fpath= getFilenamePath fsource
    fname= getFilenameFile fsource
    fclose f

    --
    deleteFile (fpath+fname+"_backup"+fext)
    copyFile fsource (fpath+fname+"_backup"+fext)
    f=fopen (fpath+fname+"_backup"+fext) "rb"
    s = fopen fsource "wb"

    print "ffff"
    print mdlOffset
    for wr = 1 to mdlOffset do(
    read=readbyte f
    write=writebyte s read
    )

    fseek f -34 #seek_cur
    lenCheck=readBEshort f
    fseek f 32 #seek_cur


    if numEntrtices==lenCheck then(



    for g = 1 to obj.count do(
    tmesh = snapshotAsMesh obj[g]
    num_verts = tmesh.numverts
    num_uvws = tmesh.numtverts
    num_faces = tmesh.numfaces

    padding=((mdlSize/8)-numEntrtices)



    for t = 1 to numEntrtices do(
    tv=getVert tmesh t
    nSwap=writeBEfloat tv[1]
    write=writelong s (bit.floatasint nSwap)
    nSwap=writeBEfloat tv[2]
    write=writelong s (bit.floatasint nSwap)
    nSwap=writeBEfloat tv[3]
    write=writelong s (bit.floatasint nSwap)
    )



    -- for p = 1 to padding do(
    -- write=writelong s 0
    -- write=writelong s 0
    -- )

    delete tmesh
    )

    fseek f (mdlOffset+(numEntrtices*12)) #seek_set
    for wr = 1 to (fsize-(mdlOffset+(numEntrtices*12))) do(
    read=readbyte f #unsigned
    write=writebyte s read
    )
    messageBox "DONE!"
    )
    else(
    gc()
    fclose f
    fclose s
    deleteFile (fpath+fname+fext)
    renameFile (fpath+fname+"_backup"+fext) (fpath+fname+fext)
    messageBox "ERROR! Wrong Offset?"
    )



    )
    )
    if doUVs==2 do(
    obj=getCurrentSelection()
    obj.pos = [0,0,0]
    obj.rotation = quat 0 0 0 0

    --
    if doOffset==true then(
    fsource = GetOpenFileName \
    caption:"Select UVSet to Replace" types: \
    "All files (*.*)|*.*|"
    if fsource!=undefined do(
    f=fopen fsource "rb"
    mdlSize=readBElong f-64
    mdlOffset=(readBElong f*-1)+64
    dataOffset=readBElong f
    strOffset=readBElong f
    vertID=readBElong f
    vUkn1=readBElong f --flag? is XYZ?
    dataType=readBElong f
    entryStride=readBEshort f
    numEntrtices=readBEshort f
    fclose f

    )
    )
    else(

    for g = 1 to obj.count do(
    tmesh = snapshotAsMesh obj[g]
    num_verts = tmesh.numverts
    num_uvws = tmesh.numtverts
    num_faces = tmesh.numfaces

    padding=((mdlSize/8)-numEntrtices)


    mdlSize=num_verts*8
    mdlOffset= typedOffset+64
    numEntrtices=num_verts

    delete tmesh
    )

    )

    --
    fsource = GetOpenFileName \
    caption:"Select the MDL0 to inject to" types: \
    "MDL0(*mdl0)|*.mdl0|All files (*.*)|*.*|"
    if fsource!=undefined do(
    fext= getFilenameType fsource
    fsize= getFileSize fsource
    fpath= getFilenamePath fsource
    fname= getFilenameFile fsource
    fclose f

    --
    deleteFile (fpath+fname+"_backup"+fext)
    copyFile fsource (fpath+fname+"_backup"+fext)
    f=fopen (fpath+fname+"_backup"+fext) "rb"
    s = fopen fsource "wb"

    print "ffff"
    print mdlOffset
    for wr = 1 to mdlOffset do(
    read=readbyte f
    write=writebyte s read
    )


    for g = 1 to obj.count do(
    tmesh = snapshotAsMesh obj[g]
    num_verts = tmesh.numverts
    num_uvws = tmesh.numtverts
    num_faces = tmesh.numfaces

    padding=((mdlSize/8)-numEntrtices)


    if num_uvws!=0 then(
    for t = 1 to numEntrtices do(
    tv=getTVert tmesh t
    nSwap=writeBEfloat tv[1]
    write=writelong s (bit.floatasint nSwap)
    nSwap=writeBEfloat tv[2]
    write=writelong s (bit.floatasint nSwap)
    )
    )
    else(
    for t = 1 to numEntrtices do(
    tv=getVert tmesh t
    nSwap=writeBEfloat tv[1]
    write=writelong s (bit.floatasint nSwap)
    nSwap=writeBEfloat tv[2]
    write=writelong s (bit.floatasint nSwap)
    )
    )



    -- for p = 1 to padding do(
    -- write=writelong s 0
    -- write=writelong s 0
    -- )

    delete tmesh
    )

    fseek f (mdlOffset+(numEntrtices*8)) #seek_set
    for wr = 1 to (fsize-(mdlOffset+(numEntrtices*8))) do(
    read=readbyte f #unsigned
    write=writebyte s read
    )


    )
    )
    gc()
    fclose f
    fclose s
    )

    on btn3 pressed do(
    fsource = GetOpenFileName \
    caption:"Brawl Vert Import" types: \
    "All files (*.*)|*.*|"
    if fsource!=undefined do(
    f= fopen fsource "rb"
    fpath= getFilenamePath fsource
    fname = getFilenameFile fsource

    vertArray=#()
    uvwArray=#()
    faceArray=#()

    fSize=readBElong f
    mdlOffset=readBElong f
    dataOffset=readBElong f
    strOffset=readBElong f
    vertID=readBElong f
    vUkn1=readBElong f --flag? is XYZ?
    dataType=readBElong f
    entryStride=readBEshort f
    numVertices=readBEshort f
    eMinX=readBEfloat f
    eMinY=readBEfloat f
    eMinZ=readBEfloat f
    eMaxX=readBEfloat f
    eMaxY=readBEfloat f
    eMaxZ=readBEfloat f
    pad=readBElong f
    pad=readBElong f

    for x = 1 to numVertices do(
    vX=readBEfloat f
    vY=readBEfloat f
    vZ=readBEfloat f
    append vertArray[vX,vY,vZ]
    append uvwArray[0,0,0]
    )

    obj=getCurrentSelection()
    obj.pos = [0,0,0]
    obj.rotation = quat 0 0 0 0
    max modify mode
    addModifier obj (edit_poly())
    subobjectLevel = 1
    -- modPanel.setCurrentObject obj.modifiers[#Edit_Poly]
    diffArray=#()
    directionArray=#()
    for x = 1 to numVertices do(
    $.modifiers[#Edit_Poly].SetSelection #Vertex #{}
    $.modifiers[#Edit_Poly].Select #Vertex #{x}
    vert=$.modifiers[#Edit_Poly].GetVertex x
    -- $.modifiers[#Edit_Poly].SetOperation #Transform


    mX=(vertArray[x][1])-(vert[1])
    mY=(vertArray[x][2])-(vert[2])
    mZ=(vertArray[x][3])-(vert[3])



    append diffArray[mX,mY,mZ]

    )

    deleteModifier obj 1

    createFile (fpath+fname+"_patch.pta")
    s = fopen (fpath+fname+"_patch.pta") "ab"
    vcount=writelong s numVertices
     for x = 1 to numVertices do(
    write=writefloat s (diffArray[x][1])
    write=writefloat s (diffArray[x][2])
    write=writefloat s (diffArray[x][3])
    write=writelong s 0x0
     )
     
     messageBox ("Patch Created !"  +"\n"+
    "\n"+
    "File Saved To:"  +"\n"+
    (fpath+fname+"_patch.pta")
    )

    gc()
    fclose s
    fclose f
    )
    )

    on btn4 pressed do(
    fsource = GetOpenFileName \
    caption:"Brawl Vert Patcher" types: \
    "Patch(*pta)|*.pta|All files (*.*)|*.*|"
    if fsource!=undefined do(
    f= fopen fsource "rb"
    fpath= getFilenamePath fsource

    vertArray=#()
    vcount=readlong f #unsigned
    for x = 1 to vcount do(
    vX=readfloat f
    vY=readfloat f
    vZ=readfloat f
    dmy=readshort f #unsigned
    side=readshort f #unsigned
    append vertArray[vX,vY,vZ,side]
    )

    obj=getCurrentSelection()
    obj.pos = [0,0,0]
    obj.rotation = quat 0 0 0 0
    max modify mode
    addModifier obj (edit_poly())
    subobjectLevel = 1
    --modPanel.setCurrentObject obj.modifiers[#Edit_Poly]
    for x = 1 to vcount do(
    $.modifiers[#Edit_Poly].SetSelection #Vertex #{}
    $.modifiers[#Edit_Poly].Select #Vertex #{x}
    vert=$.modifiers[#Edit_Poly].GetVertex x
    $.modifiers[#Edit_Poly].SetOperation #Transform
    mX=(vertArray[x][1])
    mY=(vertArray[x][2])
    mZ=(vertArray[x][3])
    $.modifiers[#Edit_Poly].MoveSelection  [mX,mY,mZ]
    $.modifiers[#Edit_Poly].Commit ()
    $.modifiers[#Edit_Poly].SetSelection #Vertex #{}
    )
    subobjectLevel = 0
    --modPanel.setCurrentObject obj.modifiers[#Edit_Poly]

    messageBox "Patched !"

    gc()
    fclose f
    )
    )

    on btn5 pressed do(

    disableSceneRedraw()
    st = timestamp() --get start time in milliseconds
    undo off(
    delete $helpers
    if chk7.checked==true then(
    geo=getCurrentSelection()
    delete $helpers
    stuff=#()
    if geo.count!=0 do(
    for x = 1 to geo.count do(

    addModifier geo[x] (Normalmodifier ())
    geo[x].modifiers[#Normal].flip = on
    addModifier geo[x] (smooth ())
    geo[x].modifiers[#Smooth].smoothingBits = 1
    collapseStack geo[x]
    if chk6.checked==true do(
    --rotate geo[x] (quat -1 0 0 0)
    geo[x].scale = [2.54,2.54,2.54]
    )
    -- aBox = Box length:0.2 width:0.2 height:0.2 name:"dummy"
    aBox = Box()
    aBox.rotation = quat 0.707107 0 0 0.707107
    aBox.name = (geo[x].name) as string
    convertTo aBox TriMeshGeometry
    -- convertTo geo[x] TriMeshGeometry
    attach aBox geo[x]
    -- update aBox geometry:true
    delete aBox.verts[#{1..8}]
    addModifier aBox (Morpher ())
    append stuff aBox
    )
    addModifier stuff (Edit_Mesh ())
    )
    )
    else(
    geo=$polygon*
    for x = 1 to geo.count do(
    addModifier geo[x] (Normalmodifier ())
    geo[x].modifiers[#Normal].flip = on
    addModifier geo[x] (smooth ())
    geo[x].modifiers[#Smooth].smoothingBits = 1
    collapseStack geo[x]
    if chk6.checked==true do(
    --rotate geo[x] (quat -1 0 0 0)
    geo[x].scale = [2.54,2.54,2.54]
    )
    )
    delete $helpers
    for x = 1 to geo.count do(
    -- aBox = Box length:0.2 width:0.2 height:0.2 name:"dummy"
    aBox = Box()
    aBox.rotation = quat 0.707107 0 0 0.707107
    convertTo aBox TriMeshGeometry
    )
    dmy=$Box*
    myBoxes=#()
    myMeshes=#()
    for x = 1 to geo.count do(
    objA= dmy[x]
    objB= geo[x]
    append myBoxes objA
    append myMeshes objB
    )

    for x = 1 to geo.count do(
    myBoxes[x].name = myMeshes[x].name
    attach myBoxes[x] myMeshes[x]
    )

    for x = 1 to geo.count do(
    for i = 1 to 8 do(
    delete geo[x].verts[#{1}]
    )
    addModifier geo[x] (Morpher ())
    )
    addModifier $Polygon* (Edit_Mesh ())
    )
    )
    et = timestamp() --get end time in milliseconds
    enableSceneRedraw()
    gc()
    print ("Operation Completed In: "+(((et-st)/60)as string)+" Seconds") --print time to finish
    )
    )

    createDialog DDV















    EDIT
    Quote
    [OLD POST, NOT REVIEWED OR EDITED YET....]
    after that failure, I turned to vertex hacking.. which seems like a sound method.
    however I found that the current method only just modifies the raw dump of the vertices.. so everything clumped in the middle GAWD! O.O insane...



    So I used Pharrox's AIS converter to import the model parts.. but the models are repositioned and fully built. Sad

    the good part is that I can now morph the fully assembled mesh into the vert cloud. making it easier to work with.. but not so great for a full character edits


    I'm was thinking that it be ok to make edits to the full assembled mesh. then reform it back into the vert cloud. so I scripted a tool to move the assembled mesh into the raw vert cloud. this creates a patch, which when supplied should offset the coordinates back into a cloud position... its simple math.
    A - B = C (therefore) A + C = B (and) B + C = A

    C is my patch, which would make the necessary offsets to reform my assembled mesh back into a cloud position..



    WELL... my theory was totally wrong.. when the practice is put into motion, I get a problem... the entire left side of the model enlarges O_O!! but only on the mesh parts that rotated.. hard to explain.. but a offsetting trick only works effective against shifted verts.. rotated ones seem to be a special case.. I'm uncertain how to compensate for that :\


    any ideas on tricks to fix this ? or even what I did wrong with my initial MDL0 Swap
    mdl also included in RS link

    Please Help Me...  Oh shi~

    -Mario_Kart64n
     Kirby Dance Kirby Dance Kirby Dance Kirby Dance Kirby Dance Kirby Dance

    spent all day trying to get this right. its' not perfect, but the base for Aya is complete. now for the skinning, and the head and hair are a new day of problems :\




    « Last Edit: June 16, 2012, 06:16:23 AM by mariokart64n » Logged

    Luka Megurine by mariokart64n
    [Character-ImportModel-Zelda]

    dingo
    Angel Kitten
    ***
    Offline Offline

    Posts: 3145


    Il Matto

  • Awards >9000 Troubleshooter Pin Collector Heart Container Famous Hacker

  • View Profile WWW Awards
    « Reply #1 on: May 27, 2010, 05:01:25 AM »


    You need to make a guide for this. You'll be everyone's hero.
    Logged

    Jack H.
    Titles cost $5,000
    Supreme Kitten
    ********
    Offline Offline

    Posts: 578


    KCMM Loves you

  • Awards Super Saiyan Topic Renowned Hacker Starstormer Heart Container Pin Collector

  • View Profile WWW Awards
    « Reply #2 on: May 27, 2010, 10:20:56 AM »


    Mmm, agreed. Syrus63 had a guide for getting the vertices to show up as solid models, but it required the usage of 3 other programs to get the job done. What exactly are you doing here?
    Logged

    -Jack H.

    Beyond
    ♥God of Love
    Moderator
    ****
    Offline Offline

    Posts: 2912


    ...but nothing happened...

  • Awards Hey! Listen! Ceiling Cat Active Contributor >9000 Heart Container

  • View Profile WWW Awards
    « Reply #3 on: May 27, 2010, 10:32:35 AM »


    I need to know this too. This seems like it'd make things so much easier.
    Logged


    Akari_Un
    Hyper Kitten
    ******
    Offline Offline

    Posts: 253

    DasDonkey Team

  • Awards Super Saiyan Topic Starstormer Renowned Hacker

  • View Profile Awards
    « Reply #4 on: May 27, 2010, 02:45:34 PM »


    hmmm got it!!
    This give me a great idea!!, wath?, great, colosal idea!
    Logged


    mariokart64n
    Hacker & 2D/3D Modder
    Supreme Kitten
    ********
    Offline Offline

    Posts: 543


    All Hail To The Mario Baby!

  • Awards Super Saiyan Topic Heart Container Famous Hacker Favorite'd Tutorial Writer

  • View Profile Awards
    « Reply #5 on: May 27, 2010, 04:03:55 PM »


    actually I made 2 different versions of video tutorials in preparation for my first post here. unfortunately there is a problem with my process. that I sadly cannot solve. Sad due to the matrices effecting the positioning of the vertices... which would require me to reverse more of the format.

    that is why there is no tutorial available at the moment. because I'd rather post somthing solid, then something mickey mouse. however anyone with decent knowledge of 3dsmax could repeat what I've done with the above supplied info

    if I can perfect the process, I'll post the videos and my app. cause i did have to write my own program for this to work. but its a maxscript so it'll work natively right in 3dsmax and should work across all versions of max.

    obviously 4days ago nobody thought this was even worth replying to. so slightly annoyed about the reception around here. but those who wish to learn are welcome to contact me.
    keep in mind if your no good in 3dsmax theres no point in me even explaining anything

    -Mario_Kart64n
    Logged

    Luka Megurine by mariokart64n
    [Character-ImportModel-Zelda]

    Power Marshall
    -JDeLL~
    Special Access
    *****
    Offline Offline

    Posts: 622


  • Awards Heart Container Dedicated Hacker Tutorial Writer Active Contributor

  • View Profile WWW Awards
    « Reply #6 on: June 02, 2010, 07:19:00 PM »


    Wow, Mariokart64n, this is very great. Very helpful. But I have a question.

    Would this ever get the chance to work with Blender?
    Logged

    Want to learn about my new project? Click here!
    Updated 1/18


    mariokart64n
    Hacker & 2D/3D Modder
    Supreme Kitten
    ********
    Offline Offline

    Posts: 543


    All Hail To The Mario Baby!

  • Awards Super Saiyan Topic Heart Container Famous Hacker Favorite'd Tutorial Writer

  • View Profile Awards
    « Reply #7 on: June 02, 2010, 07:46:06 PM »


    donno, I'm a max user. but if you had the experience with blender, I would think anything in max is more then possible in blender. but I can't help you in that area, sorry.
    Logged

    Luka Megurine by mariokart64n
    [Character-ImportModel-Zelda]

    Robz
    Drinking boss Epic
    Special Access
    *****
    Offline Offline

    Posts: 287


    I ain't no baby man.

  • Awards Hot Topic >9000 Diamond in the Rough Famous Hacker The Bread Winner

  • View Profile Awards
    « Reply #8 on: June 04, 2010, 09:34:17 AM »


    This is amazing. think about the results. I must learn more of this!
    Logged

    Bros: dRage ~ Vish 
    Bang your fist to the ground. let people know your name. Always make people laugh. and always share your booze.
    http://www.youtube.com/watch?v=3a1yoVv5Uto&feature=related
    Guy Gets f'ed up
    If you dont drink then you don't work hard enough. simply put. Drink after success. Not during.

    Yoshiboshi3
    Extreme Kitten
    *******
    Offline Offline

    Posts: 391


    Hey guys im yoshiboshi3 i maik vertex hacks

  • Awards Tutorial Writer

  • View Profile Awards
    « Reply #9 on: June 04, 2010, 01:35:32 PM »


    In your video you use some patching program! Its kind of hard to follow your tutorial if we dont have that program! Please post it somewhere! D:
    Logged

    STILL BETTER AT VEXING THAN TEXING

    Beyond
    ♥God of Love
    Moderator
    ****
    Offline Offline

    Posts: 2912


    ...but nothing happened...

  • Awards Hey! Listen! Ceiling Cat Active Contributor >9000 Heart Container

  • View Profile WWW Awards
    « Reply #10 on: June 04, 2010, 01:39:37 PM »


    In your video you use some patching program! Its kind of hard to follow your tutorial if we dont have that program! Please post it somewhere! D:
    Im srs here
    He posted it right above the video.
    Logged


    Yoshiboshi3
    Extreme Kitten
    *******
    Offline Offline

    Posts: 391


    Hey guys im yoshiboshi3 i maik vertex hacks

  • Awards Tutorial Writer

  • View Profile Awards
    « Reply #11 on: June 04, 2010, 01:59:28 PM »


    In your video you use some patching program! Its kind of hard to follow your tutorial if we dont have that program! Please post it somewhere! D:
    Im srs here
    He posted it right above the video.

    How the heck do I use that code? Im srs here
    Logged

    STILL BETTER AT VEXING THAN TEXING

    Beyond
    ♥God of Love
    Moderator
    ****
    Offline Offline

    Posts: 2912


    ...but nothing happened...

  • Awards Hey! Listen! Ceiling Cat Active Contributor >9000 Heart Container

  • View Profile WWW Awards
    « Reply #12 on: June 04, 2010, 02:04:30 PM »


    In your video you use some patching program! Its kind of hard to follow your tutorial if we dont have that program! Please post it somewhere! D:
    Im srs here
    He posted it right above the video.

    How the heck do I use that code? Im srs here
    Im srs here

    Copy everything in there. Open up 3DS Max. Click "MaxScripts" and then "New Script". Paste that in there and save it. Then go to "MaxScript" and click "Run Script" and select the script you just saved.
    Logged


    Power Marshall
    -JDeLL~
    Special Access
    *****
    Offline Offline

    Posts: 622


  • Awards Heart Container Dedicated Hacker Tutorial Writer Active Contributor

  • View Profile WWW Awards
    « Reply #13 on: June 04, 2010, 03:00:06 PM »


    Is Max8 the only working version for use with this?
    Logged

    Want to learn about my new project? Click here!
    Updated 1/18


    Beyond
    ♥God of Love
    Moderator
    ****
    Offline Offline

    Posts: 2912


    ...but nothing happened...

  • Awards Hey! Listen! Ceiling Cat Active Contributor >9000 Heart Container

  • View Profile WWW Awards
    « Reply #14 on: June 04, 2010, 03:07:29 PM »


    Is Max8 the only working version for use with this?
    I have 9, and this method works fine for me.
    Logged


    Pages:  [1] 2 3 4 ... 33
    Print
    Jump to: