|
|
« Reply #195 on: June 30, 2010, 08:33:47 AM » |
|
Here you go, MeleeMaster: A Snake DAE file. Hopefully that is what you want... not sure about Windows7 and why it does not work... never tried it, heh. But if you need any other DAEs, I can help with simply that. File: http://www.mediafire.com/download.php?tnoyyn0mmjn
|
|
|
Logged
|
Want to learn about my new project? Click here! Updated 1/18
|
|
|
|
|
|
« Reply #196 on: June 30, 2010, 01:57:34 PM » |
|
I just cant get AiS to work, probably because im running windows 7 64bit, and is saying that "ais.exe has stopped working".
anyways, anyone know how to solve this and/or can give me snakes model as dae?
im pretty sure I can follow everything else from there
It does that for me too. I just drag the brres file onto the application and the dae will apear in the folder with the brres.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #197 on: June 30, 2010, 03:03:39 PM » |
|
brawlbox 0.64 seems to have a built in DAE exporter based on AIS's code. if brawlbox runs on your system. download the latest source code, and compile it for your windows. thats the only solution for AIS and a 64bit OS
personally I'm using winXP 32bit, so i have no problems
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #198 on: July 01, 2010, 10:10:04 AM » |
|
Hey mariokart, me again. So I did a lot of work on a vertex hack for marth. But now when I export it and run it though DDB it errors in brawbox; preview won't even work. I know you're busy but if you could just check it for me that would be nice. I checked and the number of vertices and faces are the same. Also I get some java error in DDB only when inserting. Here's my file: http://www.mediafire.com/?dmjy2wiyyxt
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #199 on: July 01, 2010, 01:32:28 PM » |
|
Rikami, did you know Mariokart64n's Script was updated? DDVB has therefore no need for use, because his script now supports exportation of verts!
Not so sure if you knew... maybe that will help.
|
|
|
Logged
|
Want to learn about my new project? Click here! Updated 1/18
|
|
|
|
|
|
« Reply #200 on: July 01, 2010, 02:37:14 PM » |
|
Rikami, did you know Mariokart64n's Script was updated? DDVB has therefore no need for use, because his script now supports exportation of verts!
Not so sure if you knew... maybe that will help.
If DDB gives a "java" error, its not going to work. Its not DDB's fault, something messed up with the vertex set.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #201 on: July 01, 2010, 05:02:45 PM » |
|
errors, like "there was a weird java error" is why I eliminated the need for DDVB. unfortunately many have complained about the complexity of my method. I say take it or leave it, alot of info is here. just take the time to learn, be patient and it'll all come to you in time. anyway did a video, it'll show you what I did with your max file. you can pickup the process from that.
EDITI found a topic showing off OBJ injection at the smashboards, I did a quick google, and found a mario kart Wii tool that does just that. I'm not sure if its the same one the users are using on smashboards. but I'll experiment more with it and see if I can't inject an obj file http://www.mariokartwii.com/f7/official-mario-kart-wii-model-hacking-new-39114.html
|
|
« Last Edit: July 01, 2010, 07:28:33 PM by mariokart64n »
|
Logged
|
|
|
|
|
|
|
« Reply #202 on: July 02, 2010, 02:15:09 AM » |
|
Well after like 10 tries I finally got this down. Thanks for the video, It helped greatly. I'm kinda glad you didn't just give me the file because now I learned how to do it myself. I'll be sure to give you tons of credit when I release this. I'm working on a Castlevania Cornell Marth
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #203 on: July 02, 2010, 06:26:15 PM » |
|
@ mariokart64n I saw that yesterday on smashboards, are u planning to inject as a DAE so it can go over a model? if u figure that out, u will be the one who completed brawl hacking.
|
|
|
Logged
|
I DONT TAKE REQUESTS.
|
|
|
|
|
|
« Reply #204 on: July 02, 2010, 06:50:25 PM » |
|
I would have to make a tool from scratch, I have no desire for that.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #205 on: July 02, 2010, 10:09:16 PM » |
|
Thank you for eliminating the need for DDV. The fact that many stage parts have vertex sets that don't get along with DDV output errors upon importing was annoying.
The model I'm trying to vertex hack Marth to is not T-stanced. I hear rigging it can help solve my problem. How would I go about rigging a .obj model?
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #206 on: July 03, 2010, 01:26:29 PM » |
|
When I export the vertices to the model, I get "ERROR! Wrong Offset!" D: I put the MDL0 Offset from the vertex set. EDIT: Never mind. It worked when I unchecked read offset from file. Also, mariokart do you mind putting this in the first post? I made a text tutorial of how to do this since people in the KCMM family thread (in the off-topic board) wanted a detailed one so they can go at their own pace instead of the vid. I know Yoshiboshi made one, but his is sort of outdated. 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.zipNext, 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: 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.
|
|
« Last Edit: July 03, 2010, 01:39:59 PM by Vishkugeta »
|
Logged
|
|
|
|
|
|
|
« Reply #207 on: July 03, 2010, 01:57:07 PM » |
|
When I export the vertices to the model, I get "ERROR! Wrong Offset!" D: I put the MDL0 Offset from the vertex set. EDIT: Never mind. It worked when I unchecked read offset from file. Also, mariokart do you mind putting this in the first post? I made a text tutorial of how to do this since people in the KCMM family thread (in the off-topic board) wanted a detailed one so they can go at their own pace instead of the vid. I know Yoshiboshi made one, but his is sort of outdated. 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.zipNext, 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: 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. Oh teh noes, you missed faceMorpher. Thats pretty big, ya konw. Of course, I didn't put it in mine either. I think I (Or you, or someone else) should make a vid tut.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #208 on: July 03, 2010, 03:09:08 PM » |
|
thanks Vishkugeta I've added into the first post. good stuff
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #209 on: July 03, 2010, 07:10:27 PM » |
|
Thank you sooooooooooooo much! I can't believe that worked! I made a simple list of instructions - 1. First, export the .brres of the first model data.
- 2. Convert the .brres into a .dae using ais.
(Make sure that the .brres contains a model which is unedited.) - 3. Export the vertex group that you want to edit in Brawlbox.
- 4. 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.
- 5. Import the .dae in 3DS max.
- 6. Make sure that "Scale AIS Import" is selected in the Vertex Modding Patcher and press "Fix AiS Import".
- 7. Choose the polygon that you want to edit and press "Hide unselected".
- 8. Now in the Vertex Modding Patcher, click "Import Verts". Select the vertex set which you previously exported from Brawlbox.
- 9. Click Morpher after selecting the polygon again. Below, you should see buttons that say "-empty-" and "0.0" beside them.
- 10. Right click on the first "-empty-" and press "Pick from scene". Then press "H" on your keyboard.
- 11. Select your vertex set, and then press Pick.
- 12. 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.
- 13. After you're done, go back to "Morpher" and raise the "0.0" up to 100.
- 14. Press "B" and then "P" on your keyboard.
- 15. Now click on your model and on the right side, right click on +Edit Mesh and press Collapse All.
- 16. Now press "H" on your keyboard and select the vertex set.
- 17. 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.
- 18. In Brawlbox, export the model (FitNess00 in my case) and check the MDL0 Offset of your vertex set.
- 19. 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.) - 20. Then press Export Verts and choose your model that you exported.
- 21. Replace the model in brawlbox, and success! Now you can go edit other parts to make the model look even better.
|
|
|
Logged
|
|
|
|
|
|