|
Post by mariokart64n on Nov 26, 2011 16:38:52 GMT -5
it seems the command buffer hold material specifics.. like rim light, and bloom?
I haven't figured any of it out, but by swapping the command buffer you can for example make a certain mesh transparent, or whatever.
EDIT looked at the DR1 format, and was able to import static props. the format used is called MOD, and sure enough is almost identical to the MOD format CAPCOM used in the past for games like DevilMayCry4, LostPlanet, and ResidentEvil5.
I've put in a request to have the DR1 format supported by noeisis. which is a model viewing program which supports DMC4,RE5,andLP
Hopefully the Author MrAdult will find time to add the format to noesis. so that I don't have to reinvent the wheel to import DR1 models. So far I haven't had success importing skinned meshes.
Regardless I will share the scripts used to get the files.
BMS to extract DR1 files
endian big idstring "\0CRA" # "ARC\0" big endian get VERSION short get FILES short
for i = 0 < FILES getdstring NAME 64 get TIMESTAMP long get ZSIZE long get SIZE long get OFFSET long
clog NAME OFFSET ZSIZE SIZE next i
before qbms did not supports multiple files, heres a Batch file encase its needed.
set DIR=%CD% FOR %%1 in (*.arc) DO ( quickbms.exe -o drarcx.bms %%1 "%DIR%" DEL %%1 )
no use posting the script since it only imports crap from the object folder.. shovels and random items
the format stored the vertices weird. they were store as whole number instead of deciaml point numbers. I had to read the (value/0xFFFF)*bounddistance
wacky, and vertex and index buffers are piled together I need to figure out how they suppose to be seperated... but I'd rather not spend time on that if its only a few tweaks from working in noesis
lastly when I was poking around the DR1 textures I found a texture of lindsey lohans face, and the face of a former exotic model. the exotic model I understand because she did posing for a studio which takes photo references for 3d devlopers.. but how does lohan get in there lol...
|
|
|
Post by mariokart64n on Nov 28, 2011 16:39:37 GMT -5
theres nothing in there interesting enough to spend the time programming for it.
cause I have to convert it from big endian to little endian then convert it to the otr spec. and from what I can tell the bones are written differently and the vertex data does not include vertex tangents.. so the files need to be reconstructed. regardless if the target format was DR2 or OTR. thats alot of work :\
I'm focusing my time on generating content and thats taking forever lol
|
|
|
Post by xrorebt on Nov 28, 2011 19:29:30 GMT -5
Only thing from Case Zero, I can see us really needing, is just the environment models.
|
|
|
Post by Freako on Nov 28, 2011 21:49:23 GMT -5
Yeah... I'd love to co-op in Stillcreek especially with max walking speed. Case Zero chuck is so damn slow.
|
|
|
Post by Freako on Nov 30, 2011 19:38:25 GMT -5
Then why is there quickstep and a dolly?
|
|
|
Post by mariokart64n on Dec 4, 2011 12:32:50 GMT -5
ok, update2 on DR1 for the xbox360 the format is too difficult to solve without testing theories ingame. since its a xbox360 game that'll make it even more annoying to do. so I'm not doing it lol to top that off the format is the same format used in RE5, DMC4, and LP. there seems to have been a hacker for each game that made their own converter aswell.. and among all 3 or 4 of them none of those asshole left any documentation or source code. <_< so I can't solve the DR1 format easily, and I'm not begging a bunch of hackers for their source or for them to "do it" for me.. cause then things usually get ugly.. credit, and owning favors and all that jazz. anyway sat down and hunted down the DR1 characters I wanted, and they imported ok, not saying everything works.. alot of crap does NOT import. but I'll post the scripts and leave info I currently have on the format. quickBMS: (To Extract The Arc Files)endian big idstring "\0CRA" # "ARC\0" big endian get VERSION short get FILES short
for i = 0 < FILES getdstring NAME 64 get EXT long get ZSIZE long get SIZE long get OFFSET long string name + . string name + ext clog NAME OFFSET ZSIZE SIZE next i
MaxScript (For Importing files to 3dsmax) PS to get textures run the maxscript on a texture file and it'll spit out a dds. the dds is swizzled, so needs to be unswizzled I did not write any program for this yet, I just code the code from the dds and pasted it into a xbox360 xpression2 file. then used the xSDK to unswizzle (unbundler)
clearlistener()
obj=$*;delete obj
mscale=0.3937
fsource = GetOpenFileName \ caption:"DR1 MOD Importer" \ types: "All Files (*.272743838)|*.272743838|All Files (*.*)|*.*|" -- types: "All Files (*.*)|*.*|"
-- fsource = "E:\\_3DMODELS\\Ripped\\Dead Rising\\DeadRising\\model\\ev\\evo040\\evo040" -- fsource = "E:\\_3DMODELS\\Ripped\\Dead Rising\\DeadRising\\model\\om\\om0069\\om0069"
st = timestamp() --get start time in milliseconds if (fsource!=undefined) AND ((doesFileExist fsource)==true) then( fpath=getFilenamePath fsource fname=getFilenameFile fsource fsize=getFileSize fsource f = fopen fsource "rb"
fsize= getFileSize fsource fn ReadFixedString bstream fixedLen = ( local str = "" for i = 1 to fixedLen do ( str += bit.intAsChar (ReadByte bstream #unsigned) ) str ) fn ReadBEshort fstream = (bit.swapBytes (readshort fstream #unsigned) 1 2)
-- fn ReadBEshort fstream = ( -- a=readbyte fstream #unsigned -- (readbyte fstream #unsigned*0x0100)+a -- )
fn readBElong fstream = ( long = readlong fstream #unsigned 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 readBEHalfFloat Fstream = ( local BH = readByte Fstream #unsigned local BL = readByte Fstream #unsigned local N = BH*256 + BL local S = floor((mod N 65536) / 32768) local Ef = floor((mod N 32768) / 1024) local M = mod N 1024 if (Ef==0)AND(M==0) then return ( (-1.0)^S * 0.0 ) if (Ef==0)AND(M!=0) then return ( (-1.0)^S * 2.0^-14 * (M / 2.0^10) ) if (Ef>0)AND(Ef<31) then return ( (-1.0)^S * 2.0^(Ef-15) * (1 + M/2.0^10) ) if (Ef==31)AND(M==0) then return ( (-1.0)^S * 1/0.0 ) if (Ef==31)AND(M!=0) then return 0 --hack-- should be #inf )--end fn ReadBEHalfFloat fn writeDDSheader streamin texW texH texM texC = ( texP=0 writelong streamin 0x20534444 #unsigned -- File ID writelong streamin 0x7C #unsigned -- Header Size case of( -- dwFlags (texC=="DXT1"): (writelong streamin 0x00081007 #unsigned;texP=((texW*texH)/0x02)) (texC=="DXT3"): (writelong streamin 0x00081007 #unsigned;texP=(texW*texH)) (texC=="DXT5"): (writelong streamin 0x00081007 #unsigned;texP=(texW*texH)) (texC=="ATI1"): (writelong streamin 0x000A1007 #unsigned;texP=(texW*texH)/2;texM=1) (texC=="ATI2"): (writelong streamin 0x000A1007 #unsigned;texP=(texW*texH);texM=1) (texC=="P8"): (writelong streamin 0x000A1007 #unsigned;texP=((texW*texH)/0x02)) (texC=="ARGB16"): (writelong streamin 0x00081007 #unsigned;texP=(((texW*texH)/0x8)*0x10)) (texC=="ARGB32"): (writelong streamin 0x00081007 #unsigned;texP=(((texW*texH)/0x4)*0x10))) writelong streamin texW #unsigned -- Texture Width writelong streamin texH #unsigned -- Texture Height writelong streamin texP #unsigned -- Pitch (#of bytes in a single row across the texture) writelong streamin 0x00 #unsigned -- Image Depth? Not Used, for Image Volume writelong streamin texM #unsigned -- Texture MIP Count for i = 1 to 11 do writelong streamin 0x00 #unsigned -- Reserved Space writelong streamin 0x20 #unsigned -- Size of PIXEL_FORMAT info, always 32bytes; case of( (texC=="DXT1"): (writelong streamin 0x04;writelong streamin 0x31545844 #unsigned writelong streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writelong streamin 0x00001000 #unsigned) (texC=="DXT3"): (writelong streamin 0x04;writelong streamin 0x33545844 #unsigned writelong streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writelong streamin 0x00001000 #unsigned) (texC=="DXT5"): (writelong streamin 0x04;writelong streamin 0x35545844 #unsigned writelong streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writelong streamin 0x00001000 #unsigned) (texC=="ATI1"): (writelong streamin 0x04;writelong streamin 0x31495441 #unsigned writelong streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writelong streamin 0x00401008 #unsigned) (texC=="ATI2"): (writelong streamin 0x04;writelong streamin 0x32495441 #unsigned writelong streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writelong streamin 0x00401008 #unsigned) (texC=="P8"): (writelong streamin 0x20;writelong streamin 0x20203850 #unsigned writelong streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writelong streamin 0x00401008 #unsigned) (texC=="ARGB16"): (writelong streamin 0x41;writelong streamin 0x00000000 #unsigned writelong streamin 0x10;writebyte streamin 0x00;writebyte streamin 0x0F;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0xF0;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x0F;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0xF0;writebyte streamin 0x00 writebyte streamin 0x00;writelong streamin 0x00001000 #unsigned) (texC=="ARGB32"): (writelong streamin 0x41;writelong streamin 0x00000000 #unsigned writelong streamin 0x20;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0xFF writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0xFF;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0xFF;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00;writebyte streamin 0x00 writebyte streamin 0xFF;writelong streamin 0x00001000 #unsigned)) for i = 1 to 4 do writelong streamin 0x00 #unsigned) -- Reserved Space for CAPS
fileID=readlong f #unsigned case of( (fileID==0x4D4F4400): ( ukn001=readBEshort f -- header size? ukn002=readBEshort f -- bone count? ukn003=readBEshort f -- mesh count? ukn004=readBEshort f -- material count?
ukn005=readBElong f -- vertex count ukn006=readBElong f -- face count ukn007=readBElong f ukn008=readBElong f ukn009=readBElong f
ukn010=readBElong f -- count, String Count, texture count ukn011=readBElong f -- always 0? ukn012=readBElong f -- bone offset ukn013=readBElong f -- offset, string table ukn014=readBElong f -- mesh info offset ukn015=readBElong f -- offset, vertices ukn016=readBElong f -- always 0? ukn017=readBElong f -- offset, faces
-- boundingSphere ukn018=readBEfloat f ukn019=readBEfloat f ukn020=readBEfloat f ukn021=readBEfloat f
-- minBounds ukn022=readBEfloat f ukn023=readBEfloat f ukn024=readBEfloat f ukn025=readBEfloat f
-- maxBounds ukn026=readBEfloat f ukn027=readBEfloat f ukn028=readBEfloat f ukn029=readBEfloat f
boundbox=[ukn026,-ukn028,ukn027]-[ukn022,-ukn024,ukn023]
fseek f ukn012 #seek_set for i = 1 to ukn002 do( -- 24bytes long bindex=readbyte f bparent=readbyte f fseek f (4*5.5) #seek_cur )
fseek f ukn013 #seek_set texNames=#();texNames[ukn010]="" for i = 1 to ukn010 do( texNames[i]=readFixedString f 64 )
fseek f ukn014 #seek_set for i = 1 to ukn003 do( getPos=ftell f + 80 ukn01=readBEshort f
fseek f getPos #seek_set )
vertArray=#() uvwArray=#() normArray=#() faceArray=#()
a=readbyte f #unsigned b=readbyte f #unsigned
fseek f ukn015 #seek_set for i = 1 to ukn005 do ( getPos=ftell f+32 -- p1=readBEfloat f * 1000 -- p2=readBEfloat f * 1000 vx=(((ReadBEshort f as float/0xffff)*(abs boundbox[1]))-(abs (boundbox[1]/2)))*mscale vy=((ReadBEshort f as float/0xffff)*(abs boundbox[3]))*mscale vz=(((ReadBEshort f as float/0xffff)*(abs boundbox[2]))-(abs (boundbox[2]/2)))*mscale wtf=readshort f b1=readbyte f #unsigned b2=readbyte f #unsigned b3=readbyte f #unsigned b4=readbyte f #unsigned w1=readbyte f #unsigned w2=readbyte f #unsigned w3=readbyte f #unsigned w4=readbyte f #unsigned
fseek f 8 #seek_cur -- D3DDECLTYPE_SHORT4N POSITION '--must divide all vals by 32767 -- D3DDECLTYPE_UBYTE4 BLENDINDICES '--must divide all vals by 255 -- D3DDECLTYPE_UBYTE4N BLENDWEIGHT '--must divide all vals by 255 -- D3DDECLTYPE_UBYTE4N NORMAL '--must divide all vals by 255 -- D3DDECLTYPE_UBYTE4N TANGENT '--must divide all vals by 255 -- D3DDECLTYPE_FLOAT16_2 TEXCOORD '--must divide all vals by 65535 -- D3DDECLTYPE_FLOAT16_2 TEXCOORD '--must divide all vals by 65535 --D3DDECLTYPE_SHORT2N POSITION '--must divide all vals by 32767 --D3DDECLTYPE_DEC3N '--must divide all vals by 511 tu=ReadBEHalfFloat f tv=ReadBEHalfFloat f
append vertArray [vx,-vz,vy] append uvwArray [tu,(-tv+1),0] fseek f getPos #seek_set )
fseek f ukn017 #seek_set StartDirection = -1 f1 = (readBEshort f) + 1 f2 = (readBEshort f) + 1 if f1>=ukn005 do f1=1 if f2>=ukn005 do f2=1 FaceDirection = StartDirection IndexCounter = 2 Do ( f3 = (readBEshort f)
IndexCounter += 1 if f3>=ukn005 then ( f1 = (readBEshort f) + 1 f2 = (readBEshort f) + 1 if f1>=ukn005 do f1=1 if f2>=ukn005 do f2=1 FaceDirection = StartDirection IndexCounter += 2
) else ( f3 += 1 FaceDirection = -FaceDirection if (f1!=f2)AND(f2!=f3)AND(f3!=f1) then ( if FaceDirection > 0 then append faceArray [f1,f2,f3] else append faceArray [f1,f3,f2] ) f1 = f2 f2 = f3 ) ) while IndexCounter !=(ukn006-1)
-- faceArray=#() -- print faceArray
msh = mesh vertices:vertArray faces:faceArray msh.numTVerts = vertArray.count buildTVFaces msh msh.displayByLayer = false msh.backfacecull = on
for j = 1 to vertArray.count do setTVert msh j uvwArray[j]
for j = 1 to faceArray.count do setTVFace msh j faceArray[j]
-- for j = 1 to vertArray.count do setNormal msh j normArray[j] convertTo msh PolyMeshObject
Print ("Last Read @ 0x"+((bit.intAsHex(ftell f))as string))
Print ("Done! ("+((((timestamp())-st)/60)as string)+" Seconds)") fclose f ) (fileID==0x54455800): ( ukn01=readbyte f #unsigned ukn02=readbyte f #unsigned-- flags?? ukn03=readbyte f #unsigned ukn04=readbyte f #unsigned texH=readBElong f texW=readBElong f ukn05=readlong f ukn06=readbyte f #unsigned ukn07=readbyte f #unsigned ukn08=readbyte f #unsigned texC=readbyte f #unsigned -- compression? fseek f (ukn03*4) #seek_cur getPos=ftell f print texCe case of( (texC==0x52): (texC="DXT1") (texC==0x53): (texC="DXT3") (texC==0x54): (texC="DXT5") (texC==0x86): (texC="ARGB32") (texC==0x4A): (texC="ARGB16") (texC==0x71): (texC="ATI2") (texC==0x7B): (texC="ATI1") (texC==0x7C): (texC="ATI1") ) xinfo=(" ["+texC+" - "+(texH as string)+" x "+(texW as string)+"]") -- createFile (fpath+fname+xinfo+".dds") s = fopen (fpath+fname+xinfo+".dds") "wb" writeDDSheader s texW texH 0 texC for i = 1 to ((fsize-getPos)/2) do writeshort s (readBEshort f) #unsigned -- (byte 02 = CTES Compression {ETC RGBA Introploated Alpha 8bpp} dword: ETCI) /like DXT5 -- (byte 52 = dxt1) -- (byte 53 = dxt3) -- (byte 54 = dxt5) -- (byte 56 = 32bitargb) -- (byte 4A) = 16bitargb) -- (byte 71 = ATI2) -- (byte 7C = ATI1 - CTX1) set to 54 to unswizzle
fclose s fclose f ) )
)else(Print "Aborted.")
Dead Rising (Xbox360) Mod Format Spec { // Header [LONG]: File ID [SHORT]: Header Size [SHORT]: bone count? [SHORT]: mesh count? [SHORT]: material count? [LONG]: vertex count [LONG]: face count [LONG]: ?? [LONG]: ?? [LONG]: ?? [LONG]: String Count / texture count [LONG]: always 0? [LONG]: bone offset [LONG]: offset, string table [LONG]: mesh info offset [LONG]: offset, vertices [LONG]: always 0? [LONG]: offset, faces [FLOAT32]: ?? bounding Sphere? [FLOAT32]: ?? x [FLOAT32]: ?? y [FLOAT32]: ?? z [FLOAT32]: boundingbox Min x position [FLOAT32]: boundingbox Min y position [FLOAT32]: boundingbox Min z position [FLOAT32]: ?? [FLOAT32]: boundingbox Max x position [FLOAT32]: boundingbox Max y position [FLOAT32]: boundingbox Max z position [FLOAT32]: ?? }
{ // String Table, Texture Names LOOP*COUNT [STRING][64]: Texture Name }
{ // Vertex Buffer [32bytes per definition] [SHORT]: Vertex Position X \\ (divided by 65535 to convert int to float) positions also need to be scaled by the bounding box [SHORT]: Vertex Position Y \\ (divided by 65535 to convert int to float) positions also need to be scaled by the bounding box [SHORT]: Vertex Position Z \\ (divided by 65535 to convert int to float) positions also need to be scaled by the bounding box [SHORT]: ?? [BYTE]: Bone Index #1 [BYTE]: Bone Index #2 [BYTE]: Bone Index #3 [BYTE]: Bone Index #4 [BYTE]: Bone Weight #1 [BYTE]: Bone Weight #2 [BYTE]: Bone Weight #3 [BYTE]: Bone Weight #4 [LONG]: ?? [LONG]: ?? [FLOAT16]: Texture Coordinate U [FLOAT16]: Texture Coordinate U [FLOAT16]: ?? [FLOAT16]: ?? }
{ // Face Data [SHORT]: Face (triStrip?) }
Dead Rising (Xbox360) Tex Format Spec{ // Texture Header [BYTE]: ?? [BYTE]: ?? [BYTE]: ?? [BYTE]: ?? [LONG]: Texture Height [LONG]: Texture Width [LONG]: ?? [BYTE]: ?? [BYTE]: ?? [BYTE]: ?? [BYTE]: Texture Compression } // Texture Compressions // (byte 02 = CTES Compression {ETC RGBA Introploated Alpha 8bpp}) // (byte 52 = dxt1) // (byte 53 = dxt3) // (byte 54 = dxt5) // (byte 56 = 32bitargb) // (byte 4A) = 16bitargb) // (byte 71 = ATI2) // (byte 7C = ATI1 - CTX1)
|
|
|
Post by xrorebt on Dec 5, 2011 3:55:50 GMT -5
I'm having some problems with the unswizzling. Not sure if I've done something wrong or anything. But unbundler will say that it's found a texture resource. Then after a while, it'll randomly crash without giving any output file.
|
|
|
Post by Freako on Dec 5, 2011 10:32:30 GMT -5
Can we have a clue as to where character models can be found, so I can help look?
|
|
|
Post by mariokart64n on Dec 5, 2011 15:55:29 GMT -5
to be honest I don't know. just unpack every arc file xrorebtI'll work on making a script to convert textures.
|
|
|
Post by xrorebt on Dec 5, 2011 18:13:37 GMT -5
That'd make things a whole lot easier. I can't imagine how long it could take to unswizzle all the textures manually.
|
|
|
Post by mariokart64n on Dec 5, 2011 18:31:30 GMT -5
chrrox asked mradult, so supposedly noesis will get official support for DR1. both the models and the textures, it uses the same format used in RE5 and DMC4. not sure when he makes his noesis updates.. but about a weeks time I would think
|
|
|
Post by xrorebt on Dec 5, 2011 19:08:34 GMT -5
Well I know mradult has been pretty busy lately.
But it's cool that Noesis could get DR1 support. I've used Noesis for a number of game models, before. Like Ninja Gaiden 2, Duke Nukem Forever, etc.
|
|
|
Post by mariokart64n on Dec 5, 2011 20:59:42 GMT -5
ok success on that zombie idea; 1. decompiled the zombie cop 2. decompiled the zombie cop's persistent.big 3. copied the boundingbox and boneattribute files 4. took a npc big, decompiled that. then decompiled its persistent.big 5. overwrote the boundingbox and boneattribute files with the one from the zombie cops persistent 6. repacked the modified persistent, then repacked it again so it was an importable character file 7. tweaked my script to ignore bad weights 8. import modified npc model.. and viola! 9. re-rig entire model to new skeleton 10. use script to export every mesh piece 11. repack 12. replace zombie cop with your now modified npc character and result get the modified script here; pastebin.com/zGvjVLhsthe zombie cop had 3 big models with it. the first big is the main model, the second is the lowpoly. the lowpoly is enabled when you see the zombie from far away. or when you kill that zombie. as for the last model file, I have no idea? also one thing to note, the lowpoly seems to double as the headless model. so when you replace the lowpoly, remove the head. in my demo, I just copied the entire model mod over the main model and lowpoly. the last model again doesn't seem to have any involvement ??
|
|
|
Post by Freako on Dec 5, 2011 21:13:55 GMT -5
Aha! So now we know why when doing the snapshot skill the zombie turns extremely low poly, because it counts as a kill, thus the zombie switches to the low poly model and it looks like shit.
Not that, that helps us in any way but aw well.
|
|
|
Post by mariokart64n on Dec 5, 2011 21:16:38 GMT -5
lol yeah I suppose... if someone wanted they could exploit this.. replace all the highpoly zombies with lowpoly zombies to create a lowpoly model. or vise versa..
still haven't figured a way to reduce the zombie count.
|
|
|
Post by xrorebt on Dec 5, 2011 21:53:22 GMT -5
I'm honestly not sure what to replace zombies with (unless we put in the DR1 zombies, though in the end, a zombie's a zombie), but I know this could help with replacing looters, mercenaries and TK's men. Maybe even help add entirely new enemies, like the Phenotrans Hazard soldiers from Case West.
|
|
|
Post by mariokart64n on Dec 6, 2011 0:01:25 GMT -5
ok, I whipped together a script to import zombies pastebin.com/yKNgREfqdoesn't work on all, but it gave me a better idea of what those sub models actually are. seems each zombie has 3 models, which seems to be verious level of LOD (Level of Detail) 1. High Poly 2. Mid Poly 3. Low Poly as observed in my test the 3rd mesh doesn't seem to be used... the mid poly is used when looking from far away, and after killing a zombie. I guess the 3rd mesh may be for extremely far distances? one thing thats interesting is that the big file for a zombie can hold several different full body models. seems the game accesses variations of the zombie meshes. this may make the names of the mesh parts critical? PS, if you want to import the zombies with SKIN weights, just change line# 15 from skinON=false to skinON=true
|
|
|
Post by Freako on Dec 6, 2011 2:06:38 GMT -5
Zombies from extreme distances are 2d sprites. If you needed to know.
|
|
|
Post by Freako on Dec 6, 2011 9:26:21 GMT -5
Nope, they're 2D sprites. I saw them up close.
|
|
|
Post by Freako on Dec 6, 2011 18:43:35 GMT -5
Oh no, both games couldn't possibly use the same zombie system despite being almost the exact same game!
I've seen them up close in off the record when the game bugged out also.
|
|
|
Post by mariokart64n on Dec 6, 2011 20:27:44 GMT -5
maybe the level of detail is triggered by our PC requirements.... cause I've never seen those 2D sprite before.. I'm not even sure those are apart of the zombie files....
|
|
|
Post by Freako on Dec 7, 2011 0:17:35 GMT -5
I was talking about your 'disappointment' in DR2. I use it to get coords.
|
|
|
Post by gique13 on Dec 7, 2011 1:43:31 GMT -5
yikes those sprites never showed up for me in either dr2s, that's awful
|
|
|
Post by Freako on Dec 7, 2011 2:58:14 GMT -5
You can't even make them out from normal gameplay, but it's easy to see them with the debug camera.
|
|
|
Post by Freako on Dec 10, 2011 19:10:43 GMT -5
There's much more too it than that, you need to know how to use 3DS Max.
|
|
|
Post by mariokart64n on Dec 10, 2011 22:10:47 GMT -5
i'm not sure how to make a external tool, the way I'm doing it requires the mesh names, and bone order to be the same.
I'm not sure how to maintain this outside of a controlled environment (3dsmax)...
soon as you bring it into another program, programs of any kind.. the format becomes uncontrolled. and I'm not able to reauthor a new DR2 file 100% yet. so I cant think of how to do this or format it to allow you guys to mod like you did in resident evil 4
|
|
|
Post by xrorebt on Dec 10, 2011 22:19:31 GMT -5
Well, it's fine if it stays with 3ds Max. Because it can be "acquired" from places.
I personally don't mind if it stays with 3ds Max. But some of the people here who have no experience with the program (I used to be one of them before I took a few days to figure out some basic stuff), could have some problems.
Though it got me thinking, maybe there should be a model import request thread, where people can request certain models to be imported (provided the model is available, of course).
|
|
|
Post by Freako on Dec 10, 2011 23:45:22 GMT -5
What makes more sense is having the spartan outfit for your player.
Replacing random NPCs with weird models from other games is just messy. But hey, that's your thing.
|
|
|
Post by mariokart64n on Dec 11, 2011 1:23:28 GMT -5
In case anyone cares, I wrote up a py plugin for noesis .... Get the script here: pastebin.com/QjibZQ1J pastebin.com/BaA2Kui2Copy and paste into a notepad, and save as this file, in the specific file path \\Noesis\plugins\python\fmt_deadrising_tex.py after you extract an arc you will get models and textures, this script opens up the textures.. unfortunately not all of them. The author of noesis will have to do the rest, but I'm not sure if he's even going to work on it? update: the new noesis is up, fully supports DR1 now. all models and textures...
|
|
|
Post by Freako on Dec 11, 2011 2:21:53 GMT -5
I managed to find this, at least, for now. It's quite light, and when i exported it it went even lighter. Bump maps can't be imported yet it seems. And heres some images from the tutorial screens Good job so far.
|
|