Re: PS3 - Metal Gear Rising Revengeance - WMB format
Posted: Wed Mar 13, 2013 8:14 am
How i can extract iso from xbox 360? What program?
Game Research Forum
https://forum.xentax.com/
Very nice answer, but i cant extract new isos XDG3.howfie wrote:google xbox iso extractor
Ok...very thanks... i did find now...howfie wrote:i just googled those exact terms. first link on google, works for me.
Mario's Script extracts some xpr. Just use chrrox xpr script for noesis and you're done.logansan25 wrote:How i can take textures from xbox360?
Where are this script?Darko wrote:Mario's Script extracts some xpr. Just use chrrox xpr script for noesis and you're done.logansan25 wrote:How i can take textures from xbox360?
Here:logansan25 wrote:Where are this script?Darko wrote:Mario's Script extracts some xpr. Just use chrrox xpr script for noesis and you're done.logansan25 wrote:How i can take textures from xbox360?
Yep.RunaWhite wrote:So, if I understand well, the script mariokart posted works with 360 files, right?
Lol... very thanks...Darko wrote:Yep.RunaWhite wrote:So, if I understand well, the script mariokart posted works with 360 files, right?

Code: Select all
fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\wp\\wp01a0.dat"
fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\em\\em0044.dat"
fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\pl3005.dat"
fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\em\\em0100.dat"
fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\em\\em0110.dat"
-- fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\wp\\wp0040.dat"
fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\em\\em0110.dat"
-- fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\em\\em0110.dtt"
fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\Mistral\\tx\\em0110.dat"
fsource = "D:\\_3DMODELS\\Ripped\\Metal Gear Rising Revengeance\\data000\\ps3\\em014a.dat"
fsource = GetOpenFileName \
caption:"Select a File" \
types: "All files (*.*)|*.dat|"
delete $*
tristrip = false
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 writeBElong fstream num = (
writelong fstream (bit.swapBytes (bit.swapBytes (num) 1 4) 2 3) #unsigned)
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))
)
fn writeDDSheader fstream texW texH texM texC = (
texP=0
writelong fstream 0x20534444 #unsigned -- File ID
writelong fstream 0x7C #unsigned -- Header Size
case of( -- dwFlags
(texC==#DXT1): (writelong fstream 0x00081007 #unsigned;texP=((texW*texH)/0x02))
(texC==#DXT3): (writelong fstream 0x00081007 #unsigned;texP=(texW*texH))
(texC==#DXT5): (writelong fstream 0x00081007 #unsigned;texP=(texW*texH))
(texC==#ATI1): (writelong fstream 0x000A1007 #unsigned;texP=((texW*texH)/0x20))
(texC==#ATI2): (writelong fstream 0x000A1007 #unsigned;texP=(texW*texH))
(texC==#P8): (writelong fstream 0x000A1007 #unsigned;texP=((texW*texH)/0x02))
(texC==#ARGB16): (writelong fstream 0x00081007 #unsigned;texP=(((texW*texH)/0x8)*0x10))
(texC==#ARBG32): (writelong fstream 0x00081007 #unsigned;texP=(((texW*texH)/0x4)*0x10)))
writelong fstream texW #unsigned -- Texture Width
writelong fstream texH #unsigned -- Texture Height
writelong fstream texP #unsigned -- Pitch (#of bytes in a single row across the texture)
writelong fstream 0x00 #unsigned -- Image Depth? Not Used, for Image Volume
writelong fstream texM #unsigned -- Texture MIP Count
for i = 1 to 11 do writelong fstream 0x00 #unsigned -- Reserved Space
writelong fstream 0x20 #unsigned -- Size of PIXEL_FORMAT info, always 32bytes;
case of(
(texC==#DXT1): (writelong fstream 0x04;writelong fstream 0x31545844 #unsigned
writelong s 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte s 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte s 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte s 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte s 0x00;writelong fstream 0x00001000 #unsigned)
(texC==#DXT3): (writelong fstream 0x04;writelong fstream 0x33545844 #unsigned
writelong s 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte s 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte s 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte s 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writelong fstream 0x00001000 #unsigned)
(texC==#DXT5): (writelong fstream 0x04;writelong fstream 0x35545844 #unsigned
writelong fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writelong fstream 0x00001000 #unsigned)
(texC==#ATI1): (writelong fstream 0x04;writelong fstream 0x31495441 #unsigned
writelong fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writelong fstream 0x00401008 #unsigned)
(texC==#ATI2): (writelong fstream 0x04;writelong fstream 0x32495441 #unsigned
writelong fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writelong fstream 0x00401008 #unsigned)
(texC==#P8): (writelong fstream 0x20;writelong fstream 0x20203850 #unsigned
writelong fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writelong fstream 0x00401008 #unsigned)
(texC==#ARGB16): (writelong fstream 0x41;writelong fstream 0x00000000 #unsigned
writelong fstream 0x10;writebyte fstream 0x00;writebyte fstream 0x0F;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0xF0;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x0F;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0xF0;writebyte fstream 0x00
writebyte fstream 0x00;writelong fstream 0x00001000 #unsigned)
(texC==#ARBG32): (writelong fstream 0x41;writelong fstream 0x00000000 #unsigned
writelong fstream 0x20;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0xFF
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0xFF;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0xFF;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00;writebyte fstream 0x00
writebyte fstream 0xFF;writelong fstream 0x00001000 #unsigned))
for i = 1 to 4 do writelong fstream 0x00 #unsigned -- Reserved Space for CAPS
)
fn Get_D3DFORMAT id = (
case id of ( -- replaced a few from offical ones, for backwards compatiblity
0x86: #DXT1
-- 0x53: #DXT3 -- DXT2
-- 0x7A: #DXT3A
-- 0x7D: #DXT3A_1111
0x88: #DXT5
-- 0x7B: #DXT5A
-- 0x71: #ATI2 -- DXN
-- 0x7C: #ATI1 -- CTX1
-- 0x02: #L8
-- 0x44: #R5G6B5
-- 0x45: #R6G5B5
-- 0x43: #X1R5G5B5
-- 0x4F: #A4R4G4B4
-- 0x4F: #X4R4G4B4
-- 0x4A: #A8L8
-- 0x58: #D16
-- 0x5E: #R16F
-- 0x5B: #R16F_EXPAND
-- 0x4C: #UYVY
-- 0x0C: #LE_UYVY
-- 0x4C: #G8R8_G8B8
-- 0x4B: #R8G8_B8G8
-- 0x4B: #YUY2
-- 0x0B: #LE_YUY2
-- 0x86: #A8R8G8B8
-- 0xB6: #A2R10G10B10
-- 0x99: #A16L16
-- 0xB7: #R10G11B11
-- 0xB8: #R11G11B10
-- 0xB7: #W10V11U11
-- 0xB8: #W11V11U10
-- 0x9F: #G16R16F
-- 0x9C: #G16R16F_EXPAND
-- 0xA1: #L32
-- 0xA4: #R32F
-- 0x96: #D24S8
-- 0x97: #D24FS8
-- 0xA1: #D32
-- 0x5A: #A16B16G16R16
-- 0x60: #A16B16G16R16F
-- 0x5D: #A16B16G16R16F_EXPAND
-- 0xA2: #A32L32
-- 0xA5: #G32R32F
-- 0xA3: #A32B32G32R32
-- 0xA6: #A32B32G32R32F
-- 0xBF: #A2B10G10R10F_EDRAM
-- 0x55: #A16B16G16R16_EDRAM
-- 0x06: #LE_X8R8G8B8
-- 0x36: #LE_X2R10G10B10
-- 0x01: #INDEX16
-- 0x06: #INDEX32
-- 0x00: #LE_INDEX16
-- 0x04: #LE_INDEX32
-- 0x08: #VERTEXDATA
-- 0xFF: #UNKNOWN
default: #UNKNOWN
)
)
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,data)
struct model_binary_4 (header,buffer,element,skeleton,ukn10,ukn11,material,ukn12,mesh)
struct model_binary_4_header (magic,ukn01,ukn02,ukn03,ukn04,ukn05,info,ukn06,ukn07,ukn08,ukn09)
struct offset_and_count (offset,count)
datArray = (package_resource \
offset:#() \
type:#() \
name:#() \
size:#() \
data:#())
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 i = 1 to dat_01 do (datArray.data[i] = #())
for d = 1 to dat_01 do (
fseek f datArray.offset[d] #seek_set
case datArray.type[d] of (
"WTA":(
ukn00 = readBElong f -- changes based on platform
ukn01 = readBElong f -- version?
ukn02 = readBElong f -- count
ukn03 = (readBElong f)+datArray.offset[d] -- offset to texture offsets
ukn04 = (readBElong f)+datArray.offset[d] -- offset to texture sizes
ukn05 = (readBElong f)+datArray.offset[d] -- offset to flag data?
ukn06 = (readBElong f)+datArray.offset[d] -- offset to file hashes?
ukn07 = (readBElong f)+datArray.offset[d] -- offset to XPR2 headers
for i = 1 to ukn02 do (
ssource = (fpath+fname+".dtt")
if ((doesFileExist ssource)==true) then (
g = fopen ssource "rb"
s = fopen (fpath+fname+(paddstring 3 (i as string))+".dds") "wb"
fseek f (ukn03+((i-1)*4)) #seek_set;pos = readBElong f
fseek f (ukn04+((i-1)*4)) #seek_set;dumpsize = readBElong f
fseek g (pos+0x1000) #seek_set
-- Configuration of the GTF File Header
-- A GTF file header has the following basic structure.
-- typedef struct {
-- uint32_t Version;
-- uint32_t Size;
-- uint32_t NumTexture;
-- } CellGtfFileHeader;
-- Field Type Description
-- Version uint32_t Version information of the GTF format
-- Size uint32_t Total byte size of textures in file (Does not include sizes of file header and texture attributes)
-- NumTexture uint32_t Number of textures in file
-- Configuration of the GTF Texture Attribute
-- A GTF texture attribute has the following structure.
-- typedef struct {
-- uint32_t Id;
-- uint32_t OffsetToTex;
-- uint32_t TextureSize;
-- CellGcmTexture tex;
-- } CellGtfTextureAttribute;
-- Field Type Description
-- Id uint32_t Identification ID
-- Must be unique within the file
-- OffsetToTex uint32_t Offset from the beginning of the file to the corresponding texture (bytes)
-- TextureSize uint32_t Size of corresponding texture (bytes)
-- tex CellGcmTexture Texture structure defined in libgcm
-- The CellGcmTexturestructure used in texof the 4th field has exactly the same specifications as the CellGcmTexturestructure defined in libgcm.
-- This CellGcmTexturestructure, as of this SDK release, has the following configuration.
-- typedef struct {
-- uint8_t format;
-- uint8_t mipmap;
-- uint8_t dimension;
-- uint8_t cubemap;
-- uint32_t remap;
-- uint16_t width;
-- uint16_t height;
-- uint16_t depth;
-- uint8_t location;
-- uint8_t _padding;
-- uint32_t pitch;
-- uint32_t offset;
-- } CellGcmTexture;
struct gft_header (
magic, -- "0x02010100" Version, possibly a fourcc
streamsize,
num_textures, -- forced to 1? :-P
ukn02, -- always 0?
stream_offset,
ukn03, -- offsets to end of stream?
d3d_format, -- fourCC, probably describes d3d compression
ukn04, --offset?
height,
width,
depth,
ukn05, -- always 0?
null -- reserved space
)
gftArray = (gft_header \
magic:(readBElong g) \
streamsize:(readBElong g) \
num_textures:(readBElong g) \
ukn02:(readBElong g) \
stream_offset:(readBElong g) \
ukn03:(readBElong g) \
d3d_format:([(readbyte g #unsigned),(readbyte g #unsigned),(readbyte g #unsigned),(readbyte g #unsigned)]) \
ukn04:(readBElong g) \ --remap?
height:(readBEshort g) \
width:(readBEshort g) \
depth:(readBEshort g) \
ukn05:(readBEshort g) \
null:#() \
);fseek g 88 #seek_cur
format "%: (% x %) \tFormat:%\n" (paddstring 3 i) (paddstring 4 gftArray.width) (paddstring 4 gftArray.height) gftArray.d3d_format
writeDDSheader s gftArray.width gftArray.height 1 (Get_D3DFORMAT gftArray.d3d_format[1])
for x = 1 to dumpsize do (writebyte s (readbyte g #unsigned) #unsigned)
fclose s
fclose g
)else(messagebox "failed to find relating dtt file")
)
)
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.")