Home Gallery Resources The Team Rules chat Login Register
  Show Topics
Pages: [1]
1  Super Smash Bros. Brawl Hacking / Model Imports / [3D Rip] Space Channel 5 Part2 on: August 10, 2012, 09:07:26 PM
these were a b*tch to rip! >_< but good lowpoly models for people to practice porting on.


http://www.mediafire.com/?rwfgt0ue8duf20e
2  Super Smash Bros. Brawl Hacking / General Hacking Discussion / [IMPORTANT] Help Forming a Guide Outline on: June 30, 2012, 07:27:24 PM
I'm forming a list of topics I want to cover in a series of video tutorials

others have said before that there is no need for anymore tutorials.
However clearly people are always asking questions here on a daily basis.

So I would like to offer my own spin on things and offer my guidance on porting models to brawl


But before I do that I would like to compile a list of topics that I can discuss in the video. so that no question is left unanswered. Bare in mind, I know nothing about animation, just 3D editing.. such as porting

anyways here's my current outline, feel free to critiqued it and add in anything you want covered.

Quote
Porting WalkThrough

1. Overview
   Discuss what will be covered, and the various softwares required.
   Discuss the Scene, example where to get models

2. Playing SSBB On PC
   Walkthrough the process of installing the Dolphin Emulator and running SSBB
   Demostrate how to install a mod to the virtrual SDcard

3. 3DSMAX
   Warning Advisory about Max2012 and Max2013 (Buggy)
   Introduction to using 3dsmax and its enviroment.

4. Models
   Where to get models
   How to get the textures to show
   Fixing Common Mesh/Texture Problems
   Fixing Smoothing Issues
   How to handle double sided polygons (DDF Script)

5. Rigging (Basic)
   DAE/Collada Plugins and the Correct Versions
   Use DAE<=>FBX Converter, if Using Max2009 or lower
   Using a Ripped model on a pre-exsisting brawl skeleton
   Tips on how to get your model to fit that skeleton
   Importing a model from brawlbox and demostrating how SKIN works.
   Adding SKIN to your model and assigning vertex weights
   How to use "Paint" and the "Weight Tool" to assign vertex weights
   Tips on weighting, such as Blending and Mirroring
   Using the Animation Slider to test your Weights

6. Rigging (Advanced)
   How to ProOptimize if your model is too large
   Remap UV Layout to get the most out of your texture resolution
   Planning Ahead for Face Expressions etc
   How to Bake Shadows and Lighting into your Model
   How to UVwrap if your model

7. Exporting
   Cut your model by Texture group (Detachby ID Script)
   Set Vertex Normals (-90)

8. Compiling
   Export from 3DSmAX to BrawlBox
   Getting Textures to BrawlBox
   Make sure all textures have dimensions multiple of 2
   Set Desired Material Effects
   Using Shaders
   Set Attachments for Face Expressions
   Testing in Dolphin

9. Brawl Vault
   Introduction to using Brawl Vault
   How to Make a Rad Render of your Import in 3DSmax
   How to Replace your Character Select Picture (CSP)
   How to Publish your Work

3  Super Smash Bros. Brawl Hacking / Model Imports / Star Ocean III - Till The End of Time on: June 20, 2012, 06:01:00 PM
I wanted to get the models from this game, and figured I would store my progress here.. others can follow and help or learn whatever.

So far I've got the files extracted and have just been looking over the file formats.. I usually start by finding my target file.. a file that contains model data. Then I write a quick tool to import vertices from the file, that lets me take pokes at the data. Then I can make a determination on if I have targeted the right file or not...

If everythings cool, I further inspect the file, trying to search for patterns. Once the patterns are found you can start to form an idea of how the file is written. And further from that you'll be able to find adderss tables or counts that you'll need to help you automate reading of the file...

Now if your interested in how to get data files off your game disc, this is what I did last night;
- Download imgBurn (www.imgburn.com) use that to make a copy of your disc into a ISO file
- Use CUE's ISO extractor on your ISO file (http://www.romhacking.net/forum/index.php?topic=7790.15)
> I had to compile it, here download my exe, compiled on win7 64bit (http://dl.dropbox.com/u/86746436/StarOcean3_dumptools.7z) requires 7zip to unpack
> the tool is command line here is an example of what to type "triAce-PS2.exe starocean3.iso C:\starocean3\"

and thats about it, your files spit out, but they'll be alot of different file types. SLZ files are compressed and should be uncompressed using either the BMS script or CUE's slz.exe program.. which you can just drag and drop files to

As far as the file cracking, heres a pic of the FPS format, which I believe to be the mesh file.



That pattern near the end is a repeating pattern, so infact they are the vertices that makeup the model. for every 3 vertices a face is formed between them.. so its pretty simple. the start of the file contains information on how to make a program read these vertices automatically for us..

Anyway just wanted to post this, it'll likely be well into the weekend before I get time to do anything
4  Super Smash Bros. Brawl Hacking / Model Imports / Make Yourself Into A Brawl Character!! on: June 09, 2012, 10:33:01 PM
A free program called "123D CATCH" http://www.123dapp.com/catch takes a series of photos and stitches them together into a full 3D model!

I've been messing with it for the last few weeks, and for a free program it isn't half bad ^_^
Thought I would share this little treasure with the rest of you guys. I'm going to be trying to port myself into brawl ^_^

You can see CATCH was able to reconstruct a 3D scene, just from a variety of 40 photos take around me.



I'm happy with the amount of detail that CATCH was able to capture from my images.


The unfortunate thing, is that the models are too large for brawl to use.
So I've been modeling a low mesh in 3dsmax, to transfer the texture over to.


Here are some PVC figures I used CATCH on aswell. I had planned to port them to brawl... but it would be easier just to model from from scratch. rather then trying to Tpose a slop of vertices :\











5  Help & Tutorials / Help / Editing VertexWeights? on: July 11, 2010, 04:48:53 PM
Does anyone know where the vertex weights are located?

in sabretooth's old MDL0 notes, he notes that the weights are in the nodeMix.. but editing that doesn't seem to have any effect. I believe that file may just give information about the vertex weights.

the only other logical place the weights would be, is in the Polygon files.. but I dont see how?

doesnt anyone have an idea? this is important for vertexhacking
6  Help & Tutorials / Help / MDL0 Injection Help on: June 14, 2010, 08:37:25 PM
<this is a repost of my original "unanswered" question>

Hey guys,
I'm new to brawl modding, but not a n00b to modding, I can get myself around 2d/3d and hex editors..

but anyways I'm having an issue trying to get models into brawl.

First I ripped Aya from onechanbara, and based on the MDL0 guides, after all this hexing the model should work in game.


but every time I load it as a stage, or character, it crashes.. with an annoying buzzing sound Sad
is there something I overlooked in the tutorial... do I have to include a certain file, or rename all the bones O_o
the guides just all end.. saying it should now load in brawl

what I'm I doing wrong?

here's the brres file
http://rapidshare.com/files/391104053/marth_aya.zip
7  Super Smash Bros. Brawl Hacking / Character Vertexes and Textures / Mario's Pad on: May 29, 2010, 04:44:39 PM
 This is just a central place to put any new hacks I'm doing.. updates etc... random stuff that will be planned and constructed until fully beta tested and uploaded officially.


Project Ideas / Wishlist
-Marth, Aya-chan(Onechanbara) Status: halted 80% Done [05-29-10]
-Ganon, Melee Classic Status: halted 80% Done [06-27-10]
-Snake, Krauser(RE4) Status: 100% Done  [05-30-10]
-Marth, Shinobu Jacobs, NoMoreHeroes STATUS: 80% Done [june13,2010]
-Pikachu, Domo Status: Waiting...
-Ct. Falcon, Judge Dread
-IceClimbers,ShyGuy (MarioUniverse)
-Olimar, Tingle (ZeldaOOT)
-DiddyKong, DixieKong
-Mario, BabyMario
-Gannondo, Superman
-Gannondo, Batman
-Zelda, KOSMOS / Shiek, T-elos (Xenosaga3)
-Ct Falcon, Rayne (BloodRayne)
-Fox, Conker (Bad Fur Day)
-Samus, Evangelion / zsSamus, Rei (Evangelion)
-Lucario, Mewtwo (Melee) [-Link-]
-Link, Classic Link (Melee) Done By: KTH [-Link-]
-Zelda, Venom / Shiek, Spiderman
-Diddy Kong, Aiai (Monkeyball)
-Ike, DarthVader
-Ike, Gatsu (Berserk) [-Link-]
-Pit, Miranda (Grandia III)
-Peach, BadGirl (NoMoreHeroes)
-Zelda, Margaret / Shiek, Alice (NoMoreHeroes2)
-Zelda, Kasumi / Ayane, Alice (DeadorAlive)
-Peach, Sylvia Crystal (NoMoreHeroes2)
-Marth, Shinobu (NoMoreHeroes2)
-Snake, Faith (Mirrors Edge)
-Peach, Roselina (MarioGalaxy)
-Pit, Raziel (BloodOmen)
-Ike, Kain (BloodOmen)
-Peach, Kairi (KingdomHearts2)
-Snake, Issebella (DeadRising)
-Snake, Bill Coen (ResidentEvil0)
-Fox, krystal (Assult)
-Zelda, fiona (HuantingGrounds)
-Zelda, Eileen (SilentHill4)
-Zelda, Heather (SilentHillH3)
-Zellda, AdaWong (Resident Evil 4)
-Peach, Ashley (Resident Evil 4)
-Snake, Laracroft (TR Underworlds)
-Zelda, Palutena (pit) [-Link-]
-Marth, Fayt (star ocean 3)
-Snake, Hitman (Hitman BloodMoney)
-Ct Falcon, CandyCane (Rumble Roses)
-Snake, Reiko (Rumble Roses)
-Snake, Claire (Resident Evil: Operation Racoon City)
-Ct Falcon, Jill (Resident Evil Remake)
trish, dmc4
Zephi (magnacarta2)
Rebecca Chambers
Venessa, PN03
Larry, LeisureSuitLarry
YRP, Yuna, Paine, Riku
Hibana (NightShade)
Vanessa Z Schneider PN03
Ayame, Tenchu




Request Fills
-Peach Fixed Bottom
 Pic: http://i50.tinypic.com/10eijqf.jpg
 Download: http://rapidshare.com/files/393067979/FututreSwimFitPeach05.pcs
-Jigglypuff, bow
 Pic: http://i48.tinypic.com/351x2z4.jpg
 Download: http://rapidshare.com/files/393068164/FitPurin03.pcs
-Yoshi, Birdo Fix Status: Pending...


 
8  Help & Tutorials / Vertex Tutorials / Vertex Hacking: Advanced Techniques on: May 24, 2010, 10:23:54 AM
THIS TUTORIAL IS OBSOLETE! BRAWLBOX ALLOWS FOR FULL MODEL IMPORT


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



Hello everybody!

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

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

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

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

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


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

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

Frequently Asked Questions:
[-UnderConstruction-]

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

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



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

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

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

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



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

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



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

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

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

local typedOffset=""

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

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

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

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


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


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

 messageBox "Done !"
 
 
gc()
fclose f
)

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

)
else(

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

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

delete tmesh
)

)

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

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

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

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

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


if numEntrtices==lenCheck then(



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

padding=((mdlSize/8)-numEntrtices)



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



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

delete tmesh
)

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



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

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

)
else(

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

padding=((mdlSize/8)-numEntrtices)


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

delete tmesh
)

)

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

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

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

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


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

padding=((mdlSize/8)-numEntrtices)


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



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

delete tmesh
)

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


)
gc()
fclose f
fclose s
)


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

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

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

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

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


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



append diffArray[mX,mY,mZ]

)

deleteModifier obj 1

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

gc()
fclose s
fclose f
)

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

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

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

messageBox "Patched !"

gc()
fclose f
)



on btn5 pressed do(

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

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

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

addModifier $Polygon* (Edit_Mesh ())

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

createDialog DDV

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



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



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



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



There, the model looks normal now.

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



Creepy, eh? XD

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



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



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

+ Edit Mesh
   Morpher
+ Editable Mesh

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



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



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



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



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



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



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

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

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



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



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

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



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



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



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



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



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





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




Video Tutorials

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


... alright, have fun with that..



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

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

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

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

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

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


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

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

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

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


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

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

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




DOWNLOADS FILES AND LINKS YOU NEED!!

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



The Script
#Invalid YouTube Link#

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

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

local typedOffset=""

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

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

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

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


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


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

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

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

)
)
else(

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

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

delete tmesh
)

)

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

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

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

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


if numEntrtices==lenCheck then(



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

padding=((mdlSize/8)-numEntrtices)



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



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

delete tmesh
)

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



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

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

)
)
else(

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

padding=((mdlSize/8)-numEntrtices)


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

delete tmesh
)

)

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

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

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


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

padding=((mdlSize/8)-numEntrtices)


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



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

delete tmesh
)

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


)
)
gc()
fclose f
fclose s
)

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

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

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

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

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


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



append diffArray[mX,mY,mZ]

)

deleteModifier obj 1

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

gc()
fclose s
fclose f
)
)

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

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

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

messageBox "Patched !"

gc()
fclose f
)
)

on btn5 pressed do(

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

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

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

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

createDialog DDV















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



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

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


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

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



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


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

Please Help Me...  Oh shi~

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

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




Pages: [1]