Surreal Software Archive (Riot Engine): Difference between revisions
Jump to navigation
Jump to search
imported>Ikskoks |
imported>Ikskoks |
||
| (34 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
== ADU CDU FDU LDU MDU ODU QDU SDU TDU VDU WDU XDU == | == ADU CDU FDU LDU MDU ODU QDU SDU TDU VDU WDU XDU RRC == | ||
* ''' Format Type ''': Archive <br> | * ''' Format Type ''': Archive <br> | ||
| Line 5: | Line 5: | ||
=== Format Specifications === | === Format Specifications (The Suffering, version 1.1) === | ||
<tt><b> | <tt><b> | ||
| Line 30: | Line 30: | ||
:: uint32 {4} - File Size <br> | :: uint32 {4} - File Size <br> | ||
</b></tt> | </b></tt> | ||
=== 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 === | === MultiEx BMS === | ||
Not written yet. | 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 === | === Games === | ||
List of games using this file format: | |||
* Drakan: Order of the Flame | * Drakan: Order of the Flame | ||
* Drakan: The Ancients' Gates | * Drakan: The Ancients' Gates | ||
* The Lord of the Rings: The Fellowship of the Ring | * The Lord of the Rings: The Fellowship of the Ring <font color="red">(needs confirmation!)</font> | ||
* The Suffering | |||
* The Suffering: Ties That Bind | * The Suffering: Ties That Bind | ||
* Gunslinger (cancelled game) | * Gunslinger (cancelled game) <font color="red">(needs confirmation!)</font> | ||
* The Lord of the Rings: The Treason of Isengard (cancelled game) (needs confirmation!) | * The Lord of the Rings: The Treason of Isengard (cancelled game) <font color="red">(needs confirmation!)</font> | ||
=== Supported Programs === | === 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