--- title: Hull properties: paths, types and effects summary: Where to change names, hull, crew, cargo and physics; distinguish these from price and speed. section: ships kind: guide status: reference updated: 2026-10-27 tags: ["X4","modding","ship","properties"] sources: ["https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/Assets%20Modding/Guides/JPMFlight/","https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/Assets%20Modding/Guides/Tags%20and%20flags/","https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/Anatomy%20of%20an%20extension/XML%20diff%20patching/"] --- ## Read the tables Paths below are relative to the selected macro element, not the file root. For example, `properties/hull/@max` is inside /macros/macro. These tables cover the main hull and connected-resource fields, not every field of every X4 class. Example values were checked against the 9.00 base catalogs. A missing attribute does not mean zero: `defaults.xml` supplies some settings. One XML file does not prove the final value after all extensions and in-game equipment modifications. ## Identity and classification | Path | Type | Purpose | | --- | --- | --- | | `@name` | String ID | Unique macro name referenced by the index and ware | | `@class` | Class ID | Definition class, such as `ship_s`; not a display name or merely model scale | | `component/@ref` | Component ID | Model definition; change only when switching to another compatible component | | `properties/identification/@name` | Text reference | Display name; for example {990001,1} using your own text ID | | `properties/identification/@description` | Text reference | Description from a language file | | `properties/identification/@makerrace` | Race ID | Manufacturer; not the current owner of a ship instance | | `properties/purpose/@primary` | Category string | Primary purpose; does not itself create an AI order | | `properties/ship/@type` | Ship type ID | For example fighter; separate from class | For your own variant, keep the macro and ware names and descriptions consistent. Changing only one can produce different UI labels. See [localization](wiki:localization) for text-reference syntax. ## Hull, people and reserves | Hull macro path | Type / units | `Elite` 9.00 example and meaning | | --- | --- | --- | | `properties/hull/@max` | Number, hull points | 1800: maximum hull, not shields | | `properties/people/@capacity` | Integer, people | 2: capacity; the field does not hire crew | | `properties/storage/@missile` | Integer, missiles | 0: missile storage, not cargo hold volume | | `properties/storage/@deployable` | Integer, deployables | Deployable capacity; supplied through defaults in this example | | `properties/storage/@countermeasure` | Integer, countermeasures | Separate countermeasure reserve; not container cargo volume | Hull price belongs to the ware; shield properties belong to equipment. Increasing `hull/@max` does not repair a damaged instance. See the complete [`Elite` hull patch](wiki:editing-parameters). ## The cargo hold belongs to a storage macro In the inspected `Elite` chain, `con_storage01` references `storage_arg_s_fighter_02_a_macro`. Its `properties/cargo/@max` is 150 and `properties/cargo/@tags` is container. max is volume in cubic metres; the number of ware units also depends on the ware volume. ```xml 300 ``` Patch file path: `assets/units/size_s/macros/storage_arg_s_fighter_02_a_macro.xml.` Expected volume is 300 instead of 150; the container tag stays unchanged. This is not 300 units of every ware. A fictional ware of volume 2 cubic metres fits 150 units when no other cargo is present. A storage patch affects every macro referencing that resource. For a hold exclusive to your variant, create and register a separate storage macro and change the new hull's reference. Increasing max alone does not allow other cargo types. ## Mass and movement | Path | Type / example | Effect | | --- | --- | --- | | `properties/physics/@mass` | Positive number; `Elite` uses 3.772 | Engine-data mass; conversion to kilograms is not established here | | `properties/physics/inertia/@pitch` | Numeric parameter | Pitch rotational inertia; yaw and roll are separate | | `properties/physics/drag/@forward` | Numeric parameter | Forward motion resistance; not a direct speed in metres per second | | `properties/physics/drag/@horizontal` | Numeric parameter | Lateral resistance; vertical and angular axes are separate | | `properties/physics/accfactors/@forward` | Dimensionless multiplier | Forward acceleration adjustment; `Elite` uses 1.2 | | `properties/physics/accfactors/@horizontal` | Dimensionless multiplier | Lateral acceleration adjustment; `Elite` uses 0.8 | | `properties/jerk` | Settings block | Acceleration smoothing, not another engine force | | `properties/steeringcurve/point` | Curve points | Steering changes across speed regimes | Engine and thruster parameters live in other macros. Continue with types, units and an example in [ship flight](wiki:ship-flight). ## What to check after editing First check the path, exactly one selected node and the changed XML. Then compare a new game instance: maximum hull, people, cargo and movement with identical equipment. Check an existing save separately. This article's examples are not claimed as completed game tests.