-
Notifications
You must be signed in to change notification settings - Fork 0
ships.Interface.OutfittingModuleIdentity
@elite-dangerous-almanac/core / ships / OutfittingModuleIdentity
Defined in: ships/modules.ts:211
Identity, classification, fit constraints, and price for one outfitting module.
The core identity fields (symbol, name, category, class, and rating) are
always present. Optional fields describe fit restrictions, purchase entitlement, and
price. Performance data belongs to OutfittingModuleStats; the complete flat
catalogue record is OutfittingModule.
import type { OutfittingModuleIdentity } from '@elite-dangerous-almanac/core/ships/modules';
const identity: OutfittingModuleIdentity = {
symbol: 'CustomCargoRack',
category: 'internal',
engineeringGroup: 'cargoRacks',
name: 'Custom Cargo Rack',
class: 2,
rating: 'E',
};
readonlycategory:ModuleCategory
Defined in: ships/modules.ts:225
Which kind of slot the module fits.
Derived from the catalogue the record was read from rather than stored on it —
CORE_MODULES is what makes a record 'core' — so it is always present and
always agrees with the catalogue you found the module in — it is written after
the record's own fields, so the file wins outright. That also makes it the last
key on the record, which is worth knowing only if you serialize one and compare
the resulting string.
readonlyclass:number
Defined in: ships/modules.ts:288
The module size, 0–8 — the number in the "5A" the outfitting screen shows.
Frontier calls this the module class; it is the slot-size number, not the
grade letter (that is OutfittingModule.rating). Named class to match
the source registry.
readonlyoptionalcost?:number
Defined in: ships/modules.ts:384
Standard purchase price, in credits — the base list price before any station discount or markup, which is what an outfitting screen quotes at 0% discount.
Absent on the handful of records no registry prices: the starter *_free
variants, the size-8 frame shift drives, and a few internals no outfitting
registry carries a figure for — among them the two Corrosion Resistant Cargo
Racks no station sells, which are not free. Treat undefined as "unknown", never
as free — see data/ships/SOURCES.md.
readonlyengineeringGroup:EngineeringGroupId|null
Defined in: ships/modules.ts:230
Stable engineering-menu family, or null when no source classifies this module.
See EngineeringGroupId.
readonlyoptionalentitlement?:string
Defined in: ships/modules.ts:311
Frontier's DLC / purchase-grant entitlement token, e.g.
"ELITE_HORIZONS_V_PLANETARY_LANDINGS". Present only on gated modules.
readonlyoptionalguidance?:ModuleGuidance
Defined in: ships/modules.ts:300
A missile/torpedo hardpoint's guidance. Present only on the launchers that have one; absent on everything else.
readonlyoptionalmount?:ModuleMount
Defined in: ships/modules.ts:295
How the weapon is aimed. Present only on hardpoint weapons that have a mount variant; absent on every other module.
readonlyname:string
Defined in: ships/modules.ts:279
Stable, descriptive English name, e.g. "Pulse Laser".
This is a canonical library label, not a byte-exact copy of the game's localized UI text: abbreviations such as FSD and AFM are expanded for readability. It is not localized and is not suitable as a localization key.
Not unique — the game shows most modules at several sizes and ratings, and every hull's armour shares the same five names. Use OutfittingModule.symbol as the key; getModulesByName returns every match.
readonlyrating:ModuleRating
Defined in: ships/modules.ts:290
The grade letter, A–I — the letter in the "5A" the screen shows.
readonlyoptionalrestrictedToShips?: readonlystring[]
Defined in: ships/modules.ts:323
The hull symbol(s) a module is restricted to, when it is ship-specific — e.g.
["Explorer_NX"] for the Python Mk II's MkII Gravity Optimised thrusters.
Present only on the handful of non-armour modules limited to particular hulls. Armour is ship-specific too, but that restriction lives in OutfittingModule.ship / getBulkheadsForShip, not here. Symbols match Ship.symbol.
readonlyoptionalrestrictedToSlot?:SlotRestriction
Defined in: ships/modules.ts:372
The slot restriction a module requires — it fits only mounts carrying this SlotRestriction, and no unrestricted mount at all.
Not to be confused with OutfittingModule.slot, which names one mount the module fills; this narrows a whole family of them, and the two never appear on the same record.
The mirror image of BuildSlot.restriction, and the other half of the same
rule: a mount's restriction says which modules it takes, this says which mounts
a module goes in. Most restricted families bind one way only — a cargo rack fits
a cargo mount and any unrestricted optional — so this is present on just the
five records the game sells for one kind of mount and nowhere else:
| Module | Requires |
|---|---|
Int_PlanetApproachSuite, Int_PlanetApproachSuite_Advanced
|
planetaryApproachSuite |
Int_LargeCargoRack_Size7_Class1, Int_LargeCargoRack_Size8_class1 (Mk II Cargo Rack) |
cargo |
Int_MultiDroneControl_MiningV2_Size5_Class5 (Mk II Mining Multi-Limpet Controller) |
limpetController |
It composes with OutfittingModule.restrictedToShips rather than replacing it: the Mk II racks name both the hull that can buy them and the kind of mount they go in, and a build must satisfy both. Where a module names a hull and nothing else — the Mk II Vessel Hangars, say — it fits that hull's ordinary optionals like anything else.
The rule is read off the record, not off the symbol. A module you assemble
yourself — from a journal Item string, say — is refused only if you give it
this field, exactly as restrictedToShips behaves. Resolve records from a
catalogue and the question does not arise.
import { getModuleBySymbol } from '@elite-dangerous-almanac/core/ships/modules';
import { INTERNAL_MODULES } from '@elite-dangerous-almanac/core/ships/modules-internal';
import { ShipLoadout } from '@elite-dangerous-almanac/core/ships/ship-loadout';
const rack = getModuleBySymbol('Int_LargeCargoRack_Size8_class1', INTERNAL_MODULES)!;
rack.restrictedToSlot; // -> 'cargo'
ShipLoadout.empty('PantherMkII').setModule('Cargo01', rack); // fits
try {
ShipLoadout.empty('PantherMkII').setModule('Slot01_Size8', rack);
} catch (error) {
if (error instanceof TypeError) error.message;
// -> 'ShipLoadout.setModule: Int_LargeCargoRack_Size8_class1 → Slot01_Size8: module only fits a mount that takes cargo racks and fuel tanks'
}
readonlyoptionalship?:string
Defined in: ships/modules.ts:306
The hull an armour variant belongs to, e.g. "Anaconda". Present only on the
core-category armour modules, which are the one ship-specific module;
absent on every generic module.
readonlyoptionalslot?:ModuleSlot
Defined in: ships/modules.ts:266
The one fixed mount this module fills, when it fills one: 'armour' or one of
the seven CoreSlotType core functions.
Present on every core module, and on the fifteen Guardian Hybrid power plants
and power distributors — which Frontier files under internal, but which go in
a core mount. Absent on everything else, because there is no one mount to name:
a weapon, a utility fitting or an ordinary optional internal fits any mount of
its kind that is large enough.
This is the module's half of the fit rule and BuildSlot.core is the mount's
half; ShipLoadout.setModule matches the two. Read it rather than inferring a
mount from the symbol — Int_Engine_* being thrusters is a naming habit, not a
guarantee, and the Python Mk II's Int_MkIIAgileBoost_* thrusters already break
it.
A fuelTank is the one module that fits somewhere else as well: its own core
mount and any optional slot large enough.
The rule is read off the record, not off the symbol — the same way
OutfittingModule.restrictedToShips behaves, and with the same
consequence: a record you assemble yourself from a journal Item string, with
no slot on it, will not go into a core mount. Resolve records from a catalogue
(getModuleBySymbol) and the question does not arise.
import { getModuleBySymbol } from '@elite-dangerous-almanac/core/ships/modules';
getModuleBySymbol('Int_Hyperdrive_Size5_Class5')?.slot; // -> 'frameShiftDrive'
getModuleBySymbol('Anaconda_Armour_Grade1')?.slot; // -> 'armour'
getModuleBySymbol('Int_CargoRack_Size4_Class1')?.slot; // -> undefined
readonlysymbol:string
Defined in: ships/modules.ts:213
Internal identifier, e.g. "Hpt_PulseLaser_Fixed_Small". Unique — the module's key.
Guides
astro
Classes (1)
ProceduralSystem
Properties
Accessors
Methods
Interfaces (16)
Type Aliases (3)
Variables (11)
Functions (37)
- absoluteBoxelToBoxelCode
- boxelCodeToAbsoluteBoxel
- boxelCodeToLetters
- boxelEdgeLy
- boxelInternalSize
- canonicalizeSectorName
- canonicalizeSystemName
- decodeModSystemAddress
- decodeSystemAddress
- encodeModSystemAddress
- encodeSystemAddress
- findHandAuthoredRegionAt
- formatSystemName
- getCodexRegion
- getCodexRegionByName
- getHandAuthoredRegionOrigin
- getNebulaByName
- isPermitLockedRegionName
- isPermitLockedSystemName
- isProceduralSystemName
- lettersToBoxelCode
- massCodeToSizeClass
- nearestNebulae
- nebulaeWithin
- parseSystemName
- permitLockedRegionForSystemName
- permitLockedSystemForAddress
- permitLockedSystemForName
- permitLockForSystemName
- resolveNamingRegionOrigin
- sectorGridPositionFromGalacticPosition
- sectorGridPositionFromName
- sectorNameFromGalacticPosition
- sectorNameFromGridPosition
- sizeClassToMassCode
- toSystemAddress
- tryToSystemAddress
commodities
Interfaces (1)
Type Aliases (1)
Variables (3)
Functions (3)
equipment
Interfaces (6)
Type Aliases (8)
Variables (3)
Functions (10)
Subpath modules (2)
i18n
Interfaces (1)
Type Aliases (1)
Functions (17)
- getBlueprintName
- getCalculationIssueMessage
- getEngineeringGroupName
- getExperimentalEffectDescription
- getExperimentalEffectName
- getLoadoutEditErrorMessage
- getLoadoutIssueMessage
- getLoadoutSlotName
- getMaterialName
- getMicroResourceName
- getModuleName
- getOutfittingFamilyName
- getPreEngineeredVariantName
- getShipManufacturer
- getShipName
- getSlefDiagnosticMessage
- getSlotRestrictionLabel
materials
Enumerations (2)
Interfaces (2)
Type Aliases (2)
Variables (9)
ships
Classes (3)
BuildMetrics
Methods
- armourMetrics()
- buildCost()
- buildMass()
- cellBanks()
- distributorMetrics()
- distributorMetricsResult()
- frameShiftDrive()
- frameShiftDriveMassFactor()
- fuelPerJump()
- heatMetrics()
- heatMetricsResult()
- jumpRange()
- jumpRangeSummary()
- ladenJumpRange()
- loadout()
- maxJumpRange()
- mobilityCapacitorMetrics()
- mobilityCapacitorMetricsResult()
- mobilityMetrics()
- mobilityMetricsResult()
- powerBudget()
- shieldCapacitorMetrics()
- shieldCapacitorMetricsResult()
- shieldMetrics()
- shieldMetricsResult()
- shieldRecovery()
- shieldRecoveryResult()
- standardLoad()
- standardLoadResult()
- thrusters()
- totalRange()
- weaponMetrics()
- weaponsCapacitorMetrics()
- of()
LoadoutEditError
Constructors
Properties
Methods
ShipLoadout
Accessors
- cargoCapacity
- fuelCapacity
- hullValue
- importOutcomes
- modulesValue
- rebuy
- shipIdent
- shipName
- shipSymbol
- sourcePurchase
- unladenMass
Methods
- applyBlueprint()
- availableBlueprints()
- availableExperimentalEffects()
- clearEngineering()
- completeEngineeringGrade()
- fittedModuleAt()
- fittedModules()
- modulesForSlot()
- removeModule()
- repairFixedMount()
- setExperimentalEffect()
- setModule()
- setModuleEnabled()
- setModulePriority()
- setPreEngineeredVariant()
- slots()
- toLoadoutEvent()
- toSlef()
- toSlefString()
- validation()
- default()
- empty()
- fromLoadout()
- fromSlef()
Interfaces (125)
- AmmunitionCapacity
- AmmunitionStats
- ApplyBlueprintOptions
- ArmourInput
- ArmourMetrics
- AvailableBlueprint
- Blueprint
- BlueprintFeature
- BlueprintGrade
- BlueprintModuleEngineering
- BuildCost
- BuildCredits
- BuildMass
- BuildSlotBase
- BuildWeaponMetrics
- BulkheadParams
- CalculationIssue
- CellBankInput
- CellBankMetrics
- CellBankSummary
- CoreBuildSlot
- CoreSlots
- DamageComponents
- DamageDistribution
- DamageResistanceParams
- DamageSplit
- DamageTypeValues
- DistributorCapacitorMetrics
- DistributorInput
- DistributorMetrics
- DistributorOptions
- DistributorPips
- EngineeringMaterial
- EngineeringModifier
- EngineeringNormalizationUnchanged
- EngineeringNormalizationUnsupported
- EngineeringNormalized
- EngineeringOptionGroup
- ExperimentalContribution
- ExperimentalEffect
- ExperimentalEffectUnchanged
- ExperimentalEffectUnsupported
- ExperimentalEffectUpdated
- FittedModule
- FittedWeaponMetrics
- FrameShiftDriveJumpStats
- FrameShiftDriveParams
- FuelCapacity
- GunsightPoint
- HardpointBuildSlot
- HardpointSlotSpec
- HeatInput
- HeatMetrics
- HeatState
- HeatWeapon
- HullReinforcementParams
- JumpOptions
- JumpRangeSummary
- LoadoutCalculationModule
- LoadoutEvent
- LoadoutExportOptions
- LoadoutIssue
- LoadoutMass
- LoadoutModule
- LoadoutValidation
- LoadoutValidationInput
- MassCurveStats
- MobilityCapacitorInput
- MobilityCapacitorMetrics
- MobilityCapacitorOptions
- MobilityInput
- MobilityMetrics
- ModuleLimitEntry
- ModuleLimitIncrease
- ModuleLimitUsage
- ModuleReinforcementParams
- OptionalBuildSlot
- OptionalSlotSpec
- OutfittingModule
- OutfittingModuleIdentity
- OutfittingModuleStats
- ParsedSlot
- PowerBand
- PowerBudget
- PowerConsumer
- PowerConsumerResult
- PowerDistributorStats
- PowerGenerationStats
- PreEngineeredModifier
- PreEngineeredVariant
- ProjectileRangeBoundaries
- ShieldBoosterParams
- ShieldCapacitorInput
- ShieldCapacitorMetrics
- ShieldCapacitorOptions
- ShieldGeneratorParams
- ShieldInput
- ShieldMetrics
- ShieldRecovery
- ShieldRecoveryInput
- ShieldRecoveryOptions
- ShieldRegenerationStats
- Ship
- ShipSlots
- SimpleBuildSlot
- SlefDiagnostic
- SlefEntry
- SlefExportOptions
- SlefHeader
- SlefInspection
- SlefStringifyOptions
- SourceModuleValue
- SourcePurchaseRecord
- StandardLoadInputs
- ThrusterCurveParams
- ThrusterParams
- TotalRangeDetails
- ValidationModule
- WeaponDamageStats
- WeaponMetrics
- WeaponsCapacitorInput
- WeaponsCapacitorMetrics
- WeaponsOptions
- WeaponStats
- WeaponTotals
Type Aliases (44)
- BlueprintGrades
- BuildSlot
- CalculationIssueReason
- CalculationResult
- CoreSlotType
- DamageResistances
- DamageType
- EngineeringGroupId
- EngineeringNormalizationCode
- EngineeringNormalizationResult
- ExperimentalEffectMutationCode
- ExperimentalEffectMutationResult
- FixedMountRepairResult
- GunsightOffset
- HardpointRestriction
- ImmovableReason
- LoadoutEditErrorCode
- LoadoutImportOutcome
- LoadoutIssueCode
- LoadoutIssueParam
- LoadoutIssueParams
- LoadoutSlot
- ModifierMethod
- ModuleCategory
- ModuleEngineering
- ModuleExclusionGroup
- ModuleFitConstraint
- ModuleGuidance
- ModuleLimitGroup
- ModuleMount
- ModuleRating
- ModuleSlot
- OptionalRestriction
- OutfittingFamilyId
- PreEngineeredAcquisition
- ShipGunsight
- ShipGunsightCatalogue
- Slef
- SlefConstraint
- SlefDiagnosticCode
- SlotKind
- SlotRestriction
- StandardLoad
- ThrusterLoad
Variables (10)
Functions (85)
- ammunitionCapacity
- armourMetrics
- armourPiercingFactor
- calculateCargoCapacity
- calculateFuelCapacity
- calculateModuleLimits
- calculateUnladenMass
- cellBankSummary
- combinedRateOfFire
- computeModifiers
- damageFalloff
- damagePerSecond
- distributorMetrics
- effectiveHitPoints
- effectiveWeaponThermalLoad
- energyPerSecond
- enumerateSlots
- equilibriumHeatLevel
- frameShiftDriveMassFactor
- fuelPerJump
- getBlueprint
- getBlueprintGrade
- getBlueprintsForModule
- getBulkheadsForShip
- getEngineeringGroup
- getExperimentalEffect
- getExperimentalsForBlueprint
- getExperimentalsForModule
- getLoadoutModifier
- getModuleBySymbol
- getModulesByName
- getPreEngineeredJournalModifiers
- getPreEngineeredModifiers
- getPreEngineeredStats
- getPreEngineeredVariants
- getShipByName
- getShipBySymbol
- getShipGunsight
- getShipSlots
- getSourceModuleValue
- hasFrameShiftDriveJumpStats
- hasMassCurveStats
- hasPowerDistributorStats
- hasPowerGenerationStats
- hasShieldRegenerationStats
- hasWeaponDamageStats
- heatLevelAtTime
- heatMetrics
- heatPerSecond
- identifyPreEngineeredVariant
- inspectSlef
- isPreEngineered
- mapDamageTypes
- mobilityCapacitorMetrics
- mobilityMetrics
- parseSlef
- parseSlotName
- powerBudget
- projectGunsight
- resolveBlueprintForModule
- secondsToHeatLevel
- shieldCapacitorMetrics
- shieldMassCurveMultiplier
- shieldMetrics
- shieldRecovery
- shieldStrength
- singleJumpRange
- sourcePurchaseFromLoadout
- splitDamage
- stackArmourResistance
- stackShieldResistance
- stringifySlef
- sumMaterials
- sumSourceModuleValues
- sumWeaponMetrics
- sustainedDamagePerSecond
- sustainedFireFactor
- systemsResistance
- thrusterMassCurveMultiplier
- toSlef
- totalRange
- unresolvedModifiers
- validateLoadout
- weaponMetrics
- weaponsCapacitorMetrics