/** * This code was AUTOGENERATED using the Codama library. * Please DO NOT EDIT THIS FILE, instead use visitors * to add features, then rerun Codama to update it. * * @see https://github.com/codama-idl/codama */ import { combineCodec, getStructDecoder, getStructEncoder, getU16Decoder, getU16Encoder, getU32Decoder, getU32Encoder, type Codec, type Decoder, type Encoder, } from '@solana/kit'; import { getU26F6Decoder, getU26F6Encoder, type U26F6, type U26F6Args, } from '../../fixed/codecs'; /** A ship's combat stats */ export type CombatStats = { /** ability power */ ap: number; /** Health points */ hp: number; /** Shield points */ sp: number; /** the amount of ammo used for each unit of AP used in an attack */ ammoConsumptionRate: U26F6; /** the amount of AP regenerated per second */ apRegenRate: U26F6; /** the amount of SP regenerated per second */ shieldRechargeRate: U26F6; /** * The rate at which this fleet can be repaired * TODO: Units should be HP/s */ repairRate: U26F6; /** * The maximum number of toolkits that can be applied by this fleet when performing a Repair action * TODO: Units should be Toolkits */ repairAbility: U26F6; /** * Unitless value representing how efficient the fleet is at applying repairs * TODO: Units should be Unitless */ repairEfficiency: U26F6; /** * The cost in toolkits to apply repairs to this fleet * TODO: Units should be HP/Toolkit */ repairCost: U26F6; /** * Unitless salvage multiplier, not a per-second amount. get_loot_rate divides this fleet * aggregate by combat size; apply_loot_rate caps that rate at the game's max_loot_rate and * multiplies it into a base roll. Only the rate is capped, never the product. The base roll * is a zero-floored six-uniform normal approximation (mean 0.5, sigma about 0.15) spanning 0 * to about 1.1363, which exceeds 1.0 roughly once in 10,000 rolls, so once the capped rate * reaches about 0.88 the product can exceed 1.0 as well. Nothing bounds that fraction; the * amount actually taken is limited only by the requested amount, the pile itself, and * remaining pod capacity. While max_loot_rate is at or above FULL_LOOT_SENTINEL, and for * owner-locked reward loot at any rate, this stat is still computed and passed but does not * affect the claimed quantity. Authored per ship as 0..3 in the c4-schema ship.rs. */ lootRate: U26F6; /** the time it takes the ship's SP to start regenerating after getting to 0 */ shieldBreakDelay: number; /** the amount of time taken before the ship can start warping */ warpSpoolTime: number; /** Kinetic damage dealt by this ship. */ damageKinetic: number; /** Kinetic damage randomization range, expressed as a multiplier. */ damageKineticVariance: number; /** Energy damage dealt by this ship. */ damageEnergy: number; /** Energy damage randomization range, expressed as a multiplier. */ damageEnergyVariance: number; /** EMP damage dealt by this ship. */ damageEmp: number; /** EMP damage randomization range, expressed as a multiplier. */ damageEmpVariance: number; /** Superchill damage dealt by this ship. */ damageSuperchill: number; /** Superchill damage randomization range, expressed as a multiplier. */ damageSuperchillVariance: number; /** Shockwave damage dealt by this ship. */ damageShockwave: number; /** Shockwave damage randomization range, expressed as a multiplier. */ damageShockwaveVariance: number; /** Gray goo damage dealt by this ship. */ damageGraygoo: number; /** Gray goo damage randomization range, expressed as a multiplier. */ damageGraygooVariance: number; /** Heat damage dealt by this ship. */ damageHeat: number; /** Heat damage randomization range, expressed as a multiplier. */ damageHeatVariance: number; /** Bomb damage dealt by this ship. */ damageBomb: number; /** Bomb damage randomization range, expressed as a multiplier. */ damageBombVariance: number; /** Decoy countermeasure strength. */ counterDecoy: number; /** Energy capacitor countermeasure strength. */ counterEnergyCapacitor: number; /** Fire suppressor countermeasure strength. */ counterFireSuppressor: number; /** Flare countermeasure strength. */ counterFlare: number; /** Healing nanobots countermeasure strength. */ counterHealingNanobots: number; /** Mine countermeasure strength. */ counterMine: number; /** Negative REM plating countermeasure strength. */ counterNegativeRemPlating: number; /** Warming plates countermeasure strength. */ counterWarmingPlates: number; /** Faraday shielding countermeasure strength. */ counterFaradayShielding: number; /** Stealth strength used by combat hit/dodge calculations. */ stealthPower: number; /** Hit chance modifier used by combat hit calculations. */ hitChance: number; /** Aim ability used to offset size mismatch penalties. */ aimAbility: number; /** Critical hit chance. */ critChance: number; /** Critical hit damage multiplier. */ critMultiplier: number; /** Combat fuel consumption modifier reserved for Combat v2 balancing. */ fuelConsumptionRate: number; /** Missile damage reserved for Combat v2 balancing. */ missileDamage: number; /** Missile fire rate reserved for Combat v2 balancing. */ missileFireRate: number; }; export type CombatStatsArgs = { /** ability power */ ap: number; /** Health points */ hp: number; /** Shield points */ sp: number; /** the amount of ammo used for each unit of AP used in an attack */ ammoConsumptionRate: U26F6Args; /** the amount of AP regenerated per second */ apRegenRate: U26F6Args; /** the amount of SP regenerated per second */ shieldRechargeRate: U26F6Args; /** * The rate at which this fleet can be repaired * TODO: Units should be HP/s */ repairRate: U26F6Args; /** * The maximum number of toolkits that can be applied by this fleet when performing a Repair action * TODO: Units should be Toolkits */ repairAbility: U26F6Args; /** * Unitless value representing how efficient the fleet is at applying repairs * TODO: Units should be Unitless */ repairEfficiency: U26F6Args; /** * The cost in toolkits to apply repairs to this fleet * TODO: Units should be HP/Toolkit */ repairCost: U26F6Args; /** * Unitless salvage multiplier, not a per-second amount. get_loot_rate divides this fleet * aggregate by combat size; apply_loot_rate caps that rate at the game's max_loot_rate and * multiplies it into a base roll. Only the rate is capped, never the product. The base roll * is a zero-floored six-uniform normal approximation (mean 0.5, sigma about 0.15) spanning 0 * to about 1.1363, which exceeds 1.0 roughly once in 10,000 rolls, so once the capped rate * reaches about 0.88 the product can exceed 1.0 as well. Nothing bounds that fraction; the * amount actually taken is limited only by the requested amount, the pile itself, and * remaining pod capacity. While max_loot_rate is at or above FULL_LOOT_SENTINEL, and for * owner-locked reward loot at any rate, this stat is still computed and passed but does not * affect the claimed quantity. Authored per ship as 0..3 in the c4-schema ship.rs. */ lootRate: U26F6Args; /** the time it takes the ship's SP to start regenerating after getting to 0 */ shieldBreakDelay: number; /** the amount of time taken before the ship can start warping */ warpSpoolTime: number; /** Kinetic damage dealt by this ship. */ damageKinetic: number; /** Kinetic damage randomization range, expressed as a multiplier. */ damageKineticVariance: number; /** Energy damage dealt by this ship. */ damageEnergy: number; /** Energy damage randomization range, expressed as a multiplier. */ damageEnergyVariance: number; /** EMP damage dealt by this ship. */ damageEmp: number; /** EMP damage randomization range, expressed as a multiplier. */ damageEmpVariance: number; /** Superchill damage dealt by this ship. */ damageSuperchill: number; /** Superchill damage randomization range, expressed as a multiplier. */ damageSuperchillVariance: number; /** Shockwave damage dealt by this ship. */ damageShockwave: number; /** Shockwave damage randomization range, expressed as a multiplier. */ damageShockwaveVariance: number; /** Gray goo damage dealt by this ship. */ damageGraygoo: number; /** Gray goo damage randomization range, expressed as a multiplier. */ damageGraygooVariance: number; /** Heat damage dealt by this ship. */ damageHeat: number; /** Heat damage randomization range, expressed as a multiplier. */ damageHeatVariance: number; /** Bomb damage dealt by this ship. */ damageBomb: number; /** Bomb damage randomization range, expressed as a multiplier. */ damageBombVariance: number; /** Decoy countermeasure strength. */ counterDecoy: number; /** Energy capacitor countermeasure strength. */ counterEnergyCapacitor: number; /** Fire suppressor countermeasure strength. */ counterFireSuppressor: number; /** Flare countermeasure strength. */ counterFlare: number; /** Healing nanobots countermeasure strength. */ counterHealingNanobots: number; /** Mine countermeasure strength. */ counterMine: number; /** Negative REM plating countermeasure strength. */ counterNegativeRemPlating: number; /** Warming plates countermeasure strength. */ counterWarmingPlates: number; /** Faraday shielding countermeasure strength. */ counterFaradayShielding: number; /** Stealth strength used by combat hit/dodge calculations. */ stealthPower: number; /** Hit chance modifier used by combat hit calculations. */ hitChance: number; /** Aim ability used to offset size mismatch penalties. */ aimAbility: number; /** Critical hit chance. */ critChance: number; /** Critical hit damage multiplier. */ critMultiplier: number; /** Combat fuel consumption modifier reserved for Combat v2 balancing. */ fuelConsumptionRate: number; /** Missile damage reserved for Combat v2 balancing. */ missileDamage: number; /** Missile fire rate reserved for Combat v2 balancing. */ missileFireRate: number; }; export function getCombatStatsEncoder(): Encoder { return getStructEncoder([ ['ap', getU32Encoder()], ['hp', getU32Encoder()], ['sp', getU32Encoder()], ['ammoConsumptionRate', getU26F6Encoder()], ['apRegenRate', getU26F6Encoder()], ['shieldRechargeRate', getU26F6Encoder()], ['repairRate', getU26F6Encoder()], ['repairAbility', getU26F6Encoder()], ['repairEfficiency', getU26F6Encoder()], ['repairCost', getU26F6Encoder()], ['lootRate', getU26F6Encoder()], ['shieldBreakDelay', getU16Encoder()], ['warpSpoolTime', getU16Encoder()], ['damageKinetic', getU32Encoder()], ['damageKineticVariance', getU32Encoder()], ['damageEnergy', getU32Encoder()], ['damageEnergyVariance', getU32Encoder()], ['damageEmp', getU32Encoder()], ['damageEmpVariance', getU32Encoder()], ['damageSuperchill', getU32Encoder()], ['damageSuperchillVariance', getU32Encoder()], ['damageShockwave', getU32Encoder()], ['damageShockwaveVariance', getU32Encoder()], ['damageGraygoo', getU32Encoder()], ['damageGraygooVariance', getU32Encoder()], ['damageHeat', getU32Encoder()], ['damageHeatVariance', getU32Encoder()], ['damageBomb', getU32Encoder()], ['damageBombVariance', getU32Encoder()], ['counterDecoy', getU32Encoder()], ['counterEnergyCapacitor', getU32Encoder()], ['counterFireSuppressor', getU32Encoder()], ['counterFlare', getU32Encoder()], ['counterHealingNanobots', getU32Encoder()], ['counterMine', getU32Encoder()], ['counterNegativeRemPlating', getU32Encoder()], ['counterWarmingPlates', getU32Encoder()], ['counterFaradayShielding', getU32Encoder()], ['stealthPower', getU32Encoder()], ['hitChance', getU32Encoder()], ['aimAbility', getU32Encoder()], ['critChance', getU32Encoder()], ['critMultiplier', getU32Encoder()], ['fuelConsumptionRate', getU32Encoder()], ['missileDamage', getU32Encoder()], ['missileFireRate', getU32Encoder()], ]); } export function getCombatStatsDecoder(): Decoder { return getStructDecoder([ ['ap', getU32Decoder()], ['hp', getU32Decoder()], ['sp', getU32Decoder()], ['ammoConsumptionRate', getU26F6Decoder()], ['apRegenRate', getU26F6Decoder()], ['shieldRechargeRate', getU26F6Decoder()], ['repairRate', getU26F6Decoder()], ['repairAbility', getU26F6Decoder()], ['repairEfficiency', getU26F6Decoder()], ['repairCost', getU26F6Decoder()], ['lootRate', getU26F6Decoder()], ['shieldBreakDelay', getU16Decoder()], ['warpSpoolTime', getU16Decoder()], ['damageKinetic', getU32Decoder()], ['damageKineticVariance', getU32Decoder()], ['damageEnergy', getU32Decoder()], ['damageEnergyVariance', getU32Decoder()], ['damageEmp', getU32Decoder()], ['damageEmpVariance', getU32Decoder()], ['damageSuperchill', getU32Decoder()], ['damageSuperchillVariance', getU32Decoder()], ['damageShockwave', getU32Decoder()], ['damageShockwaveVariance', getU32Decoder()], ['damageGraygoo', getU32Decoder()], ['damageGraygooVariance', getU32Decoder()], ['damageHeat', getU32Decoder()], ['damageHeatVariance', getU32Decoder()], ['damageBomb', getU32Decoder()], ['damageBombVariance', getU32Decoder()], ['counterDecoy', getU32Decoder()], ['counterEnergyCapacitor', getU32Decoder()], ['counterFireSuppressor', getU32Decoder()], ['counterFlare', getU32Decoder()], ['counterHealingNanobots', getU32Decoder()], ['counterMine', getU32Decoder()], ['counterNegativeRemPlating', getU32Decoder()], ['counterWarmingPlates', getU32Decoder()], ['counterFaradayShielding', getU32Decoder()], ['stealthPower', getU32Decoder()], ['hitChance', getU32Decoder()], ['aimAbility', getU32Decoder()], ['critChance', getU32Decoder()], ['critMultiplier', getU32Decoder()], ['fuelConsumptionRate', getU32Decoder()], ['missileDamage', getU32Decoder()], ['missileFireRate', getU32Decoder()], ]); } export function getCombatStatsCodec(): Codec { return combineCodec(getCombatStatsEncoder(), getCombatStatsDecoder()); }