This mod adds additional equipments to the game which can be installed into individual locations.
Much of this mod is inspired by or based on stuff from Roguetech, arguably my favorite game ever.
- HarJel I, II, III - Self-Repair systems. Upon taking damage they will repair armor and structure in their install location for a certain amount of time. Install a total of 7 HarJel systems to make the entire mech self-repair. Different HarJel tiers cannot be combined, also they cannot be installed in the head (lore forbids it!).
- Modular Armor Mk1 - Mk4 - Armor upgrades which add a fixed amount of armor to their installation location. Variants for rear armor are included. Different tiers for different weight classes.
- Patchwork T1 - T3 - provide a small amount of weight in exchange for some slots. Because Patchwork is awesome.
- Black Carapace - Find it, cower in its presence.
- Advanced Targetting Computers - TC upgrades which weigh a ton but add considerable upgrades for different weapon systems.
- Actuators - A bunch of actuator equipment which can be installed in arm actuator slots, many being melee-focussed.
- Gyro upgrades - Melee focused gyros, defensive gyro (evasion pilot skill improvement), stability gyro (jam chance reduction)
- Angel ECM
- NSS - The Null Signature System (armor upgrade) is essentially just a stacking ECM. NEEDS TESTING AND FEEDBACK.
- Battle Computers - One ton upgrades which can be installed with a "modular TC" and add different bonuses.
- Laser Insulator - Essentially an advanced single heatsink which lowers the heat output of lasers installed in the same location.
- Cockpit Hotseat - A cockpit upgrade with an integrated TSM that can be triggered via hotkey. The longer the Hotseat is active the more heat it produces.
- Improved Jump-Jets - Improved jump jets weight 50% more but burn 15% longer and allow the installation of 1.5 JJs per walk MP. These are RT's I-JJs which I found to be much more reasonable than the TT ones (why would you ever want to use those?).
- Exchanger and Exchanger Mk2 - very rare and very powerful heatsinks which also lower the heat output of all weapons. Explode!
- Command Console - A big cockpit-mounted ECM with sensor and cooldown improvements
- Advanced Small Cockpit - Frees up a slot in the head
- Heat Dissipating Armor - 50% less heat damage taken from Flamers and inferno missiles for a little bulk.
- and much more... Full list of equipments
The HarJel mod depends on YetAnotherMechLab (YAML). It makes use of the extended equipment property system provided by YAML. In fact, the requirements I had for Harjel let me to develop the equipment properties system in the first place. See below for details.
Starting with 0.16 the AbstractMech override was dropped which means it should be compatible with any mod that does not mess up YAML's DerivedMech.
HarJel makes use of the equipment properties system in YAML.
YAML supports the configuration of custom equipment and weapons via an ever-growing set of properties. Equipment and weapon properties can be defined via json files called Equipment_properties.json
. Yaml will will load any such file stored
in the Resources
folder of any enabled mod. The files will be loaded in the order of mod priority. That means for example that the values for a specific equipment from a mod with a load order of 7 will overwrite the values for that particular equipment from a mod with load order 6.
Mech quirks are defined in a file called quirks.json
which is loaded the same way as the equipment properties. A third file mechs.json
contains the mapping from mechs to quirks. See below for more details.
The equipment properties file can contain one entry for each custom equipment (or a type of equipment by using a gameplay tag path which will be mapped exactly, ie. no prefix matching) with a bunch of different properties as described below.
Originally the properties were designed for equipments only. Since then some have been extended to also work with weapons. These are marked in the "W" column as seen below.
YAML by itself already provides the following properties:
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
name |
Rename an equipment. Might be useful. Example: the HeatSinkKit mod uses it to rename the "Engine Double Heat Sinks" to "Double Heat Sink Kit". | E | |||
description |
Because it is annoying to edit the desciption in the asset all the time, and also: newlines! | "One line\nanother line." |
E | ||
color |
Set the color of the equipment in the market and mechlab as an RGBA value. | "(R=0.59,G=0.03,B=0.11,A=1)" |
E | ||
category |
Allows to set the category of the equipment. One would typically use this on equipments which have the "generic" type Heatsink.Single . Can be one of: equipment.ammo , equipment.cooling , equipment.mobility , equipment.electronics , equipment.internal , equipment.misc , equipment.enginecore , equipment.enginetype . Be aware that setting the category this way means that the equipment will always be shown, independent of the value of the "valid only" checkbox. |
"equipment.internal" |
E | ||
rarity |
Define the rarity of an equipment between 0 and 1. The rarity directly sets the probability the item will show up in markets and affect the total number of items available. Defaults to 0.3 . See also marketMaxCnt . |
0.2 |
E | ||
marketMaxCnt |
Set the maximum number that a market can hold of one equipment. By default this is 3 for everything. |
1 |
E | ||
loreAccurate |
States whether the equipment can be found in the lore. If not and configuration entry loreAbidingCitizen is true then the equipment will never show up in markets. Defaults to true |
false |
E | ||
relativeWeight |
Sets the equipment weight to a multiple of the mech's max tonnage, rounded to quarter tons (with a minumum weight of 0.25 tons). This should be paired with a 0 weight in the equipment asset. Special case: Gyros, here the multiplicator refers to the weight of a standard Gyro. | "0.05" |
E | ||
engineRelativeWeight |
Sets the equipment weight to a multiple of the mech's engine weight, rounded up to the next half-ton. | 0.1 |
E | ||
fillerSlots |
Allows to define the dynamic and fixed fillers an equipment requires. The value is a map which contains any of the following keys: dynamic refers to the number of dynamic fillers which can be placed anywhere (a typical example is endo). Head , LeftArm , LeftTorso , LeftLeg , etc. refer to the fixed fillers required in specific mech parts. One example is 2 slots in the center torso for an XL Gyro. |
{ "CenterTorso": 2 } |
E | W | |
fixed |
If true the equipment cannot be removed and is considered a fixed equipment. It will not show up in the inventory. This should be combined with autoamtic repair for the equipment asset. The salvage probability can either be set to 0 to prevent salvage completely or the salvaged item can be changed via salvageInto . Fixed items can be used to create custom mech variants. |
true |
E | W | |
introYear |
Override the introduction year of an equipment. This is mostly interesting for mods which support both vanilla and YAML to hide equipment in vanilla. | 3078 |
E | ||
obsoleteYear |
Set the year in which a weapon or equipment becomes obsolete, meaning it will no longer be available in markets. This has to be combined with introYear , otherwise it will not work. And, yes, introYear normally does not work for weapons but for this special case, it does. |
3078 |
E | W | |
slots |
Override the slot count of an equipment. | 3 |
E | ||
features |
A list of features the equipment or entire mech supports. This can either be one of the pre-defined ones (See below for a list of supported features) or a random string which acts as a value for the requiredFeatures property. |
3 |
E | M |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
engineRelativeWeight |
Sets the equipment weight to a multiple of the mech's engine weight, rounded up to the next half-ton. Be aware that this works perfectly for engine upgrades like XL engines by setting it to a negative value like -0.5 . The rounding up results in the weight reduction matching perfectly. |
0.1 |
E | ||
engineHealthType |
Only relevant for engine upgrades. Set this to one of the following:
|
xl |
E |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
salvageInto |
If set this equipment will be replaced in the mission salvage table. The value is a combination of the asset type and the asset name, separated by : . This property is very useful for fixed equipment which should not show up in the salvage table. An example would be a custom asset representing a fixed XL300 engine which should yield a normal XL300 during salvage. |
MWHeatSinkDataAsset:XL300 |
E | ||
salvageMulti |
Can be used to change the number of salvage items created due to salvageInto . One example would be an internal fixed self-repair system which yields 7 Harjel II equipments when being salvaged. |
7 |
E |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
installCost |
Overwrites the install cost defined in the asset. | 20000 |
E | W | |
removeCost |
Overwrites the remove cost defined in the asset. | 20000 |
E | W | |
repairCost |
Overwrites the repair cost defined in the asset. | 20000 |
E | W | |
installCostScaling |
Defines an installation (and removal) cost scaling based on the max mech tonnage. The value defines the multiplier for a 100 ton mech while a 20 ton mech will always set a multiplier of 1. | 10 |
E | W | |
installDays |
Overwrites the install days defined in the asset. | 2 |
E | W | |
removeDays |
Overwrites the remove days defined in the asset. | 2 |
E | W | |
repairDays |
Overwrites the repair days defined in the asset. | 2 |
E | W | |
installDaysScaling |
Defines an installation (and removal) days scaling based on the max mech tonnage. The value defines the multiplier for a 100 ton mech while a 20 ton mech will always set a multiplier of 1. | 10 |
E | W | |
structureRepairCostMulti |
A multiplier on all structure repairs on the mech. This can for example be used on Endosteel to make it more expensive to repair. | 2 |
E | M | |
structureRepairDaysMulti |
A multiplier on all structure repairs on the mech. This can for example be used on Endosteel to make it take longer to repair. | 2 |
E | M | |
armorRepairCostMulti |
A multiplier on all armor repairs on the mech. This can for example be used on Hardened to make it more expensive to repair. | 2 |
E | M | |
armorRepairDaysMulti |
A multiplier on all armor repairs on the mech. This can for example be used on Hardened to make it take longer to repair. | 2 |
E | M | |
upkeepCostMulti |
A multiplier on the recurring upkeep cost for both active 'mechs and those in cold storage. | 0.8 |
M | ||
equipmentRefitCostMulti |
A multiplier for the cost of weapon and equipment refits (install/remove/repair). | 1.2 |
E | M | |
equipmentRefitDaysMulti |
A multiplier for the required time of weapon and equipment refits (install/remove/repair). | 1.2 |
E | M |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
maxTonnage |
This equipment can only be equipped to a mech whose tonnage does not exceed this value. | "35" |
E | ||
minTonnage |
This equipment can only be equipped to a mech whose tonnage matches at least this value. | "80" |
E | ||
invalidMechParts |
A list of mech parts the equipment can not be installed in. Possible values are: Head , LeftArm , LeftTorso , LeftLeg , etc.. |
[ "CenterTorso" ] |
E | W | |
mechPartConflicts |
A list of equipments which cannot be installed in the same location as this equipment. | ["HARJEL_II", "HARHEL_III"] |
E | W | |
mechConflicts |
A list of equipments which cannot be installed in the mech in combination with this equipment. | ["HARJEL_II", "HARHEL_III"] |
E | W | |
mechPartRequirements |
A list of equipments which need to be installed in the same location as this equipment. This can be either equipment names or tag names. | GuardianECM or Equipment.ECM |
E | W | |
mechRequirements |
A list of equipments which need to be installed in the mech in combination with this equipment. This can be either equipment names or tag names. | GuardianECM or Equipment.ECM |
E | W | |
requiredFeatures |
A list of features (See property features ) which need to be present in the mech in combination with this equipment. |
["tsm"] |
E | W |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
armorComponentFront |
An absolute value that is added to the armor of the mech part the equipment is installed in. | "35" |
E | W | |
armorComponentRear |
An absolute value that is added to the rear armor of the mech part the equipment is installed in.. | "35" |
E | W | |
armorComponentFrontMulti |
A multiplier that is applied to the mech front armor of the mech part the equipment is installed in. | "1.1" |
E | W | |
armorComponentRearMulti |
A multiplier that is applied to the rear armor of the mech part the equipment is installed in. | "1.2" |
E | W | |
armorMulti |
A multiplier that is applied to the entire mech's armor. | "2.0" |
E | W | M |
armorBonus |
Absolute armor bonus values for each mech surface. The value is a json object which can contain one entry for each surface (Head , CenterTorso , RearCenterTorso , etc). |
{ "RightTorso": 20 } |
M | ||
maxArmorComponent |
An absolute value that is added to the max armor of the mech part the equipment is installed in. | "35" |
E | W | |
maxArmorBonus |
Absolute max armor bonus values for each mech component. The value is a json object which can contain one entry for each component (Head , CenterTorso , etc). |
{ "RightTorso": 20 } |
E | W | M |
structureComponent |
An absolute value that is added to the structure of the mech part the equipment is installed in. | "35" |
E | W | |
structureComponentMulti |
A multiplier that is applied to the structure of the mech part the equipment is installed in. | "1.1" |
E | W | |
structureMulti |
A multiplier that is applied to the entire mech's structure. | "2.0" |
E | W | M |
structureBonus |
Absolute structure bonus values for each mech surface. The value is a json object which can contain one entry for each surface (Head , CenterTorso , RearCenterTorso , etc). |
{ "RightTorso": 20 } |
M | ||
armorWeightMulti |
A multiplicator for an armor upgrade. Does only make sense for armor equipments (type tags starting with Internal.Armor ) and is typically combined with armorMulti . An example would be Hardened armor which uses a multi of 2.0 in combination with ab armorMulti of 2.0 . Alternatively armorPerTon can be used. |
2.0 |
E | ||
armorPerTon |
The amount of armor points one ton yields. Does only make sense for armor equipments (type tags starting with Internal.Armor ). An example would be Hardened armor which uses a value of 64 in combination with ab armorMulti of 2.0 . An alternative to armorWeightMulti with a higher priority. |
64 |
E | ||
structureWeightMulti |
A multiplicator for a structure upgrade. Does only make sense for structure equipments (type tags starting with Internal.Structure ) and is typically combined with structureMulti . An example would be Endosteel which uses a multi of 0.5 to reduce the weight of the structure by 50%. |
"0.5" |
E |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
torsoTwistAngleMulti |
Changes the torso twist yaw and pitch angle (how far can the torso turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
torsoTwistAngleYawMulti |
Changes the torso twist yaw angle (how far can the torso turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
torsoTwistAnglePitchMulti |
Changes the torso twist pitch angle (how far can the torso turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
torsoTwistRateMulti |
Changes the torso twist yaw and pitch rate (how fast can the torso turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
torsoTwistRateYawMulti |
Changes the torso twist yaw rate (how fast can the torso turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
torsoTwistRatePitchMulti |
Changes the torso twist pitch rate (how fast can the torso turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
armTwistAngleMulti |
Changes the arm twist yaw and pitch angle (how far can the arms turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
armTwistAngleYawMulti |
Changes the arm twist yaw angle (how far can the arms turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
armTwistAnglePitchMulti |
Changes the arm twist pitch angle (how far can the arms turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
armTwistRateMulti |
Changes the arm twist yaw and pitch rate (how fast can the arms turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
armTwistRateYawMulti |
Changes the arm twist yaw rate (how fast can the arms turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
armTwistRatePitchMulti |
Changes the arm twist pitch rate (how fast can the arms turn) via a multiplier. This is typically used on Gyros. | 1.10 |
E | M | |
topSpeedMulti |
Change the top speed of the mech by this multiplier. | 1.1 |
E | M | |
topSpeedReverseMulti |
Change the top reverse speed of the mech by this multiplier (or slower). | 1.1 |
E | M | |
accelerationMulti |
Change the acceleration for the mech by this multiplier. Get fast faster (or slower). | 1.1 |
E | M | |
decelerationMulti |
Change the deceleration for the mech by this multiplier. Get slow faster (or slower). | 1.1 |
E | M | |
turnSpeedMulti |
Change the turn speed of the mech by this multiplier. Turn corners faster (or slower). | 1.1 |
E | M | |
movementHeatMulti |
A multiplier for the heat a 'mech produces through movement. A typical example would be the XXL engine which doubles the movement heat. | 2.0 |
E | M |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
sensorRangeBonus |
A fixed bonus to the sensor range in meters. | 2000 |
E | M | |
sensorRangeMulti |
A multiplier for the sensor range. | 1.5 |
E | M | |
sensorFov |
The value of the sensor's field of view in degrees. Use 360 for the ultimate sensor upgrade. |
360 |
E | M | |
sensorRangeBonusLance |
A fixed bonus to the sensor range in meters which applies to the entire lance, or more precisely all friendly mechs. | 2000 |
E | M | |
sensorRangeMultiLance |
A multiplier for the sensor range which applies to the entire lance, or more precisely all friendly mechs. | 1.5 |
E | M | |
sensorFovLance |
The value of the sensor's field of view in degrees which applies to the entire lance, or more precisely all friendly mechs. Use 360 for the ultimate sensor upgrade. |
360 |
E | M |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
maxJumpJetsMulti |
A multiplicator for the maximum number of jump jets. Only useful on jumpjet equipment. Caution: the first encountered value will be used. Thus, make sure jump jets with different max multis cannot be combined (using mechConflicts ). An example would be 1.5 for improved jump jets. |
1.5 |
E | ||
jumpJetXyAccelMulti |
Raise (or lower) the horizontal acceleration when jumping. | 1.1 |
E | M | |
jumpJetZAccelMulti |
Raise (or lower) the vertical acceleration when jumping. | 1.1 |
E | M | |
jumpJetInitialZVelocityMulti |
Raise (or lower) the initial vertical velocity when jumping. | 1.1 |
E | M | |
jumpJetFuelBurnTimeMulti |
Raise (or lower) the time jump jet fuel burns. Values above 1 mean that the mech can jump higher. | 1.1 |
E | M | |
jumpJetFuelRegenTimeMulti |
Lower (or raise) the time it takes to regenerate the jump jet fuel. Values below 1 mean faster regen. | 0.9 |
E | M | |
jumpJetHeatMulti |
Lower (or raise) the heat produced by jump jet usage. Values below 1 mean less heat production. | 0.9 |
E | M | |
gravityScale |
Lower (or raise) the gravity for the mech. This allows to let the mech fall down slower after a jump. | 0.5 |
E | M |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
ballisticSkillBonus |
A bonus/modifier for a pilot skill, can be positive or negative. | 2 |
E | M | |
missileSkillBonus |
A bonus/modifier for a pilot skill, can be positive or negative. | 2 |
E | M | |
energySkillBonus |
A bonus/modifier for a pilot skill, can be positive or negative. | 2 |
E | M | |
evasionSkillBonus |
A bonus/modifier for a pilot skill, can be positive or negative. | 2 |
E | M | |
shieldingSkillBonus |
A bonus/modifier for a pilot skill, can be positive or negative. | 2 |
E | M | |
heatManagementSkillBonus |
A bonus/modifier for a pilot skill, can be positive or negative. | 2 |
E | M |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
engineHeatsinkEfficiency |
Sets the efficiency of engine heat sinks (0.1 by default). Only relevant for heat sink kits. | 0.2 |
E | ||
engineHeatsinkCapacity |
Sets the capycity of engine heat sinks (1 by default). Only relevant for heat sink kits. | 2 |
E | ||
engineHeatsinkMulti |
Normally any engine above a 250 comes with external engine heatsinks (one per every 25 engine rating - 275 has one, 300 two, etc). This multiplier can be used to modify that number. | 0 |
E | M | |
internalHeatsinkBonus |
Adds (or removes) internal engine heatsinks. This is typically used to strip heatsinks from the engine to save weight. | -1 |
E | M | |
bundledHeatsinks |
The number of heatsinks per unit, meaning per installed heatsink equipment. This is used for compact heatsinks and heatsink kits which have 2 bundled heatsinks in one slot. Be aware that for heatsinks this does not have an influence on the cooling, no multiplication takes place. So heatsinks using this property still need to have their full cooling values. | 2 |
E | ||
heatCapacityBonus |
A bonus to the mech's total heat capacity. | 0.3 |
E | M | |
coolingMulti |
A multiplier for the heat dissipation of the equipments (heat sinks) in the component or the entire mech (see also coolingMultiScope ). |
1.1 |
E | W | M |
coolingMultiScope |
Defines to which mech parts the heat dissipation multi applies. Can be either component or mech . Defaults to mech . |
1.1 |
E | W |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
dmgEvasionChance |
A chance to avoid any incoming fire. At 1.0 this is quite similar to god-mode. | 0.05 |
E | M | |
caseLevel |
The level of C.A.S.E. protection provided. Can be either 1 (ammo explosion damage does not spread to other components) or 2 (ammo explosion damage is reduced to 2 points of damage). |
1 |
E | M | |
caseScope |
States which parts of the mech are protected by the caseLevel . Can be either component or mech . |
component |
E | ||
case2MaxDmg |
Sets the maximum damage an ammo explosion can cause if caseLevel is 2. Defaults to 2.0 . |
5.0 |
E | M | |
pilotDeathPercMult |
A multiplier for the chance the pilot will die on mech destruction. A value below 1 will increase the pilot's chance for survival. | 0.9 |
E | M |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
predictiveTargeting |
A boolean property which can be used to enable predictive targeting, ie. a target recticle which points to where one has to shoot, accouting for things like drop-off and target speed. | true |
E | M | |
antiAirTargeting |
Same as above, but only applies to VTOLs (other units won't have the reticle unless a Predictive TC or quirk is installed). | true |
E | M | |
hasBasicUAV |
Integer number to add to Ammo.Consumable.UAV to any 'Mech. They will have this many norma UAVs plus whatever is equipped. Advanced UAV upgrades all to the increased stats. | 4 |
M |
Property | Description | Example | E | W | M |
---|---|---|---|---|---|
weapons |
A json object containing weapon bonus properties as described below. | E | M | ||
armorDamageMulti |
A multiplier for the damage dealt to armor. This allows to create weapons that do more or less damage to armor. | W | |||
structureDamageMulti |
A multiplier for the damage dealt to structure. This allows to create weapons that do more or less damage to structure. | W | |||
jamChance |
A chance (0 to 1) for the weapon to jam on fireing. This works on any weapon and has no relation to the fire while in cooldown that UACs use. Should be combined with a proper value for jamDuration . |
W | |||
jamDuration |
The time in seconds that a weapon is jammed. Does only make sense in combination with jamDuration . Defaults to 2.5 times the cooldown time of the weapon. |
W | |||
jamAtMoveSpeed |
If set will make the weapon jam as soon as the mech goes faster than the given value in KPH. The value can also be 0. In that case the weapon can only be fired if standing still. | W |
The special property weapons
allows to define a multitude of weapon modifiers ranging from a simple PPC range upgrade to cooldown modifiers for SRM6 launchers.
The following bonus properties can be specified in the weapons
section of an equipment.
Property | Description |
---|---|
scope |
Can be either mech (default) or component . In the latter case the bonuses only apply to weapons installed in the same location. This property is ignored for mech quirks. |
groups |
Contains an array of weapon group objects as decribed below. |
lockonTimeMulti |
Modifies the time it takes for weapons like LRMs to get a lock. Caution: this property is not subject to the scope since lock-on times are not weapon-specific. |
traceDurationMulti |
Deprecated. Use weaponGroups as described below. |
traceDamageMulti |
Deprecated. Use weaponGroups as described below. |
traceCooldownMulti |
Deprecated. Use weaponGroups as described below. |
traceHeatMulti |
Deprecated. Use weaponGroups as described below. |
traceOptimalRangeMulti |
Deprecated. Use weaponGroups as described below. |
traceMaxRangeMulti |
Deprecated. Use weaponGroups as described below. |
ballisticSpreadRadiusMulti |
Deprecated. Use weaponGroups as described below. |
ballisticSpreadDistanceMulti |
Deprecated. Use weaponGroups as described below. |
ballisticSpeedMulti |
Deprecated. Use weaponGroups as described below. |
ballisticDamageMulti |
Deprecated. Use weaponGroups as described below. |
ballisticCooldownMulti |
Deprecated. Use weaponGroups as described below. |
ballisticHeatMulti |
Deprecated. Use weaponGroups as described below. |
ballisticNullRangeMulti |
Deprecated. Use weaponGroups as described below. |
ballisticMinRangeMulti |
Deprecated. Use weaponGroups as described below. |
ballisticOptimalRangeMulti |
Deprecated. Use weaponGroups as described below. |
ballisticMaxRangeMulti |
Deprecated. Use weaponGroups as described below. |
ballisticJamChanceMulti |
Deprecated. Use weaponGroups as described below. |
ballisticAmmoMulti |
Deprecated. Use weaponGroups as described below. |
ppcSpreadRadiusMulti |
Deprecated. Use weaponGroups as described below. |
ppcSpreadDistanceMulti |
Deprecated. Use weaponGroups as described below. |
ppcSpeedMulti |
Deprecated. Use weaponGroups as described below. |
ppcDamageMulti |
Deprecated. Use weaponGroups as described below. |
ppcCooldownMulti |
Deprecated. Use weaponGroups as described below. |
ppcHeatMulti |
Deprecated. Use weaponGroups as described below. |
ppcNullRangeMulti |
Deprecated. Use weaponGroups as described below. |
ppcMinRangeMulti |
Deprecated. Use weaponGroups as described below. |
ppcOptimalRangeMulti |
Deprecated. Use weaponGroups as described below. |
ppcMaxRangeMulti |
Deprecated. Use weaponGroups as described below. |
missleSpreadRadiusMulti |
Deprecated. Use weaponGroups as described below. |
missleSpreadDistanceMulti |
Deprecated. Use weaponGroups as described below. |
missleSpeedMulti |
Deprecated. Use weaponGroups as described below. |
missleDamageMulti |
Deprecated. Use weaponGroups as described below. |
missleCooldownMulti |
Deprecated. Use weaponGroups as described below. |
missleHeatMulti |
Deprecated. Use weaponGroups as described below. |
missileNullRangeMulti |
Deprecated. Use weaponGroups as described below. |
missileMinRangeMulti |
Deprecated. Use weaponGroups as described below. |
missileOptimalRangeMulti |
Deprecated. Use weaponGroups as described below. |
missileMaxRangeMulti |
Deprecated. Use weaponGroups as described below. |
missileJamChanceMulti |
Deprecated. Use weaponGroups as described below. |
missileAmmoMulti |
Deprecated. Use weaponGroups as described below. |
meleeDamageMulti |
Deprecated. Use weaponGroups as described below. |
meleeCooldownMulti |
Deprecated. Use weaponGroups as described below. |
meleeHeatMulti |
Deprecated. Use weaponGroups as described below. |
meleeOptimalRangeMulti |
Deprecated. Use weaponGroups as described below. |
meleeMaxRangeMulti |
Deprecated. Use weaponGroups as described below. |
amsMissilesDestroyedMulti |
Deprecated. Use weaponGroups as described below. |
amsRofMulti |
Deprecated. Use weaponGroups as described below. |
amsOptimalRangeMulti |
Deprecated. Use weaponGroups as described below. |
amsMaxRangeMulti |
Deprecated. Use weaponGroups as described below. |
amsAmmoMulti |
Deprecated. Use weaponGroups as described below. |
Weapon groups are the most flexible way of defining weapon modifiers. Each group has a set of gameplay tags
which define the weapons the properties apply to (with prefix matching), a weaponGroupName
which is used to identify the list of tags in the UI, and a set of properties. Possible properties are listed below.
Property | Description |
---|---|
weaponGroupName |
The human-readable name of the weapon group which is also used for labelling the bonuses in the UI. Typically this would be something like "Laser" or "MRM" or even "Arm-mounted weapons". |
tags |
An array of weapon tags and/or weapon asset ids which the bonuses apply for. The simplest value would be ["Weapon"] which would cause the bonus to be applied to all weapons. See the examples below for more. |
excludeTags |
An optional array of weapon tags and/or weapon asset ids which the bonuses do not apply for. |
mechParts |
An optional array of mech parts the bonuses apply for. This is only really useful for 'mech quirks and allows to restrict the bonuses to specific parts. A typical example would be arm-mounted weapons. In that case the value would be ["LeftArm", "RightArm"] . |
durationMulti |
Only applies to trace weapons |
spreadRadiusMulti |
|
spreadDistanceMulti |
|
speedMulti |
|
damageMulti |
|
heatDamageMulti |
Only applies to trace and melee weapons for now. |
cooldownMulti |
|
heatMulti |
|
nullRangeMulti |
|
minRangeMulti |
|
optimalRangeMulti |
|
maxRangeMulti |
|
jamChanceMulti |
Weapons can have a jam chance between 0 and 1 with 1 refering to a 100% jam chance. This multi will be applied to the weapon's jam chance. |
ammoMulti |
A multiplier for ammo bins. Caution: since ammo multis are defined for weapons rather than their ammo type more than one multi can apply to one ammo type. In this case the highest multi is used. |
missilesDestroyedMulti |
Only applies to AMS |
rofMulti |
Only applies to AMS |
The following example applies heat and damage multipliers to all MRM weapons.
{
"weaponGroupName": "MRM",
"tags": [
"Weapon.Missile.LRM.LRM10.MRM20",
"Weapon.Missile.LRM.LRM15.MRM30",
"Weapon.Missile.LRM.LRM20.MRM40",
"Weapon.Missile.LRM.LRM10.MRM10",
"Weapon.Missile.LRM.LRM20.MRM20",
"Weapon.Missile.LRM.LRM20.MRM30",
"Weapon.Missile.LRM.LRM20.MRM40"
],
"heatMulti": 0.9,
"damageMulti": 1.2
}
The following example applies a cooldown multi only to medium standard lasers.
{
"weaponGroupName": "Medium Laser",
"tags": [
"Weapon.Energy.Laser.Standard.Medium"
],
"cooldownMulti": 0.95
}
The following example applies a heat multi to all weapons.
{
"weaponGroupName": "Weapon",
"tags": [
"Weapon"
],
"heatMulti": 0.9
}
The special property incomingDamage
allows to define modifiers for incoming damage based on the weapon type. These can be used in 'mech quirks as well as equipment properties.
The incomingDamage
object has the following properties:
Property | Description | Example |
---|---|---|
groups |
A json array which contains weapon group objects as decribed below. | |
heatMulti |
A multiplier for incoming heat damage from flamers, etc.. | 0.5 |
Like with the weapon modifiers groups
define incoming damage modifiers for a group of weapons based on weapon tags. Other than for weapon groups, though, the scope
can be defined individually for each group.
Groups have the following properties:
Property | Description |
---|---|
weaponGroupName |
The human-readable name of the weapon group which is also used for labelling the bonuses in the UI. Typically this would be something like "Laser" or "MRM". |
tags |
An array of weapon tags which the modifiers apply for. The simplest value would be ["Weapon"] which would cause the modifiers to be applied to all incoming weapons. See the examples below for more. |
scope |
Can be either mech (default) or component . In the latter case the modifiers only apply to incoming damage in the same location. This property is ignored for mech quirks which always apply to the entire mech (unless mechParts is specified). |
mechParts |
An optional array of mech parts the bonuses apply for. If specified overrides the scope . An example would be ["LeftArm", "RightArm"] . |
armorDamageMulti |
A multiplier for the damage caused to armor. |
structureDamageMulti |
A multiplier for the damage caused to structure. |
"ARMOR_GLAZED": {
"incomingDamage": {
"groups": [{
"weaponGroupName": "Energy",
"tags": ["Weapon.Energy"],
"armorDamageMulti": 0.5,
"scope": "mech"
}]
}
}
"UPPER_SPIKED": {
"incomingDamage": {
"groups": [{
"weaponGroupName": "Melee",
"tags": ["Weapon.Melee"],
"armorDamageMulti": 0.85,
"strutureDamageMulti": 0.85,
"scope": "component"
}]
}
}
In addition to the equipment properties provided by YAML the HarJel mod adds the following:
Property | Description | Default | Example |
---|---|---|---|
selfRepairArmor |
The amount of armor the equipment repairs at each interval. | "0" |
"2" |
selfRepairStructure |
The amount of structure the equipment repairs at each interval. | "0" |
"0.5" |
selfRepairDuration |
The duration of self-repair after taking damage on the self-repair enabled mech part (in seconds). | "0" |
"5" |
selfRepairInterval |
The interval at which self-repair will be performed (in seconds). | "1" |
"0.5" |
selfRepairScope |
The scope of the self-repair equipment. Can be either component to only repair the install location or mech to repair the entire mech (excluding the head). |
"component" |
"mech" |
{
"HARJEL_I": {
"armorComponentFrontMulti": "1.1",
"armorComponentRearMulti": "1.1",
"selfRepairComponentArmor": "1",
"selfRepairComponentStructure": "0.5",
"selfRepairComponentDuration": "5",
"mechPartConflicts": [
"HARJEL_I"
],
"mechConflicts": [
"HARJEL_II",
"HARJEL_III"
],
"invalidMechParts": [
"Head"
],
"color": "(R=0.11,G=0.19,B=0.77,A=0.5)",
"category": "equipment.internal"
}
}
Properties features
and requiredFeatures
deal with sets of strings representing features that an equipment or the entire mech supports. YAML itself knows the following features:
Feature | Description |
---|---|
tsm |
Enables TSM for the mech, meaning melee damage and speed will scale with mech heat. |
searchlight |
If present the mech supports an additional, stronger setting for the mech light. |
predictiveTargeting |
Enables a crosshair on the HUD at the optimal aim location. |
Additional features can be defined by mods to act as equipment restrictions using requiredFeatures
.
Mech quirks can be defined in a file called quirks.json
in the Resources
directory. The file contains a map of quirks where each quirk has a name
, a description
, an optional color
and a set of properties
. The supported properties are listed above and are marked in the M
column as being compatible with mech quirks.
Important: each mod can have its own set of quirks.json
and mechs.json
. YAML will merge all quirks and definitions from all mods. Mods with a higher load order will overwrite mech entries in case of duplicates. This also means that there is no need to re-define quirks which already exist in YAML.
The key of the quirk object can be arbitrary as it is only used to reference the quirk in the mech definitions.
The following example defines the quirks for the Atlas Boar's Head Hero mech.
{
"AS7-BH": {
"name": "The Boar's Head",
"description": "Unique set of quirks for the Atlas The Boar's Head Hero 'Mech",
"color": "(R=1,G=0.4,B=0,A=1)",
"properties": {
"weapons": {
"groups": [
{
"weaponGroupName": "Weapon",
"tags": [
"Weapon"
],
"heatMulti": 0.9
},
{
"weaponGroupName": "Energy",
"tags": [
"Weapon.Energy"
],
"heatMulti": 0.9,
"optimalRangeMulti": 1.1,
"maxRangeMulti": 1.1
},
{
"weaponGroupName": "Ballistic",
"tags": [
"Weapon.Ballistic"
],
"cooldownMulti": 0.9,
"speedMulti": 1.1
}
]
}
}
}
}
Once quirks have been defined they also need to be applied to mechs. This is done in a file called mechs.json
. It contains a map of mech definitions where the key can be either the variant name or the MDL name. Each mech is then an object which can have any of the following properties.
Property | Description |
---|---|
quirks |
An array of quirk ids which have been defined as detailed above. |
scale |
A scaling vector for the mech which is applied in DerivedMech. Example: X=1.1 Y=1.1 Z=1.1 |
useSkinsFrom |
An optional gameplay tag indicating the mech variant from which this mech use the skins. This is useful for introducing new mech types without the need to manually update all skins. |
aiMechRole |
Set the default AI mech role from the TTRulez_AI mod. This will only take effect if that mod is active. For possible values see below. |
mechType |
The type of mech which can be bipedal (default) or quad for now. Only has an impact on quad mechs which will then have their arm slots replaced with leg slots. |
autoconv |
An object defining details for YAML's automatic vanilla mech conversion (see below). |
salvageInto |
An optional reference which indicates the MDA to use when generating V2 mech salvage. This is useful for custom loadouts of lore mechs to avoid clutter in the salvage screen. Example: MWMechDataAsset:AS7-D_MDA |
YAML has built-in support for TTRulez_AI mech roles. These can be chosen in the mech lab, allowing the player to give roles to their custom builds. A default role can be set in mechs.json
via the aiMechRole
property (there is no real advantage over setting these in the UnitCard, when implementing this feature I was under the impression that TTRulez_AI introduced additional roles which can not be set in the UnitCard). The following values are supported:
Value | Description |
---|---|
AntiAir |
Antiaircraft: These are usually sniper type units with ballistic weapons designed for antiaircraft and antitank targets
|
Ambusher |
Ambusher: Slow heavily armed city fighters that use cover to engage enemies
|
Brawler |
Brawler: Heavily armored and slower mechs with mix of ranged weapons.
|
Juggernaut |
Juggernaut: Heavily armed and armored mechs with close range weapons designed to push an advance.
|
MissleBoat |
Sniper/Firesupport/Missileboat: These often slow mech types are used to fire on enemy mechs at a range to minimize damage to themselves and support a more aggressive unit.
|
Scout |
Scout: Light recon units mainly used to fight vehicles, turrets, and light mechs
|
Skirmisher |
Skirmisher: Fast, lightly armored, units with long range weapons, they use cover or hit and run tactics and have two main roles to kill fast light units and keep them off heavier units or to distract heavier units
|
Sniper |
Sniper/Firesupport/Missileboat: These often slow mech types are used to fire on enemy mechs at a range to minimize damage to themselves and support a more aggressive unit.
|
Striker |
Striker: Fast lightly armored units with close range heavy damage weapons such as SRMs. Ideally they flank the target to maximize damage. They stay on a target until it is dead or forced to retreat.
|
YAML can automatically convert vanilla mechs. This is done by injecting required slots types and equipment.
In order for the final weight of the 'mech to be perfect vanilla mechs should be designed taking TT rules into account, both with regards to base weight (account for engine rating and engine type) and used slots. Example: if the 'mech is supposed to run an XL engine make sure to not give the vanilla MDA more than 8 slots in the side torsos.
However, MW5 does not account for XXL or light engines or gyro upgrades. This is why YAML allows to give hints for the conversion
mechanism via mechs.json
like so:
{
"AWII_11A": {
"autoconv": {
"engine": "xxl"
}
},
"AGS-4D": {
"autoconv": {
"engine": "xl",
"gyro": "xl"
}
}
}
Property | Description |
---|---|
engine |
Gives a hint regarding the engine type to inject, overriding the XL flag in the MDA. Can be one of xl , xxl , light , compact . |
gyro |
Gives a hint regarding the gyro to inject. Can be xl or compact . |
coreCnt |
By default all 'mechs have one engine core slot (unless the MDA already contains more). This property can be used to raise the number of core slots. Typically this would be set to 2 for superheavy mechs |