Home Gallery Resources The Team Rules chat Login Register
Pages:  [1] 2 3 4 ... 13
Author Topic: Beginner's guide to MK64n's method without patching + Tips for using 3DS MAX  (Read 15714 times)
0 Members and 1 Guest are viewing this topic.
Miacis
Cascade's Pal
Administrator
******
Offline Offline

Posts: 2766


  • Awards Ceiling Cat 128-bit Core Gamer Featured 64-bit Core Gamer Super Saiyan Topic

  • View Profile WWW Awards
    « on: August 15, 2010, 07:14:48 AM »


    Hello everybody, this is yet another tutorial about vertex hacking. Smiley


    I don't know about you, but I've always found Vertex hacking ... very complicated and not really user-friendly. Lots of steps, easy to miss something or don't click on the right thing ... At least until now.
    Two new ways of vertex hacking have been made and released recently. The DD Vertex Box 2 a few days ago, and mk64n's method without patching in June, for which he released
    a video tutorial
    some days ago too.
    So, right now, anyone can get into Vertex hacking, I guess. It's still more tedious than some other forms of hacking, but it's very bearable.

    I'm going to make a written tutorial about MK64n's last method, and giving a few beginner tips on how to 3DS MAX for some simple manipulations. The goal of this tutorial is to reach even the most newbie of the beginners, and is very detailled, especially for someone who has already used other methods of vertexing.

    If you desire a tutorial about DDVB 2, search in this section, there are a few for different 3D softwares.


    -----------------------------------------------------------------------------

    You will need 3DS MAX 8 ! Not 2008, not 2009, not 2010, not 2011.
    3DS MAX 9 apparently works too
    (Thanks br3compactor for that info ! <3 )


    1- Download AIS and install it.
    Effect : Will transform your BRRES files into DAE files, usable by 3DS MAX.

    2- Download COLLADA et install it as well.
    Effect : Let's 3DS MAX import DAE files.

    [Note : If the Installer can't detect 3DS MAX 8 on Windows 7 x64, try the 3.04 Installer.]

    3- Open the PAC file you need to edit, with BrawlBox. Myself, I'll take Zelda and ... make her boots bigger, give her a bigger bust and put a comb on her head.
    You can try and just follow the same steps as me if it's your very first time. :3
    Click on ModelData[0] => 3DModels => FitZelda00 => Right-click and Preview.


    Find the polygon you need to edit by checking/unchecking the polygons on the left side. Myself, i'll take polygon0.

    4- Now, we need to get the Vertex Set of this polygon.. Go to FitZelda00.mdl0 => Polygons.Find your polygon, and look for its VertexSet in its Properties.


    Close the Polygons folder, and look into the Vertices one, for a file whose ID is the number you've just noted down.


    Right-click, and export this file in a new folder you have made just for this vertex hack, where we'll put all our stuff. Tongue Note down the MDL0 Offset too.


    Now, let's export more stuff ... Exportz the FitZelda00.mdl0 file, the ModelData[0].brres file, and finally all the textures (TextureData[0] => Textures).
    Textures are not necessary, but it's better to see them in 3DS MAX.  :3


    5- Double-click on the .brres file and AIS should convert it and create a DAE. If not, try to drag-and-drop it in AIS.exe.

    6- Start 3DS MAX 8. You should ease your life by enlarging as musch as possible the view you have on the bottom-right.
    Click on MAXScript in the taskbar, and on New Script. Then copy MK64n'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 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

    Save it with a pretty name (vertex ?), in a folder that you access quickly. Then do MAXScript => Run Script and choose your vertex.ms file. A window will pop out.
    http://a.imageshack.us/img831/5205/41130057.png

    7- Put this window aside, we'll get back to it later. :3

    In 3DS MAX itself, do File => Import and choose COLLADA in the file types. Load the DAE, making sure that the next two options are checked.


    [Note : it has been reported that the COLLADA plugin might have problems under Windows Seven ... try to run it as XP if nothing shows up here.]

    Your character will look quite weird, so click on Fix AIS Import in the script's window, making sure that Scale is checked.


    8- Select your polygon, then Right-click => Hide Unselected.


    9- Now, let's start with the vertexing.  :3

    Camera Controls : Use the Mouse wheel to zoom in and zoom out.
    Hold the "Mouse-wheel button" and move your mouse around to translate the camera. Hold the Alt button + the "Mouse-wheel button" to rotate the camera around your object.
    Select an item (polygon, vertex, group of vertexes, "element"  ...) and click on the little white cube in the bottom-right of the window, and the camera will now turn around that item.


    Select your polygon, then click on the sort of blue rainbow on the top-right, and on Edit Mesh. Activate the button with the three red dots if it's not already done.


    10- Modify the position of each vertices to make your hack !  Cheesy

    (The next three appendix are the detail of the three typical modifications that I'm going to make, and their goal is only to help you learn to use 3DS MAX better. Don't hesitate to skip them if you have mastered the sofware of course. Otherwise, I highly suggest you to take a look at those.)
    A1 - Let's start with the basics : moving a vertex.
    Click on a vertex, and you should get this king of marker :
    It is a Select marker.
    To get a Move marker, right-click on the vertex, and choose Move :

    You get a three-dimensional marker that lets you move your vertex along each of the three axis, or each of the three planes at a time (your screen being bidimensionnal, it's impossible for you to make a 3D move in one step).
    Drag-and-drop to modify your vertex's position. Just click on another vertex to move it the same way. You can also select multiple vertices at once with a selection frame, or by holding CTRL and clicking them one by one.

    It's an elementary manipulation of 3DS MAX. Learn how to use it fast and easily. :grin:

    (And here's a nice-looking Zelda. Tongue)

    A2- Let's try something else now : resizing.

    We're going to enlarge Zelda's boots. Select all the vertices of her boots, then right-click and Scale to get the Scale cursor.

    Then, just like for the Move cursor, you can enlarge/reduce the boots following an axis, a plane, or as a whole (just point the center of the marker).


    Tip : If you don't feel like selecting ALL of the vertices from the same element, unfold the Edit Meshon the top-right, and select Element to select element by element, then click again on Vertices to select and moify the vertices of these elements.
    http://a.imageshack.us/img826/6500/26668862.png

    End Result :


    A3- Now, let's try to give a little more "bust" to Zelda. It would take an eternity and a half to move each vertex one by one, and the Scale function would probably lead to a terrible result.
    So we're going to use the Soft Selection. here's the basic concept : when you select a vertex and move it, this move will also be passed on to the neaby vertices, but to a lesser extent, in a radius that can be set.

    To activate it, look into the right-hand menu :


    Check the matching box, and lower the Falloff and Bubble. They respectively control the impact of the distortion on the sides of the " distortion bubble", and the radius of said bubble.
    You can check on the model the radius of the bubble according to the color of the vertices, that ranges from Red (100% of the distortion) to Blue (0%).


    So now, move the vertex in the middle of your distortion, and see how it looks.

    11- Once you've finished all the tedious editing ... SAVE YOUR WORK !!!
    File => Save to do this.

    12- Now, you need to conform your model to the game's polygons. Right-click on your polygon (not a vertice, but your polygon) then Clone.
    Choose Copy in the window that pops up and name it mod as an example.


    Right now, the copy is overlapping your starting polygon. Move it aside (check that in the top-right, above the Edit Mesh, that you're indeed moving the mod).


    Let's undo the modifications of your initial polygon0. For that, just click on it, then on the little bulb next to the Edit Mesh.


    (Clicking on the bulb again will put back your modifications. :3 )
    From now on, the light bulb near the "Edit Mesh" of the model that you've edited should be OFF all the time !!  You need to remove the edits on your base file before morphing it with the copy and vertex set. Always.

    13- In the script's window, click on Import Verts and select the Vertex Set you had extracted in the beginning of this tutorial. It appears at the feet of the polygon0, but invisible.

    14- Now, it's time to "patch" ! Click on the polygon0, and on Morpher (under Edit Mesh).
    Right-click on -empty- then Pick From scene, and click on your mod.
    Right-click on the second -empty-, and Pick from scene. The vertex set being invisible, just hit H on your keyboard to see all the elements of the scene. Choose the vertex set and then Pick.


    Up the number near the mod box to 100. Your polygon0 should take the shape of your mod.
    Now up the number near the vertex set to 100. Your polygon0 will start looking like a melted blob. Don't panic, it's normal !


    15- DIn the script's window, uncheck Read Offset from file, and just under it write the MDL0 Offset you had noted in the beginning. :3


    Make sure that the polygon0 is still selected, close all your BrawlBox windows and click on Export Verts in the script's window, then choose your FitZelda.mdl0.


    DONE ! It will lay the polygon0 on its back but it doesn't matter. XD

    16- Open your FitZelda00.pac, go to the mdl0 and right-click => Replace with the shiny mdl0 from your folder. Then Save As ... to get your modified PAC.

    And if we preview it ...


    -----------------------------------------------------------------------------

    Double patching :



    17- 17- But if we look at her feet ... something's wrong, baby. Modifying the legs/feet or arms/hands will cause a distortion on the left side. You'll need to re-patch to correct this. Of course, there's no need to double-patch if you don't have any issue.  Kirby Dance

    Just like in the beginning of the tutorial, you ned to extract the mdl0, brres and textures of your new PAC. (Create a sub-folder for the double-patching, you wion't get lost, that way.  Undecided ).
    Convertyour new .BRRES into a DAE (which i'll just call "the new DAE" from now on).

    18- Back into 3DS MAX, click on your melting blob and Hide Unselected.
    Import the new DAE, push OK in all the windows saying there's an Import Name Conflict.

    19- In the script's window, check Selected Only and click on Fix AIS Import.

    Click on the polygon you're working on, hold CRTL and click on the melting blob. Do another Hide Unselected. There should be only the polygon03 (fron the warped new DAE) and the blob.

    Move the polygon03 aside.

    20- Click on the blob, go to Morpher, right-click on the mod box => Delete Channel, then right-click => Pick From Scene and click on the polygon03.

    Up its value to 100. Leave the vertex set's box as it it : at 100.

    21- Click on the blob again, again Export Verts (with the same MDL0 Offset). And select the mdl0 of your modified PAC (the one with the one-legged Zelda).

    DONE !

    22- Open your modified FitZelda00.pac, replace its mdl0 with your shiny doube-patched mdl0 that is in your sub-folder. Just Save As ... to get your final modified PAC.

    End result :


    A wonderful big-breasted Zelda, with a comb and giant boots. Definitely a great piece of art.  Awesome Face

    Well, that's it. You can use it in your game if you want.
    Have a good day. And I hope you enjoyed.  Smiley

    -----------------------------------------------------------------------------

    ADDENDUMS :

    Triple/Quadruple/Multiple patching :

    If double patching still doesn't work, you may have to keep patching it again and again and see if there is any improvement.

    BEWARE: NEVER TOUCH THE X BUTTON OR THE O BUTTON WHEN USING 3DSMAX (Thanks to br3compactor again for testing this himself. Tongue)
    « Last Edit: September 09, 2011, 06:40:51 PM by Miacis Ballard » Logged

    Round and round the signature goes ~
    ~ where it stops, nobody knows.

    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 #1 on: August 15, 2010, 10:31:08 PM »


    I'm sure this will help alot of people, least now they can't complain about there being no written guide. lol

    thanks

    -mariokart64n
    Logged

    Luka Megurine by mariokart64n
    [Character-ImportModel-Zelda]

    ΔMΆTΣRASU
    Shinobi Kitten
    Expert Kitten
    ****
    Offline Offline

    Posts: 77


    You dont say?

  • Awards Fiery Topic Tutorial Writer

  • View Profile WWW Awards
    « Reply #2 on: August 16, 2010, 04:00:26 AM »


    thanks this is what i did from this method ^^

    Logged


    Other RPCs
    Soul Evans from Soul Eater
    Ryu From Street Fighter
    Marshall from AdventureTime
    Killik from Soul Calibur

    FOOLY's HACKING THREAD
    Kida's Pro Manga

    Vuze
    Newbie Kitten
    *
    Offline Offline

    Posts: 2


    View Profile Awards
    « Reply #3 on: August 16, 2010, 06:35:23 AM »


    Just wondering. Let's assume I'd like to make a more complex vertex hack which requires remapping the model; is there any way to do so? If yes, would you mind linking me to a tutorial or sth?

    Thanks in advance and great tutorial!
    Logged

    Velen
    Resident Lucario
    Boss Kitten
    ****
    Offline Offline

    Posts: 4264


    Insert totally self gratifying [censored] here. ; )

  • Awards Famous Hacker Sniper Heart Container Ceiling Cat Starstormer

  • View Profile Awards
    « Reply #4 on: August 16, 2010, 10:02:00 AM »


    [Note : it has been reported that the COLLADA plugin might have problems under Windows Seven ... try to run it as XP if nothing shows up here.]


    *Is crying in addition to having an angry face.*

    Logged


    3DS Friend Code: 2895-6640-9302

    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: August 16, 2010, 02:38:48 PM »


    but I'm using win7, so thats not true. and that tutorial up there is just based on the video posted in my signature.
    Logged

    Luka Megurine by mariokart64n
    [Character-ImportModel-Zelda]

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

    Posts: 391


    Hey guys im yoshiboshi3 i maik vertex hacks

  • Awards Tutorial Writer

  • View Profile Awards
    « Reply #6 on: August 16, 2010, 05:04:36 PM »


    Why are all these guides for this popping up AFTER I fixed my problem...D:

    Great guide anyway, it will help a friend of mine who wants vertexing help.
    Logged

    STILL BETTER AT VEXING THAN TEXING

    Protoman.EXE
    Extreme Kitten
    *******
    Offline Offline

    Posts: 427


    Netbattler pro.

  • Awards Shadow the Pinhog

  • View Profile Awards
    « Reply #7 on: August 16, 2010, 05:30:28 PM »


    Why do my textures not show up in the model? I have them exported and everything.
    And will this work with OpenCollada? Its basically the same thing. And on my list i dont even have Edit mesh, only editable mesh! WTF!!!! HALP APPRECIATTED DANGAT. >_<
    « Last Edit: August 16, 2010, 09:27:22 PM by luigiman1928 » Logged

    Sig by Segtendo. Epic

    standardtoaster
    Advanced Kitten
    ***
    Offline Offline

    Posts: 44


    View Profile Awards
    « Reply #8 on: August 17, 2010, 12:19:01 AM »


    You have to export your textures to the same place the dae is. After you import the dad, it should have the textures.
    Logged

    Protoman.EXE
    Extreme Kitten
    *******
    Offline Offline

    Posts: 427


    Netbattler pro.

  • Awards Shadow the Pinhog

  • View Profile Awards
    « Reply #9 on: August 17, 2010, 06:38:21 AM »


    You have to export your textures to the same place the dae is. After you import the dad, it should have the textures.
    I had everything ini place, i had the Textures, the Brres, the MDL0, and AiS!
    Wait, i use AiS 1.1 becuz 1.3(which is installed) when imported is invisible. Should i use 1.3?
    Logged

    Sig by Segtendo. Epic

    Miacis
    Cascade's Pal
    Administrator
    ******
    Offline Offline

    Posts: 2766


  • Awards Ceiling Cat 128-bit Core Gamer Featured 64-bit Core Gamer Super Saiyan Topic

  • View Profile WWW Awards
    « Reply #10 on: August 17, 2010, 10:16:39 AM »


    Just wondering. Let's assume I'd like to make a more complex vertex hack which requires remapping the model; is there any way to do so? If yes, would you mind linking me to a tutorial or sth?

    Thanks in advance and great tutorial!
    (I have no idea what remapping means. Hey guys, can someone whisper it to me ? ^^')
    I don't really know, in fact. Tongue
    The only thing I can advise you to do is to check MK64's numerous videos in the stickied topic. Some info are outdated, but you should get a few more infos.  Wink

    You have to export your textures to the same place the dae is. After you import the dad, it should have the textures.
    I had everything ini place, i had the Textures, the Brres, the MDL0, and AiS!
    Wait, i use AiS 1.1 becuz 1.3(which is installed) when imported is invisible. Should i use 1.3?
    I think you've just answered your question. XD
    Yes, try to install AIS, and then double-click on a .brres to automatically convert it.

    If nothing happens, you'll need to have a look at the beginning of MK64n's video (that I link to in the very beginning) from 2:00 to 5:00 , where he explains it ... I think. (I didn't follow it, as I didn't have any problem, sorry. ^^')
    Logged

    Round and round the signature goes ~
    ~ where it stops, nobody knows.

    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 #11 on: August 17, 2010, 03:30:37 PM »


    every model needs a texture map.. anyway we can't remap them, there indexed somehow. verts that share a common coordinate aren't printed in the texture coordinate list. rather these welded verts are listed in another index. because my work flow works around using ripped models and texture projection. I never had the use for remapping, although its apart of my scripts interface. very lowlevel, but you can import them as verts and move them around. only good if you wanted to increase the resolution on a certain part. sometimes your luck and some pieces arn't welded, so you can move them entirely. but anyway in a nutshell, no you cannot remap, but you can alter the texture map using basic vertex import export.

    I was going to import them into the texture coordinate editor but it gets complicated cause max needs a model with faces, and the texture coordinate list is different then the vert count.. anyway not supported by me
    Logged

    Luka Megurine by mariokart64n
    [Character-ImportModel-Zelda]

    Velen
    Resident Lucario
    Boss Kitten
    ****
    Offline Offline

    Posts: 4264


    Insert totally self gratifying [censored] here. ; )

  • Awards Famous Hacker Sniper Heart Container Ceiling Cat Starstormer

  • View Profile Awards
    « Reply #12 on: August 18, 2010, 04:02:06 PM »


    Okay, I have SP3 installed and I have Collada installed, but upon trying File -> Import in order to test if Collada is working, COLLADA does not show up as a selectable item.

    I am running them on Windows 7...Dammit.
    Logged


    3DS Friend Code: 2895-6640-9302

    JBG
    Semi-Retired Crumudgeon
    Moderator
    ****
    Offline Offline

    Posts: 1280


  • Awards Super Saiyan Topic Renowned Hacker Featured Pin Collector Favorite'd

  • View Profile Awards
    « Reply #13 on: August 25, 2010, 08:28:37 AM »


    I'm having issues with this. All goes well until I export the verts for the first patch. I export them, and then my morpher chanels for the blob reset to empty and 0.0.

    Anyone have a solution?

    EDIT: Nevermind, I was usng an old version of the script.

    New question, could you put in more useful screenshots than just the little boxes in the double patch tutorial? I'm having trouble telling if what I'm doing is right because that's all you're showing.
    « Last Edit: August 25, 2010, 08:50:42 AM by Black Boo » Logged


    Miacis
    Cascade's Pal
    Administrator
    ******
    Offline Offline

    Posts: 2766


  • Awards Ceiling Cat 128-bit Core Gamer Featured 64-bit Core Gamer Super Saiyan Topic

  • View Profile WWW Awards
    « Reply #14 on: August 25, 2010, 10:56:21 AM »


    New question, could you put in more useful screenshots than just the little boxes in the double patch tutorial? I'm having trouble telling if what I'm doing is right because that's all you're showing.

    Will do. In the mean time, I can give you a little description of what's on your screen for each step so that you don't get stuck the time for me to do this.

    *********************
    Just like in the beginning of the tutorial, you ned to extract the mdl0, brres and textures of your new PAC. (Create a sub-folder for the double-patching, you wion't get lost, that way.  Undecided ).
    Convert your new .BRRES into a DAE (which i'll just call "the new DAE" from now on).

    18- Back into 3DS MAX, click on your melting blob and Hide Unselected.
    On your screen : The melted blob is selected and alone on the scene, lying on the "ground". The Morpher values should be the same as before, but the polygon0 box is blue.
    Import the new DAE, push OK in all the windows saying there's an Import Name Conflict.
    What's new on you scene : the whole model with a glitchy side is here, selected, but not fixed yet though.

    19- In the script's window, check Selected Only and click on Fix AIS Import.

    On your screen : The melted blob and the (fixed) whole glitchy model are on the scene.
    Click on the polygon you're working on, hold CRTL and click on the melting blob. Do another Hide Unselected. There should be only the polygon03 (fron the glitched new DAE) and the blob.

    Move the polygon03 aside.
    On your scene :
    The melted blob is still in the center, the glitched polygon is on the side.

    20- Click on the blob, go to Morpher, right-click on the mod box => Delete Channel. (The blue box will become -empty-) then right-click => Pick From Scene and click on the polygon03.

    Up its value to 100. Leave the vertex set's box as it it : at 100.
    The glitched polygon03 is still on the side. The blob should have very slightly changed when you upped the new Morpher value to 100.

    21- Click on the blob again, again Export Verts (with the same MDL0 Offset). And select the mdl0 of your modified PAC (the one with the one-legged Zelda).
    The blob is still lying on the "ground"

    DONE !

    ***************************************
    PS : If you have any particular step that you think needs pictures here, just tell. I wouldn't want to make unnecessary pics, and to forget important ones. ^^'
    Logged

    Round and round the signature goes ~
    ~ where it stops, nobody knows.

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