Skip to main content

GameResources

Struct GameResources 

Source
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

Source

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.

Source

pub fn exists( &self, resref: &str, resource_type: ResourceType, ) -> Result<bool, GameResourcesError>

Check whether a resource exists anywhere in the installation.

Source

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.

Source

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.

Source

pub fn for_each<F>( &self, resource_type: ResourceType, f: F, ) -> Result<(), GameResourcesError>
where F: FnMut(&str, Vec<u8>, &str),

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.

Source

pub fn for_each_pair<F>( &self, primary_type: ResourceType, companion_type: ResourceType, f: F, ) -> Result<(), GameResourcesError>
where F: FnMut(&str, Vec<u8>, Option<Vec<u8>>, &str),

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.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> StrictAs for T

Source§

fn strict_as<Dst>(self) -> Dst
where T: StrictCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> StrictCastFrom<Src> for Dst
where Src: StrictCast<Dst>,

Source§

fn strict_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.