#age #engine #drs #resources #genie #file-format #empires

genie-drs

Read .drs archive files from the Genie Engine, used in Age of Empires 1/2 and SWGB

3 unstable releases

0.2.1 May 18, 2020
0.2.0 Aug 4, 2019
0.1.1 Apr 9, 2019

#1941 in Parser implementations


Used in genie

GPL-3.0 license

30KB
623 lines

genie-drs

.drs is the resource archive file format for the Genie Engine, used by Age of Empires 1/2 and Star Wars: Galactic Battlegrounds. .drs files contain tables, each of which contain resources of a single type. Resources are identified by a numeric identifier.

This crate only supports reading files right now.

Install

Add to Cargo.toml:

[dependencies]
genie-drs = "^0.1.1"

Example

use std::fs::File;
use genie_drs::DRSReader;

let mut file = File::open("test.drs")?;
let drs = DRSReader::new(&mut file)?;

for table in drs.tables() {
    for resource in table.resources() {
        let content = drs.read_resource(&mut file, table.resource_type, resource.id)?;
        println!("{}: {:?}", resource.id, std::str::from_utf8(&content)?);
    }
}

Wishlist

  • An API that doesn't require passing in the file handle manually
  • A file mapping counterpart for the read_resource API, using memmap probably.

License

GPL-3.0 or later

Dependencies

~0.4–1MB
~21K SLoC