Surreal Software Archive (Riot Engine): Difference between revisions
Jump to navigation
Jump to search
imported>WATTO No edit summary |
imported>Ikskoks |
||
| (37 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
== ADU CDU FDU LDU MDU ODU QDU SDU TDU VDU WDU XDU RRC == | |||
== SDU == | |||
* ''' Format Type ''': Archive <br> | * ''' Format Type ''': Archive <br> | ||
| Line 9: | Line 5: | ||
=== Format Specifications === | === Format Specifications (The Suffering, version 1.1) === | ||
<tt><b> | <tt><b> | ||
char {4} - Header <font color="purple">(SRSC)</font> <br> | <font color="blue"> ''' // ARCHIVE HEADER ''' </font> <br> | ||
: char {4} - Header <font color="purple">(SRSC)</font> <br> | |||
uint32 {4} - Directory Offset <br> | : byte {2} - Version <font color="purple">(1,1)</font> <br> | ||
uint32 {4} - Number Of Files <font color="darkgreen">[-1]</font> <br> | : uint32 {4} - Files Directory Offset <br> | ||
: uint32 {4} - Number Of Files <font color="darkgreen">[-1]</font> <br> | |||
<br> | <br> | ||
byte {X} - File Data <br> | <font color="blue"> ''' // FILE DATA ''' </font> <br> | ||
: <font color="blue"> ''' // for each file ''' </font> <br> | |||
:: byte {X} - File Data <br> | |||
<br> | <br> | ||
<font color="blue"> ''' // | <font color="blue"> ''' // FILES DIRECTORY ''' </font> <br> | ||
: uint32 {4} - <font color="red"> '' Unknown <font color="purple">(1026)</font> '' </font> <br> | : uint32 {4} - <font color="red"> '' Unknown <font color="purple">(1026)</font> '' </font> <br> | ||
: uint16 {2} - null <br> | : uint16 {2} - null <br> | ||
| Line 25: | Line 24: | ||
: uint32 {4} - <font color="red"> '' Unknown <font color="purple">(10)</font> '' </font> <br> | : uint32 {4} - <font color="red"> '' Unknown <font color="purple">(10)</font> '' </font> <br> | ||
<br> | <br> | ||
: <font color="blue"> ''' // for each file ''' </font> <br> | : <font color="blue"> ''' // for each file (14 bytes per entry) ''' </font> <br> | ||
:: uint32 {4} - <font color="red"> '' Unknown '' </font> <br> | :: uint32 {4} - <font color="red"> '' Unknown '' </font> <br> | ||
:: uint16 {2} - <font color="red"> '' File Type ID? '' </font> <br> | :: uint16 {2} - <font color="red"> '' File Type ID? '' </font> <br> | ||
:: uint32 {4} - File Offset <br> | :: uint32 {4} - File Offset <br> | ||
:: uint32 {4} - File Size <br> | :: uint32 {4} - File Size <br> | ||
</b></tt> | </b></tt> | ||
Not written yet<br><br> | === Format Specifications (Drakan, version 0.1) === | ||
<div class="toccolours mw-collapsible" id="mw-customcollapsible-myDivision" style="width:800px; overflow:auto;"> | |||
<pre> | |||
// Drakan | |||
// RRC file format | |||
// little endian | |||
// header | |||
4 bytes (char) - magic // "SRSC" | |||
2 bytes - version // 0x00 0x01 | |||
4 bytes (uint32) - directory offset | |||
2 bytes (uint16) - number of files | |||
// data | |||
number_of_files * | |||
{ | |||
x bytes - file data | |||
} | |||
// directory | |||
number_of_files * | |||
{ | |||
2 bytes (uint16) - file type // "0x40 0x00" (64) - texture data | |||
// "0x00 0x04" (1024) - encrypted text | |||
// "0x01 0x04" (1025) - plain text | |||
// etc. etc. | |||
2 bytes (uint16) - file ID | |||
2 bytes (uint16) - group ID | |||
4 bytes (uint32) - file offset | |||
4 bytes (uint32) - file size | |||
} | |||
</pre> | |||
</div> | |||
=== MultiEx BMS === | |||
Not written yet. | |||
=== QuickBMS === | |||
* [https://aluigi.altervista.org/bms/drakan.bms drakan.bms] | |||
=== Notes and Comments === | |||
* This is archive file format used by the '''Riot Engine''' by '''Surreal Software''' company. | |||
* Some files inside archive may be compressed with '''ZLIB compression'''. | |||
=== Decryption Method === | |||
Strings are encrypted with custom XOR algorithm. <br>Below is Python implementation of decryption method:<br> | |||
<div class="toccolours mw-collapsible" id="mw-customcollapsible-myDivision" style="width:800px; overflow:auto;"> | |||
<pre> | |||
def decrypt_data(in_data_str, in_data_len): | |||
key = 0x5FDD390D | |||
out_data = b'' | |||
for i in range(in_data_len): | |||
out_data += xore(struct.pack("B", in_data_str[i]) , struct.pack("B", key & 0xFF)) | |||
key = (key<<3) | (key>>(32-3)) | |||
return out_data | |||
</pre> | |||
</div> | |||
=== Games === | |||
List of games using this file format: | |||
* Drakan: Order of the Flame | |||
* Drakan: The Ancients' Gates | |||
* The Lord of the Rings: The Fellowship of the Ring <font color="red">(needs confirmation!)</font> | |||
* The Suffering | |||
* The Suffering: Ties That Bind | |||
* Gunslinger (cancelled game) <font color="red">(needs confirmation!)</font> | |||
* The Lord of the Rings: The Treason of Isengard (cancelled game) <font color="red">(needs confirmation!)</font> | |||
=== | === Supported Programs === | ||
* [[Game Extractor|Game Extractor]]<br> | * [[Game Extractor|Game Extractor]]<br> | ||
* [https://github.com/Zalasus/opendrakan opendrakan] | |||
* Drakan: Order Of The Flame Level Editor | |||
* [https://github.com/bartlomiejduda/Tools/blob/master/NEW%20Tools/Drakan/Drakan_RRC_Tool.py Drakan_RRC_Tool.py] | |||
<br><br> | |||
[[Category:Complete Complete|Surreal Software Archive (Riot Engine)]] | |||
[[Category:Platform PC|Surreal Software Archive (Riot Engine)]] | |||
[[Category:CE Compressed|Surreal Software Archive (Riot Engine)]] | |||
[[Category:Format_Archive | Type: Archive]] | |||
[[Category:Extension_rrc | Extension: rrc]] | |||
[[Category:XOR encryption]] | |||
[[Category:ZLIB compression]] | |||
[[Category:File Format]] | |||
Latest revision as of 18:43, 14 January 2021
ADU CDU FDU LDU MDU ODU QDU SDU TDU VDU WDU XDU RRC
- Format Type : Archive
- Endian Order : Little Endian
Format Specifications (The Suffering, version 1.1)
// ARCHIVE HEADER
- char {4} - Header (SRSC)
- byte {2} - Version (1,1)
- uint32 {4} - Files Directory Offset
- uint32 {4} - Number Of Files [-1]
// FILE DATA
- // for each file
- byte {X} - File Data
- byte {X} - File Data
// FILES DIRECTORY
- uint32 {4} - Unknown (1026)
- uint16 {2} - null
- uint32 {4} - File Data Length
- uint32 {4} - Unknown (10)
- // for each file (14 bytes per entry)
- uint32 {4} - Unknown
- uint16 {2} - File Type ID?
- uint32 {4} - File Offset
- uint32 {4} - File Size
- uint32 {4} - Unknown
Format Specifications (Drakan, version 0.1)
// Drakan
// RRC file format
// little endian
// header
4 bytes (char) - magic // "SRSC"
2 bytes - version // 0x00 0x01
4 bytes (uint32) - directory offset
2 bytes (uint16) - number of files
// data
number_of_files *
{
x bytes - file data
}
// directory
number_of_files *
{
2 bytes (uint16) - file type // "0x40 0x00" (64) - texture data
// "0x00 0x04" (1024) - encrypted text
// "0x01 0x04" (1025) - plain text
// etc. etc.
2 bytes (uint16) - file ID
2 bytes (uint16) - group ID
4 bytes (uint32) - file offset
4 bytes (uint32) - file size
}
MultiEx BMS
Not written yet.
QuickBMS
Notes and Comments
- This is archive file format used by the Riot Engine by Surreal Software company.
- Some files inside archive may be compressed with ZLIB compression.
Decryption Method
Strings are encrypted with custom XOR algorithm.
Below is Python implementation of decryption method:
def decrypt_data(in_data_str, in_data_len):
key = 0x5FDD390D
out_data = b''
for i in range(in_data_len):
out_data += xore(struct.pack("B", in_data_str[i]) , struct.pack("B", key & 0xFF))
key = (key<<3) | (key>>(32-3))
return out_data
Games
List of games using this file format:
- Drakan: Order of the Flame
- Drakan: The Ancients' Gates
- The Lord of the Rings: The Fellowship of the Ring (needs confirmation!)
- The Suffering
- The Suffering: Ties That Bind
- Gunslinger (cancelled game) (needs confirmation!)
- The Lord of the Rings: The Treason of Isengard (cancelled game) (needs confirmation!)
Supported Programs
- Game Extractor
- opendrakan
- Drakan: Order Of The Flame Level Editor
- Drakan_RRC_Tool.py