pub struct GameResources { /* private fields */ }Expand description
Unified resource accessor for a game installation directory.
Searches modules/*.rim files and KEY/BIF archives. RIM resources
take precedence over KEY/BIF for the same resref. Supports both
single-resource lookup and bulk enumeration.
§Examples
use rakata_core::ResourceType;
use rakata_extract::GameResources;
let game = GameResources::open("/path/to/game")?;
// Find a single resource
if let Some((data, source)) = game.find("c_humanoid01", ResourceType::Mdl)? {
println!("Found in {source}, {} bytes", data.len());
}Implementations§
Source§impl GameResources
impl GameResources
Sourcepub fn open(game_root: impl AsRef<Path>) -> Result<Self, GameResourcesError>
pub fn open(game_root: impl AsRef<Path>) -> Result<Self, GameResourcesError>
Open a game installation directory.
Loads chitin.key and enumerates modules/*.rim paths (sorted).
RIM contents are read lazily during find/iteration calls.
Sourcepub fn exists(
&self,
resref: &str,
resource_type: ResourceType,
) -> Result<bool, GameResourcesError>
pub fn exists( &self, resref: &str, resource_type: ResourceType, ) -> Result<bool, GameResourcesError>
Check whether a resource exists anywhere in the installation.
Sourcepub fn find(
&self,
resref: &str,
resource_type: ResourceType,
) -> Result<Option<(Vec<u8>, String)>, GameResourcesError>
pub fn find( &self, resref: &str, resource_type: ResourceType, ) -> Result<Option<(Vec<u8>, String)>, GameResourcesError>
Find and extract a single resource by resref.
Searches RIM files first, then KEY/BIF. Returns (data, source_label)
or None if not found.
Sourcepub fn find_pair(
&self,
resref: &str,
primary_type: ResourceType,
companion_type: ResourceType,
) -> Result<Option<ResourcePair>, GameResourcesError>
pub fn find_pair( &self, resref: &str, primary_type: ResourceType, companion_type: ResourceType, ) -> Result<Option<ResourcePair>, GameResourcesError>
Find a resource and its companion (e.g., MDL + MDX, TPC + TXI).
Returns (data, companion_data, source_label) or None if the
primary resource is not found. The companion may be None even when
the primary exists.
Sourcepub fn for_each<F>(
&self,
resource_type: ResourceType,
f: F,
) -> Result<(), GameResourcesError>
pub fn for_each<F>( &self, resource_type: ResourceType, f: F, ) -> Result<(), GameResourcesError>
Iterate all unique resources of a given type across the installation.
Calls f(resref, data, source_label) for each unique resource.
RIM resources are yielded first and take precedence – if a resref
appears in both a RIM and KEY/BIF, only the RIM version is yielded.
Sourcepub fn for_each_pair<F>(
&self,
primary_type: ResourceType,
companion_type: ResourceType,
f: F,
) -> Result<(), GameResourcesError>
pub fn for_each_pair<F>( &self, primary_type: ResourceType, companion_type: ResourceType, f: F, ) -> Result<(), GameResourcesError>
Iterate all unique resources with a companion type.
Calls f(resref, data, companion_data, source_label) for each unique
primary resource. The companion may be None.