Editing PlayStation archive (PSARC)
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 8: | Line 8: | ||
The compression algorithms, the PS3 system, and the .psarc format, allows for 9 compression levels but in the practise only are used level 0 (no compression) or 9 (max compression used as the default compression level) | |||
Compression level 9 for generic file types results as a compression ratio of around 50% of the original size, the final compression ratio can vary for different types of files, usually multimedia files (video, audio, etc) doesnt admits much compression because are already compressed originally (as example, max compression ratio for .BIK video and .MP3 audio doesnt reachs 1% or 2%). For this reason is better to dont compress multimedia files because the size reduction is ridiculous and read access times can be reduced (causing a delay/lag/freeze when trying to load the file) | |||
Very small files (smaller than 100 bytes or so) as well as dummy files (0 bytes) doesnt admits compression because are so small that the compression algorithm is not able to reduce them, they will be stored without compression inside the .psarc archive even when is applyed compression over them. When listing the contents of a .psarc with this kind of files will be displayed with a percentage of 100% and both his compressed and decompressed sizes the same value | |||
Very small files (smaller than 100 bytes or so) as well as dummy files (0 bytes) | |||
<small> | <small> | ||
Line 20: | Line 19: | ||
=Structure= | =Structure= | ||
See | See {{Talk}} page | ||
==Header== | ==Header== | ||
PSARC header example: | PSARC header example: | ||
Line 37: | Line 35: | ||
| style="background-color:#66ff66;" | 0x04 || style="background-color:#66ff66;" | 0x04 || '''version''' || 00 01 00 04 || v1.4 || First 2 bytes is the '''major version''', next 2 bytes is the '''minor version''' | | style="background-color:#66ff66;" | 0x04 || style="background-color:#66ff66;" | 0x04 || '''version''' || 00 01 00 04 || v1.4 || First 2 bytes is the '''major version''', next 2 bytes is the '''minor version''' | ||
|- | |- | ||
| style="background-color:#ffff66;" | 0x08 || style="background-color:#ffff66;" | 0x04 || ''' | | style="background-color:#ffff66;" | 0x08 || style="background-color:#ffff66;" | 0x04 || '''compression type''' || 7A 6C 69 62 || zlib || '''zlib''' (default)<br>'''lzma''' | ||
|- | |- | ||
| style="background-color:#6666ff;" | 0x0C || style="background-color:#6666ff;" | 0x04 || ''' | | style="background-color:#6666ff;" | 0x0C || style="background-color:#6666ff;" | 0x04 || '''toc length''' || 00 01 23 BA || 0x123BA || | ||
|- | |- | ||
| style="background-color:#dd00dd;" | 0x10 || style="background-color:#dd00dd;" | 0x04 || ''' | | style="background-color:#dd00dd;" | 0x10 || style="background-color:#dd00dd;" | 0x04 || '''toc entry size''' || 00 00 00 1E || 30 Bytes || Default is 30 bytes | ||
|- | |- | ||
| style="background-color:#dddd00;" | 0x14 || style="background-color:#dddd00;" | 0x04 || ''' | | style="background-color:#dddd00;" | 0x14 || style="background-color:#dddd00;" | 0x04 || '''toc entries''' || 00 00 09 16 || 1 manifest + 2325 files || The '''manifest''' is always included as the first file in the archive without an assigned ID | ||
|- | |- | ||
| style="background-color:#dddddd;" | 0x18 || style="background-color:#dddddd;" | 0x04 || ''' | | style="background-color:#dddddd;" | 0x18 || style="background-color:#dddddd;" | 0x04 || '''block size''' || 00 01 00 00 || 65536 Bytes || Default is 65536 bytes | ||
|- | |- | ||
| style="background-color:#d0000d;" | 0x1C || style="background-color:#d0000d;" | 0x04 || ''' | | style="background-color:#d0000d;" | 0x1C || style="background-color:#d0000d;" | 0x04 || '''archive flags''' || 00 00 00 02 || Absolute paths || 0 = '''relative''' paths (default)<br>1 = '''ignorecase''' paths<br>2 = '''absolute''' paths | ||
|} | |} | ||
*'''Relative''' (default, no flags) | *'''Relative''' (default, no flags) | ||
**Default value when the .psarc is created from command line or an .xml and no special access paths modes are | **Default value when the .psarc is created from command line or an .xml and no special access paths modes are specifyed | ||
**The paths in the '''manifest''' | **The paths in the '''manifest''' doesnt have an slash character at the start of every line, the system accesses the files exactly like if the .psarc was a folder itself | ||
**e.g: '''Folder/File.bin"''' | **e.g: '''Folder/File.bin"''' | ||
**In the games that uses .psarc's without flags (like ''uncharted'' series or ''the last of us'') is | **In the games that uses .psarc's without flags (like ''uncharted'' series or ''the last of us'') is posible to replace the psarc by a folder with the same name of the psarc and his contents decompressed inside | ||
*'''Ignorecase''' flag | *'''Ignorecase''' flag | ||
Line 66: | Line 64: | ||
==TOC Table== | ==TOC Table== | ||
==Blocks info table== | ==Blocks info table== | ||
==File table== | ==File table== | ||
The compression is | The compression is applyed "per-block", is posible to know the compression level by looking at the zlib header | ||
===Manifest=== | ===Manifest=== | ||
Manifest is the first file inside the psarc filetable, | Manifest is the first file inside the psarc filetable, doesnt appears as a file when using the '''--list''' command and doesnt have an assigned '''ID''' | ||
In windows all the paths uses the slash "\" but when the psarc is created the paths are stored inside the manifest as "/". When making a '''--list''' command over a psarc the slashes will appear as "/" | In windows all the paths uses the slash "\" but when the psarc is created the paths are stored inside the manifest as "/". When making a '''--list''' command over a psarc the slashes will appear as "/" | ||
Line 117: | Line 80: | ||
There are several versions of PSARC related tools, features has been implemented along the different versions and is hard to keep a record of them, please help filling the info in the page | There are several versions of PSARC related tools, features has been implemented along the different versions and is hard to keep a record of them, please help filling the info in the page | ||
GUI versions are | GUI versions are derivated from the command line versions | ||
==Open PSARC PS3 Extractor== | ==Open PSARC PS3 Extractor== | ||
Line 138: | Line 101: | ||
==PSARC Extractor== | ==PSARC Extractor== | ||
By Insomniac @ xentax forums, download link: http://www.ps3hax.net/downloads.php?do=file&id=452 and http://www.modcontrol.com/Board/pc-tools/28869-psarc-ps3-extractor.html | |||
By Insomniac @ xentax forums, download link: | |||
'''Usage:''' | '''Usage:''' | ||
Line 165: | Line 127: | ||
==PSARC== | ==PSARC== | ||
1.60.008 SDK : x | 1.60.008 SDK : x | ||
1.92.001 SDK : x | 1.92.001 SDK : x | ||
Line 175: | Line 136: | ||
4.50.001 SDK : psarc-1310.001 (C++), built on Nov 16 2011 at 03:31:36 | 4.50.001 SDK : psarc-1310.001 (C++), built on Nov 16 2011 at 03:31:36 | ||
*From xentax forums: http://forum.xentax.com/viewtopic.php?p=44228&sid=0a7b5167ba4599f71f85471119c918a6#p44228 Download link: | *From xentax forums: http://forum.xentax.com/viewtopic.php?p=44228&sid=0a7b5167ba4599f71f85471119c918a6#p44228 Download link: http://www.mediafire.com/?o3wy35uublreh | ||
===help=== | ===help=== | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe --help | '''C:\>psarc.exe --help''' | ||
usage: | '''usage:''' | ||
psarc verb [options] [file...] | psarc verb [options] [file...] | ||
psarc --xml=XMLFILE | psarc --xml=XMLFILE | ||
verbs: | '''verbs:''' | ||
create Create an archive. (default) | create Create an archive. (default) | ||
extract Extract contents of an existing archive. | extract Extract contents of an existing archive. | ||
Line 192: | Line 153: | ||
dtd Display a DTD describing psarc's XML input syntax. | dtd Display a DTD describing psarc's XML input syntax. | ||
general options: | '''general options:''' | ||
-h, --help Show this help message and exit. | -h, --help Show this help message and exit. | ||
--version Display version and exit. | --version Display version and exit. | ||
Line 201: | Line 162: | ||
--xml=XMLFILE XML list of actions to perform. | --xml=XMLFILE XML list of actions to perform. | ||
create options: | '''create options:''' | ||
-oFILE, --output=FILE Archive filename to create. | -oFILE, --output=FILE Archive filename to create. | ||
-IINPUTFILE, --inputfile=INPUTFILE Inputfile listing files to archive. Consider --xml instead, which gives you more control. | -IINPUTFILE, --inputfile=INPUTFILE Inputfile listing files to archive. Consider --xml instead, which gives you more control. | ||
Line 220: | Line 181: | ||
--mergedups Compare the content of all files, and merge identical files so that only one copy of the data is included. | --mergedups Compare the content of all files, and merge identical files so that only one copy of the data is included. | ||
extract options: | '''extract options:''' | ||
--input=FILE Archive to extract files from. (default is first file argument) | --input=FILE Archive to extract files from. (default is first file argument) | ||
--to=DIRECTORY Directory to write extracted files to. (default is current directory) | --to=DIRECTORY Directory to write extracted files to. (default is current directory) | ||
}} | |||
===dtd=== | ===dtd=== | ||
Line 230: | Line 191: | ||
The output of this command is a layout that defines the structure of an .xml document. See: http://www.w3schools.com/DTD/ | The output of this command is a layout that defines the structure of an .xml document. See: http://www.w3schools.com/DTD/ | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe dtd | '''C:\>psarc.exe dtd'''<nowiki> | ||
<!ELEMENT psarc (create|extract)+> | <!ELEMENT psarc (create|extract)+> | ||
Line 284: | Line 245: | ||
skipmissingfiles (true|false) "false" | skipmissingfiles (true|false) "false" | ||
overwrite (true|false) "false"> | overwrite (true|false) "false"> | ||
</ | </nowiki>}} | ||
*DTD Notes: | *DTD Notes: | ||
Line 299: | Line 260: | ||
To use an .xml is needed to prepare it based in this layout | To use an .xml is needed to prepare it based in this layout | ||
{{ | {{Boxframe2|content= | ||
This is the xml representation of the DTD layout containing all the elements and attributes availables together, is only for wiki purpose | |||
{{Boxcode|content=<syntaxhighlight lang="xml"> | |||
<psarc> | <psarc> | ||
<create archive="" absolute="false" ignorecase="false" mergedups="false" stripall="false" blocksize="65536" jobs="" skipmissingfiles="false" format="psarc" overwrite="false"> | <create archive="" absolute="false" ignorecase="false" mergedups="false" stripall="false" blocksize="65536" jobs="" skipmissingfiles="false" format="psarc" overwrite="false"> | ||
Line 314: | Line 277: | ||
</psarc> | </psarc> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
*The purpose of this XML is to use it as a base layout containing all, but is not | *The purpose of this XML is to use it as a base layout containing all, but is not posible to use it like that, is needed to delete the tags that are not needed for a specific case, the ones that are incompatibles with other tags, and is needed to add paths, etc... | ||
*Some attributes appears as common in the DTD for "create" and "extract" but are not common, some of them has been deleted to avoid mistakes... but probably is needed to delete some more | *Some attributes appears as common in the DTD for "create" and "extract" but are not common, some of them has been deleted to avoid mistakes... but probably is needed to delete some more | ||
}} | |||
When the xml is ready you can run it this way: | When the xml is ready you can run it this way: | ||
{{Keyboard|content= | {{Keyboard|content= | ||
'''C:\>psarc.exe --xml=C:\DTD_Layout.xml''' | |||
}} | |||
The options '''--verbose''', '''--debug''', and '''--quiet''' cant be used inside the xml, so if needed are specifyed in the command line, this way: | The options '''--verbose''', '''--debug''', and '''--quiet''' cant be used inside the xml, so if needed are specifyed in the command line, this way: | ||
{{Keyboard|content= | {{Keyboard|content= | ||
'''C:\>psarc.exe --debug --xml=C:\DTD_Layout.xml''' | |||
}} | |||
===verify=== | ===verify=== | ||
Line 327: | Line 295: | ||
*Output info per-file is: Validating <file ID/number>: - file path inside psarc archive - (file original size in bytes) | *Output info per-file is: Validating <file ID/number>: - file path inside psarc archive - (file original size in bytes) | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe verify "C:\psarctests\source files\test.psarc" | '''C:\>psarc.exe verify "C:\psarctests\source files\test.psarc"''' | ||
Verifying C:\psarctests\source files\test.psarc | Verifying C:\psarctests\source files\test.psarc | ||
Validating 1: dummy.txt (0 bytes) | Validating 1: dummy.txt (0 bytes) | ||
Line 335: | Line 303: | ||
Validating 4: PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142 bytes) | Validating 4: PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142 bytes) | ||
Archive OK | Archive OK | ||
}} | |||
===dump=== | ===dump=== | ||
Line 341: | Line 309: | ||
*Output info per-file is: file path inside psarc archive - file original size - file compressed size - file block start offset ? | *Output info per-file is: file path inside psarc archive - file original size - file compressed size - file block start offset ? | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe dump "C:\psarctests\source files\test.psarc" | '''C:\>psarc.exe dump "C:\psarctests\source files\test.psarc"''' | ||
Dumping C:\psarctests\source files\test.psarc | Dumping C:\psarctests\source files\test.psarc | ||
dummy.txt os=0 cs=0 fb=1 | dummy.txt os=0 cs=0 fb=1 | ||
Line 348: | Line 316: | ||
JPGfolder1/JPGfolder2/Image2.jpg os=12524 cs=209 fb=97 | JPGfolder1/JPGfolder2/Image2.jpg os=12524 cs=209 fb=97 | ||
PNGfolder1/PNGfolder2/PNGfolder3/Image3.png os=6142 cs=6142 fb=98 | PNGfolder1/PNGfolder2/PNGfolder3/Image3.png os=6142 cs=6142 fb=98 | ||
}} | |||
===list=== | ===list=== | ||
Line 355: | Line 323: | ||
*In the compression percentage: 100% is no reduction, 0% is a huge reduction | *In the compression percentage: 100% is no reduction, 0% is a huge reduction | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe list "C:\psarctests\source files\test.psarc" | '''C:\>psarc.exe list "C:\psarctests\source files\test.psarc"''' | ||
Listing C:\psarctests\source files\test.psarc | Listing C:\psarctests\source files\test.psarc | ||
dummy.txt (0/0 100%) | dummy.txt (0/0 100%) | ||
Line 362: | Line 330: | ||
JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | ||
PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142/6142 100%) | PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142/6142 100%) | ||
}} | |||
{{Boxframe2|content= | {{Boxframe2|content= | ||
{{Boxtip1|content=Is posible to generate a text file containing the output of the '''list''' command by using the character '''>''' (right arrow) and the path/name of the destination file, this is usefull to convert the generated file to a '''filelist.txt''' for rebuilding the psarc archive later}} | {{Boxtip1|content=Is posible to generate a text file containing the output of the '''list''' command by using the character '''>''' (right arrow) and the path/name of the destination file, this is usefull to convert the generated file to a '''filelist.txt''' for rebuilding the psarc archive later}} | ||
{{Keyboard|content= | {{Keyboard|content='''C:\>psarc.exe list "C:\psarctests\source files\test.psarc" > c:\psarctests\filelist.txt'''}} | ||
}} | }} | ||
Line 375: | Line 343: | ||
====create by directory==== | ====create by directory==== | ||
Creates a psarc using the contents of a | Creates a psarc using the contents of a specifyed folder and all subfolders. Is only available when using an .xml because command line doesnt allows to specify a source folder | ||
Is the most rude method to create a psarc because all folders and files will be archived alphabetically based in his names (there is no | Is the most rude method to create a psarc because all folders and files will be archived alphabetically based in his names (there is no controll of the ID's that will be assigned to each file in the '''manifest'''). Cant be used to rebuild psarcs | ||
Note in the next | Note in the next examle the file dummy.txt (located in the root of the folder in windows, so considered first) has been archived after BMPfolder1 | ||
{{Boxcode| | {{Boxcode|content=CREATE by_directory.xml<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests\by_directory.psarc" absolute="false" ignorecase="false"> | <create archive="C:\psarctests\by_directory.psarc" absolute="false" ignorecase="false"> | ||
Line 390: | Line 358: | ||
</psarc> | </psarc> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe --xml="c:\psarctests\CREATE by_directory.xml" | '''C:\>psarc.exe --xml="c:\psarctests\CREATE by_directory.xml"''' | ||
Strip: C:\psarctests\source files\test | Strip: C:\psarctests\source files\test | ||
Flags: relative | Flags: relative | ||
Line 413: | Line 381: | ||
99.9%: Compression Ratio | 99.9%: Compression Ratio | ||
9: Compression Level | 9: Compression Level | ||
C:\>psarc.exe list C:\psarctests\by_directory.psarc | '''C:\>psarc.exe list C:\psarctests\by_directory.psarc''' | ||
Listing C:\psarctests\by_directory.psarc | Listing C:\psarctests\by_directory.psarc | ||
BMPfolder1/Image1.bmp (8018/6220854 0%) | BMPfolder1/Image1.bmp (8018/6220854 0%) | ||
Line 419: | Line 387: | ||
JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | ||
PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (157/6142 2%) | PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (157/6142 2%) | ||
}} | |||
====create by filelist==== | ====create by filelist==== | ||
Line 439: | Line 407: | ||
The psarc archive is created by using the filelist as the '''--inputfile''' and uses an explicit path to '''--strip''' from every file inside the filelist, this way: | The psarc archive is created by using the filelist as the '''--inputfile''' and uses an explicit path to '''--strip''' from every file inside the filelist, this way: | ||
{{Keyboard|content= | {{Keyboard|content='''C:\>psarc.exe create --strip="C:\psarctests\source files\test" --output=C:\psarctests\by_filelist.psarc --inputfile="C:\psarctests\source files\filelist.txt"'''}} | ||
Or you can prepare an .xml that contains the path to the filelist.txt | Or you can prepare an .xml that contains the path to the filelist.txt | ||
{{Boxcode| | {{Boxcode|content=CREATE by_filelist.xml<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests\by_filelist.psarc" absolute="false" ignorecase="false"> | <create archive="C:\psarctests\by_filelist.psarc" absolute="false" ignorecase="false"> | ||
Line 453: | Line 421: | ||
Then run the contents of the .xml this way: | Then run the contents of the .xml this way: | ||
{{Keyboard|content= | {{Keyboard|content='''C:\>psarc.exe --xml="c:\psarctests\CREATE by_filelist.xml"'''}} | ||
The output of the tool is the same in both cases (except the InputFile not present when using an xml) | The output of the tool is the same in both cases (except the InputFile not present when using an xml) | ||
{{Keyboard|content= | {{Keyboard|content= | ||
Strip: C:\psarctests\source files\test | Strip: C:\psarctests\source files\test | ||
Flags: relative | Flags: relative | ||
Line 482: | Line 450: | ||
99.9%: Compression Ratio | 99.9%: Compression Ratio | ||
9: Compression Level | 9: Compression Level | ||
C:\>psarc.exe list C:\psarctests\by_filelist.psarc | '''C:\>psarc.exe list C:\psarctests\by_filelist.psarc''' | ||
Listing C:\psarctests\by_filelist.psarc | Listing C:\psarctests\by_filelist.psarc | ||
dummy.txt (0/0 100%) | dummy.txt (0/0 100%) | ||
Line 488: | Line 456: | ||
JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | ||
PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (157/6142 2%) | PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (157/6142 2%) | ||
}} | |||
====create by file==== | ====create by file==== | ||
Line 499: | Line 467: | ||
The other per-file attribute avoids the tool to output an error in the case the file dummy.txt is missing in the source folder | The other per-file attribute avoids the tool to output an error in the case the file dummy.txt is missing in the source folder | ||
{{Boxcode| | {{Boxcode|content=CREATE by_file.xml<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests\by_file.psarc" absolute="false" ignorecase="false"> | <create archive="C:\psarctests\by_file.psarc" absolute="false" ignorecase="false"> | ||
Line 512: | Line 480: | ||
</psarc> | </psarc> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe --xml="c:\psarctests\CREATE by_file.xml" | C:\>psarc.exe --xml="c:\psarctests\CREATE by_file.xml" | ||
Strip: C:\psarctests\source files\test | Strip: C:\psarctests\source files\test | ||
Line 538: | Line 506: | ||
99.8%: Compression Ratio | 99.8%: Compression Ratio | ||
9: Compression Level | 9: Compression Level | ||
C:\>psarc.exe list C:\psarctests\by_file.psarc | '''C:\>psarc.exe list C:\psarctests\by_file.psarc''' | ||
Listing C:\psarctests\by_file.psarc | Listing C:\psarctests\by_file.psarc | ||
dummy.txt (0/0 100%) | dummy.txt (0/0 100%) | ||
Line 544: | Line 512: | ||
JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | ||
PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142/6142 100%) | PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142/6142 100%) | ||
}} | |||
Batch. This is an useless example to show how the .psarcs are created sequentially and how to create several .psarc's with only one .xml, it uses all default values for compressions, formats, flags etc... | Batch. This is an useless example to show how the .psarcs are created sequentially and how to create several .psarc's with only one .xml, it uses all default values for compressions, formats, flags etc... | ||
Line 550: | Line 518: | ||
In step 1 it creates an egg.psarc containing a dummy.txt. In step 2 it creates a chiken.psarc containing the egg.psarc made in step 1. In step 3 it creates an egg.psarc containing the chicken.psarc made in step 2 (egg.psarc created in step 3 overwrites egg.psarc made in step 1) | In step 1 it creates an egg.psarc containing a dummy.txt. In step 2 it creates a chiken.psarc containing the egg.psarc made in step 1. In step 3 it creates an egg.psarc containing the chicken.psarc made in step 2 (egg.psarc created in step 3 overwrites egg.psarc made in step 1) | ||
{{Boxcode| | {{Boxcode|content=CREATE by_file_paradox<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests\egg.psarc"> | <create archive="C:\psarctests\egg.psarc"> | ||
Line 568: | Line 536: | ||
</psarc> | </psarc> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe --xml="c:\psarctests\CREATE by_file_paradox.xml" | '''C:\>psarc.exe --xml="c:\psarctests\CREATE by_file_paradox.xml"''' | ||
Strip: C:\psarctests\source files\test | Strip: C:\psarctests\source files\test | ||
Flags: relative | Flags: relative | ||
Line 626: | Line 594: | ||
-44.8%: Compression Ratio | -44.8%: Compression Ratio | ||
9: Compression Level | 9: Compression Level | ||
C:\>psarc.exe list C:\psarctests\egg.psarc | '''C:\>psarc.exe list C:\psarctests\egg.psarc | ||
Listing C:\psarctests\egg.psarc | Listing C:\psarctests\egg.psarc | ||
chicken.psarc (143/174 82%) | chicken.psarc (143/174 82%) | ||
C:\>psarc.exe list C:\psarctests\chicken.psarc | '''C:\>psarc.exe list C:\psarctests\chicken.psarc | ||
Listing C:\psarctests\chicken.psarc | Listing C:\psarctests\chicken.psarc | ||
egg.psarc (69/105 65%) | egg.psarc (69/105 65%) | ||
}} | |||
---- | ---- | ||
Line 650: | Line 618: | ||
When using this options the command line output is the same, there is no mention of wich files are stripped, overwritten, or missing in the extraction process | When using this options the command line output is the same, there is no mention of wich files are stripped, overwritten, or missing in the extraction process | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe extract --input="C:\psarctests\source files\test.psarc" --to="C:\psarctests\test" | '''C:\>psarc.exe extract --input="C:\psarctests\source files\test.psarc" --to="C:\psarctests\test"''' | ||
Extracting: dummy.txt (0 bytes) | Extracting: dummy.txt (0 bytes) | ||
Extracting: BMPfolder1/Image1.bmp (6220854 bytes) | Extracting: BMPfolder1/Image1.bmp (6220854 bytes) | ||
Extracting: JPGfolder1/JPGfolder2/Image2.jpg (12524 bytes) | Extracting: JPGfolder1/JPGfolder2/Image2.jpg (12524 bytes) | ||
Extracting: PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142 bytes) | Extracting: PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142 bytes) | ||
C:\>psarc.exe extract --overwrite --strip-all --skip-missing-files --input="C:\psarctests\source files\test.psarc" --to="C:\psarctests\test" | '''C:\>psarc.exe extract --overwrite --strip-all --skip-missing-files --input="C:\psarctests\source files\test.psarc" --to="C:\psarctests\test"''' | ||
Extracting: dummy.txt (0 bytes) | Extracting: dummy.txt (0 bytes) | ||
Extracting: BMPfolder1/Image1.bmp (6220854 bytes) | Extracting: BMPfolder1/Image1.bmp (6220854 bytes) | ||
Extracting: JPGfolder1/JPGfolder2/Image2.jpg (12524 bytes) | Extracting: JPGfolder1/JPGfolder2/Image2.jpg (12524 bytes) | ||
Extracting: PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142 bytes) | Extracting: PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142 bytes) | ||
}} | |||
'''extract all (xml)''' | '''extract all (xml)''' | ||
{{Boxcode| | {{Boxcode|content=EXTRACT all.xml<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<extract archive="C:\psarctests\source files\test.psarc" to="C:\psarctests\all"> | <extract archive="C:\psarctests\source files\test.psarc" to="C:\psarctests\all"> | ||
Line 671: | Line 639: | ||
</psarc> | </psarc> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe --xml="c:\psarctests\EXTRACT all.xml" | '''C:\>psarc.exe --xml="c:\psarctests\EXTRACT all.xml"''' | ||
Extracting: dummy.txt (0 bytes) | Extracting: dummy.txt (0 bytes) | ||
Extracting: BMPfolder1/Image1.bmp (6220854 bytes) | Extracting: BMPfolder1/Image1.bmp (6220854 bytes) | ||
Extracting: JPGfolder1/JPGfolder2/Image2.jpg (12524 bytes) | Extracting: JPGfolder1/JPGfolder2/Image2.jpg (12524 bytes) | ||
Extracting: PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142 bytes) | Extracting: PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142 bytes) | ||
}} | |||
====extract by file==== | ====extract by file==== | ||
This extraction method is only available when using an xml because command line doesnt allows to specify files inside the archive | This extraction method is only available when using an xml because command line doesnt allows to specify files inside the archive | ||
{{Boxcode| | {{Boxcode|content=EXTRACT by_file.xml<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<extract archive="C:\psarctests\source files\test.psarc" to="C:\psarctests\by_file"> | <extract archive="C:\psarctests\source files\test.psarc" to="C:\psarctests\by_file"> | ||
Line 689: | Line 657: | ||
</psarc> | </psarc> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
{{Keyboard|content= | {{Keyboard|content= | ||
C:\>psarc.exe --xml="c:\psarctests\EXTRACT by_file.xml" | '''C:\>psarc.exe --xml="c:\psarctests\EXTRACT by_file.xml"''' | ||
Extracting: BMPfolder1/Image1.bmp (6220854 bytes) | Extracting: BMPfolder1/Image1.bmp (6220854 bytes) | ||
}} | |||
When extracting single files is also posible to use the same attributes availables in command line, and attributes per-file, but they uses different names inside the xml (see the DTD example) | When extracting single files is also posible to use the same attributes availables in command line, and attributes per-file, but they uses different names inside the xml (see the DTD example) | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<extract archive="C:\psarctests\source files\test.psarc" to="C:\psarctests\by_file" stripall="true" skipmissingfiles="false" overwrite="true"> | <extract archive="C:\psarctests\source files\test.psarc" to="C:\psarctests\by_file" stripall="true" skipmissingfiles="false" overwrite="true"> | ||
Line 707: | Line 675: | ||
**The element "extract" uses the attribute '''archive''' but could be replaced by '''input''', in this case are exactly the same and both will work, actually '''--input''' is the same option used in comand line but the examples in wiki uses the name '''archive''' because is more intuitive (is also used as an attribute for "create" and in both cases is refered to the compressed archive.psarc). Both (archive and input) appears in the DTD as optional (#IMPLIED) but only one of them can be used in the xml | **The element "extract" uses the attribute '''archive''' but could be replaced by '''input''', in this case are exactly the same and both will work, actually '''--input''' is the same option used in comand line but the examples in wiki uses the name '''archive''' because is more intuitive (is also used as an attribute for "create" and in both cases is refered to the compressed archive.psarc). Both (archive and input) appears in the DTD as optional (#IMPLIED) but only one of them can be used in the xml | ||
**The element "file" uses the attribute '''archivepath''' but could be replaced by '''path''', in this case are exactly the same and both will work, but the examples in wiki uses the name '''archivepath''' because is more intuitive (is refered to the path of a file inside archive.psarc). Both (archivepath and path) appears in the DTD as optional (#IMPLIED) but only one of them can be used in the xml | **The element "file" uses the attribute '''archivepath''' but could be replaced by '''path''', in this case are exactly the same and both will work, but the examples in wiki uses the name '''archivepath''' because is more intuitive (is refered to the path of a file inside archive.psarc). Both (archivepath and path) appears in the DTD as optional (#IMPLIED) but only one of them can be used in the xml | ||
==Total Commander plugin== | ==Total Commander plugin== | ||
Line 743: | Line 683: | ||
Download link: http://aldostools.org/ps3_psarc_gui.rar | Download link: http://aldostools.org/ps3_psarc_gui.rar | ||
=Rebuilding PSARC files= | =Rebuilding PSARC files= | ||
Line 755: | Line 689: | ||
This need to preserve the original positions of all the files inside the archive in the practise means there are only 2 methods to rebuild a psarc: "by filelist" or "by file". For both is needed to create a list of files | This need to preserve the original positions of all the files inside the archive in the practise means there are only 2 methods to rebuild a psarc: "by filelist" or "by file". For both is needed to create a list of files | ||
{{ | {{Boxframe1|content='''Rebuilding PSARC files, step-by-step summary''' | ||
* Step 1 - Identify compression method, archive flags, and verify default structure sizes | * Step 1 - Identify compression method, archive flags, and verify default structure sizes | ||
* Step 2 - Identify if per-file compression was used <!-- and dupes ---> | * Step 2 - Identify if per-file compression was used <!-- and dupes ---> | ||
** Step 3a - If per-file compression was not used, rebuild with the method "by filelist" or "by file" | ** Step 3a - If per-file compression was not used, rebuild with the method "by filelist" or "by file" | ||
** Step 3a - If per-file compression was used, rebuild with the method "by file" | ** Step 3a - If per-file compression was used, rebuild with the method "by file" | ||
}} | }} | ||
Line 772: | Line 704: | ||
Most important ones are the '''<span style="background:#ffff66;">compression method</span>''' (zlib/lzma) and the '''<span style="background:#d0000d;">archive flags</span>''' (relative/absolute, and ignorecase), this settings will be used when rebuilding from command line or from xml this way: | Most important ones are the '''<span style="background:#ffff66;">compression method</span>''' (zlib/lzma) and the '''<span style="background:#d0000d;">archive flags</span>''' (relative/absolute, and ignorecase), this settings will be used when rebuilding from command line or from xml this way: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests\by_file.psarc" absolute="true" ignorecase="true"> | <create archive="C:\psarctests\by_file.psarc" absolute="true" ignorecase="true"> | ||
Line 780: | Line 712: | ||
The other values in the header that needs to be verifyed are the '''<span style="background:#dd00dd;">TOC entry size</span>''' and the '''<span style="background:#dddddd;">Block size</span>''', is needed to know if the original psarc we are trying to rebuild uses the default values (all i found used defaults), otherway is posible to use non-default values this way: <!-- not sure if is posible to change the "TOC entry size" --> | The other values in the header that needs to be verifyed are the '''<span style="background:#dd00dd;">TOC entry size</span>''' and the '''<span style="background:#dddddd;">Block size</span>''', is needed to know if the original psarc we are trying to rebuild uses the default values (all i found used defaults), otherway is posible to use non-default values this way: <!-- not sure if is posible to change the "TOC entry size" --> | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests\by_file.psarc" absolute="true" ignorecase="true" blocksize="65536"> | <create archive="C:\psarctests\by_file.psarc" absolute="true" ignorecase="true" blocksize="65536"> | ||
Line 789: | Line 721: | ||
'''Step2''' | '''Step2''' | ||
Now is needed to know if the psarc uses per-file compression (if some of the files inside the archive | Now is needed to know if the psarc uses per-file compression (if some of the files inside the archive ara compressed, and others are not compressed) | ||
This is important to know wich rebuild method will be used in the next step, is needed to make a --list command with psarc tool and store the output of the command as a .txt | This is important to know wich rebuild method will be used in the next step, is needed to make a --list command with psarc tool and store the output of the command as a .txt | ||
Line 799: | Line 731: | ||
**If there some files with the 100%, normal sizes (not minimal), using the same file extension, and can be identifyed (like audio or video formats) then you have a psarc with per-file compression | **If there some files with the 100%, normal sizes (not minimal), using the same file extension, and can be identifyed (like audio or video formats) then you have a psarc with per-file compression | ||
**If all the files appears as 100% it means the psarc has been created with the compression attibute set as "false" this way: | **If all the files appears as 100% it means the psarc has been created with the compression attibute set as "false" this way: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests\by_file.psarc" absolute="true" ignorecase="true" blocksize="65536"> | <create archive="C:\psarctests\by_file.psarc" absolute="true" ignorecase="true" blocksize="65536"> | ||
Line 819: | Line 751: | ||
**Ape Escape target.psarc includes "dupes" (or duplicated files) in the TOC (table of contents) of the psarc archive. This method used at creation time basically works by making several entries of the TOC to point to the same file, this way a single file inside the psarc is indexed several times in the TOC and can be accessed from several different paths/filenames. The only way to identify this dupes before extraction is by reading the TOC of the psarc for all the files and compare wich position are pointing to. As an example the original size of target.psarc is 328mb... after a "standard" extraction is 2.52GB (this extraction doesnt identify the dupes so are extracted several times under different paths/filenames)... if you try to rebuild it again his final size will be much bigger than the original target.psarc | **Ape Escape target.psarc includes "dupes" (or duplicated files) in the TOC (table of contents) of the psarc archive. This method used at creation time basically works by making several entries of the TOC to point to the same file, this way a single file inside the psarc is indexed several times in the TOC and can be accessed from several different paths/filenames. The only way to identify this dupes before extraction is by reading the TOC of the psarc for all the files and compare wich position are pointing to. As an example the original size of target.psarc is 328mb... after a "standard" extraction is 2.52GB (this extraction doesnt identify the dupes so are extracted several times under different paths/filenames)... if you try to rebuild it again his final size will be much bigger than the original target.psarc | ||
==Generating a filelist.txt or xml by using regular expressions== | |||
*The file paths inside filelist.txt or inside an xml admits 2 formats: | *The file paths inside filelist.txt or inside an xml admits 2 formats: | ||
Line 829: | Line 761: | ||
The output of the '''list''' command has some characters that are needed ro remove or replace, the purpose of automatizing this process by using regular expressions is because usually psarc files contains thousand of files, the examples used here are commands for fnr.exe (find and replace tool) and contains regular expressions (to search) and a character strings (to replace) | The output of the '''list''' command has some characters that are needed ro remove or replace, the purpose of automatizing this process by using regular expressions is because usually psarc files contains thousand of files, the examples used here are commands for fnr.exe (find and replace tool) and contains regular expressions (to search) and a character strings (to replace) | ||
===Generating a filelist.txt | ===Generating a filelist.txt=== | ||
First generate a .txt file containing the output of the '''list''' comand | |||
{{Keyboard|content='''C:\>psarc.exe list "C:\psarctests\source files\test.psarc" > "C:\psarctests\filelist.txt"'''}} | |||
{{Keyboard|content= | |||
The file generated by the list command will have this content (note there is en empty line at the end): | The file generated by the list command will have this content (note there is en empty line at the end): | ||
Listing C:\psarctests\source files\test.psarc | Listing C:\psarctests\source files\test.psarc | ||
Line 851: | Line 771: | ||
PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142/6142 100%) | PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142/6142 100%) | ||
*'''Replacing slashes''' | |||
This step is not really needed, both slashes are valid, but is good to do it to standarize all paths formats, otherway is a mess | |||
find: | |||
/ | |||
replace by: | |||
\\ | |||
The resulting file: | |||
Listing C:\psarctests\source files\test.psarc | |||
dummy.txt (0\0 100%) | |||
BMPfolder1\Image1.bmp (8018\6220854 0%) | |||
JPGfolder1\JPGfolder2\Image2.jpg (209\12524 1%) | |||
PNGfolder1\PNGfolder2\PNGfolder3\Image3.png (6142\6142 100%) | |||
*''' | *'''Removing first line''' | ||
find (and replace by nothing): | find (and replace by nothing): | ||
Listing.*\n | Listing.*\n | ||
The resulting file: | The resulting file: | ||
dummy.txt (0 | dummy.txt (0\0 100%) | ||
BMPfolder1 | BMPfolder1\Image1.bmp (8018\6220854 0%) | ||
JPGfolder1 | JPGfolder1\JPGfolder2\Image2.jpg (209\12524 1%) | ||
PNGfolder1 | PNGfolder1\PNGfolder2\PNGfolder3\Image3.png (6142\6142 100%) | ||
*''' | *'''Removing last line''' | ||
find (and replace by nothing): | find (and replace by nothing): | ||
\r\nsourcepath$ | |||
The resulting file: | The resulting file: | ||
dummy.txt | dummy.txt (0\0 100%) | ||
BMPfolder1 | BMPfolder1\Image1.bmp (8018\6220854 0%) | ||
JPGfolder1 | JPGfolder1\JPGfolder2\Image2.jpg (209\12524 1%) | ||
PNGfolder1 | PNGfolder1\PNGfolder2\PNGfolder3\Image3.png (6142\6142 100%) | ||
*''' | *'''Removing parenthesis''' | ||
find (and replace by nothing): | find (and replace by nothing): | ||
\ | [^\b]\(.*\) | ||
* | |||
The resulting file: | The resulting file: | ||
dummy.txt | dummy.txt | ||
Line 900: | Line 812: | ||
JPGfolder1\JPGfolder2\Image2.jpg | JPGfolder1\JPGfolder2\Image2.jpg | ||
PNGfolder1\PNGfolder2\PNGfolder3\Image3.png | PNGfolder1\PNGfolder2\PNGfolder3\Image3.png | ||
*''' | *'''Adding local paths''' | ||
Now is needed to add the local paths (where the psarc contents are decompressed), e.g: '''C:\psarctests\source files\test\''', remember this is exactly the part of the path that is needed to '''strip''' later (because we dont want to include our local path '''C:\psarctests\source files\test\''' inside the manifest) | Now is needed to add the local paths (where the psarc contents are decompressed), e.g: '''C:\psarctests\source files\test\''', remember this is exactly the part of the path that is needed to '''strip''' later (because we dont want to include our local path '''C:\psarctests\source files\test\''' inside the manifest) | ||
find: | find: | ||
^ | ^ | ||
Line 916: | Line 825: | ||
C:\psarctests\source files\test\JPGfolder1\JPGfolder2\Image2.jpg | C:\psarctests\source files\test\JPGfolder1\JPGfolder2\Image2.jpg | ||
C:\psarctests\source files\test\PNGfolder1\PNGfolder2\PNGfolder3\Image3.png | C:\psarctests\source files\test\PNGfolder1\PNGfolder2\PNGfolder3\Image3.png | ||
And thats all, this is a perfect filelist.txt that can be used for the rebuild method '''by filelist''' from command line (usefull when the psarc doesnt uses per-file compression), remember is needed to use the '''strip''' option | |||
---- | ---- | ||
===Generating a XML | ===Generating a XML=== | ||
The way to create an xml is pretty similar, first generate a .xml file containing the output of the '''list''' comand | |||
{{Keyboard|content='''C:\>psarc.exe list "C:\psarctests\source files\test.psarc" > "C:\psarctests\filelist.xml"'''}} | |||
The file generated by the list command will have this content (note there is en empty line at the end): | |||
{{Boxcode|content=<syntaxhighlight lang="xml"> | |||
{{Keyboard|content= | |||
The file generated by the list command will have this content: | |||
{{Boxcode| | |||
Listing C:\psarctests\source files\test.psarc | Listing C:\psarctests\source files\test.psarc | ||
dummy.txt (0/0 100%) | |||
BMPfolder1/Image1.bmp (8018/6220854 0%) | |||
JPGfolder1/JPGfolder2/Image2.jpg (209/12524 1%) | |||
PNGfolder1/PNGfolder2/PNGfolder3/Image3.png (6142/6142 100%) | |||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
*''' | *'''Replacing slashes''' (this step is not really needed, both slashes are valid, but is good to do it to standarize all paths formats, otherway is a mess) | ||
find: | find: | ||
/ | / | ||
Line 974: | Line 849: | ||
\\ | \\ | ||
The resulting file: | The resulting file: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
Listing C:\psarctests\source files\test.psarc | Listing C:\psarctests\source files\test.psarc | ||
dummy.txt (0\0 100%) | |||
BMPfolder1\Image1.bmp (8018\6220854 0%) | |||
JPGfolder1\JPGfolder2\Image2.jpg (209\12524 1%) | |||
PNGfolder1\PNGfolder2\PNGfolder3\Image3.png (6142\6142 100%) | |||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
*'''Replacing first line''' | |||
*''' | |||
find: | find: | ||
Listing.*\n | |||
replace by: | replace by: | ||
<psarc> | |||
<create archive="targetpsarc" absolute="false" ignorecase="false"> | |||
<compression type="zlib" enabled="true" /> | |||
<strip regex="sourcepath" /> | |||
<file path="sourcepath | |||
The resulting file: | The resulting file: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="targetpsarc" absolute="false" ignorecase="false"> | |||
<compression type="zlib" /> | <compression type="zlib" enabled="true" /> | ||
<strip regex=" | <strip regex="sourcepath" /> | ||
<file path="sourcepathdummy.txt (0\0 100%) | |||
BMPfolder1\Image1.bmp (8018\6220854 0%) | |||
JPGfolder1\JPGfolder2\Image2.jpg (209\12524 1%) | |||
PNGfolder1\PNGfolder2\PNGfolder3\Image3.png (6142\6142 100%) | |||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
*''' | *'''Replacing parenthesis''' | ||
find: | find: | ||
\. | [^\b]\(.*\n | ||
replace by: | replace by: | ||
" /> | |||
<file path="sourcepath | |||
The resulting file: | The resulting file: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="targetpsarc" absolute="false" ignorecase="false"> | |||
<compression type="zlib" /> | <compression type="zlib" enabled="true" /> | ||
<strip regex=" | <strip regex="sourcepath" /> | ||
<file path=" | <file path="sourcepathdummy.txt" /> | ||
<file path="sourcepathBMPfolder1\Image1.bmp" /> | |||
<file path="sourcepathJPGfolder1\JPGfolder2\Image2.jpg" /> | |||
<file path="sourcepathPNGfolder1\PNGfolder2\PNGfolder3\Image3.png" /> | |||
<file path="sourcepath | |||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
*''' | *'''Replacing last line''' | ||
find: | find: | ||
<file path="sourcepath$ | |||
replace by: | replace by: | ||
</create> | |||
</psarc> | |||
The resulting file: | The resulting file: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive=" | <create archive="targetpsarc" absolute="false" ignorecase="false"> | ||
<compression type="zlib" /> | <compression type="zlib" enabled="true" /> | ||
<strip regex=" | <strip regex="sourcepath" /> | ||
<file path="sourcepathdummy.txt" /> | |||
<file path="sourcepathBMPfolder1\Image1.bmp" /> | |||
<file path="sourcepathJPGfolder1\JPGfolder2\Image2.jpg" /> | |||
<file path="sourcepathPNGfolder1\PNGfolder2\PNGfolder3\Image3.png" /> | |||
</create> | |||
</psarc> | |||
</syntaxhighlight>}} | |||
*'''Replacing path placeholders''' | |||
This step was not really needed because you could use the real path in the steps before, but i prefer to make the change in this last step because all the previous ones are generic | |||
Now you can replace the word "sourcepath" we have been using as a placeholder by the folder path where the psarc contents are decompressed, e.g: '''C:\psarctests\source files\test\''', also replace the path "targetpsarc" where the psarc will be created, e.g: '''C:\psarctests\test.psarc''' | |||
find: | find: | ||
sourcepath | |||
replace by: | replace by: | ||
C:\\psarctests\\source files\\test\\ | |||
find: | find: | ||
targetpsarc | |||
replace by: | replace by: | ||
\ | C:\\psarctests\\test.psarc | ||
The resulting file: | The resulting file: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests | <create archive="C:\psarctests\test.psarc" absolute="false" ignorecase="false"> | ||
<compression type="zlib" /> | <compression type="zlib" enabled="true" /> | ||
<strip regex="C:\source\ | <strip regex="C:\psarctests\source files\test\" /> | ||
<file path="C:\source\ | <file path="C:\psarctests\source files\test\dummy.txt" /> | ||
<file path="C:\source\ | <file path="C:\psarctests\source files\test\BMPfolder1\Image1.bmp" /> | ||
<file path="C:\source\ | <file path="C:\psarctests\source files\test\JPGfolder1\JPGfolder2\Image2.jpg" /> | ||
<file path="C:\source\ | <file path="C:\psarctests\source files\test\PNGfolder1\PNGfolder2\PNGfolder3\Image3.png" /> | ||
</create> | </create> | ||
</psarc> | </psarc> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
*''' | Now is needed to verify all the common settings are fine (ive used default values for the replacements in the examples) | ||
*'''Adding per-file attributes''' (optional) | |||
If the psarc uses per-file attributes now is needed to apply them by identifying filenames or file extensions, e.g: if we know the png images doesnt have compression it can be automatized this way: | |||
find: | find: | ||
\ | \.png" /> | ||
replace by: | replace by: | ||
\ | \.png" compressed="false" /> | ||
The resulting file: | The resulting file: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<psarc> | <psarc> | ||
<create archive="C:\psarctests | <create archive="C:\psarctests\test.psarc" absolute="false" ignorecase="false"> | ||
<compression type="zlib" /> | <compression type="zlib" enabled="true" /> | ||
<strip regex="C:\source\ | <strip regex="C:\psarctests\source files\test\" /> | ||
<file path="C:\source\ | <file path="C:\psarctests\source files\test\dummy.txt" /> | ||
<file path="C:\source\ | <file path="C:\psarctests\source files\test\BMPfolder1\Image1.bmp" /> | ||
<file path="C:\source\ | <file path="C:\psarctests\source files\test\JPGfolder1\JPGfolder2\Image2.jpg" /> | ||
<file path="C:\source\ | <file path="C:\psarctests\source files\test\PNGfolder1\PNGfolder2\PNGfolder3\Image3.png" compressed="false" /> | ||
</create> | </create> | ||
</psarc> | </psarc> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
=Games or Apps using PSARC files= | =Games or Apps using PSARC files= | ||
Line 1,179: | Line 1,018: | ||
|- | |- | ||
| TEXTURES.PSARC || || || || || || || | | TEXTURES.PSARC || || || || || || || | ||
|- | |- | ||
| Motorstorm Pacific Rift || ? || || || || || || || | | Motorstorm Pacific Rift || ? || || || || || || || | ||
Line 1,205: | Line 1,042: | ||
|- | |- | ||
| All others || 00010003 || zlib || 0000001E || 00010000 || 00000003 (ignorecase + absolute) || compress all || | | All others || 00010003 || zlib || 0000001E || 00010000 || 00000003 (ignorecase + absolute) || compress all || | ||
|- | |- | ||
| The Last Of Us || All ? || 00010003 || zlib || 0000001E || 00010000 || 00000000 (no flags) || || | | The Last Of Us || All ? || 00010003 || zlib || 0000001E || 00010000 || 00000000 (no flags) || || | ||
Line 1,241: | Line 1,068: | ||
|- | |- | ||
! TITLE !! PSARC files || Version<BR />(offset 0x04) !! Compression<BR />(offset 0x08) !! TOC entry size<BR />(offset 0x10) !! Block Size<BR />(offset 0x18) !! Flags<BR />(offset 0x1C) | ! TITLE !! PSARC files || Version<BR />(offset 0x04) !! Compression<BR />(offset 0x08) !! TOC entry size<BR />(offset 0x10) !! Block Size<BR />(offset 0x18) !! Flags<BR />(offset 0x1C) | ||
|- | |- | ||
| VidZone || vidzone*.db.psarc || 00010004 || zlib || 0000001E || 00010000 || 00000000 (no flags) || compress all || Vidzone is a web service, the .psarc is hosted in the web | | VidZone || vidzone*.db.psarc || 00010004 || zlib || 0000001E || 00010000 || 00000000 (no flags) || compress all || Vidzone is a web service, the .psarc is hosted in the web | ||
|} | |} | ||
Line 1,264: | Line 1,079: | ||
{{File Formats}} | {{File Formats}} | ||
<noinclude> | <noinclude>[[Category:Main]]</noinclude> | ||
[[Category:Main]] | |||
</noinclude> |