also it means you need to restart using a fresh MDL0, I'm not sure what caused that.. maybe the verts were injected wrong. was this a result from using my script?
yup what he said is the method of trial and error you would need to use to get that to work. I haven't covered it in any videos, cause its dodgy, just randomly moving verts till it works. I understand your frustration. but theres no solid fix, not unless kyral finishes brawlbox.
simply anything using physics, ask yourself what is logical to be affected by wind. ... hair... capes... tails... long ears... every character has some bit using a physics bone. its just a matter of avoiding to edit these areas.
hm, it was late, maybe i pasted the wrong code. I'll double check
edit
I remember when i was on winXP, anything I used from my friends win7 machine wouldn't work. due to a syntex error. we couldn't figure it out, but my assumption was that win7 was using some strange new unicode which would inject random characters into the script. causing it to be broken when used on another system.
I think this maybe the case?
so here I've quoted the script below. and also I've included a RTF file, which maybe retain the unicode. please try both and report any issues between the copy and pasted script, and the RTF exported script.
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
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 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
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
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 )
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] )
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(
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 ) )
there are 3 different types of vertices.. or rather 3 different ways the data is stored and arranged. thus posing 3 different problems for us. one of course is the one leg growing larger.. fixed with double patching. the other is physics bones. from personal trial and error, you have to manually offset these yourself to compensate for any rotations. if your lucky those rotations will only by increments of 90 degrees.. otherwise we cannot edit capes, hair etc.. though if you use the very first method with editing vertex clouds, there is no issues.
ok, so you can't convert a brres a second time, usually caused by a bad bress.. but you found that out. try not to tinker with the MDL0, or the bress, until all your vertexhacks are complete.
as for the double patching, again there is no patching anymore. its more or less a coin phrase now.
please review this video, it recaps the process. I feel its more summarized and simple for people to learn.
@flammable some guy's tossed around the idea of modding SC4, but nobody actually worked on a tool to get models back in..
I thought the models would be all broken up, since the sc4 engine is soo customizable.. but actually no. the models are all together, most of them completely un-optimized.. so like nude meshes included with clothes all as a single model package.
so theoretically YES sc4 is moddable. though I'm not that into modding it, that I'd trying to create my own compiler.
a compiler means to make or author a new file that will work for a specific system..
anyway since someone already made tools for SC2, its easier for me to just import models into sc2.. even sc4 models and putting them into sc2. just because my background is stronger in 3d editing.
I've tried to contract out to have sc3's models hacked. this way I can obtain SC3 models, and have them brought into SC2. making sc2 quite awesome content wise ^_^
only draw back about the sc4 models, is the annoying material system it uses. I had to write down all the colour values from in the gme, to get the colours right. the textures are white by default, and coloured actively by the game engine. quite impressive really, but makes utilization of the resources a bit of a pain.
@PAVGN sure thing, but you'll need to have a modded xbox1. some guys apparently can play copied xbox1 games on there hacked 360s.. but still you would be best with a modded xbox1.
the game uses a more complex skeleton for its characters, so you can add alot of dynamic characters.
one of my early tests, was getting in kasumi from DOA
it takes alot less time to get a character into SC2, then forming a character into brawl.