Mdl

Struct Mdl 

Source
pub struct Mdl {
Show 14 fields pub root_node: MdlNode, pub geometry_fn_ptr1: u32, pub geometry_fn_ptr2: u32, pub model_type: u8, pub classification: u8, pub subclassification: u8, pub affected_by_fog: u8, pub supermodel_name: String, pub node_count: u32, pub bounding_box: [f32; 6], pub radius: f32, pub animation_scale: f32, pub animations: Vec<MdlAnimation>, pub anim_root_node: Option<String>,
}
Expand description

The high-level MDL container.

Every field is fully typed - the reader extracts all meaningful header data and the writer produces correct binary output from these fields alone.

Fields§

§root_node: MdlNode

The root node of the model hierarchy.

§geometry_fn_ptr1: u32

Function pointer 1 from the geometry header (+0x00).

This is a leaked runtime vtable pointer from the BioWare toolset. Used by kotorblender for K1/K2/Xbox game detection. K1 PC value: 0x00413470.

§geometry_fn_ptr2: u32

Function pointer 2 from the geometry header (+0x04).

K1 PC value: 0x00405580.

§model_type: u8

Model type from geometry header (+0x4C). Always 2 for geometry models.

§classification: u8

Classification (0=Other, 1=Effect, 2=Tile, 4=Character, 8=Door).

§subclassification: u8

Subclassification byte (+0x51). Non-zero in ~196 vanilla K1 models.

§affected_by_fog: u8

Affected-by-fog flag (+0x53). 0 or 1.

§supermodel_name: String

The supermodel name (from header, +0x88).

§node_count: u32

Total node count (from header, +0x2C).

§bounding_box: [f32; 6]

Model bounding box (min_xyz, max_xyz) from header (+0x68..+0x7F).

§radius: f32

Model bounding sphere radius from header (+0x80).

§animation_scale: f32

Animation scale factor from header (+0x84). Default 1.0.

§animations: Vec<MdlAnimation>

Animations attached to this model.

§anim_root_node: Option<String>

Animation root node name, when different from the geometry root.

Head models set this to "neck_g" so the engine applies head animations from the neck bone rather than the model root. When None, the writer uses the geometry root offset for +0xA8.

Trait Implementations§

Source§

impl Clone for Mdl

Source§

fn clone(&self) -> Mdl

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Mdl

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl DecodeBinary for Mdl

Source§

fn decode_binary(bytes: &[u8]) -> Result<Self, Self::Error>

Decodes an MDL model from raw bytes without MDX vertex data.

For models with companion MDX data, use read_mdl_from_bytes directly with the mdx_bytes parameter.

Source§

type Error = MdlError

Error type used by the format.
Source§

impl EncodeBinary for Mdl

Source§

type Error = MdlError

Error type used by the format.
Source§

fn encode_binary(&self) -> Result<Vec<u8>, Self::Error>

Encodes a value into an owned byte buffer.
Source§

impl PartialEq for Mdl

Source§

fn eq(&self, other: &Mdl) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Mdl

Auto Trait Implementations§

§

impl Freeze for Mdl

§

impl RefUnwindSafe for Mdl

§

impl Send for Mdl

§

impl Sync for Mdl

§

impl Unpin for Mdl

§

impl UnwindSafe for Mdl

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.