Page 2 of 2
Re: Lost Planet 2 - arc extract to .mod and .tex
Posted: Tue Sep 18, 2012 3:57 am
by dragbody
Thanks FurryFan. I've been hoping someone would eventually come around to this

I'm having a little trouble with your script though. Is it made for PC files? Also, the .mod files I get from Arc Extractor have the extensions.
When I run the script using the command line you suggested, I get the error that there is an "incomplete input file number 0; can't read 2 bytes"
What do you suggest?
Re: Lost Planet 2 - arc extract to .mod and .tex
Posted: Wed Sep 19, 2012 5:12 pm
by FurryFan
dragbody wrote:Thanks FurryFan. I've been hoping someone would eventually come around to this

I'm having a little trouble with your script though. Is it made for PC files? Also, the .mod files I get from Arc Extractor have the extensions.
When I run the script using the command line you suggested, I get the error that there is an "incomplete input file number 0; can't read 2 bytes"
What do you suggest?
Use this script this other person to extract the .arc files from the PC version:
Code: Select all
# Devil May Cry 4 / Dead Rising 360 / Resident Evil 5 / Capcom ARC files (script 0.1.4)
# script for QuickBMS http://quickbms.aluigi.org
quickbmsver 0.5.3
set HFS long 0
set BASE_OFF long 0
get SIGN long
if SIGN == 0x00534648 # " SFH"
endian big
set HFS long 1
elif SIGN == 0x48465300 # "HFS "
endian little
set HFS long 1
endif
if HFS != 0
get DUMMY short
get TYPE short
if TYPE == 0
set BASE_OFF long 0x20000
else
set BASE_OFF long 0x10
endif
goto BASE_OFF
get SIGN long
endif
if SIGN == 0x00435241 # " CRA"
endian little
elif SIGN == 0x41524300 # "ARC "
endian big
else
cleanexit
endif
get VERSION short
if VERSION == 4
comtype unzip_dynamic #zlib
elif VERSION == 8
comtype unzip_dynamic #deflate
elif VERSION == 0x11
comtype XMemDecompress 0x8000 # yeah 0x8000 is the "magic" for RE5
else
comtype unzip_dynamic #zlib
print "unknown version %VERSION%, I try zlib compression"
endif
get FILES short
for i = 0 < FILES
getdstring NAME 0x40
get TYPE long
get ZSIZE long
get SIZE long
get OFFSET long
if SIZE & 0x40000000
math SIZE -= 0x40000000
endif
if HFS != 0 # used in RE5 PS3
math ZSIZE += 32
#math SIZE /= 8
math TMP = OFFSET
math TMP /= 0x20000
math TMP *= 0x10
math ZSIZE += TMP
math SIZE += TMP
math OFFSET += TMP
math OFFSET += 2
endif
math OFFSET += BASE_OFF # needed for HFS header
clog NAME OFFSET ZSIZE SIZE
next i
Then on files such as:
\model\hm\hmdb\hmdb
or
\model\om\om82f0\om82f0
or
\model\vs\vsb0\vsb0
(do you see the pattern?)
Use this script (which does not ask you for other files), it still makes some models have faces that turn invisible when rotating, and no uv's and some models convert better then others, but this is an early version of the script:
Code: Select all
log MEMORY_FILE 0 0 ;
log MEMORY_FILE2 0 0 ;
log MEMORY_FILE3 0 0 ;
log MEMORY_FILE4 0 0 ;
log MEMORY_FILE5 0 0 ;
log MEMORY_FILE6 0 0 ;
log MEMORY_FILE7 0 0 ;
Math faceinsubmesh = 0 ;
GoTo 0x8 0 ;
Get ent short 0 ;
GoTo 0x34 0 ;
Get basebase Long 0 ;
GoTo 0x38 0 ;
Get toface Long 0 ;
GoTo 0x30 0 ;
Get tolist Long 0 ;
GoTo tolist 0 ;
GoTo 12 0 SEEK_CUR ;
SavePos foxhound 0 ;
For jjj = 1 To ent ;
Math kkk = jjj ;
Math kkk -= 1 ;
GoTo foxhound 0 ;
Get testbyte Byte 0 ;
If testbyte = 0 ;
Put kkk long MEMORY_FILE ;
EndIF;
GoTo foxhound 0 ;
GoTo 48 0 SEEK_CUR ;
SavePos foxhound 0 ;
Next jjj ;
Put ent long MEMORY_FILE ;
Get SIZE ASIZE MEMORY_FILE ;
Math puma = SIZE ;
Math puma -= 4 ;
Math puma /= 4 ;
For hhh = 1 To puma ;
Math lion = hhh ;
Math lion -= 1 ;
Math lion *= 4 ;
Math mountainlion = lion ;
Math mountainlion += 4 ;
GoTo lion MEMORY_FILE ;
Get lower Long MEMORY_FILE ;
Math lowerbound = lower ;
Math lowerbound *= 48 ;
GoTo mountainlion MEMORY_FILE ;
Get upper Long MEMORY_FILE ;
Math upper -= 1 ;
Math upperbound = upper ;
Math upperbound *= 48 ;
GoTo tolist 0 ;
GoTo lowerbound 0 SEEK_CUR ;
SavePos wd 0 ;
GoTo 10 0 SEEK_CUR ;
Get foxnumber Byte 0 ;
GoTo wd 0 ;
GoTo 16 0 SEEK_CUR ;
Get vbase Long 0 ;
Math vbase += basebase ;
GoTo wd 0 ;
GoTo 24 0 SEEK_CUR ;
Get vertexmin Long 0 ;
GoTo tolist 0 ;
GoTo upperbound 0 SEEK_CUR ;
SavePos wd 0 ;
GoTo 24 0 SEEK_CUR ;
Get vertexmax Long 0 ;
Get vertexmax1 Long 0 ;
Math vertexmax += vertexmax1 ;
GoTo 10 0 SEEK_CUR ;
Get vvnumber Short 0 ;
Math vvnumber += 1 ;
Math ffbase = vertexmin ;
Math ffbase *= 2 ;
Math ffbase += toface ;
Math foxfox = vertexmax ;
Math foxfox -= vertexmin ;
Math foxfox *= 2 ;
Math foxfox /= 6 ;
Put foxnumber long MEMORY_FILE6 ;
Put vbase long MEMORY_FILE6 ;
Put vvnumber long MEMORY_FILE6 ;
Put ffbase long MEMORY_FILE6 ;
Put foxfox long MEMORY_FILE6 ;
Next hhh ;
Math zebra = 0 ;
Math cccount = 0 ;
For fff = 1 To puma ;
Math zebra2 = 0 ;
Math zebra3 = 0 ;
Math zebra4 = 0 ;
log MEMORY_FILE2 0 0 ;
log MEMORY_FILE3 0 0 ;
log MEMORY_FILE4 0 0 ;
log MEMORY_FILE5 0 0 ;
Math Qprime = 0 ;
Math Qprimeprime = 0 ;
GoTo zebra MEMORY_FILE6 ;
Get wolftype Long MEMORY_FILE6 ;
Get wolfvertexstart Long MEMORY_FILE6 ;
Get wolfvertexnumber Long MEMORY_FILE6 ;
Get wolffacestart Long MEMORY_FILE6 ;
Get wolffacenumber Long MEMORY_FILE6 ;
SavePos zebra MEMORY_FILE6 ;
Math wolfjump = wolftype ;
Math wolfjump -= 6 ;
GoTo wolfvertexstart 0 ;
SavePos goldgold 0 ;
For rfc = 1 To wolfvertexnumber ;
GoTo goldgold 0 ;
Get f1 Byte 0 ;
Get f2 Byte 0 ;
Get f3 Byte 0 ;
Get f4 Byte 0 ;
Get f5 Byte 0 ;
Get f6 Byte 0 ;
GoTo wolfjump 0 SEEK_CUR ;
SavePos goldgold 0 ;
GoTo zebra2 MEMORY_FILE5 ;
Put f1 Byte MEMORY_FILE5 ;
Put f2 Byte MEMORY_FILE5 ;
Put f3 Byte MEMORY_FILE5 ;
Put f4 Byte MEMORY_FILE5 ;
Put f5 Byte MEMORY_FILE5 ;
Put f6 Byte MEMORY_FILE5 ;
SavePos zebra2 MEMORY_FILE5 ;
Next rfc ;
GoTo wolffacestart 0 ;
SavePos goldgold 0 ;
For cfr = 1 To wolffacenumber ;
GoTo goldgold 0 ;
Get f1 Byte 0 ;
Get f2 Byte 0 ;
Get f3 Byte 0 ;
Get f4 Byte 0 ;
Get f5 Byte 0 ;
Get f6 Byte 0 ;
SavePos goldgold 0 ;
GoTo zebra3 MEMORY_FILE3 ;
Put f1 Byte MEMORY_FILE3 ;
Put f2 Byte MEMORY_FILE3 ;
Put f3 Byte MEMORY_FILE3 ;
Put f4 Byte MEMORY_FILE3 ;
Put f5 Byte MEMORY_FILE3 ;
Put f6 Byte MEMORY_FILE3 ;
Put 0 Byte MEMORY_FILE3 ;
Put 0 Byte MEMORY_FILE3 ;
SavePos zebra3 MEMORY_FILE3 ;
Next cfr ;
Get Z1 ASIZE MEMORY_FILE5 ;
Math Z1 /= 2 ;
Math Q1 = 0 ;
Math QQ1 = 0 ;
For T1 = 0 < Z1 ;
GoTo QQ1 MEMORY_FILE5 ;
Get first Byte MEMORY_FILE5 ;
Get second Byte MEMORY_FILE5 ;
SavePos QQ1 MEMORY_FILE5 ;
If second > 127 ;
Math second -= 256 ;
Endif ;
Math nb = second ;
Math nb *= 256 ;
Math nb += first ;
GoTo Q1 MEMORY_FILE2 ;
Put nb float MEMORY_FILE2 ;
SavePos Q1 MEMORY_FILE2 ;
Next T1;
Math Qprime = 0 ;
Math Qprimeprime = 0 ;
Get Zw3 ASIZE MEMORY_FILE3 ;
Math Zf3 = Zw3 ;
Math Zf3 /= 8 ;
Get Zw2 ASIZE MEMORY_FILE2 ;
Math Zf2 = Zw2 ;
Math Zf2 /= 12 ;
Math FaceNumber = Zf3 ;
Math VertexNumber = Zf2 ;
Math Snake = VertexNumber ;
Math Snake *= 12 ;
Math Dragon = FaceNumber ;
Math Dragon *= 8 ;
Math Sum = Dragon ;
Math Sum += Snake ;
Math SumSum = Sum ;
Math SumSum += 60 ;
Math QQQ = 60 ;
Math QQQ += Snake ;
Math QQ = 52 ;
Math qaz = 0 ;
Math wsx = 0 ;
For qvertex = 0 < SumSum ;
Put 0 Byte MEMORY_FILE4 ;
Next qvertex ;
For Vertex = 0 < Zw2 ;
GoTo qaz MEMORY_FILE2 ;
Get D byte MEMORY_FILE2 ;
SavePos qaz MEMORY_FILE2 ;
GoTo QQ MEMORY_FILE4 ;
Put D Byte MEMORY_FILE4 ;
SavePos QQ MEMORY_FILE4 ;
Next Vertex ;
For Face = 0 < Zw3 ;
GoTo wsx MEMORY_FILE3 ;
Get D byte MEMORY_FILE3 ;
SavePos wsx MEMORY_FILE3 ;
GoTo QQQ MEMORY_FILE4 ;
Put D Byte MEMORY_FILE4 ;
SavePos QQQ MEMORY_FILE4 ;
Next Face ;
GoTo 0 MEMORY_FILE4 ;
set M Byte 0x4D ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x4D ;
Put M Byte MEMORY_FILE4 ;
Math M = Sum ;
Math M += 60 ;
Put M Long MEMORY_FILE4 ;
set M Byte 0x02 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x0A ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x03 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x3D ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x3D ;
Put M Byte MEMORY_FILE4 ;
Math M = Sum
Math M += 44 ;
Put M Long MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x40 ;
Put M Byte MEMORY_FILE4 ;
Math M = Sum
Math M += 38 ;
Put M Long MEMORY_FILE4 ;
set M Byte 0x64 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x72 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x61 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x67 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x6F ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x6E ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x6A ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x61 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x6E ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x00 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x41 ;
Put M Byte MEMORY_FILE4 ;
Math M = Sum
Math M += 22 ;
Put M Long MEMORY_FILE4 ;
Set M Byte 0x10 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x41 ;
Put M Byte MEMORY_FILE4 ;
Math M = Snake ;
Math M += 8 ;
Put M Long MEMORY_FILE4 ;
Math M = VertexNumber ;
Put M Short MEMORY_FILE4 ;
Math JumpJump = Snake ;
Math JumpJump += 52 ;
GoTo JumpJump MEMORY_FILE4 ;
set M Byte 0x20 ;
Put M Byte MEMORY_FILE4 ;
set M Byte 0x41 ;
Put M Byte MEMORY_FILE4 ;
Math M = FaceNumber ;
Math M *= 8 ;
Math M += 8 ;
Put M Long MEMORY_FILE4 ;
Math M = FaceNumber ;
Put M Short MEMORY_FILE4 ;
Get SIZE4m ASIZE MEMORY_FILE4 ;
Math cccount += 1 ;
string cccount += .3ds ;
Log cccount 0 SIZE4m MEMORY_FILE4 ;
Next fff ;
Re: Lost Planet 2 - arc extract to .mod and .tex
Posted: Thu Sep 20, 2012 4:05 am
by dragbody
Thank you FurryFan! It works just like you said. I look forward to a later version of the script that will get UVs as well. In the mean time, I appreciate all your work on this.