Skip to main content

DecodedProperty

Enum DecodedProperty 

Source
pub enum DecodedProperty {
Show 41 variants AbilityBonus { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, SaveBonus { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, SaveBonusSpecific { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, SavePenalty { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, SavePenaltySpecific { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, DamageBonus { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, DamageImmunity { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, DamageResistance { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, DamageRacialGroup { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, DamageAlignmentGroup { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, EnhancementRacialGroup { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, EnhancementAlignmentGroup { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, AttackBonusAlignmentGroup { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, TrueSeeing { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, Light { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, param1: u8, param1_value: u8, }, AcBonus { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, EnhancementBonus { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, AttackBonus { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, Keen { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, MassiveCriticals { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, BlasterBoltDeflectIncrease { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, MonsterDamage { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, BonusFeats { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, Immunity { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, Skill { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, AttackPenalty { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, DamagePenalty { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, MagicResistBonus { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, DamageNone { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, Regeneration { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, RegenerationForcePoints { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, Disguise { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, UseLimitationFeat { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, UseLimitationRacial { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, UseLimitationAlignmentGroup { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, }, CastSpell { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, useable: bool, uses_per_day: Option<u8>, }, Trap { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, useable: bool, uses_per_day: Option<u8>, }, ThievesTools { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, useable: bool, uses_per_day: Option<u8>, }, ComputerSpike { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, useable: bool, uses_per_day: Option<u8>, }, OnHit { property_id: u16, subtype_id: u16, cost_table: u8, cost_value: u16, param1: u8, param1_value: u8, }, Unknown { property_id: u16, property_label: Option<String>, subtype: u16, cost_table: u8, cost_value: u16, param1: u8, param1_value: u8, },
}
Expand description

One decoded item-property entry.

The shape grows variants as more property kinds get typed; until a variant exists for a given engine kind, callers receive DecodedProperty::Unknown carrying every raw field plus the human-readable property label resolved from itempropdef.2da when reachable.

§Subtype dispatch

The per-property subtype id is preserved as a raw u16 on every variant. To resolve it to a human-readable label, call DecodedProperty::subtype_label, which walks the dispatch chain documented under “Property Table Dispatch” in the UTI engine audit (itempropdef.SubTypeResRef -> per-property iprp_*.2da -> label column at the subtype row).

Variants§

§

AbilityBonus

Ability-score bonus property (vanilla itempropdef.2da label Ability, row 0). The subtype identifies which ability score the bonus targets; the cost fields carry the magnitude reference into the cost-table dispatch chain.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Ability at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_abilities.2da). Vanilla rows: 0=STR, 1=DEX, 2=CON, 3=INT, 4=WIS, 5=CHA.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

SaveBonus

Universal saving-throw bonus property (vanilla itempropdef.2da label ImprovedSavingThrows, row 26). The subtype identifies which save element (Universal, Acid, Cold, …) the bonus applies to; the cost fields carry the magnitude reference into the cost-table dispatch chain.

This variant covers ImprovedSavingThrows only. The narrower ImprovedSavingThrowsSpecific (Fortitude/Reflex/Will) and the matching ReducedSavingThrows / ReducedSpecificSavingThrow kinds remain in Unknown until they get their own typed variants.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched ImprovedSavingThrows at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_saveelement.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

SaveBonusSpecific

Specific saving-throw bonus property (vanilla itempropdef.2da label ImprovedSavingThrowsSpecific, row 27). Narrower sibling of Self::SaveBonus: the subtype identifies which specific saving throw (Fortitude, Reflex, Will) the bonus applies to, indexed into iprp_savingthrow.2da rather than the element-based iprp_saveelement.2da.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched ImprovedSavingThrowsSpecific at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_savingthrow.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

SavePenalty

Universal saving-throw penalty property (vanilla itempropdef.2da label ReducedSavingThrows, row 33). Negative mirror of Self::SaveBonus: same subtype 2DA (iprp_saveelement) but the cost fields carry a penalty magnitude rather than a bonus.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched ReducedSavingThrows at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_saveelement.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

SavePenaltySpecific

Specific saving-throw penalty property (vanilla itempropdef.2da label ReducedSpecificSavingThrow, row 34). Negative mirror of Self::SaveBonusSpecific: same subtype 2DA (iprp_savingthrow) but the cost fields carry a penalty magnitude rather than a bonus.

The vanilla label uses singular Throw (where the bonus counterpart uses plural Throws); the dispatch matches the exact vanilla spelling.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched ReducedSpecificSavingThrow at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_savingthrow.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

DamageBonus

Damage bonus property (vanilla itempropdef.2da label Damage, row 11). The subtype identifies which damage type (Bludgeoning, Slashing, Acid, Cold, …) the bonus applies to; the cost fields carry the magnitude reference into the cost-table dispatch chain.

Distinct from Damage_Vulnerability (row 18) and the alignment/race-conditional DamageAlignmentGroup / DamageRacialGroup kinds, which remain in Unknown.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Damage at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_damagetype.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

DamageImmunity

Damage immunity property (vanilla itempropdef.2da label DamageImmunity, row 14). The subtype identifies which damage type the immunity applies to; the cost fields carry the percentage reference into the cost-table dispatch chain.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched DamageImmunity at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_damagetype.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

DamageResistance

Damage resistance property (vanilla itempropdef.2da label DamageResist, row 17). The subtype identifies which damage type the resistance applies to; the cost fields carry the soak-amount reference into the cost-table dispatch chain.

Distinct from DamageReduced (row 16, backed by iprp_protection.2da rather than iprp_damagetype.2da), which remains in Unknown.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched DamageResist at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_damagetype.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

DamageRacialGroup

Conditional damage bonus against a racial group (vanilla itempropdef.2da label DamageRacialGroup, row 13). The subtype identifies which row of racialtypes.2da the bonus applies against; the cost fields carry the magnitude.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched DamageRacialGroup at decode time).

§subtype_id: u16

Raw Subtype id (row index into racialtypes.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

DamageAlignmentGroup

Conditional damage bonus against an alignment group (vanilla itempropdef.2da label DamageAlignmentGroup, row 12). The subtype identifies which row of iprp_aligngrp.2da the bonus applies against; the cost fields carry the magnitude.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched DamageAlignmentGroup at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_aligngrp.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

EnhancementRacialGroup

Conditional enhancement bonus against a racial group (vanilla itempropdef.2da label EnhancementRacialGroup, row 7). The subtype identifies which row of racialtypes.2da the bonus applies against; the cost fields carry the magnitude.

Sibling of DamageRacialGroup and shares the racialtypes.2da dispatch chain. The alignment-group equivalent is Self::EnhancementAlignmentGroup.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched EnhancementRacialGroup at decode time).

§subtype_id: u16

Raw Subtype id (row index into racialtypes.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

EnhancementAlignmentGroup

Conditional enhancement bonus against an alignment group (vanilla itempropdef.2da label EnhancementAlignmentGroup, row 6). The subtype identifies which row of iprp_aligngrp.2da the bonus applies against; the cost fields carry the magnitude. Sibling of Self::EnhancementRacialGroup and Self::DamageAlignmentGroup.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched EnhancementAlignmentGroup at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_aligngrp.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

AttackBonusAlignmentGroup

Conditional attack-bonus against an alignment group (vanilla itempropdef.2da label AttackBonusAlignmentGroup, row 39). The subtype identifies which row of iprp_aligngrp.2da the bonus applies against; the cost fields carry the magnitude.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched AttackBonusAlignmentGroup at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_aligngrp.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

TrueSeeing

True-seeing property (vanilla itempropdef.2da label True_Seeing, row 47). Grants the wearer the ability to see through invisibility / stealth. No subtype dimension; the cost fields carry the engine-side magnitude reference.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched True_Seeing at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

Light

Light-source property (vanilla itempropdef.2da label Light, row 29). Makes the item emit light when equipped or dropped. No subtype dimension, but row 29 in itempropdef.2da declares a param1resref, so the engine consumes param1 / param1_value to convey brightness or colour parameters. Both param fields are preserved on the typed variant so consumers do not have to fall back to the raw UtiProperty to read them.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Light at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§param1: u8

Raw Param1 id (row index into iprp_paramtable.2da).

§param1_value: u8

Raw Param1Value id (row index into the param-table’s iprp_*.2da).

§

AcBonus

Armour-class bonus property (vanilla itempropdef.2da label Armor, row 1). No subtype dimension; the cost fields carry the bonus magnitude reference.

subtype_id is preserved for shape parity across variants even though the engine ignores it for this kind. Vanilla content writes 0 here.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Armor at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

EnhancementBonus

Enhancement bonus property (vanilla itempropdef.2da label Enhancement, row 5). No subtype dimension; the cost fields carry the bonus magnitude reference.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Enhancement at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

AttackBonus

Flat attack bonus property (vanilla itempropdef.2da label AttackBonus, row 38). No subtype dimension; the cost fields carry the bonus magnitude reference. Heavily used in vanilla across weapons and accessories.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched AttackBonus at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

Keen

Keen property (vanilla itempropdef.2da label Keen, row 28). Widens the critical-hit threat range on the weapon. No subtype dimension; the cost fields carry the magnitude.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Keen at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

MassiveCriticals

Massive criticals property (vanilla itempropdef.2da label Massive_Criticals, row 49). Adds extra damage on a critical hit. No subtype dimension; the cost fields carry the damage magnitude.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Massive_Criticals at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

BlasterBoltDeflectIncrease

Blaster-bolt deflection bonus (vanilla itempropdef.2da label Blaster_Bolt_Deflect_Increase, row 55). Improves the deflect chance on a lightsaber. No subtype dimension; the cost fields carry the magnitude.

Distinct from Blaster_Bolt_Defect_Decrease (row 56, vanilla typo with Defect), which has near-zero corpus usage and stays in Unknown.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Blaster_Bolt_Deflect_Increase at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

MonsterDamage

Monster damage property (vanilla itempropdef.2da label Monster_damage, row 51). Engine uses this on monster claws, bites, and similar natural weapons. No subtype dimension; the cost fields carry the damage magnitude.

The vanilla label uses lowercase d in damage; the dispatch match arm matches that spelling verbatim.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Monster_damage at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

BonusFeats

Bonus-feat property (vanilla itempropdef.2da label BonusFeats, row 9). The subtype identifies which row of feat.2da the item grants while equipped. The cost fields are usually unused for this property kind (the engine grants the feat directly rather than scaling by magnitude).

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched BonusFeats at decode time).

§subtype_id: u16

Raw Subtype id (row index into feat.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

Immunity

Immunity property (vanilla itempropdef.2da label Immunity, row 24). The subtype identifies which row of iprp_immunity.2da the item grants immunity to (e.g. Mind-Affecting, Paralysis). The cost fields carry the immunity strength reference.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Immunity at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_immunity.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

Skill

Skill bonus property (vanilla itempropdef.2da label Skill, row 36). The subtype identifies which row of skills.2da (Persuade, Demolitions, …) gets the bonus; the cost fields carry the magnitude.

Distinct from DecreasedSkill (row 21, also backed by skills.2da), which has zero corpus usage in vanilla items and stays in Unknown.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Skill at decode time).

§subtype_id: u16

Raw Subtype id (row index into skills.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

AttackPenalty

Flat attack penalty property (vanilla itempropdef.2da label AttackPenalty, row 8). Mirror of Self::AttackBonus: same subtypeless shape, cost fields carry the magnitude of the penalty rather than the bonus.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched AttackPenalty at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

DamagePenalty

Flat damage penalty property (vanilla itempropdef.2da label DamagePenalty, row 15). Subtypeless mirror of Self::DamageBonus: cost fields carry the penalty magnitude.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched DamagePenalty at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

MagicResistBonus

Magic-resistance bonus (vanilla itempropdef.2da label ImprovedMagicResist, row 25). No subtype dimension; the cost fields carry the resist magnitude.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched ImprovedMagicResist at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

DamageNone

No-damage marker property (vanilla itempropdef.2da label DamageNone, row 31). Flags a weapon as dealing no damage on hit (used on unarmed strikes, training weapons, and similar). No subtype dimension and no meaningful cost payload; the fields are preserved for round-trip fidelity.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched DamageNone at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

Regeneration

Hit-point regeneration property (vanilla itempropdef.2da label Regeneration, row 35). Restores HP per round while equipped. No subtype dimension; the cost fields carry the magnitude.

The force-points counterpart Self::RegenerationForcePoints applies to FP rather than HP.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Regeneration at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

RegenerationForcePoints

Force-point regeneration property (vanilla itempropdef.2da label Regeneration_Force_Points, row 54). Restores FP per round while equipped. No subtype dimension; the cost fields carry the magnitude.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Regeneration_Force_Points at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

Disguise

Disguise property (vanilla itempropdef.2da label Disguise, row 59). The subtype identifies which row of appearance.2da the wearer takes on while the item is equipped (used by mask items that change the player’s apparent species).

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Disguise at decode time).

§subtype_id: u16

Raw Subtype id (row index into appearance.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

UseLimitationFeat

Feat-restricted use property (vanilla itempropdef.2da label Use_Limitation_Feat, row 57). The subtype identifies which feat from feat.2da the wielder must possess to equip or activate the item.

Passive property: the engine consults the subtype at equip time and rejects use if the wielder lacks the feat. useable and uses_per_day are not consumed for this kind.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Use_Limitation_Feat at decode time).

§subtype_id: u16

Raw Subtype id (row index into feat.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

UseLimitationRacial

Race-restricted use property (vanilla itempropdef.2da label UseLimitationRacial, row 45). The subtype identifies which row of racialtypes.2da the wielder must match.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched UseLimitationRacial at decode time).

§subtype_id: u16

Raw Subtype id (row index into racialtypes.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

UseLimitationAlignmentGroup

Alignment-restricted use property (vanilla itempropdef.2da label UseLimitationAlignmentGroup, row 43). The subtype identifies which row of iprp_aligngrp.2da the wielder’s alignment must satisfy.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched UseLimitationAlignmentGroup at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_aligngrp.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§

CastSpell

Cast-spell active property (vanilla itempropdef.2da label CastSpell, row 10). The engine routes this property into the per-character usable-ability table (one of four hardcoded “active” rows alongside ThievesTools, Trap, and Computer_Spike). The subtype identifies which spell from spells.2da the item casts.

Active properties differ from passive ones in that the useable and uses_per_day fields are load-bearing rather than ignored. Both are decoded with the engine’s defaults applied:

  • useable defaults to true for active properties when absent from the GFF; false only when explicitly set.
  • uses_per_day decodes the 0xFF engine sentinel into None (meaning “unlimited / not constrained”); explicit non-sentinel values come through as Some(N).

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched CastSpell at decode time).

§subtype_id: u16

Raw Subtype id (row index into spells.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§useable: bool

Whether the item can be activated. true when the GFF omits Useable (engine default for active properties) or sets it to a non-zero value; false when explicitly disabled.

§uses_per_day: Option<u8>

Daily-use cap. None when the GFF omits UsesPerDay or stores the engine sentinel 0xFF (“not set / no limit”); Some(N) for explicit caps.

§

Trap

Trap active property (vanilla itempropdef.2da label Trap, row 46). Routed into the active-property table alongside CastSpell. The subtype identifies which trap from traps.2da deploys.

useable and uses_per_day follow the same active-property decoding rules documented on Self::CastSpell.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Trap at decode time).

§subtype_id: u16

Raw Subtype id (row index into traps.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§useable: bool

Whether the item can be activated. See Self::CastSpell.

§uses_per_day: Option<u8>

Daily-use cap. See Self::CastSpell.

§

ThievesTools

Thieves-tools active property (vanilla itempropdef.2da label ThievesTools, row 37). Routed into the active-property table alongside CastSpell. No subtype dimension; the cost fields carry the magnitude (the security-skill bonus the tool grants while equipped).

subtype_id is preserved for shape parity even though the engine ignores it. useable and uses_per_day follow the same active-property decoding rules documented on Self::CastSpell.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched ThievesTools at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§useable: bool

Whether the item can be activated. See Self::CastSpell.

§uses_per_day: Option<u8>

Daily-use cap. See Self::CastSpell.

§

ComputerSpike

Computer-spike active property (vanilla itempropdef.2da label Computer_Spike, row 53). Routed into the active-property table alongside CastSpell. No subtype dimension; the cost fields carry the magnitude (the computer-use skill bonus the spike grants).

subtype_id is preserved for shape parity even though the engine ignores it. useable and uses_per_day follow the same active-property decoding rules documented on Self::CastSpell.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched Computer_Spike at decode time).

§subtype_id: u16

Raw Subtype id. Not consumed by the engine for this property kind; surfaced for round-trip fidelity.

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§useable: bool

Whether the item can be activated. See Self::CastSpell.

§uses_per_day: Option<u8>

Daily-use cap. See Self::CastSpell.

§

OnHit

On-hit effect property (vanilla itempropdef.2da label OnHit, row 32). The subtype identifies which on-hit effect (Daze, Stun, Wound, …) fires when the weapon connects.

Unlike the other passive variants, OnHit’s param1 / param1_value fields are load-bearing: they convey the effect’s magnitude / DC / duration through the iprp_paramtable.2da dispatch chain. Both fields are preserved on the typed variant so consumers do not have to fall back to the raw UtiProperty to read them.

Fields

§property_id: u16

Raw PropertyName (the row in itempropdef.2da whose label matched OnHit at decode time).

§subtype_id: u16

Raw Subtype id (row index into iprp_onhit.2da).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s per-property iprp_*.2da).

§param1: u8

Raw Param1 id (row index into iprp_paramtable.2da). Conveys the effect’s parameter dimension (DC, magnitude, duration depending on the on-hit kind).

§param1_value: u8

Raw Param1Value id (row index into the param-table’s iprp_*.2da).

§

Unknown

Property kind for which no typed variant exists yet, or whose PropertyName does not resolve in itempropdef.2da. Carries every raw field so consumers can still introspect or round-trip.

Fields

§property_id: u16

Raw PropertyName (engine row index into itempropdef.2da).

§property_label: Option<String>

Human-readable label from itempropdef.2da’s label column when the row resolves; None when the row is absent or the table cannot be loaded.

§subtype: u16

Raw Subtype id (row index into the property kind’s iprp_*.2da subtype table).

§cost_table: u8

Raw CostTable id (row index into iprp_costtable.2da).

§cost_value: u16

Raw CostValue id (row index into the cost-table’s iprp_*.2da).

§param1: u8

Raw Param1 id (row index into iprp_paramtable.2da).

§param1_value: u8

Raw Param1Value id (row index into the param-table’s iprp_*.2da).

Implementations§

Source§

impl DecodedProperty

Source

pub fn subtype_label(&self, cache: &mut TwoDaCache<'_>) -> Option<String>

Resolves a developer-readable label for this property’s subtype by walking the engine’s per-property subtype dispatch chain.

Returns None when any step of the chain fails to resolve:

  • the source PropertyName row is absent from itempropdef.2da,
  • the row’s SubTypeResRef cell is empty (the property has no subtype dimension at all),
  • the per-property subtype 2DA cannot be loaded,
  • the Subtype row is past the loaded subtype 2DA’s row count, or
  • any 2DA in the chain is missing or malformed.

The returned string is the developer-readable label column (e.g. "Acid" from iprp_damagecost.2da), not a TLK-resolved display name. Tooling that needs the localized display name must resolve the Name column against a talktable separately.

Trait Implementations§

Source§

impl Clone for DecodedProperty

Source§

fn clone(&self) -> DecodedProperty

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 DecodedProperty

Source§

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

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

impl PartialEq for DecodedProperty

Source§

fn eq(&self, other: &DecodedProperty) -> 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 Eq for DecodedProperty

Source§

impl StructuralPartialEq for DecodedProperty

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> 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.