The Original Forum. Game archives, full of resources. How to open them? Get help here.
-
chrrox
- Moderator
- Posts: 2569
- Joined: Sun May 18, 2008 3:01 pm
- Has thanked: 57 times
- Been thanked: 1323 times
Post
by chrrox » Wed Nov 24, 2010 7:39 pm
Here is a bms script to extract these archives.
Code: Select all
#quickbms script
#Siren PS3
#from chrrox
endian big
open FDDE DAT 0
open FDDE HED 1
get id long 1
get Unk01 long 1
get Unk02 long 1
get Unk03 long 1
get NameBase long 1
get TableBase long 1
get Unk06 long 1
get files long 1
for i = 0 < files
goto TableBase 1
get Nameoff long 1
get offset long 1
get zsize long 1
get size long 1
savepos TableBase 1
math Nameoff + NameBase
goto Nameoff 1
get name string 1
log name offset zsize
next i
-
mariokart64n
- ultra-veteran

- Posts: 546
- Joined: Sun Jun 05, 2005 12:00 pm
- Location: Ontario, Canada
- Has thanked: 31 times
- Been thanked: 183 times
Post
by mariokart64n » Wed Nov 24, 2010 10:32 pm
yay thanks man ^,^
Maxscript and other finished work I've done can be found on my
DeviantArt account
-
GamerSuper
- advanced
- Posts: 42
- Joined: Thu Sep 09, 2010 12:36 pm
- Been thanked: 1 time
Post
by GamerSuper » Mon Jan 17, 2011 2:32 pm
and how to pack it back?
i want to translate this game into Russian
-
mariokart64n
- ultra-veteran

- Posts: 546
- Joined: Sun Jun 05, 2005 12:00 pm
- Location: Ontario, Canada
- Has thanked: 31 times
- Been thanked: 183 times
Post
by mariokart64n » Sun Feb 20, 2011 11:39 am
tried my hand in the model extraction, but the UVs don't work

sigh!
the UVs seem to require some divisior to scale them properly. I used 10000000000000 but they're stretched to hell. lol go figure

maybe I'm reading them wrong?
miy_h_298.rsx
Miy_h_001_Eye_00.dds 256x128 DXT1
Miy_h_001_Eye_00_r.dds 128x128 DXT1
Miy_h_001_Eye_00_sp.dds 128x64 DXT1
Miy_h_011_Hair_00.dds 512x512 DXT5
Miy_h_011_Hair_00_sp.dds 256x256 DXT1
Miy_h_011_Hairfront_00.dds 512x128 DXT5
Miy_h_011_Hairplus_00.dds 256x256 DXT5
Miy_h_011_matsuge_00.dds 256x256 DXT5
Miy_h_046_All_00.dds 1024x1024 DXT1
Miy_h_046_All_00_n.dds 512x512 DXT5
Miy_h_280_blood.dds 128x128 DXT5
Miy_h_280_blood_n.dds 128x128 DXT5
maxscript:
Code: Select all
fsource = GetOpenFileName \
caption:"[PS3] BloodCurse" \
types: "ReSourceX(*.rsx)|*.rsx|All files (*.*)|*.*|"
if (fsource!=undefined) AND ((doesFileExist fsource)==true) then(
f = fopen fsource "rb"
fext= getFilenameType fsource
fpath= getFilenamePath fsource
fbatch= getFiles (fpath+"*"+fext)
fname= getFilenameFile fsource
fsize= getFileSize fsource
st = timestamp() --get start time in milliseconds
clearlistener()
openLog (fpath+fname+"_log.txt") mode:"w" outputOnly:true
print (localTime+"\n"+fname+fext+"\n")
--===========================================================================
undo off(
fn readBEshort fstream = (
short = readshort fstream #unsigned
short = bit.swapBytes short 2 1
return short
)
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 ReadFixedString bstream fixedLen = (
local str = ""
for i = 1 to fixedLen do
(
str += bit.intAsChar (ReadByte bstream #unsigned)
)
str
)
--===========================================================================
with redraw off (
offsetArray=#()
offsetArray2=#()
while (ftell f) != fsize do (
if keyboard.escPressed then exit
byte1 = readshort f
if (byte1==512) do(
byte2 = readshort f
if (byte2==512) then(
byte3 = readshort f
if (byte3==0) then(
byte4 = readshort f
if (byte4==0) then(
fseek f 28 #seek_cur
byte5 = readlong f
if (byte5==-1) then(
fseek f 4 #seek_cur
byte6 = readlong f
if (byte6==-1) then(
append offsetArray ((ftell f)-48)
)else(fseek f -40 #seek_cur)
)else(fseek f -32 #seek_cur)
)else(fseek f -6 #seek_cur)
)else(fseek f -4 #seek_cur)
)else(fseek f -2 #seek_cur)
)
if (byte1==256) do(
byte2 = readshort f
if (byte2==256) then(
byte3 = readshort f
if (byte3==0) then(
byte4 = readshort f
if (byte4==0) then(
fseek f 28 #seek_cur
byte5 = readlong f
if (byte5==-1) then(
-- append offsetArray ((ftell f)-40)
)else(fseek f -32 #seek_cur)
)else(fseek f -6 #seek_cur)
)else(fseek f -4 #seek_cur)
)else(fseek f -2 #seek_cur)
)
)
for m = 1 to offsetArray.count do(
vertsArray=#()
facesArray=#()
uvsArray=#()
fseek f offsetArray[m] #seek_set
Print ("Sub Mesh "+(m as string)+": @ 0x"+((bit.intAsHex(ftell f))as string))
subMeshID=readBEshort f -- ?? 02 02?? 2 NEW MESH HEADER! >BALLS
subMeshCount=readBEshort f-1 -- ??? UV Count
print subMeshID
print "f"
print subMeshCount
ukn=readBElong f -- pad??
ukn=readBElong f -- offsets to another offset that offsets to the vert start
faceOffset=readBElong f -- offsets to face header ? can also get count here ?maybe is apart of vert header
faceOffset2=readBElong f -- real face header?
ukn=readBElong f -- offsets to table aftet verts
ukn=readBElong f -- offsets to table aftet verts
ukn=readBElong f -- pad??
vertOffset=readBElong f -- Offsets to Vertex Section
ukn=readBElong f -- FF??
tvertOffset=0
for x = 1 to subMeshCount do(
tvertOffset=readBElong f -- Offset to UV section
ukn=readBElong f -- FF??
)
fseek f faceOffset #seek_set
tvertcount=readBEshort f
if subMeshCount==1 then(
fseek f tvertOffset #seek_set
for uv = 1 to tvertcount do(
tu=((readBElong f/10000000.0)-100)*0.15
tv=((readBElong f/10000000.0)-100)*0.15
append uvsArray[tu,tv,0]
))else(
tvertOffset=faceOffset
for x = 1 to tvertcount do(
append uvsArray[0,0,0]
)
)
vertcount=((tvertOffset-vertOffset))/tvertcount
if vertcount!=24 AND vertcount!=40 do(
--Print ("..............................................................................................................................................ERROR!! @ 0x"+((bit.intAsHex(vertOffset))as string))
vx=0
vy=0
vz=0
tvertcount+=1
vertcount=((tvertOffset-vertOffset)/tvertcount)
tu=readBElong f
tv=readBElong f
append uvsArray[tu,tv,0]
)
if vertcount!=24 AND vertcount!=40 do(
Print ("..............................................................................................................................................ERROR!! @ 0x"+((bit.intAsHex(vertOffset))as string))
)
print "test"
print vertcount
print tvertcount
fseek f vertOffset #seek_set
Print ("Vert Data @ 0x"+((bit.intAsHex(ftell f))as string))
for x = 1 to tvertcount do(
if vertcount==24 do(
vx=readBEfloat f*39.34
vy=readBEfloat f*39.34
vz=readBEfloat f*-39.34
nx=readBEfloat f
ny=readBEfloat f
nz=readBEfloat f
)
if vertcount==40 do(
vx=readBEfloat f*39.34
vy=readBEfloat f*39.34
vz=readBEfloat f*-39.34
nx=readBEfloat f
ny=readBEfloat f
nz=readBEfloat f
tu=readBElong f
tv=readBElong f
uknZ3=readBEfloat f
uknX4=readBEfloat f
)
if vertcount==48 do(
vx=readBEfloat f*39.34
vy=readBEfloat f*39.34
vz=readBEfloat f*-39.34
nx=readBEfloat f
ny=readBEfloat f
nz=readBEfloat f
tu=readBElong f
tv=readBElong f
uknZ3=readBEfloat f
uknX4=readBEfloat f
uknZ3=readBEfloat f
uknX4=readBEfloat f
)
append vertsArray[vx,vz,vy]
-- append uvsArray[tu,tv,0]
)
-- Print ("END Vert Data @ 0x"+((bit.intAsHex(ftell f))as string))
fseek f faceOffset2 #seek_set
Print ("Faces @ 0x"+((bit.intAsHex(ftell f))as string))
faceCountArray=#()
do(
if keyboard.escPressed then exit
faceCount=readBEshort f
pad=readBEshort f --?
faceOffset=readBElong f
ukn=readBElong f;print ukn
if ukn==-1 do(
append faceCountArray [faceCount,faceOffset]
)
)while ukn==-1
print "fuk"
print faceCountArray.count
faceCount=faceCountArray.count
faceCount=1 -- new faces cause bad faces?
for x = 1 to faceCount do(
fseek f faceCountArray[x][2] #seek_set
for x = 1 to faceCountArray[x][1] do(
fa=readBEshort f+1
fb=readBEshort f+1
fc=readBEshort f+1
append facesArray[fa,fb,fc]
)
)
msh = mesh vertices:vertsArray faces:facesArray --build mesh
msh.numTVerts = uvsArray.count
buildTVFaces msh
for j = 1 to uvsArray.count do setTVert msh j uvsArray[j]
for j = 1 to facesArray.count do setTVFace msh j facesArray[j]
-- for j = 1 to Normal_array.count do setNormal msh j Normal_array[j]
) -- ends sub mesh read
Print ("Done ! @ 0x"+((bit.intAsHex(ftell f))as string))
gc()
fclose f
flushLog()
closeLog()
enableSceneRedraw()
Print ("Done! ("+((((timestamp())-st)/60)as string)+" Seconds)") --print time to finish
))) else (Print "Aborted.")
Maxscript and other finished work I've done can be found on my
DeviantArt account
-
epopoe
- advanced
- Posts: 56
- Joined: Thu Feb 11, 2010 2:22 am
- Has thanked: 6 times
- Been thanked: 4 times
Post
by epopoe » Sun Mar 06, 2011 3:14 pm
chrrox wrote:Here is a bms script to extract these archives.
Code: Select all
#quickbms script
#Siren PS3
#from chrrox
endian big
open FDDE DAT 0
open FDDE HED 1
get id long 1
get Unk01 long 1
get Unk02 long 1
get Unk03 long 1
get NameBase long 1
get TableBase long 1
get Unk06 long 1
get files long 1
for i = 0 < files
goto TableBase 1
get Nameoff long 1
get offset long 1
get zsize long 1
get size long 1
savepos TableBase 1
math Nameoff + NameBase
goto Nameoff 1
get name string 1
log name offset zsize
next i
How can i use it
I try to common.dat, common.hed file
but quickbms got error - 1403: myfopen()
ps : i have Siren_New_Translation_JPN version
-
epopoe
- advanced
- Posts: 56
- Joined: Thu Feb 11, 2010 2:22 am
- Has thanked: 6 times
- Been thanked: 4 times
Post
by epopoe » Thu Mar 10, 2011 1:42 am
add my screenshot
help me
You do not have the required permissions to view the files attached to this post.
-
epopoe
- advanced
- Posts: 56
- Joined: Thu Feb 11, 2010 2:22 am
- Has thanked: 6 times
- Been thanked: 4 times
Post
by epopoe » Thu Mar 10, 2011 1:47 am
pic2
You do not have the required permissions to view the files attached to this post.
-
GamerSuper
- advanced
- Posts: 42
- Joined: Thu Sep 09, 2010 12:36 pm
- Been thanked: 1 time
Post
by GamerSuper » Mon Mar 14, 2011 4:19 pm
any1 tried to translate this game? where subtitles are located? i mean text. haven't found them in graphic format.
and how to pack archives back?
-
epopoe
- advanced
- Posts: 56
- Joined: Thu Feb 11, 2010 2:22 am
- Has thanked: 6 times
- Been thanked: 4 times
Post
by epopoe » Tue Mar 15, 2011 6:29 am
Ok, Now I solved this problem. lol
-
chrrox
- Moderator
- Posts: 2569
- Joined: Sun May 18, 2008 3:01 pm
- Has thanked: 57 times
- Been thanked: 1323 times
Post
by chrrox » Sat Apr 09, 2011 9:02 pm
here is a texture converter for rsx files.
Code: Select all
endian big
goto 0x10
get textable long
goto textable
get files long
get start long
for i = 1 to files
set MEMORY_FILE binary "\x44\x44\x53\x20\x7C\x00\x00\x00\x07\x10\x0A\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x05\x00\x00\x00\x44\x58\x54\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x10\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
endian big
goto start
get offset long
get mips short
print "%mips%"
get type byte
print "%type%"
#86 = dxt1
#87 = dxt3
#88 = dxt5
get unk byte
getdstring null 0x10
get height short
get width short
getdstring null 0x10
savepos start
get size long
if i == files
get size asize
endif
math size - offset
endian little
putVarChr MEMORY_FILE 0x1C mips short
putVarChr MEMORY_FILE 0xC width short
putVarChr MEMORY_FILE 0x10 height short
if type == 134
putVarChr MEMORY_FILE 0x57 0x31 byte
putVarChr MEMORY_FILE 0x16 0x08 byte
endif
if type == 135
putVarChr MEMORY_FILE 0x57 0x33 byte
endif
if type == 136
putVarChr MEMORY_FILE 0x57 0x35 byte
putVarChr MEMORY_FILE 0x16 0x10 byte
endif
if type == 133
putVarChr MEMORY_FILE 0x50 0x41 long
putVarChr MEMORY_FILE 0x54 0x00 byte
putVarChr MEMORY_FILE 0x55 0x00 byte
putVarChr MEMORY_FILE 0x56 0x00 byte
putVarChr MEMORY_FILE 0x57 0x00 byte
putVarChr MEMORY_FILE 0x58 0x20 long
putVarChr MEMORY_FILE 0x5E 0xFF Short
putVarChr MEMORY_FILE 0x61 0xFF Short
putVarChr MEMORY_FILE 0x64 0xFF Short
putVarChr MEMORY_FILE 0x6B 0xFF Short
endif
get name basename
string name + _
string name + i
string name + .dds
print "%offset%"
append
log MEMORY_FILE offset size
append
math size + 0x80
log name 0 SIZE MEMORY_FILE
next i
-
epopoe
- advanced
- Posts: 56
- Joined: Thu Feb 11, 2010 2:22 am
- Has thanked: 6 times
- Been thanked: 4 times
Post
by epopoe » Sun Apr 10, 2011 4:51 pm
Oh, holy shit
I don't know how to thanks chrrox!!
-
AndylgRu
- beginner
- Posts: 26
- Joined: Wed Jul 29, 2009 2:15 pm
- Location: Russia
- Has thanked: 1 time
Post
by AndylgRu » Fri Apr 22, 2011 8:00 am
Anyone found where the subtitles (dss or where?)?
-
GamerSuper
- advanced
- Posts: 42
- Joined: Thu Sep 09, 2010 12:36 pm
- Been thanked: 1 time
Post
by GamerSuper » Wed Apr 27, 2011 8:12 am
AndylgRu wrote:Anyone found where the subtitles (dss or where?)?
no

-
timartinelli
- mega-veteran

- Posts: 178
- Joined: Thu Sep 30, 2010 9:52 am
- Has thanked: 19 times
-
Contact:
Post
by timartinelli » Wed Apr 27, 2011 12:41 pm
it extracts text files, for a translation??
if Yes, I will translate for my language.