• Metal Gear Rising: Revengeance models
    1,002 replies, posted
[QUOTE=AaronM202;39780646]It was in 2011 i believe.[/QUOTE] I wouldn't have been around, then. Jail time and all.
[QUOTE=DarkKrystal;39780670]I wouldn't have been around, then. Jail time and all.[/QUOTE] Jail...Time?
[QUOTE=AaronM202;39780673]Jail...Time?[/QUOTE] Long story, I'll PM it to you sometime.
-edit- Mix-up. Sorry.
I always see some jokes about ps3 being impossible to port from and then more jokes about people not sharing the script when they are publicy available on xentax.
[QUOTE=plasmid;39781292]I always see some jokes about ps3 being impossible to port from and then more jokes about people not sharing the script when they are publicy available on xentax.[/QUOTE] except you have to be a member to get them, and to be a member you need to pay to register.
Since when did you have to pay to register on Xentax? And even then, half the time when someone shows off a script they have no intention of letting anyone else use it or sharing their findings about the format so others can make their own tools.
I do not know the method used by mariokart64n to extract or convert models, but I understand that he needs time to do it. @ mariokart64n If you need the textures, let me know...
[QUOTE=thistheend;39781578]I do not know the method used by mariokart64n to extract or convert models, but I understand that he needs time to do it. @ mariokart64n If you need the textures, let me know...[/QUOTE] I don't think you should waste your time with this. It's just going to end up with everyone mad at him because he's flaunting shiny 'toys' around and letting people know that he won't release the resources for said models, even though there are multiple people requesting that they be done up and rigged for use in Garry's Mod. And even if he rigs them up, we can't be hopeful for a release, from what we've seen in his attitude thus far; 'oh, people don't like my dickery. best add more fuel to the fire'. Though I'll admit, it's beautiful to see most people in this thread coming together because there's a 'what the fuck' sort of vibe going around.
the script was posted a week ago here [url]http://facepunch.com/showthread.php?t=1248674&p=39706115&viewfull=1#post39706115[/url] I'm not handing out the models, but from the start I was open about the development of the script aka tool. the 360 uses XPR textures, which are of course tiled. you need to use apart of the Microsoft System Devlopment Kit to obtain the 360 textures. However I hear it may be easier to get the PS3 textures.. there formats are likely identical anyways asides from the textures. the 360 GPU benefits from predicted tiliing
[QUOTE=mariokart64n;39781609]the script was posted a week ago here [url]http://facepunch.com/showthread.php?t=1248674&p=39706115&viewfull=1#post39706115[/url] I'm not handing out the models, but from the start I was open about the development of the script aka tool. the 360 uses XPR textures, which are of course tiled. you need to use apart of the Microsoft System Devlopment Kit to obtain the 360 textures. However I hear it may be easier to get the PS3 textures.. there formats are likely identical anyways asides from the textures. the 360 GPU benefits from predicted tiliing[/QUOTE] In Ps3, the native format used to package the textures is GTF. (DTT) The problem is that there is no tool or script for batch extraction, but in any case [URL="http://imageshack.us/a/img836/3681/000hq.jpg"]can be done manually[/URL] ..... but it is very slow.
@Mariokart64n Don't take this as me being pushy, I'm not. However, much like the script, I think it'd be a little fair if you were to PM the models to someone who'd handle them [I]properly.[/I] After the PM you sent me, I understand what you meant by "abusiveness". But I think the better way to go about it would be to simply send them to somebody who's trustworthy and have them handle them up until they're officially "released". That's just my thoughts.
[QUOTE=thistheend;39781832]In Ps3, the native format used to package the textures is GTF. (DTT) The problem is that there is no tool or script for batch extraction, but in any case [URL="http://imageshack.us/a/img836/3681/000hq.jpg"]can be done manually[/URL] ..... but it is very slow.[/QUOTE] I don't usually deal with PS3, so I'm not familiar with it. for me the 360 conversion is done through a BAT script I made.. [code]FOR %%1 in (*.xpr) DO (UnBundler.exe "%%1")[/code] @ILikeSharks I'm not interested in the rest of the MGRR content, just sunny and courtney. there up for grabs if you want to help restore them [url]http://facepunch.com/showthread.php?t=1251170[/url] ..and again the script aka tool was posted a week ago; [url]http://facepunch.com/showthread.php?t=1248674&p=39706115&viewfull=1#post39706115[/url] its cute that people want me to rip all the models and post them in a huge pack. but I see this as exploiting me, and also abuse of content. so I would rather not do so, I've provided the script for those that are interested. I feel that is enough.
hello MarioKart :) thanks for the script, it was certainly a big job to make it. I would like to try it and help you to make the main models like raiden, gray fox...So i've got just a question, it's a script for what program? noesis? 3ds max? how do you have to name the file extension? you know what i mean :) i have this script but i don't know where to start :) thanks for the help, and thanks for your great job!
its a maxscript for 3dsmax, you need to use quickBMS and the CPK script to extract data from the data000.cpk off the MGRR disk (360 only) then the maxscript will parse the DAT files, which act as a general resource container for the game
[QUOTE=mariokart64n;39782356]its a maxscript for 3dsmax, you need to use quickBMS and the CPK script to extract data from the data000.cpk off the MGRR disk (360 only) then the maxscript will parse the DAT files, which act as a general resource container for the game[/QUOTE] ty for the answer, i extracted the .cpk with noesis (easier^^), now i will try the script on 3DS :) thanks again! you are great!
Godspeed, Dryann.
there wasa typo with the maxscript, but everyone was too busy flaming me to ask for the revision; make sure you replace the scripts build line [code] msh = mesh vertices:vertArray tverts:uvwArray faces:faceArray buildTVFaces msh for j = 1 to uvwArray.count do setTVert msh j uvwArray[j] for j = 1 to faceArray.count do setTVFace msh j faceArray[j] [/code] I forgot this line in particular; for j = 1 to faceArray.count do setTVFace msh j faceArray[j]
[QUOTE=mariokart64n;39773710]yeah there are quite a few of PMs.. I'm not responding to alot of them since most just ask for models. When I say no to people they get angry, so I just ignore them and don't respond to begin with. Seems people handle being in the dark better then being faced with the truth of rejection. The reason I'm not releasing the script is the same reason I'm not sending you guy's the models. I just feel there is a great ignorance about how these models are obtained, and also an abuse with these models afterwards. I'll probably release Raiden when I'm feeling like it. But I was only interested in the girls, [Mistral,Courtney,Sunny].. so I'll be focusing my time on those. - snip -[/QUOTE] this kind of stuff should be bannable who comes into the modelling section and goes 'hey dudes i can port this stuff. but none of you can have it or know how to do it.' show of hands who thinks this shit should be bannable and i'll see what i can do if you aren't gonna share a port, don't post [editline]4th March 2013[/editline] like, it's fair enough to not take requests. but if you've already done something, and you won't share, you're shit.
I'm not used to scripting, so i ask you a confirmation : in the first script you send it was : " msh = mesh vertices:vertArray faces:faceArray msh.numTVerts = vertArray.count buildTVFaces msh msh.displayByLayer = false msh.backfacecull = on msh.wirecolor = random (color 0 0 0) (color 255 255 255) -- convertTo msh PolyMeshObject -- select msh -- subobjectLevel = 1 for j = 1 to uvwArray.count do setTVert msh j uvwArray[j] " SO now with your modif it would be : " msh = mesh vertices:vertArray tverts:uvwArray faces:faceArray msh.numTVerts = vertArray.count buildTVFaces msh msh.displayByLayer = false msh.backfacecull = on msh.wirecolor = random (color 0 0 0) (color 255 255 255) -- convertTo msh PolyMeshObject -- select msh -- subobjectLevel = 1 for j = 1 to uvwArray.count do setTVert msh j uvwArray[j] for j = 1 to faceArray.count do setTVFace msh j faceArray[j] " am i right MarioKart? [editline]3rd March 2013[/editline] [QUOTE=Rusty100;39782537]this kind of stuff should be bannable who comes into the modelling section and goes 'hey dudes i can port this stuff. but none of you can have it or know how to do it.' show of hands who thinks this shit should be bannable and i'll see what i can do if you aren't gonna share a port, don't post [editline]4th March 2013[/editline] like, it's fair enough to not take requests. but if you've already done something, and you won't share, you're shit.[/QUOTE] You should read every post... Mariokart share his knowledge for people who wants... the prove he is helping me using his script... and if you talk like that...you don't deserve anything...
yes the insert looks good, the lines that contain "--" are ignore so can even be deleted materials implementation wasn't successful also theres another line called Stride = 32 if some models import messed up change stride to 24. I'm not sure how to automatically calculate stride.
[QUOTE=Rusty100;39782537]Very fair stuff.[/QUOTE] /raise hand
Thanks for the confirmation :) i'm looking your script in everyway but i can't find the line called Stride = 32 ? here the full modify scricpt i have : " fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\wp\\wp01a0.dat" fsource = GetOpenFileName \ caption:"Select a File" \ types: "All files (*.*)|*.dat|" delete $* fn readBElong fstream = (bit.swapBytes (bit.swapBytes (readlong fstream #unsigned) 1 4) 2 3) fn readBEshort fstream = (bit.swapBytes (readshort fstream #unsigned) 1 2) fn readBEtriplet fstream = (((readbyte f #unsigned)*0x00010000)+((readbyte f #unsigned)*0x00000100)+((readbyte f #unsigned)*0x00000001)) fn ReadBEfloat fstream = ( bit.intAsFloat (bit.swapBytes (bit.swapBytes (readlong fstream #unsigned) 1 4) 2 3) ) fn readBEHalfFloat fstream = ( hf=bit.swapBytes (readshort fstream #unsigned) 1 2 sign = bit.get hf 16 exponent = (bit.shift (bit.and hf (bit.hexasint "7C00")) -10) as integer - 16 fraction = bit.and hf (bit.hexasint "03FF") if sign==true then sign = 1 else sign = 0 exponentF = exponent + 127 outputAsFloat = bit.or (bit.or (bit.shift fraction 13) \ (bit.shift exponentF 23)) (bit.shift sign 31) return bit.intasfloat outputasfloat*2) fn readFixedString bstream fixedLen = ( local str = "" for i = 1 to fixedLen do ( str += bit.intAsChar (ReadByte bstream #unsigned)) str ) fn paddstring len instring = ( instring=instring as string local str="";if instring.count <=len then( for i = 1 to (len-instring.count) do(str+="0") str = (str+instring))else( for i = 1 to len do(str+="0";str[i]=instring[i]));str ) fn uppercase instring = ( local upper, lower, outstring upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ" lower="abcdefghijklmnopqrstuvwxyz" outstring=copy instring for i=1 to outstring.count do ( j=findString lower outstring[i] if (j != undefined) do outstring[i]=upper[j]) outstring) fn printblockpos bname badr = ( str=((bit.intAsHex badr)as string) if str[str.count]=="L" do(str = substring str 1 (str.count-1)) format "% @ 0xDD%\n" bname (paddstring 6 (uppercase str)) ) fn printblockpos bname badr = ( str=((bit.intAsHex badr)as string) if str[str.count]=="L" do(str = substring str 1 (str.count-1)) format "% @ 0x%\n" bname (paddstring 8 (uppercase str)) ) if (fsource!=undefined) then ( fpath=getFilenamePath fsource fname=getFilenameFile fsource fsize=getFileSize fsource fext=getFilenameType fsource if ((doesFileExist fsource)==true) then ( clearlistener () f = fopen fsource "rb" struct package_resource (offset,type,name,size) datArray = (package_resource \ offset:#() \ type:#() \ name:#() \ size:#() \ ) case (readFixedString f 4) of ( "DAT":( dat_offsets = #() dat_01 = readBElong f -- count: files dat_02 = readBElong f -- offset: offset table dat_03 = readBElong f -- offset: extension table dat_04 = readBElong f -- offset: name table dat_05 = readBElong f -- offset: size table dat_06 = readBElong f -- offset: ?? unknown data dat_07 = readBElong f -- Blank? Reserved? fseek f dat_02 #seek_set for i = 1 to dat_01 do (datArray.offset[i] = readBElong f) fseek f dat_03 #seek_set for i = 1 to dat_01 do (datArray.type[i] = uppercase (readFixedString f 4)) fseek f dat_04 #seek_set;str_len = readBElong f for i = 1 to dat_01 do (datArray.name[i] = readFixedString f str_len) fseek f dat_05 #seek_set for i = 1 to dat_01 do (datArray.size[i] = readBElong f) for d = 1 to dat_01 do ( fseek f datArray.offset[d] #seek_set case datArray.type[d] of ( "WMB":(magic = uppercase (readFixedString f 4) case magic of ( "WMB4":( vertArray=#() normArray=#() uvwArray=#() faceArray=#() ukn01 = readBElong f ukn02 = readBElong f ukn03 = readBElong f ukn04 = readBElong f ukn05 = readBElong f ukn06 = readBElong f ukn07 = readBElong f ukn08 = readBElong f ukn09 = readBElong f ukn10 = (readBElong f)+datArray.offset[d] -- offset to vertex buffer header offset? lol ukn11 = readBElong f -- number of vertex buffers? always 1? ukn12 = (readBElong f)+datArray.offset[d] -- offset to unknown data, after faces buffer ukn13 = readBElong f ukn14 = (readBElong f)+datArray.offset[d] ukn15 = (readBElong f)+datArray.offset[d] ukn16 = readBElong f ukn17 = (readBElong f)+datArray.offset[d] ukn18 = readBElong f ukn19 = (readBElong f)+datArray.offset[d] ukn20 = readBElong f ukn21 = (readBElong f)+datArray.offset[d] ukn22 = readBElong f ukn23 = (readBElong f)+datArray.offset[d] ukn24 = readBElong f ukn25 = (readBElong f)+datArray.offset[d] ukn26 = readBElong f ukn27 = readBElong f ukn28 = readBElong f ukn29 = readBElong f ukn30 = readBElong f ukn31 = readBElong f fseek f ukn10 #seek_set vert_offset = (readBElong f)+datArray.offset[d] ukn33 = readBElong f ukn34 = readBElong f ukn35 = readBElong f num_verts = readBElong f format "% Vertices @ 0x%\n" num_verts ((bit.intAsHex(vert_offset))as string) face_offset = (readBElong f)+datArray.offset[d] num_faces = readBElong f -- count uknA1 = readBElong f uknA2 = readBElong f uknA3 = readBElong f uknA4 = readBElong f uknA5 = readBElong f uknA6 = readBElong f fseek f ukn12 #seek_set mshArray=#() for i = 1 to ukn13 do ( ukn27 = readBElong f -- null ukn28 = readBElong f -- vert start ukn29 = readBElong f -- face start ukn30 = readBElong f -- vert count ukn3a = readBElong f -- face count mshArray[i] = [ukn28,ukn29,ukn30,ukn3a] ) -- fseek f ukn14 #seek_set -- ukn31 = (readBElong f)+datArray.offset[d] -- ukn32 = readBElong f -- count -- ukn33 = readBElong f -- always 0? -- ukn34 = readBElong f -- always 0? -- ukn35 = readBElong f -- always 0? -- ukn36 = readBElong f -- always 0? -- ukn37 = readBElong f -- always 0? -- ukn38 = readBElong f -- always 0? -- fseek f ukn31 #seek_set -- for i = 1 to ukn32 do ( -- ukn38 = readBElong f -- index -- ukn39 = readBElong f -- ? flag? -- ukn40 = readBElong f -- offset, or another index, 2 shorts instead -- ukn41 = readBElong f -- always 0x00 01 00 00 -- ) -- fseek f ukn15 #seek_set -- for i = 1 to ukn16 do ( -- bones? -- ukn42 = readBEshort f -- indexes -- ukn43 = readBEshort f -- ukn44 = readBEshort f -- ukn45 = readBEshort f -- ukn46 = readBEfloat f -- ukn47 = readBEfloat f -- ukn48 = readBEfloat f -- ukn49 = readBEfloat f -- ukn50 = readBEfloat f -- ukn51 = readBEfloat f -- ) -- fseek f ukn17 #seek_set -- for i = 1 to ukn18 do ( -- ukn52 = readbyte f #unsigned --? float, divide by 0xFF -- ) -- fseek f ukn19 #seek_set -- tempArray = #() -- for i = 1 to ukn20 do ( -- loop might be bad -- ukn53 = (readBElong f)+datArray.offset[d] -- ukn54 = readBElong f -- count -- ukn55 = readBElong f -- always 0? -- ukn56 = readBElong f -- always 0? -- tempArray[i] = [ukn53,ukn54,ukn55,ukn56] -- ) -- for i = 1 to ukn20 do ( -- fseek f tempArray[i][1] #seek_set -- for x = 1 to tempArray[i][2] do ( -- ukn57 = readbyte f #unsigned -- indexes -- ) -- ) -- fseek f ukn21 #seek_set -- for i = 1 to ukn22 do ( -- ukn58 = (readBElong f)+datArray.offset[d] -- offset to string -- ukn59 = (readBElong f)+datArray.offset[d] -- offset to stuff after string -- ukn60 = readBElong f -- always 0? -- ukn61 = (readBElong f)+datArray.offset[d] -- offset to matrix data? -- ukn62 = readBEshort f -- ukn63 = readBEshort f -- ukn64 = readBEshort f -- ukn65 = readBEshort f -- string count -- ) -- fseek f ukn23 #seek_set -- for i = 1 to ukn24 do ( -- ukn66 = readBElong f -- count? -- ukn67 = readBElong f -- float or hash? -- ) -- fseek f ukn25 #seek_set -- for i = 1 to ukn26 do ( -- ukn68 = (readBElong f)+datArray.offset[d] -- offset to name -- ukn69 = readBEfloat f -- ukn70 = readBEfloat f -- ukn71 = readBEfloat f -- ukn72 = readBEfloat f -- ukn73 = readBEfloat f -- ukn74 = readBEfloat f -- ukn75 = (readBElong f)+datArray.offset[d] -- offset to index data that comes after name -- ukn76 = readBElong f -- count for above offset -- ukn77 = readBElong f -- ukn78 = readBElong f -- ukn79 = readBElong f -- ukn80 = readBElong f -- ukn81 = readBElong f -- ukn82 = readBElong f -- ukn83 = (readBElong f)+datArray.offset[d] -- offset to index data that comes after name -- ukn82 = readBElong f -- count for above offset -- ) fseek f vert_offset #seek_set for i = 1 to num_verts do ( vx = ReadBEfloat f vy = ReadBEfloat f vz = ReadBEfloat f tu = (readBEshort f) / 65535.0 tv = (readBEshort f) / 65535.0 nx = ReadBEfloat f ny = ReadBEfloat f -- nz = ReadBEfloat f b1 = readbyte f #unsigned b2 = readbyte f #unsigned b3 = readbyte f #unsigned b4 = readbyte f #unsigned w1 = (readbyte f #unsigned)/255.0 w2 = (readbyte f #unsigned)/255.0 w3 = (readbyte f #unsigned)/255.0 w4 = (readbyte f #unsigned)/255.0 vertArray[i] = ([vx,-vz,vy]*100) -- tu=tv=0 uvwArray[i] = [tu,tv,0] ) for i = 1 to ukn13 do ( num_faces=mshArray[i][4] fseek f (face_offset+(mshArray[i][2]*2)) #seek_set format "% Faces % @ 0x%\n" i num_faces ((bit.intAsHex(ftell f))as string) faceaddon = mshArray[i][1]+1 StartDirection = 1 fa = (ReadBEshort f) + faceaddon fb = (ReadBEshort f) + faceaddon FaceDirection = StartDirection IndexCounter = 2 Do ( fc = ReadBEshort f IndexCounter += 1 if (fc==0xFFFF) then ( fa = (ReadBEshort f) + faceaddon fb = (ReadBEshort f) + faceaddon FaceDirection = StartDirection IndexCounter += 2 ) else ( fc += faceaddon FaceDirection *= -1 if (fa!=fb)AND(fb!=fc)AND(fc!=fa) then ( if FaceDirection > 0 then (append faceArray [fa,fb,fc]) else (append faceArray [fa,fc,fb]) ) fa = fb fb = fc ) ) while IndexCounter !=num_faces format "\t\t\t\t\tFaceEnd @ 0x%\n" ((bit.intAsHex(ftell f))as string) ) msh = mesh vertices:vertArray tverts:uvwArray faces:faceArray msh.numTVerts = vertArray.count buildTVFaces msh msh.displayByLayer = false msh.backfacecull = on msh.wirecolor = random (color 0 0 0) (color 255 255 255) -- convertTo msh PolyMeshObject -- select msh -- subobjectLevel = 1 for j = 1 to uvwArray.count do setTVert msh j uvwArray[j] for j = 1 to faceArray.count do setTVFace msh j faceArray[j] ) default:(printblockpos ("WMB Not Supported: "+magic) datArray.offset[d]) ) ) default:(printblockpos ("Type Unknown: "+datArray.type[d]) datArray.offset[d]) ) ) ) default:(format "File Unknown: %\n" (magic as string)) ) format "Last Read @ 0x%\n" ((bit.intAsHex(ftell f))as string) format "Flie Closed: %\n" fname fclose f ) else (Print "Failed to Locate File")) else (Print "Aborted.") "
oh right I cleaned that up, before it was fixed at 32 by reading it 32bytes worth of data.. since I never figured out the skeleton you can just clean up the entire loop old [code] fseek f vert_offset #seek_set for i = 1 to num_verts do ( vx = ReadBEfloat f vy = ReadBEfloat f vz = ReadBEfloat f tu = (readBEshort f) / 65535.0 tv = (readBEshort f) / 65535.0 nx = ReadBEfloat f ny = ReadBEfloat f -- nz = ReadBEfloat f b1 = readbyte f #unsigned b2 = readbyte f #unsigned b3 = readbyte f #unsigned b4 = readbyte f #unsigned w1 = (readbyte f #unsigned)/255.0 w2 = (readbyte f #unsigned)/255.0 w3 = (readbyte f #unsigned)/255.0 w4 = (readbyte f #unsigned)/255.0 vertArray[i] = ([vx,-vz,vy]*100) -- tu=tv=0 uvwArray[i] = [tu,tv,0] ) [/code] new [code]stride = 32 fseek f vert_offset #seek_set for i = 1 to num_verts do ( pos = (ftell f)+stride vx = ReadBEfloat f vy = ReadBEfloat f vz = ReadBEfloat f tu = readBEHalfFloat f tv = readBEHalfFloat f vertArray[i] = ([vx,-vz,vy]*100) uvwArray[i] = [tu,tv,0] fseek f pos #seek_set )[/code]
[QUOTE=mariokart64n;39781953]I don't usually deal with PS3, so I'm not familiar with it. for me the 360 conversion is done through a BAT script I made.. [code]FOR %%1 in (*.gtf) DO (gtf2dds.exe "%%1")[/code][/QUOTE] works, but I'm looking for a script that identifies the GTF blocks. into the DTT file for the extraction. [IMG]http://img46.imageshack.us/img46/3273/gtfh.jpg[/IMG]
send me a DAT file from PS3 please
so i try your script on models you already done to see if it was working properly...but it doesn't seem to work great with me :) for the em002a = Samuel : (no head) [IMG]http://imageshack.us/a/img443/7315/resultatpourem002asamue.jpg[/IMG] for the em01a0 = Monsoon : error [IMG]http://imageshack.us/a/img42/1110/resultatpourem031bsundo.jpg[/IMG] for the em031b = Sundowner : error [IMG]http://imageshack.us/a/img42/1110/resultatpourem031bsundo.jpg[/IMG] Do you know what the problem is Mariokart ?
models are all in parts, and I was only able to imports parts of Monsoon
ok i understand, but for the script error? you have a clue?
either its not tristrip, or wrong stride. I had to manually tweak the script, to compensate since I wasn't able to calculate these things automatically
Sorry, you need to Log In to post a reply to this thread.