@elite-dangerous-almanac/core 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROVENANCE/i18n/SOURCES.md +118 -94
- package/PROVENANCE/materials/SOURCES.md +22 -0
- package/PROVENANCE/ships/SOURCES.md +33 -6
- package/README.md +14 -8
- package/assets/ships/LakonMiner/schematic-bottom.svg +5 -3
- package/assets/ships/LakonMiner/schematic-top.svg +2 -4
- package/dist/chunk-3CKWT2F3.js +1 -0
- package/dist/{chunk-7ZERP4TB.js.map → chunk-3CKWT2F3.js.map} +1 -1
- package/dist/{chunk-A7KNIFRU.js → chunk-3P455LF4.js} +1 -1
- package/dist/{chunk-A7KNIFRU.js.map → chunk-3P455LF4.js.map} +1 -1
- package/dist/chunk-5QSCLEEB.js +1 -0
- package/dist/chunk-5QSCLEEB.js.map +1 -0
- package/dist/{chunk-4TFAZX73.js → chunk-773VO2GK.js} +1 -1
- package/dist/{chunk-7EWZGDWY.js → chunk-7S7ZTZZY.js} +1 -1
- package/dist/chunk-A5TCT2AJ.js +1 -0
- package/dist/{chunk-AIEC3LBT.js.map → chunk-A5TCT2AJ.js.map} +1 -1
- package/dist/chunk-AAU7OM47.js +1 -0
- package/dist/chunk-AAU7OM47.js.map +1 -0
- package/dist/{chunk-3LZXB2MC.js → chunk-ABSDZINM.js} +1 -1
- package/dist/{chunk-DSMLYA2M.js → chunk-BMQM4JBL.js} +1 -1
- package/dist/{chunk-DSMLYA2M.js.map → chunk-BMQM4JBL.js.map} +1 -1
- package/dist/chunk-E3AUKPSQ.js +1 -0
- package/dist/{chunk-G2VSQFD6.js.map → chunk-E3AUKPSQ.js.map} +1 -1
- package/dist/chunk-EFQOUATZ.js +1 -0
- package/dist/chunk-EFQOUATZ.js.map +1 -0
- package/dist/chunk-GISL7YML.js +1 -0
- package/dist/chunk-GISL7YML.js.map +1 -0
- package/dist/chunk-IZIIGK3W.js +1 -0
- package/dist/{chunk-TW7LUBHD.js.map → chunk-IZIIGK3W.js.map} +1 -1
- package/dist/chunk-KBCA4GEZ.js +1 -0
- package/dist/chunk-KLC5XT6F.js +1 -0
- package/dist/chunk-KLC5XT6F.js.map +1 -0
- package/dist/chunk-LOWDDWDT.js +1 -0
- package/dist/{chunk-GLWPSVFV.js.map → chunk-LOWDDWDT.js.map} +1 -1
- package/dist/chunk-MRLUWHGI.js +1 -0
- package/dist/{chunk-FF2X4K5P.js.map → chunk-MRLUWHGI.js.map} +1 -1
- package/dist/chunk-NBLLW7TH.js +1 -0
- package/dist/chunk-NBLLW7TH.js.map +1 -0
- package/dist/{chunk-IWFQ4ZKF.js → chunk-OFZGNWBT.js} +1 -1
- package/dist/chunk-PF3HZ73R.js +1 -0
- package/dist/{chunk-ITKZKREP.js.map → chunk-PF3HZ73R.js.map} +1 -1
- package/dist/{chunk-KGJCTSVV.js → chunk-S3MONE55.js} +1 -1
- package/dist/chunk-S3MONE55.js.map +1 -0
- package/dist/{chunk-OLKNYGGT.js → chunk-SDXUPP4P.js} +1 -1
- package/dist/chunk-XFDMCPDW.js +1 -0
- package/dist/{chunk-GRSNX36B.js.map → chunk-XFDMCPDW.js.map} +1 -1
- package/dist/chunk-XSN53F7W.js +1 -0
- package/dist/{chunk-DBGXZF7O.js.map → chunk-XSN53F7W.js.map} +1 -1
- package/dist/{chunk-MTJ4MS7W.js → chunk-YCGISPDR.js} +1 -1
- package/dist/i18n/experimental-effect-descriptions.d.ts +21 -6
- package/dist/i18n/experimental-effect-descriptions.js +1 -1
- package/dist/i18n/experimental-effects.js +1 -1
- package/dist/i18n/index.d.ts +0 -2
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/materials.d.ts +7 -6
- package/dist/i18n/materials.js +1 -1
- package/dist/i18n/micro-resources.d.ts +7 -6
- package/dist/i18n/micro-resources.js +1 -1
- package/dist/i18n/pre-engineered.js +1 -1
- package/dist/materials/index.js +1 -1
- package/dist/materials/materials-all.js +1 -1
- package/dist/materials/materials-encoded.js +1 -1
- package/dist/materials/materials-manufactured.js +1 -1
- package/dist/materials/materials.js +1 -1
- package/dist/materials/micro-resources-all.js +1 -1
- package/dist/materials/micro-resources.js +1 -1
- package/dist/ships/blueprint-costs.js +1 -1
- package/dist/ships/blueprint-journal.js +1 -1
- package/dist/ships/build-metrics.js +1 -1
- package/dist/ships/engineering-options.d.ts +10 -4
- package/dist/ships/engineering-options.js +1 -1
- package/dist/ships/engineering.js +1 -1
- package/dist/ships/gunsights.d.ts +2 -2
- package/dist/ships/gunsights.js +1 -1
- package/dist/ships/index.js +1 -1
- package/dist/ships/modules-all.js +1 -1
- package/dist/ships/modules-hardpoint.js +1 -1
- package/dist/ships/modules.js +1 -1
- package/dist/ships/pre-engineered-stats.d.ts +5 -0
- package/dist/ships/pre-engineered-stats.js +1 -1
- package/dist/ships/ship-loadout.d.ts +4 -1
- package/dist/ships/ship-loadout.js +1 -1
- package/dist/ships/weapons.d.ts +14 -4
- package/dist/ships/weapons.js +1 -1
- package/package.json +1 -9
- package/dist/chunk-37JIMWLK.js +0 -1
- package/dist/chunk-37JIMWLK.js.map +0 -1
- package/dist/chunk-5ZVYRX6Z.js +0 -1
- package/dist/chunk-5ZVYRX6Z.js.map +0 -1
- package/dist/chunk-7ZERP4TB.js +0 -1
- package/dist/chunk-AIEC3LBT.js +0 -1
- package/dist/chunk-CJQ37JII.js +0 -1
- package/dist/chunk-CJQ37JII.js.map +0 -1
- package/dist/chunk-DAQ3PJ4R.js +0 -1
- package/dist/chunk-DAQ3PJ4R.js.map +0 -1
- package/dist/chunk-DBGXZF7O.js +0 -1
- package/dist/chunk-FD74K27A.js +0 -1
- package/dist/chunk-FD74K27A.js.map +0 -1
- package/dist/chunk-FF2X4K5P.js +0 -1
- package/dist/chunk-G2VSQFD6.js +0 -1
- package/dist/chunk-GLWPSVFV.js +0 -1
- package/dist/chunk-GRSNX36B.js +0 -1
- package/dist/chunk-ITKZKREP.js +0 -1
- package/dist/chunk-JO52LYO3.js +0 -1
- package/dist/chunk-KGJCTSVV.js.map +0 -1
- package/dist/chunk-KJFUNIIY.js +0 -1
- package/dist/chunk-KJFUNIIY.js.map +0 -1
- package/dist/chunk-SC6Z2TV7.js +0 -1
- package/dist/chunk-SC6Z2TV7.js.map +0 -1
- package/dist/chunk-TW7LUBHD.js +0 -1
- package/dist/i18n/engineering-groups.d.ts +0 -21
- package/dist/i18n/engineering-groups.js +0 -1
- package/dist/i18n/engineering-groups.js.map +0 -1
- package/dist/i18n/ships.d.ts +0 -36
- package/dist/i18n/ships.js +0 -1
- package/dist/i18n/ships.js.map +0 -1
- /package/dist/{chunk-4TFAZX73.js.map → chunk-773VO2GK.js.map} +0 -0
- /package/dist/{chunk-7EWZGDWY.js.map → chunk-7S7ZTZZY.js.map} +0 -0
- /package/dist/{chunk-3LZXB2MC.js.map → chunk-ABSDZINM.js.map} +0 -0
- /package/dist/{chunk-JO52LYO3.js.map → chunk-KBCA4GEZ.js.map} +0 -0
- /package/dist/{chunk-IWFQ4ZKF.js.map → chunk-OFZGNWBT.js.map} +0 -0
- /package/dist/{chunk-OLKNYGGT.js.map → chunk-SDXUPP4P.js.map} +0 -0
- /package/dist/{chunk-MTJ4MS7W.js.map → chunk-YCGISPDR.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getLocalizedName,createLocalizedNameIndex}from"./chunk-RVIYOHYF.js";var experimental_effect_descriptions_default={special_concordant_sequence:{en:"A modification that causes weapon strikes to temporarily enhance the regeneration rate of a teammate's shield, at the cost of increased heat generation.",de:"Durch diese Modifikation erhöhen Waffentreffer vorübergehend die Regenerationsrate des Schildes eines Teammitglieds. Dabei wird allerdings die Hitzegeneration erhöht.",es:"Una modificación que causa que los impactos del arma mejoren temporalmente la tasa de regeneración de escudo de un compañero de equipo, a costa de una mayor generación de calor.",fr:"Modification permettant aux tirs qui touchent des coéquipiers d'augmenter la vitesse de régénération de leur bouclier, mais au prix d'une forte accumulation de chaleur.",pt:"Uma modificação que faz os acertos da arma melhorarem a taxa de regeneração do escudo de um membro da equipe temporariamente, ao custo de geração de calor aumentada.",ru:"При попадании по члену команды из оружия с этой модификацией скорость восстановления его щита временно увеличивается. Однако из-за этого изменения орудие вырабатывает больше тепла."},special_weapon_toughened:{en:"Additional, hardened supports and bracing further improve module survivability.",de:"Verbessert die Haltbarkeit von Modulen durch zusätzliche Härtung und Versteifung.",es:"Soportes y puntales adicionales y reforzados mejoran la supervivencia de los módulos.",fr:"Le renforcement de l'armature rend le module plus résistant.",pt:"Suportes e braçadeiras reforçados adicionais melhoram ainda mais a capacidade de sobrevivência do módulo.",ru:"Дополнительные опоры и крепеж повышают прочность модуля."},special_emissive_munitions:{en:"Experimental upgrade that causes strikes to envelope the target in energetic particles, significantly amplifying its signature, at the cost of increasing heat generation for the attacker.",de:"Bei Treffern mithilfe dieses experimentellen Upgrades wird das Ziel in energetische Partikel eingehüllt und damit seine Signatur deutlich erhöht. Allerdings tritt hier beim Angreifer eine erhöhte Hitzegeneration auf.",es:"Mejora experimental que provoca que los impactos envuelvan al objetivo con partículas energéticas, lo que amplifica significativamente su señal en los sensores, a costa de aumentar la generación de calor en el atacante.",fr:"Modification expérimentale permettant aux tirs qui touchent la cible de provoquer un nuage de particules d'énergie qui augmente considérablement sa signature, mais au prix d'une forte génération de chaleur au sein du navire ayant ouvert le feu.",pt:"Melhoria experimental que faz com que acertos envolvam o alvo em partículas energéticas, significativamente ampliando sua assinatura, ao custo de geração de calor aumentada para o agressor.",ru:"Снаряды, выпущенные из орудия с этим экспериментальным улучшением, при попадании покрывают цель энергетическими частицами, увеличивающими ее сигнатуру. Однако из-за этого изменения орудие вырабатывает больше тепла."},special_feedback_cascade_cooled:{en:"Rail slug energy charging mechanism, designed to interfere with shield cell operation. Strikes to a target deploying a shield cell will damage the shield cell bank and reduce shield restoration, at the cost of reduced damage from smaller rounds.",de:"Die selbst aufladenden Projektile der Schienenkanone wurden zur Störung von Schildzellenfunktionen konzipiert. Beim Treffer einer aktiven Schildzelle wird die Schildzellenbank beschädigt und dadurch die Schildregeneration eingeschränkt. Kleinere Salven erzielen dafür allerdings weniger Schaden.",es:"Mecanismo de carga de energía de proyectiles de riel, diseñado para interferir con el funcionamiento de las células de escudo. Los ataques a un objetivo que esté desplegando una célula de escudo dañarán el banco de células de escudo y reducirán la recarga del escudo, a costa de un menor daño de los proyectiles, que son más pequeños.",fr:"Mécanisme d'imprégnation énergétique de munitions électriques, qui les rend capables de perturber le bon fonctionnement des cellules d'énergie d'une cible et de retarder la restauration de son bouclier, mais au prix d'une réduction des dégâts.",pt:"Mecanismo de carregamento de energia de bala de canhão elétrico, desenvolvido para interferir com a operação da célula de escudo. Ataques a um alvo utilizando uma célula de escudo vai danificar o banco de célula de escudo e reduzir a restauração do escudo, ao custo de dano reduzido de projéteis menores.",ru:"Механизм зарядки рельсовых снарядов, позволяющий влиять на работу щитовых ячеек. При попадании по цели, использующей щитовую ячейку, повреждает ее и снижает скорость восстановления щита за счет уменьшения наносимого снарядами малого калибра урона."},special_weapon_efficient:{en:"Advanced software and internal sensors regulate energy flow more efficiently, reducing module power draw.",de:"Eine fortschrittliche Software und interne Sensoren regeln den Energiefluss effizienter, die Module ziehen also weniger Energie.",es:"Software avanzado y sensores internos que regulan el flujo de energía de manera más eficiente, lo que reduce el módulo de consumo de energía.",fr:"L'ajout de logiciels et de capteurs internes sophistiqués permet d'améliorer la circulation de l'énergie et, en conséquence, de réduire la consommation du module.",pt:"O software avançado e os sensores internos regulam o fluxo de energia de forma mais eficiente, reduzindo o consumo de energia do módulo.",ru:"Усовершенствованное программное обеспечение и внутренние датчики управляют интенсивностью подачи энергии, снижая ее расход в модуле."},special_incendiary_rounds:{en:"Modified ammo system capable of delivering superheated rounds, increasing damage and converting a large portion to thermal.",de:"Dieses modifizierte Munitionssystem kann ultra-heiße Salven abfeuern und damit den Schaden erhöhen und einen großen Teil der Schadenswirkung in thermale Energie umwandeln.",es:"Sistema de munición modificada capaz de proporcionar proyectiles sobrecalentados, aumentando el daño y convirtiendo una gran parte del mismo a térmico.",fr:"Munitions modifiées à libération thermique infligeant des dégâts plus élevés, qui deviennent, pour la plupart, des dégâts thermiques.",pt:"Sistema de munição modificado capaz de entregar projéteis superaquecidos, aumentando o dano e convertendo uma grande porção para térmico.",ru:"Система, подающая модифицированные боеприпасы – нагретые снаряды, обладающие большей мощностью и наносящие в основном тепловой урон."},special_weapon_rateoffire:{en:"Additional servomechanisms and controller software allow the weapon to safely fire at an increased rate, at the cost of increased power draw.",de:"Zusätzliche Servomechanismen und eine bessere Controller-Software lassen die Waffe sicher mit einer höheren Feuerrate schießen, allerdings auf Kosten eines höheren Energiebedarfs.",es:"Servomecanismos y software de control adicionales permiten que el arma dispare de manera segura a una tasa superior a costa de un incremento del consumo de energía.",fr:"L'introduction de servomécanismes supplémentaires et d'un logiciel de contrôle spécifique permet d'augmenter la cadence de tir en toute sécurité, au prix d'une consommation plus élevée.",pt:"Os servomecanismos adicionais e o software do controlador permitem que a arma dispare mais frequentemente com segurança, em troca do maior consumo de energia.",ru:"Дополнительные сервомеханизмы и программное обеспечение позволяют повысить скорострельность орудия. При этом возрастает энергопотребление."},special_weapon_damage:{en:"Scaled up components and reinforced munitions housing allows the weapon to pack more of a punch, increasing damage at the cost of increased power draw.",de:"Hochskalierte Komponenten im Verbund mit verstärktem Munitionsmagazin. So hat die Waffe mehr Durchschlagskraft, allerdings auf Kosten eines höheren Energiebedarfs.",es:"Componentes aumentados y armazón reforzado de la munición que permiten que el arma sea más efectiva, lo que aumenta el daño a costa de un incremento del consumo de energía.",fr:"Les composants surdimensionnés et le chargeur de munitions renforcé permettent d'augmenter la puissance de l'arme, et donc ses dégâts, au prix d'une consommation plus élevée.",pt:"Os componentes maiores e o compartimento de munições reforçado permitem que a arma cause mais dano em troca do maior consumo de energia.",ru:"Увеличенные компоненты и укрепленные гнезда для боеприпасов повышают убойную силу орудия, но расход энергии также растет."},special_plasma_slug_cooled:{en:"Experimental upgrade allowing plasma slug ammo to be generated directly from ship fuel, at the cost of reduced damage.",de:"Dieses experimentelle Upgrade kann direkt aus dem Schiffstreibstoff hergestellte Plasmaprojektile verschießen, bietet aber etwas weniger Schadenswirkung.",es:"Mejora experimental que permite tener munición de plasma generada directamente del combustible de la nave, a costa de un menor daño.",fr:"Modification expérimentale permettant de générer des munitions à plasma en utilisant le carburant du vaisseau, mais au prix d'une réduction des dégâts infligés.",pt:"Melhoria experimental permitindo que projéteis de plasma sejam gerados diretamente do combustível da nave, ao custo de dano reduzido.",ru:"Экспериментальное улучшение, позволяющее преобразовывать топливо корабля в плазменные снаряды, но снижающее урон от орудия."},special_weapon_lightweight:{en:"Key components replaced with versions crafted from lightweight materials and all extraneous parts removed entirely to reduce mass.",de:"Schlüsselkomponenten wurden durch Leichtmaterialien ersetzt, alle unwesentlichen Teile wurden zur Gewichtsverringerung entfernt.",es:"Los componentes clave han sido reemplazados con versiones de materiales más ligeros y las partes superfluas han sido eliminadas por completo para reducir la masa.",fr:"Afin de réduire la masse, les composants clés sont remplacés par des versions en matériaux ultralégers, et les pièces non essentielles sont purement et simplement supprimées.",pt:"Componentes essenciais substituídos por versões criadas com materiais leves e todas as peças não essenciais removidas para reduzir a massa.",ru:"Для снижения массы основные компоненты заменяются на облегченные версии, а дополнительные убираются полностью."},special_super_penetrator_cooled:{en:"Experimental munitions that are capable of penetrating and damaging all modules along its trajectory, at the cost of increased reload times.",de:"Diese experimentelle Munition bedingt zwar höhere Nachladezeiten, kann dafür aber alle Module auf der Flugbahn durchdringen und beschädigen.",es:"Munición experimental que es capaz de penetrar y dañar todos los módulos a lo largo de su trayectoria, a costa de un mayor tiempo de recarga.",fr:"Munitions expérimentales capables de transpercer la cible et d'endommager tous les modules présents sur sa trajectoire. Entraîne néanmoins une augmentation du temps de rechargement.",pt:"Munições experimentais que são capazes de penetrar e danificar todos os módulos ao longo de sua trajetória, ao custo de tempo recarga aumentado.",ru:"Экспериментальные боеприпасы, пробивающие корабль насквозь и поражающие все модули, оказавшиеся у них на пути. Данная модификация замедляет процесс перезарядки орудия."},special_shieldbooster_explosive:{en:"Advanced field resonation patterns increase resistance to explosive damage, at the cost of overall shield strength.",de:"Fortschrittliche Feldresonatoren mit besserem Widerstand gegen Explosivs, auf Kosten der Schildstärke insgesamt.",es:"Patrones de resonancia de campo avanzados que incrementan la resistencia al daño explosivo a costa de la fuerza general del escudo.",fr:"L'introduction de champs de modulation sophistiqués confère une résistance plus élevée aux dégâts explosifs, au prix d'une réduction de la puissance générale du bouclier.",pt:"Padrões de ressonância de campo avançados aumentam a resistência ao dano explosivo, em troca da resistência geral do escudo.",ru:"Улучшенные резонирующие механизмы щита повышают сопротивление урону от взрывов за счет снижения общей мощности щита."},special_shieldbooster_toughened:{en:"Additional, hardened supports and bracing further improve module survivability.",de:"Verbessert die Haltbarkeit von Modulen durch zusätzliche Härtung und Versteifung.",es:"Soportes y puntales adicionales y reforzados mejoran la supervivencia de los módulos.",fr:"Le renforcement de l'armature rend le module plus résistant.",pt:"Suportes e braçadeiras reforçados adicionais melhoram ainda mais a capacidade de sobrevivência do módulo.",ru:"Дополнительные опоры и крепеж повышают прочность модуля."},special_shieldbooster_efficient:{en:"Advanced software and internal sensors regulate energy flow more efficiently, reducing module power draw.",de:"Eine fortschrittliche Software und interne Sensoren regeln den Energiefluss effizienter, die Module ziehen also weniger Energie.",es:"Software avanzado y sensores internos que regulan el flujo de energía de manera más eficiente, lo que reduce el módulo de consumo de energía.",fr:"L'ajout de logiciels et de capteurs internes sophistiqués permet d'améliorer la circulation de l'énergie et, en conséquence, de réduire la consommation du module.",pt:"O software avançado e os sensores internos regulam o fluxo de energia de forma mais eficiente, reduzindo o consumo de energia do módulo.",ru:"Усовершенствованное программное обеспечение и внутренние датчики управляют интенсивностью подачи энергии, снижая ее расход в модуле."},special_shieldbooster_kinetic:{en:"Enlarged projection nodes increase resistance to kinetic damage, at the cost of overall shield strength.",de:"Vergrößerte Projektionsknoten mit besserem Widerstand gegen kinetische Energie, auf Kosten der Schildstärke insgesamt.",es:"Nodos de proyección aumentados que incrementan la resistencia al daño cinético a costa de la fuerza general del escudo.",fr:"L'agrandissement des nœuds de projection confère une résistance plus élevée aux dégâts cinétiques, au prix d'une réduction de la puissance générale du bouclier.",pt:"Os nós de projeção reforçados aumentam a resistência ao dano cinético, em troca da resistência geral do escudo.",ru:"Усиленная защита от ответной реакции и укрепленные проекционные узлы повышают сопротивление кинетическому урону за счет снижения общей мощности щита."},special_shieldbooster_chunky:{en:"Additional, advanced capacitors increases overall shield strength at the cost of damage resistance.",de:"Zusätzliche, fortschrittliche Kondensatoren erhöhen die allgemeine Schildstärke, auf Kosten des Schadenswiderstands.",es:"Capacitadores avanzados adicionales que incrementan la fuerza general del escudo a costa de la resistencia al daño.",fr:"L'ajout de condensateurs sophistiqués supplémentaires permet d'augmenter la puissance générale du bouclier, au prix d'une réduction de la résistance aux dégâts.",pt:"Capacitores avançados adicionais aumentam a força geral do escudo em troca da resistência ao dano.",ru:"Дополнительные улучшенные конденсаторы повышают общую мощность щита, но снижают сопротивление урону."},special_shieldbooster_thermic:{en:"Improved feedback protection and reinforced projection nodes increase resistance to thermal damage, at the cost of overall shield strength.",de:"Verbesserter Feedback-Schutz und verstärkte Projektionsknoten mit besserem Widerstand gegen thermische Energie, auf Kosten der Schildstärke insgesamt.",es:"Protección de retroalimentación mejorada y nodos de proyección reforzados que incrementan la resistencia al daño térmico a costa de la fuerza general del escudo.",fr:"L'amélioration des mesures de sécurité et le renforcement des nœuds de projection confèrent une résistance plus élevée aux dégâts thermiques, au prix d'une réduction de la puissance générale du bouclier.",pt:"A proteção de retorno aprimorada e os nós de projeção reforçados aumentam a resistência ao dano térmico, em troca da resistência geral do escudo.",ru:"Усиленная защита от ответной реакции и укрепленные проекционные узлы повышают сопротивление тепловому урону за счет снижения общей мощности щита."},special_armour_kinetic:{en:"Custom angling of plates at critical points along the ship's hull make projectile strikes more likely to glance, reducing the impact of kinetic damage at the cost of structural integrity.",de:"Eine Art 3D-Überzug, der einen Schiffsrumpf vor Projektilen schützen kann. Der Schaden durch kinetische Energie wird auf Kosten der strukturellen Intaktheit verringert.",es:"Chapas en ángulo a medida en puntos clave del casco de la nave que hacen que los impactos de los proyectiles sean más propensos a ser desviados, lo que reduce el impacto del daño cinético a costa de la integridad estructural.",fr:"Des plaques de blindage sont posées sur la coque afin de créer des angles et de faciliter le rebond des projectiles ennemis. Les dégâts cinétiques sont ainsi réduits, au prix d'un affaiblissement de l'intégrité structurelle.",pt:"A inclinação personalizada das placas em pontos essenciais do casco da nave faz com que o projétil tenha maiores chances de ser defletido, reduzindo o impacto do dano cinético em troca da integridade estrutural.",ru:"Благодаря расположению пластин обшивки под разными углами снаряды при попадании идут по касательной. При этом сопротивление кинетическому урону повышается, а структурная целостность снижается."},special_armour_chunky:{en:"Increased depth of plating increases the ship's overall structural integrity, at the cost of resistance against all types of damage.",de:"Besonders tiefer und dichter Überzug, der die strukturelle Intaktheit eines Schiffs erhöht, auf Kosten des Widerstands gegen alle Arten von Schaden.",es:"Aumento de la profundidad del enchapado que incrementa la integridad estructural general de la nave a costa de la resistencia contra todo tipo de daño.",fr:"L'augmentation de l'épaisseur du blindage renforce l'intégrité structurelle générale du vaisseau, au prix d'une diminution de la résistance contre tous les types de dégâts.",pt:"O aumento da profundidade do revestimento aumenta a integridade estrutural geral da nave, em troca da resistência contra todos os tipos de danos.",ru:"Более толстая броня повышает общую структурную целостность корабля за счет снижения сопротивления всем типам урона."},special_armour_explosive:{en:"Layers of advanced inert lining material within the ship's plating absorb and redistribute the force from explosive attacks, reducing damage of this type at the cost of overall structural integrity.",de:"Schichten eines fortschrittlichen Leinenmaterials zerstreuen die Stärke durch Angriffe mit Explosiva. Schaden dieses Typs wird reduziert, auf Kosten der strukturellen Intaktheit.",es:"Capas de material de revestimiento inerte y avanzado en el enchapado de la nave que absorben y redistribuyen el impacto de los ataques explosivos, lo que reduce el daño de este tipo a costa de la integridad estructural general.",fr:"L'introduction de couches de matériaux inertes et sophistiqués dans le blindage permet d'absorber et dissiper la puissance dégagée par les attaques explosives. Les dégâts de ce type sont donc réduits, au prix d'un affaiblissement de l'intégrité structurelle générale.",pt:"As camadas de material de revestimento inerte avançado dentro das placas da nave absorvem e redistribuem a força de ataques explosivos, reduzindo os danos desse tipo em troca da integridade estrutural geral.",ru:"Несколько слоев обшивки из инертного материала в корпусе корабля поглощают и рассеивают силу взрывов, снижая урон этого типа за счет общей структурной целостности."},special_armour_thermic:{en:"Surface coating of advanced formulas designed to reflect and dissipate thermal energy, at the cost of structural integrity.",de:"Ein Oberflächenüberzug, der durch eine fortschrittliche Formel thermische Energie reflektieren und zerstreuen kann, auf Kosten der strukturellen Intaktheit.",es:"Revestimiento de la superficie con fórmulas avanzadas diseñadas para reflejar y disipar la energía térmica a costa de la integridad estructural.",fr:"L'application d'un revêtement chimique sophistiqué permet de réfléchir et dissiper l'énergie thermique, au prix d'un affaiblissement de l'intégrité structurelle.",pt:"Revestimento superficial com fórmulas avançadas projetadas para refletir e dissipar energia térmica, em troca da integridade estrutural.",ru:"После особой обработки обшивка отражает и рассеивает тепловую энергию, но структурная целостность нарушается."},special_powerplant_toughened:{en:"Additional, hardened supports and bracing further improve module survivability.",de:"Verbessert die Haltbarkeit von Modulen durch zusätzliche Härtung und Versteifung.",es:"Soportes y puntales adicionales y reforzados mejoran la supervivencia de los módulos.",fr:"Le renforcement de l'armature rend le module plus résistant.",pt:"Suportes e braçadeiras reforçados adicionais melhoram ainda mais a capacidade de sobrevivência do módulo.",ru:"Дополнительные опоры и крепеж повышают прочность модуля."},special_powerplant_highcharge:{en:"Oversized, reinforced components increase power output at the cost of increased mass.",de:"Verstärkte Komponenten in Übergröße erhöhen die Energieabgabe auf Kosten einer höheren Masse.",es:"Componentes reforzados y de mayor tamaño aumentan la capacidad de energía a costa del incremento de la masa.",fr:"Les composants renforcés et surdimensionnés augmentent la production d'énergie, au prix d'une masse plus élevée.",pt:"Componentes reforçados e de maior tamanho aumentam a potência em troca do aumento de massa.",ru:"Компоненты усилены и увеличены сверх меры, благодаря чему повышается выработка энергии, но растет и масса."},special_powerplant_lightweight:{en:"Key components replaced with versions crafted from lightweight materials and all extraneous parts removed entirely to reduce mass.",de:"Schlüsselkomponenten wurden durch Leichtmaterialien ersetzt, alle unwesentlichen Teile wurden zur Gewichtsverringerung entfernt.",es:"Los componentes clave han sido reemplazados con versiones de materiales más ligeros y las partes superfluas han sido eliminadas por completo para reducir la masa.",fr:"Afin de réduire la masse, les composants clés sont remplacés par des versions en matériaux ultralégers, et les pièces non essentielles sont purement et simplement supprimées.",pt:"Componentes essenciais substituídos por versões criadas com materiais leves e todas as peças não essenciais removidas para reduzir a massa.",ru:"Для снижения массы основные компоненты заменяются на облегченные версии, а дополнительные убираются полностью."},special_powerplant_cooled:{en:"Additional thermal conduits and radiator solutions integrated across the module help balance thermal load increase cooling potential.",de:"Zusätzliche thermische Verstärker und Wärmestrahler sorgen für eine ausgewogene Wärmeverteilung und verbessern das Kühlpotential.",es:"Conductores térmicos y soluciones del radiador adicionales integradas por el módulo que contribuyen a equilibrar la carga térmica e incrementan el potencial de enfriado.",fr:"L'ajout de nombreux décupleurs thermiques et radiateurs aide à équilibrer la charge thermique et à augmenter la capacité de refroidissement.",pt:"Condutores térmicos adicionais e soluções de radiadores integradas ao módulo ajudam a equilibrar o aumento do potencial de resfriamento da carga térmica.",ru:"Благодаря встроенным в модуль дополнительным проводникам тепла и системам радиаторов, тепловая нагрузка распределяется более равномерно и эффективность охлаждения возрастает."},special_engine_toughened:{en:"Additional, hardened supports and bracing further improve module survivability.",de:"Verbessert die Haltbarkeit von Modulen durch zusätzliche Härtung und Versteifung.",es:"Soportes y puntales adicionales y reforzados mejoran la supervivencia de los módulos.",fr:"Le renforcement de l'armature rend le module plus résistant.",pt:"Suportes e braçadeiras reforçados adicionais melhoram ainda mais a capacidade de sobrevivência do módulo.",ru:"Дополнительные опоры и крепеж повышают прочность модуля."},special_engine_overloaded:{en:"Removal of safety protocols in controller software to increase drive thrust output at the cost of additional heat generation.",de:"Die Sicherheitsprotokolle in der Controller-Software wurden entfernt, um den Schub-Output des Antriebs zu erhöhen, allerdings auf Kosten der Hitzegenerierung.",es:"Eliminación de los protocolos de seguridad en el software de control para incrementar la capacidad de impulso del motor a costa de generación de calor adicional.",fr:"La suppression de l'intégralité des protocoles de sécurité au niveau du logiciel de contrôle permet d'augmenter les performances de propulsion, au prix d'une forte accumulation de chaleur.",pt:"Remoção de protocolos de segurança no software do controlador para aumentar o impulso de saída em troca de geração de calor adicional.",ru:"Протоколы безопасности в программном обеспечении контроллера отключаются. Повышается выработка тепла."},special_engine_haulage:{en:"Enhanced fuel and thrust balancing across the drives to improve mass curve efficiency.",de:"Verbesserte Balance zwischen Treibstoffverbrauch und Schub in allen Antriebskomponenten, zur Verbesserung der Massenkurveeffizienz.",es:"Combustible e impulsores mejorados equilibrados por los motores para mejorar la eficiencia de curva de masa.",fr:"L'équilibrage de la répartition du carburant et de la propulsion entre les réacteurs permet d'améliorer les performances à masse égale.",pt:"Aumento do combustível e do equilíbrio de impulso nas unidades para melhorar a eficiência da curva de massa.",ru:"Улучшается распределение топлива и тяги в двигателях, и эффективность гравитационной кривой повышается."},special_engine_lightweight:{en:"Key components replaced with versions crafted from lightweight materials and all extraneous parts removed entirely to reduce mass.",de:"Schlüsselkomponenten wurden durch Leichtmaterialien ersetzt, alle unwesentlichen Teile wurden zur Gewichtsverringerung entfernt.",es:"Los componentes clave han sido reemplazados con versiones de materiales más ligeros y las partes superfluas han sido eliminadas por completo para reducir la masa.",fr:"Afin de réduire la masse, les composants clés sont remplacés par des versions en matériaux ultralégers, et les pièces non essentielles sont purement et simplement supprimées.",pt:"Componentes essenciais substituídos por versões criadas com materiais leves e todas as peças não essenciais removidas para reduzir a massa.",ru:"Для снижения массы основные компоненты заменяются на облегченные версии, а дополнительные убираются полностью."},special_engine_cooled:{en:"Additional thermal conduits and radiator solutions integrated across the module help balance thermal load increase cooling potential at the cost of slight mass increase.",de:"Zusätzliche thermische Verstärker und Wärmestrahler sorgen für eine ausgewogene Wärmeverteilung und verbessern das Kühlpotential auf Kosten eines leicht erhöhten Gewichts.",es:"Conductores térmicos y soluciones del radiador adicionales integradas por el módulo que contribuyen a equilibrar la carga térmica e incrementan el potencial de enfriado a costa de un ligero incremento de la masa.",fr:"L'ajout de décupleurs thermiques et radiateurs permet d'équilibrer la charge thermique. Augmente la capacité de refroidissement, au prix d'une légère augmentation de la masse.",pt:"Os condutores térmicos adicionais e as soluções de radiadores integradas no módulo ajudam a equilibrar o aumento do potencial de resfriamento da carga térmica em troca de um pequeno aumento de massa.",ru:"Благодаря встроенным в модуль дополнительным проводникам тепла и системам радиаторов тепловая нагрузка распределяется более равномерно и за счет небольшого увеличения массы возрастает эффективность охлаждения."},special_fsd_fuelcapacity:{en:"Toughened FSD power conduits and a reinforced charging field increase the amount of fuel injected when charging, allowing larger jumps at the cost of increased power draw.",de:"Stärkere FSA-Energieleiter und ein verstärktes Ladefeld erhöhen die eingespeiste Treibstoffmenge beim Laden. So werden weitere Sprünge auf Kosten erhöhten Energiebedarfs möglich.",es:"Conductos de energía MDD endurecidos y un campo de carga reforzado incrementan la cantidad de combustible que se inyecta al cargar, lo que permite saltos más largos a costa de un incremento del consumo de energía.",fr:"Le renforcement des conduits d'énergie FSD et du réservoir permet d'augmenter la quantité de carburant injectée lors du chargement et, en conséquence, la portée de saut, au prix d'une consommation plus élevée.",pt:"Os condutores de energia MDD mais resistentes e um campo de carga reforçado aumentam a quantidade de combustível injetado ao carregar, permitindo saltos maiores em troca do aumento do consumo de energia.",ru:"Укрепленные энергопроводники FSD и усиленное заряжающее поле повышают затраты топлива на зарядку. При этом растет как дальность прыжка, так и энергопотребление."},special_fsd_toughened:{en:"Additional, hardened supports and bracing further improve module survivability.",de:"Verbessert die Haltbarkeit von Modulen durch zusätzliche Härtung und Versteifung.",es:"Soportes y puntales adicionales y reforzados mejoran la supervivencia de los módulos.",fr:"Le renforcement de l'armature rend le module plus résistant.",pt:"Suportes e braçadeiras reforçados adicionais melhoram ainda mais a capacidade de sobrevivência do módulo.",ru:"Дополнительные опоры и крепеж повышают прочность модуля."},special_fsd_heavy:{en:"Complex software upgrade and internal sensor suite able to optimise frame shift operation by analysing and accounting for ship loadout. Increases optimised mass at the cost of module health.",de:"Ein komplexes Software-Upgrade und eine interne Sensorensuite sorgen für eine optimierte Frameshift-Funktionalität. Entscheidend dabei: die Analyse der Schiffkonfiguration. Erhöht die optimierte Masse auf Kosten der Modulhaltbarkeit.",es:"Mejora de software compleja y equipo de sensores internos que permiten optimizar la operación de distorsión al analizar y considerar el equipamiento de la nave. Aumenta la masa optimizada a costa del estado del módulo.",fr:"L'installation de mises à jour logicielles complexes et d'une série de capteurs internes permet d'optimiser les opérations FSD en intégrant dans les calculs l'analyse minutieuse de la configuration du vaisseau. Permet d'augmenter la masse optimale, au prix de la solidité du module.",pt:"Atualização complexa de software e conjunto de sensores internos capazes de otimizar a operação de distorção de fase, analisando e levando em conta os equipamentos da nave. Aumenta a massa otimizada em troca do estado do módulo.",ru:"Комплексное улучшение программного обеспечения и набора внутренних датчиков способствует оптимизации работы рамочно-сместительных двигателей (FSD) путем анализа и учета снаряжения корабля. Оптимизация массы выполняется за счет снижения прочности модуля."},special_fsd_lightweight:{en:"Key components replaced with versions crafted from lightweight materials and all extraneous parts removed entirely to reduce mass.",de:"Schlüsselkomponenten wurden durch Leichtmaterialien ersetzt, alle unwesentlichen Teile wurden zur Gewichtsverringerung entfernt.",es:"Los componentes clave han sido reemplazados con versiones de materiales más ligeros y las partes superfluas han sido eliminadas por completo para reducir la masa.",fr:"Afin de réduire la masse, les composants clés sont remplacés par des versions en matériaux ultralégers, et les pièces non essentielles sont purement et simplement supprimées.",pt:"Componentes essenciais substituídos por versões criadas com materiais leves e todas as peças não essenciais removidas para reduzir a massa.",ru:"Для снижения массы основные компоненты заменяются на облегченные версии, а дополнительные убираются полностью."},special_fsd_cooled:{en:"Additional thermal conduits and radiator solutions integrated across the module help balance thermal load increase cooling potential.",de:"Zusätzliche thermische Verstärker und Wärmestrahler sorgen für eine ausgewogene Wärmeverteilung und verbessern das Kühlpotential.",es:"Conductores térmicos y soluciones del radiador adicionales integradas por el módulo que contribuyen a equilibrar la carga térmica e incrementan el potencial de enfriado.",fr:"L'ajout de nombreux décupleurs thermiques et radiateurs aide à équilibrer la charge thermique et à augmenter la capacité de refroidissement.",pt:"Condutores térmicos adicionais e soluções de radiadores integradas ao módulo ajudam a equilibrar o aumento do potencial de resfriamento da carga térmica.",ru:"Благодаря встроенным в модуль дополнительным проводникам тепла и системам радиаторов, тепловая нагрузка распределяется более равномерно и эффективность охлаждения возрастает."},special_powerdistributor_capacity:{en:"Additional capacitor arrays allow the power distributor to store more energy at the cost of a slower charging rate.",de:"Zusätzliche Kondensatorensysteme lassen den Energieverteiler mehr Energie speichern, aber auf Kosten einer langsameren Laderate.",es:"Sistema de capacitadores adicional que permite que el distribuidor de energía almacene más energía a costa de una tasa de carga más lenta.",fr:"L'ajout d'une batterie de condensateurs supplémentaires augmente la capacité de stockage d'énergie du répartiteur de puissance, au prix d'une diminution de la vitesse de chargement.",pt:"Matrizes de capacitores adicionais permitem que o distribuidor de energia armazene mais energia ao custo de uma taxa de carga mais lenta.",ru:"Дополнительные системы конденсаторов повышают энергоемкость распределителя питания за счет замедления зарядки."},special_powerdistributor_toughened:{en:"Additional, hardened supports and bracing further improve module survivability.",de:"Verbessert die Haltbarkeit von Modulen durch zusätzliche Härtung und Versteifung.",es:"Soportes y puntales adicionales y reforzados mejoran la supervivencia de los módulos.",fr:"Le renforcement de l'armature rend le module plus résistant.",pt:"Suportes e braçadeiras reforçados adicionais melhoram ainda mais a capacidade de sobrevivência do módulo.",ru:"Дополнительные опоры и крепеж повышают прочность модуля."},special_powerdistributor_efficient:{en:"Advanced software and internal sensors regulate energy flow more efficiently, reducing module power draw.",de:"Eine fortschrittliche Software und interne Sensoren regeln den Energiefluss effizienter, die Module ziehen also weniger Energie.",es:"Software avanzado y sensores internos que regulan el flujo de energía de manera más eficiente, lo que reduce el módulo de consumo de energía.",fr:"L'ajout de logiciels et de capteurs internes sophistiqués permet d'améliorer la circulation de l'énergie et, en conséquence, de réduire la consommation du module.",pt:"O software avançado e os sensores internos regulam o fluxo de energia de forma mais eficiente, reduzindo o consumo de energia do módulo.",ru:"Усовершенствованное программное обеспечение и внутренние датчики управляют интенсивностью подачи энергии, снижая ее расход в модуле."},special_powerdistributor_lightweight:{en:"Key components replaced with versions crafted from lightweight materials and all extraneous parts removed entirely to reduce mass.",de:"Schlüsselkomponenten wurden durch Leichtmaterialien ersetzt, alle unwesentlichen Teile wurden zur Gewichtsverringerung entfernt.",es:"Los componentes clave han sido reemplazados con versiones de materiales más ligeros y las partes superfluas han sido eliminadas por completo para reducir la masa.",fr:"Afin de réduire la masse, les composants clés sont remplacés par des versions en matériaux ultralégers, et les pièces non essentielles sont purement et simplement supprimées.",pt:"Componentes essenciais substituídos por versões criadas com materiais leves e todas as peças não essenciais removidas para reduzir a massa.",ru:"Для снижения массы основные компоненты заменяются на облегченные версии, а дополнительные убираются полностью."},special_powerdistributor_fast:{en:"Advanced, oversized energy conduits increase the power distributor's charge rate at the cost of reduced maximum charge potential.",de:"Fortschrittliche Energieleiter in Übergröße. Erhöhen die Laderate des Energieverteilers auf Kosten eines geringeren Maximumladepotenzials.",es:"Conductos de energía avanzados y de mayor tamaño que incrementan la tasa de carga del distribuidor de energía a costa de una reducción del potencial de carga máximo.",fr:"Des conduits à énergie sophistiqués et surdimensionnés augmentent la vitesse de chargement du répartiteur de puissance, au prix d'une réduction de la capacité de chargement totale.",pt:"Condutores de energia avançados e maiores aumentam a taxa de carga do distribuidor de energia em troca da redução no potencial de carga máximo.",ru:"Улучшенные и увеличенные энергетические проводники повышают скорость зарядки распределителя питания за счет снижения максимальной энергоемкости."},special_hullreinforcement_kinetic:{en:"Custom angling of plates at critical points along the ship's hull make projectile strikes more likely to glance, reducing the impact of kinetic damage at the cost of reducing structural integrity benefits.",de:"Eine Art 3D-Überzug, der einen Schiffsrumpf vor Projektilen schützen kann. Der Schaden durch kinetische Energie wird auf Kosten der strukturellen Intaktheit verringert.",es:"Chapas en ángulo a medida en puntos clave del casco de la nave que hacen que los impactos de los proyectiles sean más propensos a ser desviados, lo que reduce el impacto del daño cinético a costa de reducir los beneficios de la integridad estructural.",fr:"Des plaques de blindage sont posées sur la coque afin de créer des angles et de faciliter le rebond des projectiles ennemis. Les dégâts cinétiques sont ainsi réduits, au prix d'un affaiblissement de l'intégrité structurelle générale.",pt:"A inclinação personalizada das placas em pontos essenciais do casco da nave faz com que o projétil tenha maiores chances de ser defletido, reduzindo o impacto do dano cinético em troca da redução dos benefícios de integridade estrutural.",ru:"Благодаря расположению пластин обшивки под разными углами снаряды при попадании идут по касательной. При этом сопротивление кинетическому урону повышается, а структурная целостность снижается."},special_hullreinforcement_chunky:{en:"Increased depth of plating increases the ship's overall structural integrity, at the cost of resistance against all types of damage.",de:"Besonders tiefer und dichter Überzug, der die strukturelle Intaktheit eines Schiffs erhöht, auf Kosten des Widerstands gegen alle Arten von Schaden.",es:"Aumento de la profundidad del enchapado que incrementa la integridad estructural general de la nave a costa de la resistencia contra todo tipo de daño.",fr:"L'augmentation de l'épaisseur du blindage renforce l'intégrité structurelle générale du vaisseau, au prix d'une diminution de la résistance contre tous les types de dégâts.",pt:"O aumento da profundidade do revestimento aumenta a integridade estrutural geral da nave, em troca da resistência contra todos os tipos de danos.",ru:"Более толстая броня повышает общую структурную целостность корабля за счет снижения сопротивления всем типам урона."},special_hullreinforcement_explosive:{en:"Layers of advanced inert lining material within the ship's plating absorb and redistribute the force from explosive attacks, reducing damage of this type at the cost of reducing structural integrity benefits.",de:"Schichten eines fortschrittlichen Leinenmaterials zerstreuen die Stärke durch Angriffe mit Explosiva. Schaden dieses Typs wird reduziert, auf Kosten der strukturellen Intaktheit.",es:"Capas de material de revestimiento inerte y avanzado en el enchapado de la nave que absorben y redistribuyen el impacto de los ataques explosivos, lo que reduce el daño de este tipo a costa de reducir los beneficios de la integridad estructural.",fr:"L'introduction de couches de matériaux inertes et sophistiqués dans le blindage permet d'absorber et dissiper la puissance dégagée par les attaques explosives. Les dégâts de ce type sont donc réduits, au prix d'un affaiblissement de l'intégrité structurelle générale.",pt:"As camadas de material de revestimento inerte avançado dentro das placas da nave absorvem e redistribuem a força de ataques explosivos, reduzindo os danos desse tipo em troca da redução dos benefícios de integridade estrutural.",ru:"Несколько слоев обшивки из инертного материала в корпусе корабля поглощают и рассеивают силу взрывов, снижая урон этого типа за счет снижения общей структурной целостности."},special_hullreinforcement_thermic:{en:"Surface coating of advanced formulas designed to reflect and dissipate thermal energy, at the cost of reducing structural integrity benefits.",de:"Ein Oberflächenüberzug, der durch eine fortschrittliche Formel thermische Energie reflektieren und zerstreuen kann, auf Kosten der strukturellen Intaktheit.",es:"Revestimiento de la superficie con fórmulas avanzadas diseñadas para reflejar y disipar la energía térmica a costa de reducir los beneficios de la integridad estructural.",fr:"L'application d'un revêtement chimique sophistiqué permet de réfléchir et dissiper l'énergie thermique, au prix d'un affaiblissement de l'intégrité structurelle.",pt:"Revestimento superficial com fórmulas avançadas projetadas para refletir e dissipar energia térmica, em troca da redução dos benefícios de integridade estrutural.",ru:"После особой обработки обшивка отражает и рассеивает тепловую энергию, но структурная целостность снижается."},special_shieldcell_oversized:{en:"Oversized cells offer increased cell strength at cost of an increased spin up time.",de:"Übergroße Zellen, die eine erhöhte Zellenstärke auf Kosten einer längeren Hochdrehzeit bieten.",es:"Células de mayor tamaño que ofrecen una potencia de célula mayor a costa de un incremento del tiempo de giro.",fr:"Des cellules surdimensionnées confèrent une puissance plus élevée, au prix de l'allongement du temps de chargement.",pt:"As células de maior tamanho proporcionam o aumento da resistência da célula em troca de um aumento no tempo de rotação.",ru:"Увеличение размера дает ячейкам повышенную мощность, но время раскрутки возрастает."},special_shieldcell_toughened:{en:"Additional, hardened supports and bracing further improve module survivability.",de:"Verbessert die Haltbarkeit von Modulen durch zusätzliche Härtung und Versteifung.",es:"Soportes y puntales adicionales y reforzados mejoran la supervivencia de los módulos.",fr:"Le renforcement de l'armature rend le module plus résistant.",pt:"Suportes e braçadeiras reforçados adicionais melhoram ainda mais a capacidade de sobrevivência do módulo.",ru:"Дополнительные опоры и крепеж повышают прочность модуля."},special_shieldcell_efficient:{en:"Advanced software and internal sensors regulate energy flow more efficiently, reducing module power draw.",de:"Eine fortschrittliche Software und interne Sensoren regeln den Energiefluss effizienter, die Module ziehen also weniger Energie.",es:"Software avanzado y sensores internos que regulan el flujo de energía de manera más eficiente, lo que reduce el módulo de consumo de energía.",fr:"L'ajout de logiciels et de capteurs internes sophistiqués permet d'améliorer la circulation de l'énergie et, en conséquence, de réduire la consommation du module.",pt:"O software avançado e os sensores internos regulam o fluxo de energia de forma mais eficiente, reduzindo o consumo de energia do módulo.",ru:"Усовершенствованное программное обеспечение и внутренние датчики управляют интенсивностью подачи энергии, снижая ее расход в модуле."},special_shieldcell_gradual:{en:"Uprated resonating coils maximise the amount of time the shield cell can remain active before depleting, at the cost of overall strength of the cell charge.",de:"Verbesserte Resonanzspulen maximieren die Dauer, in der die Schildzelle aktiv bleiben kann, bevor sie verbraucht ist. Dies auf Kosten der Gesamtstärke der Zellenladung.",es:"Bobinas de resonancia modernizadas que maximizan el tiempo por el que la célula de escudo puede mantenerse activa antes de agotarse a costa de la potencia general de la carga de la célula.",fr:"L'amélioration des bobines de résonnance permet d'allonger la durée d'activité des cellules de bouclier, au prix d'une réduction de la puissance générale du bouclier.",pt:"As bobinas de ressonância maiores maximizam a quantidade de tempo que a célula de escudo pode permanecer ativa antes de se esgotar, em troca da resistência total da célula de carga.",ru:"Резонирующие спирали повышенной мощности увеличивают до максимума время работы щита до перезарядки за счет общей мощности заряда ячейки."},special_shieldcell_lightweight:{en:"Key components replaced with versions crafted from lightweight materials and all extraneous parts removed entirely to reduce mass.",de:"Schlüsselkomponenten wurden durch Leichtmaterialien ersetzt, alle unwesentlichen Teile wurden zur Gewichtsverringerung entfernt.",es:"Los componentes clave han sido reemplazados con versiones de materiales más ligeros y las partes superfluas han sido eliminadas por completo para reducir la masa.",fr:"Afin de réduire la masse, les composants clés sont remplacés par des versions en matériaux ultralégers, et les pièces non essentielles sont purement et simplement supprimées.",pt:"Componentes essenciais substituídos por versões criadas com materiais leves e todas as peças não essenciais removidas para reduzir a massa.",ru:"Для снижения массы основные компоненты заменяются на облегченные версии, а дополнительные убираются полностью."},special_shield_toughened:{en:"Additional, hardened supports and bracing further improve module survivability.",de:"Verbessert die Haltbarkeit von Modulen durch zusätzliche Härtung und Versteifung.",es:"Soportes y puntales adicionales y reforzados mejoran la supervivencia de los módulos.",fr:"Le renforcement de l'armature rend le module plus résistant.",pt:"Suportes e braçadeiras reforçados adicionais melhoram ainda mais a capacidade de sobrevivência do módulo.",ru:"Дополнительные опоры и крепеж повышают прочность модуля."},special_shield_regenerative:{en:"High speed charging units increase shield regeneration rate when active and reforming, at the cost of slightly weaker resistance versus all forms of damage.",de:"Hochgeschwindigkeits-Ladeeinheiten erhöhen die Schild-Regenerationsrate und das Reformieren, aber auf Kosten eines leicht verschlechterten Widerstand gegen alle Formen von Schaden.",es:"Unidades de carga de alta velocidad incrementan la tasa de regeneración de escudo cuando está activa y reformándose a costa de una resistencia ligeramente más débil contra todo tipo de daño.",fr:"La vitesse de régénération du bouclier, actif et en cours de régénération, est augmentée, au prix d'une légère diminution de la résistance contre tous les types de dégâts.",pt:"As unidades de carga de alta velocidade aumentam a taxa de regeneração do escudo ativo e em recuperação, em troca de uma resistência ligeiramente mais fraca contra todas as formas de danos.",ru:"Быстрозаряжающиеся модули повышают скорость восполнения щита в состоянии активности и восстановления. При этом сопротивление всем видам урона незначительно снижается."},special_shield_kinetic:{en:"Enlarged projection nodes increase resistance to kinetic damage, at the cost of overall shield strength.",de:"Vergrößerte Projektionsknoten mit besserem Widerstand gegen kinetische Energie, auf Kosten der Schildstärke insgesamt.",es:"Nodos de proyección aumentados que incrementan la resistencia al daño cinético a costa de la fuerza general del escudo.",fr:"L'agrandissement des nœuds de projection confère une résistance plus élevée aux dégâts cinétiques, au prix d'une réduction de la puissance générale du bouclier.",pt:"Os nós de projeção reforçados aumentam a resistência ao dano cinético, em troca da resistência geral do escudo.",ru:"Увеличенные проекционные узлы повышают сопротивление кинетическому урону за счет снижения общей мощности щита."},special_shield_health:{en:"Additional capacitors and projection nodes increase maximum shield strength, at the cost of increased power draw and SYS drain.",de:"Zusätzliche Kondensatoren und Projektionsknoten erhöhen die maximale Schildstärke, auf Kosten eines erhöhten Energie- und SYS-Bedarfs.",es:"Capacitadores y nodos de proyección adicionales que incrementan la fuerza del escudo máxima a costa de un incremento de consumo de energía y drenaje del SIS.",fr:"L'intégration de condensateurs et de nœuds de projection supplémentaires permet d'augmenter la puissance maximale du bouclier, au prix d'une augmentation de la consommation et de l'impact sur le condensateur SYS.",pt:"Capacitores e nós de projeção adicionais aumentam a força máxima do escudo, em troca do aumento do consumo de energia e drenagem do SYS.",ru:"Дополнительные конденсаторы и проекционные узлы повышают максимальную мощность щита, но при этом также повышают расход энергии и СИС."},special_shield_efficient:{en:"Lightweight component swaps and smaller charging units reduce power draw and SYS drain, at the cost of overall shield effectiveness.",de:"Der Austausch gegen leichtere Komponenten und kleiner Ladeeinheiten verringert den Energie- und SYS-Bedarf, auf Kosten der allgemeinen Schildeffizienz.",es:"Intercambio de componentes ligeros y unidades de carga más pequeñas que reducen el consumo de energía y drenaje del SIS a costa de la efectividad general del escudo.",fr:"Le remplacement des composants par des pièces ultralégères et l'intégration d'unités de chargement plus petites permettent de réduire la consommation et l'impact sur le condensateur SYS, au prix d'une diminution de l'efficacité générale du bouclier.",pt:"Trocas por componentes leves e unidades de carga menores reduzem o consumo de energia e a drenagem do SYS, em troca da eficiência geral do escudo.",ru:"Облегченные детали и уменьшенные модули зарядки снижают энергопотребление и расход СИС, но общая эффективность щита снижается."},special_shield_resistive:{en:"Reinforced shield weave structures increase resistance versus all types of damage, at the cost of increased power draw and SYS drain.",de:"Verstärkte Schildgewebe-Strukturen erhöhen den Widerstand gegen alle Arten von Schaden, auf Kosten eines erhöhten Energie- und SYS-Bedarfs.",es:"Estructuras reforzadas con tejido de escudo que incrementan la resistencia contra todo tipo de daño a costa de un incremento de consumo de energía y drenaje de SIS.",fr:"La structure renforcée des filaments du bouclier confère une résistance améliorée contre tous les types de dégâts, au prix d'une augmentation de la consommation et de l'impact sur le condensateur SYS.",pt:"As estruturas reforçadas da rede do escudo aumentam a resistência em relação a todos os tipos de danos, em troca do aumento do consumo de energia e drenagem do SYS.",ru:"Усиленные механизмы генерации щита повышают сопротивление всем видам урона, но при этом также повышают расход энергии и СИС."},special_shield_lightweight:{en:"Key components replaced with versions crafted from lightweight materials and all extraneous parts removed entirely to reduce mass.",de:"Schlüsselkomponenten wurden durch Leichtmaterialien ersetzt, alle unwesentlichen Teile wurden zur Gewichtsverringerung entfernt.",es:"Los componentes clave han sido reemplazados con versiones de materiales más ligeros y las partes superfluas han sido eliminadas por completo para reducir la masa.",fr:"Afin de réduire la masse, les composants clés sont remplacés par des versions en matériaux ultralégers, et les pièces non essentielles sont purement et simplement supprimées.",pt:"Componentes essenciais substituídos por versões criadas com materiais leves e todas as peças não essenciais removidas para reduzir a massa.",ru:"Для снижения массы основные компоненты заменяются на облегченные версии, а дополнительные убираются полностью."},special_shield_thermic:{en:"Improved feedback protection and reinforced projection nodes increase resistance to thermal damage, at the cost of overall shield strength.",de:"Verbesserter Feedback-Schutz und verstärkte Projektionsknoten mit besserem Widerstand gegen thermische Energie, auf Kosten der Schildstärke insgesamt.",es:"Protección de retroalimentación mejorada y nodos de proyección reforzados que incrementan la resistencia al daño térmico a costa de la fuerza general del escudo.",fr:"L'amélioration des mesures de sécurité et le renforcement des nœuds de projection confèrent une résistance plus élevée aux dégâts thermiques, au prix d'une réduction de la puissance générale du bouclier.",pt:"A proteção de retorno aprimorada e os nós de projeção reforçados aumentam a resistência ao dano térmico, em troca da resistência geral do escudo.",ru:"Усиленная защита от ответной реакции и укрепленные проекционные узлы повышают сопротивление тепловому урону за счет снижения общей мощности щита."},special_auto_loader:{en:"An experimental upgrade that automatically reloads the weapon, even when firing.",de:"Durch dieses experimentelle Upgrade wird die Waffe noch während des Abfeuerns nachgeladen.",es:"Una mejora experimental que recarga automáticamente el arma, incluso cuando está disparando.",fr:"Grâce à cette amélioration expérimentale, l'arme se recharge automatiquement, même en cours d'utilisation.",pt:"Uma melhoria experimental que automaticamente recarrega a arma, mesmo enquanto atira.",ru:"Экспериментальное улучшение, автоматически перезаряжающее оружие. Работает даже во время стрельбы."},special_corrosive_shell:{en:"Experimental rounds that temporarily weaken hull hardness and increase all damage taken, at the cost of reduced ammo capacity.",de:"Diese experimentelle Munition kann vorübergehend den Rumpfwiderstand schwächen und damit sämtlichen Schaden erhöhen, bietet aber geringere Munitionskapazitäten.",es:"Proyectiles experimentales que debilitan temporalmente la dureza del casco y aumentan todo el daño recibido, a costa de una reducción de la capacidad de munición.",fr:"Munitions expérimentales provoquant l'affaiblissement du blindage de la coque touchée, et donc l'augmentation des dégâts qu'elle subit, mais au prix d'une réduction de la capacité du chargeur.",pt:"Projéteis experimentais que temporariamente enfraquecem a dureza do casco e aumenta todo o dano tomado, ao custo de capacidade de munição reduzida.",ru:"Экспериментальные снаряды, снижающие плотность корпуса цели и увеличивающие получаемый ей урон. Установка этой модификации снижает общий боезапас орудия."},special_blinding_shell:{en:"Experimental shells that temporarily reduce a target's sensor acuity upon impact.",de:"Diese experimentelle Munition reduziert bei Einschlag vorübergehend die Präzision des Zielsensors.",es:"Proyectiles experimentales que al impactar reducen la precisión de los sensores del objetivo.",fr:"Munitions expérimentales provoquant à l'impact une réduction temporaire de l'efficacité des capteurs de la cible.",pt:"Projéteis experimentais que temporariamente reduzem a sensibilidade do sensor no alvo no momento do impacto.",ru:"Экспериментальные снаряды, снижающие эффективность работы сенсоров при попадании."},special_dispersal_field:{en:"Experimental upgrade that causes successful strikes to temporarily confuse all gimbal and turret hardpoints on the target, at the cost of direct damage potential.",de:"Bei erfolgreichen Treffern mit diesem experimentellen Upgrade können vorübergehend alle kardanischen und festen Geschützsysteme des Ziels gestört werden. Die Chance auf direkten Schaden wird dabei allerdings eingeschränkt.",es:"Mejora experimental que provoca que los impactos confundan temporalmente todos anclajes asistidos y de torreta del objetivo, a costa de perder potencial de daño directo.",fr:"Modification expérimentale permettant aux tirs qui touchent la cible de provoquer des défaillances de ses tourelles et points d'emport rotatifs, mais au prix d'une réduction des dégâts infligés.",pt:"Melhoria experimental que faz com que acertos temporariamente confundam todos os encaixes de mira guiada e torreta do alvo, ao custo de potencial de dano direto.",ru:"Экспериментальное улучшение, снижающее потенциальный прямой урон, но позволяющее временно сбить с наводки орудия на карданной подвеске и турельной установке цели."},special_drag_munitions:{en:"Experimental munitions that disrupt engine exhaust flow on the target, temporarily preventing ENG power distribution from increasing thrust.",de:"Diese experimentelle Munition stört die Abgasableitung des Zielantriebs und verhindert damit vorübergehend die Schubkraftsteuerung über die ANT-Verteilungsfunktionen.",es:"Munición experimental que interrumpe el flujo de escape del motor en el objetivo, impidiendo temporalmente la distribución de energía de MOT para aumento de la impulsión.",fr:"Munitions expérimentales provoquant le dysfonctionnement temporaire du moteur de la cible. Son répartiteur de puissance MOT ne permet alors plus d'augmenter la poussée.",pt:"Munições experimentais que perturbam o fluxo de exaustão do motor do alvo, temporariamente prevenindo a distribuição de energia MTR de aumentar a propulsão.",ru:"Экспериментальные боеприпасы, нарушающие работу системы выхлопных газов двигателя цели и временно не дающие ей увеличить тягу."},special_force_shell:{en:"A modification to allow firing of low explosive shells, designed to generate a propelling blast. Strikes to a target are capable of forcing ships off course, at the cost of shot accuracy.",de:"Diese Modifikation ermöglicht das Abfeuern von Granaten, die zwar einzeln eine nur geringe Sprengkraft bieten, zusammen aber ein Schiff vom Kurs abbringen können. Dies funktioniert allerdings nur zu Lasten der Schussgenauigkeit.",es:"Una modificación que permite disparar proyectiles explosivos, diseñados para generar un estallido de propulsión. Los impactos son capaces de sacar de su curso a las naves, a costa de perder precisión en el tiro.",fr:"Munitions explosives déflagrantes, conçues pour provoquer un souffle puissant. Les tirs touchant la cible sont capables de modifier le cap du vaisseau. Cette modification entraîne néanmoins une réduction de la précision de tir.",pt:"Uma modificação que permite atirar projéteis de baixa explosão, desenvolvidos para gerar uma explosão propulsante. Ataques a um alvo são capazes de forçar naves fora do curso, ao custo da precisão do tiro.",ru:"Модификация, позволяющая выпускать небольшие разрывные снаряды, которые мощно взрываются, сбивая цель с курса. При установке снижает точность орудия."},special_fsd_interrupt:{en:"Experimental munitions that cause the frame shift drive on the impacted ship to reboot, at the cost of reduced damage.",de:"Diese experimentelle Munition bewirkt zwar weniger Schaden, dafür aber zwingt sie den Frameshiftantrieb des getroffenen Schiffs zum Neustart.",es:"Municiones experimentales que causan un reinicio del motor de distorsión de la nave en la que impactan, a costa de una reducción del daño.",fr:"Munitions expérimentales provoquant la réinitialisation du réacteur FSD de la cible. Entraîne néanmoins une réduction des dégâts.",pt:"Munições experimentais que causam com que o motor de distorção de fase da nave impactada reinicie, ao custo de uma redução no dano desferido a mesma.",ru:"Экспериментальные боеприпасы, перезагружающие FSD корабля, оказавшегося в зоне взрыва, но наносящие пониженный урон."},special_high_yield_shell:{en:"Modified munitions that convert a portion of damage to explosive, capable of hitting multiple internal modules if the attack breaches the hull, at the cost of a reduced fire rate.",de:"Diese modifizierte Munition verwandelt einen Teil der Schadenswirkung in explosive Energie, sodass gleich mehrere interne Module getroffen werden können, wenn der Rumpf aufbricht. Der Nachteil hierbei ist allerdings die verringerte Feuerrate.",es:"Munición modificada que convierte una parte del daño a explosivo, capaz de impactar múltiples módulos internos si el ataque penetra el casco, a costa de una cadencia de tiro reducida.",fr:"Certains des dégâts provoqués par ces munitions modifiées deviennent des dégâts explosifs. Les tirs touchant la cible peuvent endommager plusieurs modules internes, si l'attaque transperce la coque. Cette modification entraîne néanmoins une réduction de la cadence de tir.",pt:"Munições modificadas que convertem uma porção do dano para explosivo, capazes de acertar múltiplos módulos internos se o ataque penetrar o casco, ao custo de cadência de tiro reduzida.",ru:"Модификация преобразует часть урона во взрывной, благодаря чему снаряды могут повредить сразу несколько внутренних модулей в случае пробития корпуса. Однако при этом приходится жертвовать скоростью атаки."},special_distortion_field:{en:"Experimental upgrade that increases damage and converts half of it to kinetic, at the cost of introducing aiming jitter.",de:'Bei diesem experimentellen Upgrade wird die Hälfte der Schadenswirkung in kinetische Energie verwandelt, wobei dann allerdings auch "Zittereffekte" auftreten.',es:"Mejora experimental que aumenta el daño y convierte la mitad del mismo a cinético, a costa introducir cierta pérdida de puntería.",fr:"Modification expérimentale augmentant les dégâts infligés, dont la moitié deviennent des dégâts cinétiques, mais il devient alors difficile de maintenir la cible en joue.",pt:"Melhoria experimental que aumenta o dano e converte metade dele para cinético, ao custo de introduzir nervosismo na mira.",ru:"Экспериментальное улучшение, усиливающее урон и преобразующее его половину в кинетический за счет увеличения колебаний при прицеливании."},special_choke_canister:{en:"Experimental munitions capable of disrupting a target's drives, causing them to reboot.",de:"Mithilfe dieser experimentellen Munition kann der Antrieb eines Ziels ausgesetzt und zum Neustart gezwungen werden.",es:"Munición experimental capaz de interferir los motores del objetivo, causando que se reinicien.",fr:"Munitions expérimentales capables de provoquer le dysfonctionnement du moteur de la cible, qui est alors obligée de procéder à son redémarrage.",pt:"Munições experimentais capazes de perturbar os motores do alvo, causando uma reinicialização.",ru:"Экспериментальные боеприпасы, вызывающие сбой в двигателе цели и перезапускающие его."},special_mass_lock:{en:"Experimental warheads incorporating frame shift technology. Successful detonation significantly inhibits charging for supercruise.",de:"Diese experimentellen Gefechtsköpfe basieren auf der FSA-Technologie. Bei erfolgreichen Treffern werden die Aufladefunktionen für den Supercruise außer Gefecht gesetzt.",es:"Ojivas experimentales que incorporan la tecnología de distorsión. Una detonación exitosa inhibe significativamente la carga del motor hacia supercrucero.",fr:"Missiles expérimentaux incorporant des éléments empruntés à la technologie FSD. Les tirs réussis augmentent nettement le temps nécessaire au passage en mode Super-navigation du vaisseau ciblé.",pt:"Ogivas experimentais incorporando tecnologia de distorção de fase. Detonação com sucesso inibe significativamente o carregamento para supervelocidade.",ru:"Экспериментальные боеголовки с рамочно-смесительной технологией. При попадании по цели значительно замедляют зарядку гиперкрейсерского режима."},special_overload_munitions:{en:"Experimental munitions that convert a portion of explosive damage to thermal.",de:"Bei dieser experimentellen Munition wird ein Teil der explosiven Schadenswirkung in thermische Energie umgewandelt.",es:"Munición experimental que convierte una parte del daño explosivo a térmico.",fr:"Certains des dégâts infligés par ces munitions expérimentales deviennent des dégâts thermiques.",pt:"Munições experimentais que convertem uma porção de dano explosivo para térmico.",ru:"Экспериментальные боеприпасы, преобразующие часть урона от взрывов в тепловой."},special_penetrator_munitions:{en:"Experimental munitions capable of penetrating hull to damage internal modules.",de:"Diese experimentelle Munition kann den Schiffsrumpf durchdringen und die internen Module beschädigen.",es:"Munición experimental capaz de penetrar el casco para dañar los módulos internos.",fr:"Munitions expérimentales capables de transpercer la coque de la cible et d'endommager ses modules internes.",pt:"Munições experimentais capaz de penetrar o casco para danificar módulos internos.",ru:"Экспериментальные боеприпасы, способные пробить корпус и повредить внутренние модули."},special_deep_cut_payload:{en:"Deep cut munitions are guaranteed to penetrate upon impact with hull and are capable of damaging multiple internal modules.",de:"Diese Durchdringungsprojektile dringen immer in den Schiffsrumpf ein und können gleich mehrere interne Module beschädigen.",es:"La munición penetradora garantiza la perforación del casco y es capaz de dañar múltiples módulos internos.",fr:"Munitions conçues pour transpercer la coque de la cible et endommager plusieurs modules internes.",pt:"Munições de corte profundo garantem a penetração no impacto com o casco e são capazes de danificar múltiplos módulos internos.",ru:"Эти пробивающие корпус цели снаряды могут повредить сразу несколько внутренних модулей при попадании."},special_phasing_sequence:{en:"Modulating burst fire system designed to defeat shielding. A small amount of damage is able to bleed through shields and attack the target's hull directly, at the cost of minor damage reduction.",de:"Dieses modifizierte Salvenschuss-System wurde entwickelt, um Schilde zu überwinden. Ein kleiner Anteil des Schadens durchdringt die Schilde und greift direkt den Rumpf des Ziels an. Dies hat allerdings eine geringe Schadensverringerung zur Folge.",es:'Sistema de modulación de ráfagas diseñado para superar escudos. Una pequeña cantidad de daño es capaz de "filtrarse" a través de los escudos y atacar el casco del objetivo directamente, a costa de una pequeña reducción del daño.',fr:"Système de tir en rafale modulé, conçu pour surpasser un bouclier. Une petite portion des dégâts ignore ainsi tout bouclier éventuel et vient endommager la coque du navire visé. Cette modification entraîne une légère réduction des dégâts.",pt:'Sistema de rajada de tiro modulado desenvolvido para derrotar escudos. Uma pequena porção do dano é capaz de "sangrar" através dos escudos e atacar o casco do alvo diretamente, ao custo de uma pequena redução no dano.',ru:"Система модуляции стрельбы очередями, направленная на уничтожение щитов. При попадании из орудия часть урона будет нанесена непосредственно корпусу, а не щитам. При этом незначительно снижается весь наносимый орудием урон."},special_plasma_slug:{en:"Experimental upgrade allowing plasma slug ammo to be generated directly from ship fuel, at the cost of reduced damage.",de:"Dieses experimentelle Upgrade kann direkt aus dem Schiffstreibstoff hergestellte Plasmaprojektile verschießen, bietet aber etwas weniger Schadenswirkung.",es:"Mejora experimental que permite tener munición de plasma generada directamente del combustible de la nave, a costa de un menor daño.",fr:"Modification expérimentale permettant de générer des munitions à plasma en utilisant le carburant du vaisseau, mais au prix d'une réduction des dégâts infligés.",pt:"Melhoria experimental permitindo que projéteis de plasma sejam gerados diretamente do combustível da nave, ao custo de dano reduzido.",ru:"Экспериментальное улучшение, позволяющее преобразовывать топливо корабля в плазменные снаряды, но снижающее урон от орудия."},special_radiant_canister:{en:"Experimental munitions that apply significant heat to all targets caught in the blast radius. In addition, targets' sensors are temporarily disrupted, at the cost of ammo capacity.",de:"Diese experimentelle Munition setzt alle Ziele im Trefferradius einer enormen Hitzebelastung aus. Zusätzlich werden dabei die Sensoren des Ziels gestört. Die Kehrseite sind die verringerten Munitionskapazitäten.",es:"Munición experimental que aplica una cantidad significativa de calor a todos los objetivos alcanzados por el radio de la explosión, a costa de capacidad de munición. Además, los sensores de los objetivos se interfieren temporalmente.",fr:"Munitions expérimentales provoquant une importante accumulation de chaleur pour toutes les cibles se trouvant dans la zone d'effet, qui voient aussi leurs capteurs s'affoler pendant quelque temps. Cette modification entraîne néanmoins une réduction de la capacité du chargeur.",pt:"Munições experimentais que aplicam calor significativamente em todos os alvos pegos no raio de explosão. Além disso, os sensores dos alvos são temporariamente interrompidos, ao custo de capacidade de munição.",ru:"Экспериментальные боеприпасы, значительно нагревающие все цели, попавшие в зону поражения. Кроме того, на некоторое время вызывают сбой в работе сенсоров, однако снижают общий боезапас орудия."},special_regeneration_sequence:{en:"Friend or Foe Beam modulation upgrade. When the beam strikes a teammate's shields its energy is regulated, regenerating the shield instead of damaging it.",de:"Modulationsupgrade für den Freund-Feind-Strahl. Wenn der Strahl den Schild eines Teammitglieds trifft, wird dieser nicht beschädigt, sondern regeneriert.",es:"Mejora de modulación de rayo amigo o enemigo. Cuando el rayo impacta en los escudos de un compañero de equipo, su energía es regulada, regenerando el escudo en lugar de dañarlo.",fr:"Modification intégrant un système de modulation d'énergie alliés/ennemis. Les tirs touchant les boucliers des coéquipiers ne leur infligent pas de dégâts, mais les renforcent.",pt:"Melhoria de modulação Amigo ou Inimigo. Quando o raio atinge o escudo de um membro da equipe sua energia é regulada, regenerando o escudo, em vez de danificá-lo.",ru:"Модулирующее улучшение для луча «Друг или враг». При попадании по члену команды перенаправляет энергию на его щит и восстанавливает его."},special_reverberating_cascade:{en:"Experimental munitions that overload shields on impact, directly damaging the shield generator.",de:"Mit dieser experimentellen Munition werden Schilde bei Treffern überladen, sodass der Schildgenerator direkten Schaden nimmt.",es:"Munición experimental que sobrecarga los escudos al impactar, dañando directamente el generador de escudo.",fr:"Munitions expérimentales provoquant une surcharge du bouclier à l'impact, ce qui endommage directement le générateur du bouclier.",pt:"Munições experimentais que sobrecarregam os escudos no impacto, diretamente danificado o gerado de escudo.",ru:"Экспериментальные боеприпасы, перегружающие щиты при попадании и напрямую поражающие щитогенератор."},special_scramble_spectrum:{en:"Experimental upgrade that allows hull strikes to potentially trigger random malfunctions on the target.",de:"Durch dieses experimentelle Upgrade werden durch Treffer am Schiffsrumpf des Ziels zufällige Funktionsstörungen ausgelöst.",es:"Mejora experimental que permite que los impactos en el casco puedan desencadenar potencialmente mal funcionamientos al azar en los módulos del objetivo.",fr:"Modification expérimentale donnant aux tirs touchant la coque d'un navire ennemi une chance de provoquer le dysfonctionnement d'un module aléatoire.",pt:"Melhoria experimental que permite ataques ao casco ocasionar potenciais mau funcionamentos aleatórios no alvo.",ru:"Экспериментальное улучшение, благодаря которому снаряды, попавшие в корпус цели, иногда будут вызывать сбой в работе ее случайного модуля."},special_screening_shell:{en:"Modified firing and targeting mechanism, decreasing reload times and increasing effectiveness against munitions.",de:"Bei dieser Modifikation des Feuer- und Zielmechanismus werden die Nachladezeiten verringert und die Effektivität gegen Fremdbeschuss vergrößert.",es:"Modificación del mecanismo de disparo y selección de blanco, que disminuye el tiempo de recarga y aumenta la eficacia contra los proyectiles atacantes.",fr:"Modification du système de visée et de tir facilitant la destruction des projectiles ennemis et réduisant le temps de rechargement.",pt:"Mecanismo de tiro e seleção de alvos modificado, diminuindo o tempo de recarga e aumentando a eficiência contra munições.",ru:"Модифицированный механизм стрельбы и прицеливания, снижающий время перезарядки и увеличивающий эффективность боеприпасов."},special_shiftlock_canister:{en:"Experimental munitions that cause all frame shift drives caught in the blast radius to reboot, at the cost of reduced damage.",de:"Diese experimentelle Munition bewirkt zwar weniger Schaden, dafür aber zwingt sie alle Frameshiftantriebe im Explosionsradius zum Neustart.",es:"Munición experimental que causa el reinicio de todos los motores de distorsión alcanzados por el radio de la explosión, a costa de una reducción del daño.",fr:"Munitions expérimentales provoquant le dysfonctionnement et le redémarrage du réacteur FSD des cibles dans la zone d'effet de l'explosion. Entraîne néanmoins une réduction des dégâts.",pt:"Munições experimentais que causam reinicialização em todos os motores de distorção pegos no raio da explosão, ao custo de dano reduzido.",ru:"Экспериментальные боеприпасы, перезагружающие FSD всех целей, оказавшихся в зоне взрыва, но наносящие пониженный урон."},special_smart_rounds:{en:"Friend or foe targeting upgrade that causes rounds to self-destruct before damaging ships that are not currently targeted.",de:"Dieses Freund-Feind-Zielupgrade zwingt die Projektile zur Selbstzerstörung, bevor andere, nicht anvisierte Schiffe Schaden nehmen.",es:"Mejora del sistema de selección de objetivos con identificación amigo o enemigo, que hace que los proyectiles se autodestruyan antes de alcanzar las naves que no están actualmente seleccionadas.",fr:"Modification dotée d'un système d'identification alliés/ennemis. Les projectiles sont conçus de façon à s'autodétruire avant de percuter tout objet qui n'est pas leur cible.",pt:"Seleção de alvo amigo ou inimigo que causa com que os projéteis seu autodestruírem antes de danificar naves que não estão atualmente selecionadas.",ru:"Улучшение системы прицеливания «Друг или враг», благодаря которому снаряды будут самоуничтожаться в случае приближения к кораблям, не являющимся целью."},special_super_penetrator:{en:"Experimental munitions that are capable of penetrating and damaging all modules along its trajectory, at the cost of increased reload times.",de:"Diese experimentelle Munition bedingt zwar höhere Nachladezeiten, kann dafür aber alle Module auf der Flugbahn durchdringen und beschädigen.",es:"Munición experimental que es capaz de penetrar y dañar todos los módulos a lo largo de su trayectoria, a costa de un mayor tiempo de recarga.",fr:"Munitions expérimentales capables de transpercer la cible et d'endommager tous les modules présents sur sa trajectoire. Entraîne néanmoins une augmentation du temps de rechargement.",pt:"Munições experimentais que são capazes de penetrar e danificar todos os módulos ao longo de sua trajetória, ao custo de tempo recarga aumentado.",ru:"Экспериментальные боеприпасы, пробивающие корабль насквозь и поражающие все модули, оказавшиеся у них на пути. Данная модификация замедляет процесс перезарядки орудия."},special_lock_breaker:{en:"Experimental upgrade that breaks target lock on successful strikes.",de:"Dieses experimentelle Upgrade setzt bei erfolgreichen Treffern die Zielvisierfunktion des Gegners außer Gefecht.",es:"Mejora experimental que cancela la selección de blanco cuando impacta.",fr:"Modification expérimentale permettant aux tirs réussis de provoquer la perte de toute cible verrouillée dans l'ordinateur de visée du vaisseau touché.",pt:"Melhoria experimental que quebra a trava de alvo ao acertar.",ru:"Экспериментальное улучшение, позволяющее сбивать захват цели при попадании."},special_thermal_cascade:{en:"Experimental munitions that interact with shields upon detonation, generating significant heat on the target.",de:"Bei dieser experimentellen Munition wird bei der Explosion auf einem Schild eine enorme Hitzebelastung freigesetzt.",es:"Munición experimental que interactúa con los escudos tras la detonación, generando un aumento de calor significativo en el objetivo.",fr:"Munitions expérimentales interagissant avec un bouclier à l'impact afin de provoquer une accumulation de chaleur importante dans le vaisseau ciblé.",pt:"Munições experimentais que interagem com escudos na detonação, gerando calor significativamente no alvo.",ru:"Экспериментальные боеприпасы, взаимодействующие с щитами при взрыве и значительно нагревающие цель."},special_thermal_conduit:{en:"Experimental upgrade that increases damage output based on heat level of the firing ship.",de:"Bei dieser experimentellen Munition vergrößert sich der Schaden je nach Hitzelevel des abfeuernden Schiffes.",es:"Mejora experimental que aumenta la cantidad de daño en función del nivel de calor de la nave que dispara.",fr:"Munitions expérimentales dont les dégâts augmentent en fonction de la température du vaisseau ouvrant le feu.",pt:"Melhoria experimental que aumenta o dano com base no nível de calor da nave que atira.",ru:"Экспериментальное улучшение, позволяющее наносить увеличенный урон в случае, когда уровень тепла вашего корабля повышен."},special_thermalshock:{en:"Articulated focus array designed to spread heat effectively. Strikes to shields and hull impart additional heat into the target.",de:"Durch die intelligente Struktur wird die Hitze effektiver weitergeleitet. Treffer an Schilden und Rumpf des Ziels generieren zusätzliche Hitzebelastung.",es:"Enfoque articulado diseñado para dispersar el calor de manera efectiva. Impactos en escudos y casco proporcionan calor adicional en el blanco.",fr:"Batterie de lentilles articulée, conçue pour répandre la chaleur efficacement. Les tirs touchant un bouclier ou une coque provoquent une accumulation de la chaleur du vaisseau ennemi.",pt:"Conjunto de foco articulado desenvolvido para espalhar calor efetivamente. Acertos nos escudos e casco causam calor adicional no alvo.",ru:"Шарнирная направленная система, позволяющая эффективнее распределять тепло. Попадания по щитам и корпусу дополнительно нагревают цель."},special_thermal_vent:{en:"Experimental upgrade that increases heat dissipation when successfully striking a target, at the cost of increased heat generation when missing.",de:"Dieses experimentelle Upgrade verbessert bei einem erfolgreichen Treffer die Hitzeableitung, führt aber bei einem Fehlschuss zu erhöhter Hitzegeneration.",es:"Mejora experimental que aumenta la disipación de calor al impactar con éxito en un objetivo, a costa de una mayor generación de calor cuando se falla.",fr:"Munitions expérimentales provoquant une réduction de la chaleur du vaisseau ouvrant le feu en cas de tir réussi. Entraîne néanmoins une accumulation de chaleur en cas de tir raté.",pt:"Melhoria experimental que aumenta a dissipação de calor ao acertar um alvo, ao custo de calor aumentado ao errar.",ru:"Экспериментальное улучшение, охлаждающее ваш корабль при попадании по противнику, но нагревающее его при промахе."}};var DESCRIPTIONS=/* @__PURE__ */createLocalizedNameIndex(experimental_effect_descriptions_default);function getExperimentalEffectDescription(experimentalEffectSymbol,locale){return getLocalizedName(DESCRIPTIONS,experimentalEffectSymbol,locale,"getExperimentalEffectDescription","experimentalEffectSymbol")}export{getExperimentalEffectDescription};//# sourceMappingURL=chunk-MRLUWHGI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/experimental-effect-descriptions.ts"],"names":["getLocalizedName","createLocalizedNameIndex","experimental_effect_descriptions_default","DESCRIPTIONS","getExperimentalEffectDescription","experimentalEffectSymbol","locale"],"mappings":"O,
|
|
1
|
+
{"version":3,"sources":["../src/i18n/experimental-effect-descriptions.ts"],"names":["getLocalizedName","createLocalizedNameIndex","experimental_effect_descriptions_default","DESCRIPTIONS","getExperimentalEffectDescription","experimentalEffectSymbol","locale"],"mappings":"O,876EASA,IAAMG,4BAAAF,yBAAwDC,0CAkCvD,SAASE,iCACZC,yBACAC,QAEA,OAAON,iBACHG,aACAE,yBACAC,OACA,mCACA,2BAER,QAAAF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{builtInModuleBySymbol,getModuleBySymbol}from"./chunk-ABSDZINM.js";import{getPreEngineeredVariants}from"./chunk-KPJ77VPS.js";import{ALL_MODULES}from"./chunk-3CKWT2F3.js";import{getBlueprintGrade,getBlueprint,BLUEPRINTS}from"./chunk-AYAKU4YA.js";import{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"./chunk-77I24V6B.js";import{fieldForLabel,damageTypeForLabel,capabilityValueForLabel,baseStats,computeModifiers,labelsForDamageType,scaleForLabel}from"./chunk-5QSCLEEB.js";import{round6,burstPartOrOne,float32FiringCycle,float32RateOfFire,preciseModifierValue,BURST_PATTERN_LABELS,journalRateOfFire,preciseValueFor}from"./chunk-EFQOUATZ.js";import{resolveBlueprintForModule}from"./chunk-SDXUPP4P.js";import{getBlueprintsForModule,getExperimentalsForModule,getEngineeringGroup}from"./chunk-LOWDDWDT.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";function scaleDamageComponents(components,baseDamage,effectiveDamage){const scale=baseDamage!==void 0&&baseDamage!==0&&effectiveDamage!==void 0?effectiveDamage/baseDamage:1;return{...components.kinetic===void 0?{}:{kinetic:components.kinetic*scale},...components.thermal===void 0?{}:{thermal:components.thermal*scale},...components.explosive===void 0?{}:{explosive:components.explosive*scale},...components.absolute===void 0?{}:{absolute:components.absolute*scale},...components.antiXeno===void 0?{}:{antiXeno:components.antiXeno*scale},...components.unclassified===void 0?{}:{unclassified:components.unclassified.map(value=>value*scale)}}}function fixedModifierFeatures(modifiers){return modifiers.map(modifier=>({label:modifier.label,method:modifier.method,min:modifier.value,max:modifier.value}))}var FITTED_ITEM="ShipLoadout: fitted module Item";function isNonOutfittingSlot(slotKey){return/^(paintjob|shipname\d+|shipid\d+|bobble\d+|decal\d+|shipkit.+|weaponcolour|enginecolour|vesselvoice|shipcockpit|stringlights)$/i.test(slotKey)}function isCargoHatchSlot(slotKey){return slotKey.toLowerCase()==="cargohatch"}function isBuiltInHullModule(module){return isCargoHatchSlot(module.Slot)&&module.Item.toLowerCase().startsWith("modularcargobaydoor")}function cloneLoadoutModule(module){return{Slot:module.Slot,Item:module.Item,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health},...module.Value===void 0?{}:{Value:module.Value},...module.Engineering===void 0?{}:{Engineering:{BlueprintName:module.Engineering.BlueprintName,Level:module.Engineering.Level,Quality:module.Engineering.Quality,...module.Engineering.ExperimentalEffect===void 0?{}:{ExperimentalEffect:module.Engineering.ExperimentalEffect},...module.Engineering.ExperimentalEffect_Localised===void 0?{}:{ExperimentalEffect_Localised:module.Engineering.ExperimentalEffect_Localised},...module.Engineering.Modifiers===void 0?{}:{Modifiers:module.Engineering.Modifiers.map(modifier=>({...modifier}))}}}}}function matchingKeyIn(keyed,slotKey){if(keyed.has(slotKey))return slotKey;const wanted=slotKey.toLowerCase();for(const key of keyed.keys()){if(key.toLowerCase()===wanted)return key}return null}function ownKeyIn(keyed,canonicalKey){return matchingKeyIn(keyed,canonicalKey)??(keyed.size>0&&[...keyed.keys()].every(key=>key===key.toLowerCase())?canonicalKey.toLowerCase():canonicalKey)}function orderBySlotLayout(values,layout,slotOf){const order=new Map(layout.map((slot,index)=>[slot.key.toLowerCase(),index]));return[...values].sort((left,right)=>(order.get(slotOf(left).toLowerCase())??Number.MAX_SAFE_INTEGER)-(order.get(slotOf(right).toLowerCase())??Number.MAX_SAFE_INTEGER))}function cloneModuleStats(module){try{return deepFreeze(structuredClone(module))}catch(error){if(!(error instanceof Error&&error.name==="DataCloneError"))throw error;return deepFreeze({...module,...module.restrictedToShips===void 0?{}:{restrictedToShips:[...module.restrictedToShips]},...module.limitIncrease===void 0?{}:{limitIncrease:{...module.limitIncrease}},...module.damageDistribution===void 0?{}:{damageDistribution:{...module.damageDistribution}},...module.damageComponents===void 0?{}:{damageComponents:{...module.damageComponents,...module.damageComponents.unclassified===void 0?{}:{unclassified:[...module.damageComponents.unclassified]}}},...module.projectileRange===void 0?{}:{projectileRange:{...module.projectileRange}}})}}var GUARDIAN_WEAPON_GROUPS=/* @__PURE__ */new Set(["guardianGauss","guardianPlasma","guardianShard"]);function missingBaseLabels(stats,base,features,experimental){const contributions=[...features,...experimental??[]];return[...new Set(contributions.map(contribution=>contribution.label).filter(label=>{if(base[label]!==void 0)return false;return fieldForLabel(label,stats)===null}))]}function recipeSignature(blueprintSymbol){const blueprint=getBlueprint(blueprintSymbol);if(!blueprint)return null;const grades=Object.entries(blueprint.grades).map(([grade,{features:features}])=>`${grade}:${features.map(feature=>`${feature.label}/${feature.method??""}`).sort().join(",")}`).sort().join(";");return`${blueprint.name.toLowerCase()}|${grades}`}var isGenericSpelling=blueprintSymbol=>blueprintSymbol.toLowerCase().startsWith("misc_");function isSoldWithBlueprint(item,wanted){return getPreEngineeredVariants(item).some(variant=>variant.acquisition==="mercenary"&&variant.blueprintSymbol.toLowerCase()===wanted)}function blueprintRoutesFor(item){const routes=/* @__PURE__ */new Map;for(const blueprintSymbol of getBlueprintsForModule(item))routes.set(blueprintSymbol,"ordinary");for(const variant of getPreEngineeredVariants(item)){if(variant.acquisition==="mercenary"&&!routes.has(variant.blueprintSymbol)){routes.set(variant.blueprintSymbol,"mercenary")}}return routes}function blueprintAvailableFor(item,blueprintSymbol){const offered=getBlueprintsForModule(item);const asWritten=normalizeKey(blueprintSymbol,"ShipLoadout.applyBlueprint: blueprintSymbol");const resolved=resolveBlueprintForModule(item,blueprintSymbol).trim();const wanted=resolved.toLowerCase();if(offered.some(id=>id.toLowerCase()===wanted))return true;if(isSoldWithBlueprint(item,wanted)||isSoldWithBlueprint(item,asWritten))return true;if(!isGenericSpelling(wanted))return false;const signature=recipeSignature(resolved);if(signature===null)return false;return offered.some(id=>recipeSignature(id)===signature&&!isGenericSpelling(id))}function experimentalAvailableFor(item,experimentalEffectSymbol){const wanted=normalizeKey(experimentalEffectSymbol,"ShipLoadout.applyBlueprint: options.experimentalEffectSymbol");return getExperimentalsForModule(item).some(id=>id.toLowerCase()===wanted)}function primitiveLabelFor(stats,label){if(label==="MaximumRange"&&stats.maximumRange!==void 0)return"Range";if(label==="DamageFalloffRange"&&stats.falloffRange!==void 0){return"FalloffRange"}if(label==="Range"&&stats.scannerRange!==void 0)return"ScannerRange";if(label==="DSS_PatchRadius")return"ProbeRadius";if(label==="FuelScoopRate")return"RefuelRate";if(label==="EnergyPerRegen"&&stats.shieldRegenRate!==void 0){return"DistributorDraw"}return label}function primitiveEngineeringInputsFor(stats,grade,experimental){const canonicalGrade={...grade,features:grade.features.map(feature=>{const label=primitiveLabelFor(stats,feature.label);return label===feature.label?feature:{...feature,label:label}})};if(!experimental)return{grade:canonicalGrade};return{grade:canonicalGrade,experimental:{...experimental,modifiers:experimental.modifiers.map(modifier=>{const label=primitiveLabelFor(stats,modifier.label);return label===modifier.label?modifier:{...modifier,label:label}})}}}function matchesCalculatedModifiers(captured,calculated){if(!captured||captured.length!==calculated.length)return false;const byLabel=new Map(captured.map(modifier=>[modifier.Label.trim().toLowerCase(),modifier]));if(byLabel.size!==captured.length)return false;return calculated.every(expected=>{const actual=byLabel.get(expected.Label.trim().toLowerCase());if(!actual)return false;if(expected.Value!==void 0){return actual.Value!==void 0&&Math.abs(actual.Value-expected.Value)<=1e-5*Math.max(1,Math.abs(expected.Value))}return actual.ValueStr===expected.ValueStr})}function identityArticles(item,engineering){if(engineering.Modifiers!==void 0||typeof engineering.BlueprintName!=="string"){return[]}const wanted=engineering.BlueprintName.trim().toLowerCase();const experimental=engineering.ExperimentalEffect?.trim().toLowerCase();return getPreEngineeredVariants(item).filter(candidate=>candidate.blueprintSymbol.trim().toLowerCase()===wanted&&candidate.grade===engineering.Level&&(candidate.experimentalEffectSymbol===void 0?experimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimentalEffectSymbol.trim().toLowerCase()===experimental))}function unrollableFixedArticle(item,engineering){const matches=identityArticles(item,engineering).filter(candidate=>!blueprintAvailableFor(item,candidate.blueprintSymbol));return matches.length===1?matches[0]:null}function rolledOverFixedArticle(item,engineering){const matches=identityArticles(item,engineering).filter(candidate=>blueprintAvailableFor(item,candidate.blueprintSymbol));return matches.length===1?matches[0]:null}function statesInertModifiers(stats,modifiers){return modifiers.every(modifier=>{if(damageTypeForLabel(modifier.Label)!==null||capabilityValueForLabel(modifier.Label)!==null){return false}const field=fieldForLabel(modifier.Label,stats);return field===null||typeof stats[field]!=="number"})}function ordinaryEngineeringProof(item,engineering,experimental){const recipe=resolveBlueprintForModule(item,engineering.BlueprintName);const fixedCandidate=getPreEngineeredVariants(item).some(candidate=>candidate.acquisition!=="mercenary"&&candidate.blueprintSymbol.trim().toLowerCase()===recipe.trim().toLowerCase());if(!fixedCandidate)return"notFixedCandidate";const grade=getBlueprintGrade(recipe,engineering.Level);const quality=engineering.Quality;const stock=builtInModuleBySymbol(item,FITTED_ITEM);if(!stock||!grade||experimental===null||!Number.isFinite(quality)||quality<0||quality>1){return"unproven"}const current=primitiveEngineeringInputsFor(stock,grade,experimental);if(missingBaseLabels(stock,baseStats(stock),current.grade.features,current.experimental?.modifiers).length>0){return"unproven"}const calculated=journalModifiersFor(stock,computeModifiers(baseStats(stock),current.grade,quality,current.experimental));const damageDistribution=current.experimental?.damageDistribution??current.grade.damageDistribution;if(damageDistribution){for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];if(value===void 0)continue;const label=labelsForDamageType(type)[0];if(label===void 0)continue;calculated.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(stock.damageDistribution?.[type]??0)*scaleForLabel(label)})}}return matchesCalculatedModifiers(engineering.Modifiers,calculated)?"proven":"unproven"}function float32DamagePerSecond(damage,rounds,rate,burstRounds,cycle){if(cycle!==void 0&&(rounds!==1||burstRounds!==1)){const damagePerCycle=Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(burstRounds));return Math.fround(damagePerCycle/cycle)}return Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(rate))}var JOURNAL_MODIFIER_ORDER=["CargoCapacity","GuardianModuleResistance","Mass","Integrity","PowerDraw","BootTime","PowerCapacity","HeatEfficiency","FSDOptimalMass","MaxFuelPerJump","FSDHeatRate","EngineOptimalMass","EngineOptPerformance","EngineHeatRate","ShieldGenOptimalMass","ShieldGenStrength","DamagePerSecond","Damage","DistributorDraw","ThermalLoad","ArmourPenetration","MaximumRange","ShotSpeed","RateOfFire","DamageType","$Kinetic;","$Thermal;","$Explosive;","$Absolute;","AmmoClipSize","AmmoMaximum","ReloadTime","Jitter","DamageFalloffRange","DefenceModifierShieldMultiplier","DefenceModifierHealthMultiplier","DefenceModifierHealthAddition","DefenceModifierShieldAddition","RegenRate","BrokenRegenRate","EnergyPerRegen","KineticResistance","ThermicResistance","ExplosiveResistance","CausticResistance","DamageProtection","ModuleDefenceAbsorption","WeaponsCapacity","WeaponsRecharge","EnginesCapacity","EnginesRecharge","SystemsCapacity","SystemsRecharge","ShieldBankSpinUp","ShieldBankDuration","ShieldBankReinforcement","ShieldBankHeat","FSDInterdictorRange","FSDInterdictorFacingLimit","SensorTargetScanAngle","MaxAngle","ScannerTimeToScan","Range","DSS_PatchRadius","FuelScoopRate","FuelCapacity"];var JOURNAL_MODIFIER_RANK=new Map(JOURNAL_MODIFIER_ORDER.map((label,index)=>[label,index]));function sortJournalModifiers(modifiers){return modifiers.map((modifier,index)=>({modifier:modifier,index:index})).sort((a,b)=>(JOURNAL_MODIFIER_RANK.get(a.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)-(JOURNAL_MODIFIER_RANK.get(b.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)||a.index-b.index).map(({modifier:modifier})=>modifier)}function journalModifiersFor(stats,modifiers){const weapon=stats.damage!==void 0;const valueFor=(label,fallback)=>{const modifier=modifiers.find(candidate=>candidate.Label===label);return(modifier&&preciseModifierValue(modifier))??Math.fround(fallback)};const burstTouched=["BurstInterval","BurstSize","BurstRateOfFire"].some(label=>modifiers.some(modifier=>modifier.Label===label));const damageTouched=modifiers.some(modifier=>modifier.Label==="Damage");const rateTouched=burstTouched||modifiers.some(modifier=>modifier.Label==="RateOfFire");let damagePerSecond;let derivedRate;if(weapon&&(damageTouched||rateTouched)){const continuous=stats.burstInterval===void 0&&stats.rateOfFire===void 0;const baseDamage=Math.fround(stats.damage);const effectiveDamage=valueFor("Damage",stats.damage);if(continuous){damagePerSecond={Label:"DamagePerSecond",Value:round6(effectiveDamage),OriginalValue:round6(baseDamage)}}else{const burstRounds=burstPartOrOne(valueFor("BurstSize",stats.burstRounds??1));const burstRate=burstPartOrOne(valueFor("BurstRateOfFire",stats.burstRateOfFire??1));const baseBurstRounds=Math.fround(burstPartOrOne(stats.burstRounds));const baseBurstRate=Math.fround(burstPartOrOne(stats.burstRateOfFire));const baseInterval=stats.burstInterval===void 0?void 0:Math.fround(stats.burstInterval);const baseCycle=baseInterval===void 0?void 0:float32FiringCycle(baseInterval,baseBurstRounds,baseBurstRate);const baseRate=baseInterval!==void 0?float32RateOfFire(baseInterval,baseBurstRounds,baseBurstRate):stats.rateOfFire===void 0?void 0:Math.fround(stats.rateOfFire);const rateModifier=modifiers.find(modifier=>modifier.Label==="RateOfFire");const effectiveRate=rateModifier&&preciseModifierValue(rateModifier);const effectiveInterval=valueFor("BurstInterval",stats.burstInterval??0);const effectiveCycle=effectiveRate===void 0?float32FiringCycle(effectiveInterval,burstRounds,burstRate):void 0;const rate=effectiveRate??(effectiveCycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/effectiveCycle));if(baseRate!==void 0&&rate!==void 0){const stockRounds=Math.fround(stats.roundsPerShot??1);const effectiveRounds=Math.fround(modifiers.find(modifier=>modifier.Label==="Rounds"||modifier.Label==="RoundsPerShot")?.Value??stockRounds);damagePerSecond={Label:"DamagePerSecond",Value:round6(float32DamagePerSecond(effectiveDamage,effectiveRounds,rate,burstRounds,effectiveCycle)),OriginalValue:round6(float32DamagePerSecond(baseDamage,stockRounds,baseRate,baseBurstRounds,baseCycle))};if(burstTouched){derivedRate={Label:"RateOfFire",Value:round6(rate),OriginalValue:round6(baseRate)}}}}}const result=[];for(const modifier of modifiers){const label=modifier.Label;if(weapon&&["BurstInterval","BurstSize","BurstRateOfFire"].includes(label))continue;if(weapon&&label==="Damage"&&stats.rateOfFire===void 0)continue;let journalLabel=label;if(label==="Range"&&stats.maximumRange!==void 0)journalLabel="MaximumRange";else if(label==="FalloffRange"&&stats.falloffRange!==void 0){journalLabel="DamageFalloffRange"}else if(label==="ScannerRange"&&stats.scannerRange!==void 0){journalLabel="Range"}else if(label==="ProbeRadius")journalLabel="DSS_PatchRadius";else if(label==="RefuelRate")journalLabel="FuelScoopRate";else if(label==="DistributorDraw"&&stats.shieldRegenRate!==void 0){journalLabel="EnergyPerRegen"}result.push(journalLabel===label?modifier:{...modifier,Label:journalLabel})}if(damagePerSecond)result.push(damagePerSecond);if(derivedRate){const direct=result.findIndex(modifier=>modifier.Label==="RateOfFire");if(direct>=0)result[direct]=derivedRate;else result.push(derivedRate)}return sortJournalModifiers(result)}function isFinalGuardianWeaponEngineering(item,blueprint){const group=getEngineeringGroup(item);if(group===null||!GUARDIAN_WEAPON_GROUPS.has(group))return false;const resolved=resolveBlueprintForModule(item,blueprint);return getBlueprint(resolved)!==null&&!blueprintAvailableFor(item,blueprint)}function engineerableBase(item,statsOverride){const stats=statsOverride??builtInModuleBySymbol(item,FITTED_ITEM);if(!stats||stats.engineeringLocked)return null;return{stats:stats,base:baseStats(stats)}}function availableBlueprintsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;const available=[];for(const[blueprintSymbol,route]of blueprintRoutesFor(item)){const blueprint=BLUEPRINTS[blueprintSymbol];if(!blueprint)continue;const grades=Object.entries(blueprint.grades).filter(([,grade])=>missingBaseLabels(stats,base,grade.features).length===0).map(([grade])=>Number(grade)).filter(Number.isFinite).sort((a,b)=>a-b);if(grades.length>0)available.push({blueprintSymbol:blueprintSymbol,grades:grades,route:route})}return available}function availableExperimentalsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;return getExperimentalsForModule(item).filter(experimentalEffectSymbol=>{const effect=EXPERIMENTAL_EFFECTS[experimentalEffectSymbol];return effect!==void 0&&missingBaseLabels(stats,base,effect.modifiers).length===0})}var MAX_ENGINEERING_GRADE=5;function modifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);const effectName=experimental===void 0?variant.experimentalEffectSymbol:experimental;if(!module||!variant.modifiers?.length&&effectName==null)return null;const effect=effectName==null?void 0:getExperimentalEffect(effectName);if(effectName!==null&&effectName!==void 0&&!effect)return null;return computeModifiers(baseStats(module),fixedModifierFeatures(variant.modifiers??[]),1,effect??void 0)}function getPreEngineeredModifiers(variant){return modifiersWithExperimental(variant)??[]}function journalModifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return[];const modifiers=journalModifiersFor(module,modifiersWithExperimental(variant,experimental)??[]);const effectName=experimental===void 0?variant.experimentalEffectSymbol:experimental;const damageDistribution=effectName?getExperimentalEffect(effectName)?.damageDistribution:void 0;if(!damageDistribution)return modifiers;for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];const label=labelsForDamageType(type)[0];if(value===void 0||label===void 0)continue;modifiers.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(module.damageDistribution?.[type]??0)*scaleForLabel(label)})}return modifiers}function getPreEngineeredJournalModifiers(variant){return journalModifiersWithExperimental(variant)}function sameJournalNumber(actual,expected,base){return Math.abs(actual-expected)<=Math.max(1e-5,Math.abs(base)*1e-4,Math.abs(expected)*1e-6)}function modifierKey(modifier,module){return fieldForLabel(modifier.Label,module)??`label:${normalizeKey(modifier.Label,"identifyPreEngineeredVariant: module.Engineering.Modifiers[].Label")}`}function sameModifier(actual,expected){if(expected.Value!==void 0){return actual.Value!==void 0&&sameJournalNumber(actual.Value,expected.Value,expected.OriginalValue??expected.Value)}return expected.ValueStr!==void 0&&actual.ValueStr!==void 0}function matchesModifierSignature(actualByKey,expected,module){let matched=0;for(const predicted of expected){const actual=actualByKey.get(modifierKey(predicted,module));if(!actual)continue;if(!sameModifier(actual,predicted))return false;matched++}return matched>=Math.max(1,expected.length-1)}function identifyPreEngineeredVariant(module){const engineering=module.Engineering;if(!engineering)return null;requireStringIfPresent(module.Item,"identifyPreEngineeredVariant: module.Item");const stock=getModuleBySymbol(module.Item,ALL_MODULES);if(!stock)return null;const capturedBlueprint=normalizeKey(engineering.BlueprintName,"identifyPreEngineeredVariant: module.Engineering.BlueprintName");const variants=getPreEngineeredVariants(module.Item);const blueprintMatches=variants.filter(candidate=>candidate.blueprintSymbol.toLowerCase()===capturedBlueprint);const blueprintMatch=blueprintMatches.length===1?blueprintMatches[0]:null;const capturedGrade=engineering.Level;if(blueprintMatch?.acquisition==="mercenary"&&Number.isInteger(capturedGrade)&&capturedGrade>=blueprintMatch.grade&&capturedGrade<=MAX_ENGINEERING_GRADE){return blueprintMatch}if(engineering.Modifiers===void 0){const capturedExperimental=normalizeKey(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const identityMatches=blueprintMatches.filter(candidate=>candidate.engineeringLocked===true&&candidate.grade===capturedGrade&&(candidate.experimentalEffectSymbol===void 0?capturedExperimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimentalEffectSymbol.toLowerCase()===capturedExperimental));return identityMatches.length===1?identityMatches[0]:null}if(!engineering.Modifiers?.length)return null;const actualByKey=/* @__PURE__ */new Map;for(const modifier of engineering.Modifiers){actualByKey.set(modifierKey(modifier,stock),modifier)}requireStringIfPresent(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const matches=[];for(const candidate of variants){if(!candidate.modifiers?.length)continue;if(candidate.grade!==engineering.Level)continue;if(candidate.acquisition==="eventReward"&&(engineering.ExperimentalEffect!==void 0||engineering.ExperimentalEffect_Localised!==void 0||capturedBlueprint!==candidate.blueprintSymbol.toLowerCase())){continue}const primitive=modifiersWithExperimental(candidate,engineering.ExperimentalEffect??null);if(!primitive?.length)continue;const matched=matchesModifierSignature(actualByKey,primitive,stock)||matchesModifierSignature(actualByKey,journalModifiersWithExperimental(candidate,engineering.ExperimentalEffect??null),stock);if(matched)matches.push(candidate)}return matches.length===1?matches[0]:null}function unresolvedModifiers(variant){const resolved=new Set(getPreEngineeredModifiers(variant).map(modifier=>modifier.Label));return(variant.modifiers??[]).map(modifier=>modifier.label).filter(label=>!resolved.has(label))}function getPreEngineeredStats(variant){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return null;if(!variant.modifiers?.length&&!variant.engineeringLocked&&variant.experimentalEffectSymbol===void 0)return{...module};const applied=getPreEngineeredModifiers(variant);const resolved={...module,...variant.engineeringLocked?{engineeringLocked:true}:{}};for(const{Label:Label,Value:Value,ValueStr:ValueStr}of applied){const field=fieldForLabel(Label,module);if(field&&field!=="damageDistribution"&&Value!==void 0){Object.assign(resolved,{[field]:Value/scaleForLabel(Label)})}else if(field&&ValueStr!==void 0&&capabilityValueForLabel(Label)!==null){Object.assign(resolved,{[field]:true})}}const experimentalDamageDistribution=variant.experimentalEffectSymbol?getExperimentalEffect(variant.experimentalEffectSymbol)?.damageDistribution:void 0;if(experimentalDamageDistribution){resolved.damageDistribution={...experimentalDamageDistribution};delete resolved.damageComponents}if(resolved.rateOfFire!==void 0&&!applied.some(m=>m.Label==="RateOfFire")&&applied.some(m=>BURST_PATTERN_LABELS.some(label=>label===m.Label))){const rate=journalRateOfFire(preciseValueFor(applied,"BurstInterval")??resolved.burstInterval,preciseValueFor(applied,"BurstSize")??resolved.burstRounds,preciseValueFor(applied,"BurstRateOfFire")??resolved.burstRateOfFire);if(rate!==void 0)resolved.rateOfFire=rate}if(module.damageComponents&&!experimentalDamageDistribution){resolved.damageComponents=scaleDamageComponents(module.damageComponents,module.damage,resolved.damage)}return resolved}export{FITTED_ITEM,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,cloneLoadoutModule,cloneModuleStats,experimentalAvailableFor,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,isBuiltInHullModule,isCargoHatchSlot,isFinalGuardianWeaponEngineering,isNonOutfittingSlot,journalModifiersFor,matchingKeyIn,missingBaseLabels,orderBySlotLayout,ordinaryEngineeringProof,ownKeyIn,primitiveEngineeringInputsFor,rolledOverFixedArticle,scaleDamageComponents,statesInertModifiers,unresolvedModifiers,unrollableFixedArticle};//# sourceMappingURL=chunk-NBLLW7TH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/internal/damage-components.ts","../src/ships/internal/fixed-modifier-features.ts","../src/ships/internal/loadout-state.ts","../src/ships/internal/loadout-engineering.ts","../src/ships/pre-engineered-stats.ts"],"names":["builtInModuleBySymbol","getModuleBySymbol","getPreEngineeredVariants","ALL_MODULES","getBlueprintGrade","getBlueprint","BLUEPRINTS","EXPERIMENTAL_EFFECTS","getExperimentalEffect","fieldForLabel","damageTypeForLabel","capabilityValueForLabel","baseStats","computeModifiers","labelsForDamageType","scaleForLabel","round6","burstPartOrOne","float32FiringCycle","float32RateOfFire","preciseModifierValue","BURST_PATTERN_LABELS","journalRateOfFire","preciseValueFor","resolveBlueprintForModule","getBlueprintsForModule","getExperimentalsForModule","getEngineeringGroup","normalizeKey","requireStringIfPresent","deepFreeze","scaleDamageComponents","components","baseDamage","effectiveDamage","scale","kinetic","thermal","explosive","absolute","antiXeno","unclassified","map","value","fixedModifierFeatures","modifiers","modifier","label","method","min","max","FITTED_ITEM","isNonOutfittingSlot","slotKey","test","isCargoHatchSlot","toLowerCase","isBuiltInHullModule","module","Slot","Item","startsWith","cloneLoadoutModule","On","Priority","Health","Value","Engineering","BlueprintName","Level","Quality","ExperimentalEffect","ExperimentalEffect_Localised","Modifiers","matchingKeyIn","keyed","has","wanted","key","keys","ownKeyIn","canonicalKey","size","every","orderBySlotLayout","values","layout","slotOf","order","Map","slot","index","sort","left","right","get","Number","MAX_SAFE_INTEGER","cloneModuleStats","structuredClone","error","Error","name","restrictedToShips","limitIncrease","damageDistribution","damageComponents","projectileRange","GUARDIAN_WEAPON_GROUPS","Set","missingBaseLabels","stats","base","features","experimental","contributions","contribution","filter","recipeSignature","blueprintSymbol","blueprint","grades","Object","entries","grade","feature","join","isGenericSpelling","isSoldWithBlueprint","item","some","variant","acquisition","blueprintRoutesFor","routes","set","blueprintAvailableFor","offered","asWritten","resolved","trim","id","signature","experimentalAvailableFor","experimentalEffectSymbol","primitiveLabelFor","maximumRange","falloffRange","scannerRange","shieldRegenRate","primitiveEngineeringInputsFor","canonicalGrade","matchesCalculatedModifiers","captured","calculated","length","byLabel","Label","expected","actual","Math","abs","ValueStr","identityArticles","engineering","candidate","unrollableFixedArticle","matches","rolledOverFixedArticle","statesInertModifiers","field","ordinaryEngineeringProof","recipe","fixedCandidate","quality","stock","isFinite","current","journalModifiersFor","type","push","OriginalValue","float32DamagePerSecond","damage","rounds","rate","burstRounds","cycle","damagePerCycle","fround","JOURNAL_MODIFIER_ORDER","JOURNAL_MODIFIER_RANK","sortJournalModifiers","a","b","weapon","valueFor","fallback","find","burstTouched","damageTouched","rateTouched","damagePerSecond","derivedRate","continuous","burstInterval","rateOfFire","burstRate","burstRateOfFire","baseBurstRounds","baseBurstRate","baseInterval","baseCycle","baseRate","rateModifier","effectiveRate","effectiveInterval","effectiveCycle","stockRounds","roundsPerShot","effectiveRounds","result","includes","journalLabel","direct","findIndex","isFinalGuardianWeaponEngineering","group","engineerableBase","statsOverride","engineeringLocked","availableBlueprintsFor","engineerable","available","route","availableExperimentalsFor","effect","MAX_ENGINEERING_GRADE","modifiersWithExperimental","symbol","effectName","getPreEngineeredModifiers","journalModifiersWithExperimental","getPreEngineeredJournalModifiers","sameJournalNumber","modifierKey","sameModifier","matchesModifierSignature","actualByKey","matched","predicted","identifyPreEngineeredVariant","capturedBlueprint","variants","blueprintMatches","blueprintMatch","capturedGrade","isInteger","capturedExperimental","identityMatches","primitive","unresolvedModifiers","getPreEngineeredStats","applied","assign","experimentalDamageDistribution","m"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ALL_MATERIALS}from"./chunk-
|
|
1
|
+
import{ALL_MATERIALS}from"./chunk-KBCA4GEZ.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-BKWLI44T.js";import{describeValue}from"./chunk-PKWVG2JY.js";var MaterialGrade=/* @__PURE__ */(MaterialGrade2=>{MaterialGrade2[MaterialGrade2["VeryCommon"]=1]="VeryCommon";MaterialGrade2[MaterialGrade2["Common"]=2]="Common";MaterialGrade2[MaterialGrade2["Standard"]=3]="Standard";MaterialGrade2[MaterialGrade2["Rare"]=4]="Rare";MaterialGrade2[MaterialGrade2["VeryRare"]=5]="VeryRare";return MaterialGrade2})(MaterialGrade||{});var MaterialLine=/* @__PURE__ */(MaterialLine2=>{MaterialLine2["Carbon"]="Carbon";MaterialLine2["Phosphorus"]="Phosphorus";MaterialLine2["Sulphur"]="Sulphur";MaterialLine2["Iron"]="Iron";MaterialLine2["Nickel"]="Nickel";MaterialLine2["Rhenium"]="Rhenium";MaterialLine2["Lead"]="Lead";MaterialLine2["Chemical"]="Chemical";MaterialLine2["Thermic"]="Thermic";MaterialLine2["Heat"]="Heat";MaterialLine2["Conductive"]="Conductive";MaterialLine2["MechanicalComponents"]="Mechanical Components";MaterialLine2["Capacitors"]="Capacitors";MaterialLine2["Shielding"]="Shielding";MaterialLine2["Composite"]="Composite";MaterialLine2["Crystals"]="Crystals";MaterialLine2["Alloys"]="Alloys";MaterialLine2["EmissionData"]="Emission Data";MaterialLine2["WakeScans"]="Wake Scans";MaterialLine2["ShieldData"]="Shield Data";MaterialLine2["EncryptionFiles"]="Encryption Files";MaterialLine2["DataArchives"]="Data Archives";MaterialLine2["EncodedFirmware"]="Encoded Firmware";MaterialLine2["Guardian"]="Guardian";MaterialLine2["Thargoid"]="Thargoid";return MaterialLine2})(MaterialLine||{});var MATERIALS_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_MATERIALS,"symbol");var MATERIALS_BY_NAME=/* @__PURE__ */createKeyIndex(ALL_MATERIALS,"name");var MATERIALS_BY_ELEMENT=/* @__PURE__ */createKeyIndex(ALL_MATERIALS,"elementSymbol");function getMaterialBySymbol(symbol,materials=ALL_MATERIALS){return materials===ALL_MATERIALS?findInKeyIndex(MATERIALS_BY_SYMBOL,symbol,"getMaterialBySymbol: symbol"):findByKey(materials,"symbol",symbol,"getMaterialBySymbol: symbol")}function getMaterialByName(name,materials=ALL_MATERIALS){return materials===ALL_MATERIALS?findInKeyIndex(MATERIALS_BY_NAME,name,"getMaterialByName: name"):findByKey(materials,"name",name,"getMaterialByName: name")}function getMaterialByElementSymbol(elementSymbol,materials=ALL_MATERIALS){return materials===ALL_MATERIALS?findInKeyIndex(MATERIALS_BY_ELEMENT,elementSymbol,"getMaterialByElementSymbol: elementSymbol"):findByKey(materials,"elementSymbol",elementSymbol,"getMaterialByElementSymbol: elementSymbol")}function materialsByGrade(grade){if(grade==null)return[];if(typeof grade!=="number"){throw new TypeError(`materialsByGrade: grade must be a number, received ${describeValue(grade)}`)}return ALL_MATERIALS.filter(material=>material.grade===grade)}function materialsInLine(line){return filterByKey(ALL_MATERIALS,"line",line,"materialsInLine: line")}function materialsInCategory(category){return filterByKey(ALL_MATERIALS,"category",category,"materialsInCategory: category")}export{MaterialGrade,MaterialLine,getMaterialByElementSymbol,getMaterialByName,getMaterialBySymbol,materialsByGrade,materialsInCategory,materialsInLine};//# sourceMappingURL=chunk-OFZGNWBT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{buildMaterialCatalogue}from"./chunk-GTEHRZPN.js";var materials_manufactured_default=[{symbol:"SalvagedAlloys",name:"Salvaged Alloys",elementSymbol:null,grade:1,line:"Alloys"},{symbol:"GalvanisingAlloys",name:"Galvanising Alloys",elementSymbol:null,grade:2,line:"Alloys"},{symbol:"PhaseAlloys",name:"Phase Alloys",elementSymbol:null,grade:3,line:"Alloys"},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",elementSymbol:null,grade:4,line:"Alloys"},{symbol:"ProtoRadiolicAlloys",name:"Proto Radiolic Alloys",elementSymbol:null,grade:5,line:"Alloys"},{symbol:"GridResistors",name:"Grid Resistors",elementSymbol:null,grade:1,line:"Capacitors"},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",elementSymbol:null,grade:2,line:"Capacitors"},{symbol:"ElectrochemicalArrays",name:"Electrochemical Arrays",elementSymbol:null,grade:3,line:"Capacitors"},{symbol:"PolymerCapacitors",name:"Polymer Capacitors",elementSymbol:null,grade:4,line:"Capacitors"},{symbol:"MilitarySupercapacitors",name:"Military Supercapacitors",elementSymbol:null,grade:5,line:"Capacitors"},{symbol:"ChemicalStorageUnits",name:"Chemical Storage Units",elementSymbol:null,grade:1,line:"Chemical"},{symbol:"ChemicalProcessors",name:"Chemical Processors",elementSymbol:null,grade:2,line:"Chemical"},{symbol:"ChemicalDistillery",name:"Chemical Distillery",elementSymbol:null,grade:3,line:"Chemical"},{symbol:"ChemicalManipulators",name:"Chemical Manipulators",elementSymbol:null,grade:4,line:"Chemical"},{symbol:"PharmaceuticalIsolators",name:"Pharmaceutical Isolators",elementSymbol:null,grade:5,line:"Chemical"},{symbol:"CompactComposites",name:"Compact Composites",elementSymbol:null,grade:1,line:"Composite"},{symbol:"FilamentComposites",name:"Filament Composites",elementSymbol:null,grade:2,line:"Composite"},{symbol:"HighDensityComposites",name:"High Density Composites",elementSymbol:null,grade:3,line:"Composite"},{symbol:"FedProprietaryComposites",name:"Proprietary Composites",elementSymbol:null,grade:4,line:"Composite"},{symbol:"FedCoreComposites",name:"Core Dynamics Composites",elementSymbol:null,grade:5,line:"Composite"},{symbol:"BasicConductors",name:"Basic Conductors",elementSymbol:null,grade:1,line:"Conductive"},{symbol:"ConductiveComponents",name:"Conductive Components",elementSymbol:null,grade:2,line:"Conductive"},{symbol:"ConductiveCeramics",name:"Conductive Ceramics",elementSymbol:null,grade:3,line:"Conductive"},{symbol:"ConductivePolymers",name:"Conductive Polymers",elementSymbol:null,grade:4,line:"Conductive"},{symbol:"BiotechConductors",name:"Biotech Conductors",elementSymbol:null,grade:5,line:"Conductive"},{symbol:"CrystalShards",name:"Crystal Shards",elementSymbol:null,grade:1,line:"Crystals"},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",elementSymbol:null,grade:2,line:"Crystals"},{symbol:"FocusCrystals",name:"Focus Crystals",elementSymbol:null,grade:3,line:"Crystals"},{symbol:"RefinedFocusCrystals",name:"Refined Focus Crystals",elementSymbol:null,grade:4,line:"Crystals"},{symbol:"ExquisiteFocusCrystals",name:"Exquisite Focus Crystals",elementSymbol:null,grade:5,line:"Crystals"},{symbol:"Guardian_PowerCell",name:"Guardian Power Cell",elementSymbol:null,grade:1,line:"Guardian"},{symbol:"Guardian_Sentinel_WreckageComponents",name:"Guardian Wreckage Components",elementSymbol:null,grade:1,line:"Guardian"},{symbol:"Guardian_PowerConduit",name:"Guardian Power Conduit",elementSymbol:null,grade:2,line:"Guardian"},{symbol:"Guardian_Sentinel_WeaponParts",name:"Guardian Sentinel Weapon Parts",elementSymbol:null,grade:3,line:"Guardian"},{symbol:"Guardian_TechComponent",name:"Guardian Technology Component",elementSymbol:null,grade:3,line:"Guardian"},{symbol:"HeatConductionWiring",name:"Heat Conduction Wiring",elementSymbol:null,grade:1,line:"Heat"},{symbol:"HeatDispersionPlate",name:"Heat Dispersion Plate",elementSymbol:null,grade:2,line:"Heat"},{symbol:"HeatExchangers",name:"Heat Exchangers",elementSymbol:null,grade:3,line:"Heat"},{symbol:"HeatVanes",name:"Heat Vanes",elementSymbol:null,grade:4,line:"Heat"},{symbol:"ProtoHeatRadiators",name:"Proto Heat Radiators",elementSymbol:null,grade:5,line:"Heat"},{symbol:"MechanicalScrap",name:"Mechanical Scrap",elementSymbol:null,grade:1,line:"Mechanical Components"},{symbol:"MechanicalEquipment",name:"Mechanical Equipment",elementSymbol:null,grade:2,line:"Mechanical Components"},{symbol:"MechanicalComponents",name:"Mechanical Components",elementSymbol:null,grade:3,line:"Mechanical Components"},{symbol:"ConfigurableComponents",name:"Configurable Components",elementSymbol:null,grade:4,line:"Mechanical Components"},{symbol:"ImprovisedComponents",name:"Improvised Components",elementSymbol:null,grade:5,line:"Mechanical Components"},{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",elementSymbol:null,grade:1,line:"Shielding"},{symbol:"ShieldEmitters",name:"Shield Emitters",elementSymbol:null,grade:2,line:"Shielding"},{symbol:"ShieldingSensors",name:"Shielding Sensors",elementSymbol:null,grade:3,line:"Shielding"},{symbol:"CompoundShielding",name:"Compound Shielding",elementSymbol:null,grade:4,line:"Shielding"},{symbol:"ImperialShielding",name:"Imperial Shielding",elementSymbol:null,grade:5,line:"Shielding"},{symbol:"tg_abrasion03",name:"Hardened Surface Fragments",elementSymbol:null,grade:1,line:"Thargoid"},{symbol:"tg_causticshard",name:"Caustic Shard",elementSymbol:null,grade:2,line:"Thargoid"},{symbol:"unknowncorechip",name:"Tactical Core Chip",elementSymbol:null,grade:2,line:"Thargoid"},{symbol:"UnknownCarapace",name:"Thargoid Carapace",elementSymbol:null,grade:2,line:"Thargoid"},{symbol:"TG_BioMechanicalConduits",name:"Bio-Mechanical Conduits",elementSymbol:null,grade:3,line:"Thargoid"},{symbol:"tg_causticgeneratorparts",name:"Corrosive Mechanisms",elementSymbol:null,grade:3,line:"Thargoid"},{symbol:"tg_abrasion02",name:"Phasing Membrane Residue",elementSymbol:null,grade:3,line:"Thargoid"},{symbol:"UnknownEnergyCell",name:"Thargoid Energy Cell",elementSymbol:null,grade:3,line:"Thargoid"},{symbol:"TG_WreckageComponents",name:"Wreckage Components",elementSymbol:null,grade:3,line:"Thargoid"},{symbol:"tg_causticcrystal",name:"Caustic Crystal",elementSymbol:null,grade:4,line:"Thargoid"},{symbol:"UnknownTechnologyComponents",name:"Thargoid Technological Components",elementSymbol:null,grade:4,line:"Thargoid"},{symbol:"TG_WeaponParts",name:"Weapon Parts",elementSymbol:null,grade:4,line:"Thargoid"},{symbol:"tg_abrasion01",name:"Heat Exposure Specimen",elementSymbol:null,grade:5,line:"Thargoid"},{symbol:"TG_PropulsionElement",name:"Propulsion Elements",elementSymbol:null,grade:5,line:"Thargoid"},{symbol:"UnknownEnergySource",name:"Sensor Fragment",elementSymbol:null,grade:5,line:"Thargoid"},{symbol:"UnknownOrganicCircuitry",name:"Thargoid Organic Circuitry",elementSymbol:null,grade:5,line:"Thargoid"},{symbol:"TemperedAlloys",name:"Tempered Alloys",elementSymbol:null,grade:1,line:"Thermic"},{symbol:"HeatResistantCeramics",name:"Heat Resistant Ceramics",elementSymbol:null,grade:2,line:"Thermic"},{symbol:"PrecipitatedAlloys",name:"Precipitated Alloys",elementSymbol:null,grade:3,line:"Thermic"},{symbol:"ThermicAlloys",name:"Thermic Alloys",elementSymbol:null,grade:4,line:"Thermic"},{symbol:"MilitaryGradeAlloys",name:"Military Grade Alloys",elementSymbol:null,grade:5,line:"Thermic"}];var MANUFACTURED_MATERIALS=buildMaterialCatalogue(materials_manufactured_default,"manufactured");export{MANUFACTURED_MATERIALS};//# sourceMappingURL=chunk-PF3HZ73R.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/materials/materials-manufactured.ts"],"names":["buildMaterialCatalogue","materials_manufactured_default","MANUFACTURED_MATERIALS"],"mappings":"O,
|
|
1
|
+
{"version":3,"sources":["../src/materials/materials-manufactured.ts"],"names":["buildMaterialCatalogue","materials_manufactured_default","MANUFACTURED_MATERIALS"],"mappings":"O,gpOA+BO,IAAME,uBAA8CF,uBACvDC,+BACA,uBACJC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cellBankSummary,shieldRecovery}from"./chunk-JMAXSXXQ.js";import{loadoutInternals,fittedThrusterParamsFor,preEngineeredVariantFor,powerConsumerFor,powerAvailable,heatInputResultFor,completeResult,cellBankInputsFor,armourInputFor,weaponStatsFor,weaponsCapacitorInputFor,mobilityInputResultFor,shieldInputResultFor,shieldCapacitorInputResultFor,shieldRecoveryInputResultFor,distributorInputResultFor,incompleteResult}from"./chunk-FD74K27A.js";import{shieldMetrics}from"./chunk-5VWACBTN.js";import{weaponsCapacitorMetrics}from"./chunk-M4FZRDAH.js";import{powerBudget}from"./chunk-GGQMIQPC.js";import{isNonOutfittingSlot,isBuiltInHullModule,orderBySlotLayout}from"./chunk-SC6Z2TV7.js";import{weaponMetrics,sumWeaponMetrics}from"./chunk-37JIMWLK.js";import{shieldCapacitorMetrics}from"./chunk-XQJERZUS.js";import{mobilityCapacitorMetrics}from"./chunk-VEEBJFJ7.js";import{mobilityMetrics}from"./chunk-A4QKXXZD.js";import{getExperimentalEffectCost}from"./chunk-CJK2IBI2.js";import{heatMetrics}from"./chunk-6HA2YIKW.js";import{frameShiftDriveMassFactor,singleJumpRange,fuelPerJump,totalRange}from"./chunk-VTMCSCXV.js";import{calculateUnladenMass}from"./chunk-DCB4COCL.js";import{getBlueprintCost}from"./chunk-MTJ4MS7W.js";import{distributorMetrics}from"./chunk-M2TCZKRT.js";import{sumMaterials}from"./chunk-CJQ37JII.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{armourMetrics}from"./chunk-Q5ALV3DI.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var FACADE="BuildMetrics";function requireLoadOptions(scope,options){for(const field of["fuel","cargo"]){const value=options[field];if(value!==void 0)requireFiniteNonNegative(scope,field,value)}}var BuildMetrics=class _BuildMetrics{#build;#state;constructor(build,state){this.#build=build;this.#state=state}static of(build){return new _BuildMetrics(build,loadoutInternals(build,`${FACADE}.of: build`))}loadout(){return this.#build}frameShiftDrive(){const drive=this.#state.resolveDrive();if(drive===null){throw new TypeError(`${FACADE}: build has no frame shift drive`)}return drive}thrusters(){return fittedThrusterParamsFor(this.#state.modules(),this.#state.statsFor)}frameShiftDriveMassFactor(options={}){requireLoadOptions(`${FACADE}.frameShiftDriveMassFactor`,options);return frameShiftDriveMassFactor(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}maxJumpRange(){const fsd=this.frameShiftDrive();return singleJumpRange(this.#loadedMass(0),this.#maxJumpFuel(fsd),fsd)}jumpRange(options={}){requireLoadOptions(`${FACADE}.jumpRange`,options);return singleJumpRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}ladenJumpRange(){return this.jumpRange({cargo:this.#build.cargoCapacity})}fuelPerJump(distance,options={}){requireLoadOptions(`${FACADE}.fuelPerJump`,options);return fuelPerJump(distance,this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}totalRange(options={}){requireLoadOptions(`${FACADE}.totalRange`,options);return totalRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}standardLoadResult(load){return this.#standardLoad(load)}jumpRangeSummary(){const maximum=this.#require(this.standardLoadResult("maximum"),"maximum load");const unladen=this.#require(this.standardLoadResult("unladen"),"unladen load");const laden=this.#require(this.standardLoadResult("laden"),"laden load");return{max:this.jumpRange(maximum),unladen:this.jumpRange(unladen),laden:this.jumpRange(laden),totalMax:this.totalRange(maximum),totalUnladen:this.totalRange(unladen),totalLaden:this.totalRange(laden)}}buildMass(options={}){requireLoadOptions(`${FACADE}.buildMass`,options);const unladen=this.#build.unladenMass;const fuel=options.fuel??this.#build.fuelCapacity.main;const cargo=options.cargo??0;return Object.freeze({hull:this.#state.ship.hullMass,modules:calculateUnladenMass(0,this.#state.calculationModules()),unladen:unladen,fuel:fuel,cargo:cargo,total:unladen+fuel+cargo})}buildCost(){const hull=this.#state.ship.hullCost;let modules=0;let mercCoins=0;const unpriced=[];const materials=[];for(const module of this.#state.modules()){const stats=this.#state.statsFor(module);if(stats?.cost!==void 0){modules+=stats.cost}else if(stats!==null||!isNonOutfittingSlot(module.Slot)&&!isBuiltInHullModule(module)){unpriced.push({slot:module.Slot,symbol:module.Item})}const variant=preEngineeredVariantFor(module);mercCoins+=variant?.mercCoinCost??0;const engineering=module.Engineering;if(!engineering)continue;const grade=engineering.Level;const bought=variant?.grade??0;if(Number.isInteger(grade)&&grade>bought&&grade<=5){const climb=getBlueprintCost(engineering.BlueprintName,grade,bought);if(climb){materials.push(climb.materials);mercCoins+=climb.mercCoins}}const experimental=engineering.ExperimentalEffect;if(experimental!==void 0&&experimental.toLowerCase()!==variant?.experimentalEffectSymbol?.toLowerCase()){const cost=getExperimentalEffectCost(experimental);if(cost)materials.push(cost)}}return deepFreeze({credits:{total:hull+modules,hull:hull,modules:modules,rebuy:Math.trunc((hull+modules)*.05),unpriced:unpriced},mercCoins:mercCoins,materials:sumMaterials(...materials)})}powerBudget(){const modules=this.#state.modules();const consumers=[];for(const module of modules){const consumer=powerConsumerFor(module,this.#state.statsFor(module));if(consumer)consumers.push(consumer)}return powerBudget(powerAvailable(modules,this.#state.statsFor),consumers)}heatMetricsResult(){const input=heatInputResultFor(this.#state.ship,this.#state.effectiveModules(),this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(heatMetrics(input.value)):input}mobilityMetricsResult(options={}){return this.#mobility(options)}mobilityCapacitorMetricsResult(options={}){return this.#mobilityCapacitor(options)}shieldMetricsResult(){return this.#shields()}shieldCapacitorMetricsResult(options={}){return this.#shieldCapacitor(options)}shieldRecoveryResult(options={}){return this.#recovery(options)}cellBanks(){return cellBankSummary(orderBySlotLayout(cellBankInputsFor(this.#state.modules(),this.powerBudget(),this.#state.statsFor),this.#state.layout(),bank=>bank.slot))}armourMetrics(){return armourMetrics(armourInputFor(this.#state.ship,this.#state.modules(),this.#state.statsFor))}weaponMetrics(){const weapons=[];for(const module of this.#state.modules()){const record=this.#state.statsFor(module);const stats=weaponStatsFor(this.#state.effectiveModule(module),record);if(!stats)continue;weapons.push({slot:module.Slot,symbol:module.Item,name:record?.name??module.Item,enabled:module.On!==false,metrics:weaponMetrics(stats),ammunition:ammunitionCapacity(stats),...stats.maximumRange===void 0?{}:{maximumRange:stats.maximumRange},...stats.falloffRange===void 0?{}:{falloffRange:stats.falloffRange},...stats.projectileRange===void 0?{}:{projectileRange:{...stats.projectileRange}},...stats.armourPiercing===void 0?{}:{armourPiercing:stats.armourPiercing}})}const orderedWeapons=orderBySlotLayout(weapons,this.#state.layout(),weapon=>weapon.slot);return{weapons:orderedWeapons,total:sumWeaponMetrics(orderedWeapons.filter(weapon=>weapon.enabled).map(weapon=>weapon.metrics))}}weaponsCapacitorMetrics(options={}){const weaponsPips=requirePips(`${FACADE}.weaponsCapacitorMetrics`,"weaponsPips",options.weaponsPips??4);return weaponsCapacitorMetrics(weaponsCapacitorInputFor(this.#state.effectiveModules(),weaponsPips,this.powerBudget(),this.#state.statsFor))}distributorMetricsResult(options={}){return this.#distributor(options)}#mobility(options){const input=this.#mobilityInput(`${FACADE}.mobilityMetricsResult`,options);return input.complete?completeResult(mobilityMetrics(input.value)):input}#mobilityCapacitor(options){const scope=`${FACADE}.mobilityCapacitorMetricsResult`;const enginesPips=requirePips(scope,"enginesPips",options.enginesPips??4);const input=this.#mobilityInput(scope,options);return input.complete?completeResult(mobilityCapacitorMetrics({...input.value,enginesPips:enginesPips})):input}#mobilityInput(scope,options){requireLoadOptions(scope,options);return mobilityInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),()=>this.#loadedMass(options.cargo??0)+(options.fuel??this.#state.statedMainFuel()??this.#build.fuelCapacity.main),this.#state.statsFor)}#shields(){const input=shieldInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(shieldMetrics(input.value)):input}#shieldCapacitor(options){const systemsPips=requirePips(`${FACADE}.shieldCapacitorMetricsResult`,"systemsPips",options.systemsPips??4);const input=shieldCapacitorInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldCapacitorMetrics(input.value)):input}#recovery(options){const systemsPips=requirePips(`${FACADE}.shieldRecoveryResult`,"systemsPips",options.systemsPips??4);const input=shieldRecoveryInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldRecovery(input.value)):input}#distributor(options){const scope=`${FACADE}.distributorMetricsResult`;const pips={systemsPips:requirePips(scope,"systemsPips",options.systemsPips??4),enginesPips:requirePips(scope,"enginesPips",options.enginesPips??4),weaponsPips:requirePips(scope,"weaponsPips",options.weaponsPips??4)};const input=distributorInputResultFor(this.#state.effectiveModules(),pips,this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(distributorMetrics(input.value)):input}#standardLoad(load){if(load!=="maximum"&&load!=="unladen"&&load!=="laden"){throw new RangeError(`${FACADE}.standardLoadResult: load must be 'maximum', 'unladen', or 'laden'`)}const fuel=this.#build.fuelCapacity;const cargo=load==="laden"?this.#build.cargoCapacity:0;const mass=load==="maximum"?this.#build.unladenMass:0;let drive=null;let maximumFuel=null;if(load==="maximum"){const fitted=this.#state.frameShiftDriveModule();let driveError=null;try{drive=this.#state.resolveDrive();maximumFuel=drive?.maxFuel??null}catch(error){if(!(error instanceof Error))throw error;driveError=error}if(maximumFuel===null){return incompleteResult([{field:"frameShiftDrive",reason:fitted?"unresolved":"missing",slot:fitted?.Slot??"FrameShiftDrive",...fitted?{symbol:fitted.Item}:{},message:driveError?.message??"FrameShiftDrive: no frame shift drive is fitted",params:fitted?{field:"frameShiftDrive",reason:"unresolved",slot:fitted.Slot,symbol:fitted.Item}:{field:"frameShiftDrive",reason:"missing",slot:"FrameShiftDrive"}}])}}const carriedFuel=load==="maximum"?Math.min(fuel.main,maximumFuel):fuel.main;const value=Object.freeze({fuel:carriedFuel,cargo:cargo,mass:this.#build.unladenMass+carriedFuel+cargo});if(load==="maximum"){try{this.jumpRange(value)}catch(error){if(!(error instanceof RangeError))throw error;const fitted=this.#state.frameShiftDriveModule();const field=drive!==null&&(!Number.isFinite(drive.maxFuel)||drive.maxFuel<0)?"frameShiftDrive":!Number.isFinite(value.fuel)||value.fuel<0?"fuelCapacity":!Number.isFinite(mass)||mass<0?"mass":"frameShiftDrive";const driveParams=field==="frameShiftDrive"&&fitted?{slot:fitted.Slot,symbol:fitted.Item}:{};return incompleteResult([{field:field,reason:"invalid",...driveParams,message:error.message,params:{field:field,reason:"invalid",...driveParams}}])}}return completeResult(value)}#require(result,what){if(result.value===null){throw new TypeError(`${FACADE}: cannot determine ${what} (${result.issues.map(issue=>issue.message).join("; ")})`)}return result.value}#loadedMass(cargo){return this.#build.unladenMass+cargo}#maxJumpFuel(fsd){return Math.min(this.#build.fuelCapacity.main,fsd.maxFuel)}};export{BuildMetrics};//# sourceMappingURL=chunk-KGJCTSVV.js.map
|
|
1
|
+
import{loadoutInternals,fittedThrusterParamsFor,preEngineeredVariantFor,powerConsumerFor,powerAvailable,heatInputResultFor,completeResult,cellBankInputsFor,armourInputFor,weaponStatsFor,weaponsCapacitorInputFor,mobilityInputResultFor,shieldInputResultFor,shieldCapacitorInputResultFor,shieldRecoveryInputResultFor,distributorInputResultFor,incompleteResult}from"./chunk-GISL7YML.js";import{weaponsCapacitorMetrics}from"./chunk-M4FZRDAH.js";import{weaponMetrics,sumWeaponMetrics}from"./chunk-AAU7OM47.js";import{powerBudget}from"./chunk-GGQMIQPC.js";import{isNonOutfittingSlot,isBuiltInHullModule,orderBySlotLayout}from"./chunk-NBLLW7TH.js";import{shieldCapacitorMetrics}from"./chunk-XQJERZUS.js";import{cellBankSummary,shieldRecovery}from"./chunk-JMAXSXXQ.js";import{shieldMetrics}from"./chunk-5VWACBTN.js";import{heatMetrics}from"./chunk-6HA2YIKW.js";import{frameShiftDriveMassFactor,singleJumpRange,fuelPerJump,totalRange}from"./chunk-VTMCSCXV.js";import{calculateUnladenMass}from"./chunk-DCB4COCL.js";import{mobilityCapacitorMetrics}from"./chunk-VEEBJFJ7.js";import{mobilityMetrics}from"./chunk-A4QKXXZD.js";import{distributorMetrics}from"./chunk-M2TCZKRT.js";import{getExperimentalEffectCost}from"./chunk-CJK2IBI2.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{armourMetrics}from"./chunk-Q5ALV3DI.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";import{getBlueprintCost}from"./chunk-YCGISPDR.js";import{sumMaterials}from"./chunk-5QSCLEEB.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var FACADE="BuildMetrics";function requireLoadOptions(scope,options){for(const field of["fuel","cargo"]){const value=options[field];if(value!==void 0)requireFiniteNonNegative(scope,field,value)}}var BuildMetrics=class _BuildMetrics{#build;#state;constructor(build,state){this.#build=build;this.#state=state}static of(build){return new _BuildMetrics(build,loadoutInternals(build,`${FACADE}.of: build`))}loadout(){return this.#build}frameShiftDrive(){const drive=this.#state.resolveDrive();if(drive===null){throw new TypeError(`${FACADE}: build has no frame shift drive`)}return drive}thrusters(){return fittedThrusterParamsFor(this.#state.modules(),this.#state.statsFor)}frameShiftDriveMassFactor(options={}){requireLoadOptions(`${FACADE}.frameShiftDriveMassFactor`,options);return frameShiftDriveMassFactor(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}maxJumpRange(){const fsd=this.frameShiftDrive();return singleJumpRange(this.#loadedMass(0),this.#maxJumpFuel(fsd),fsd)}jumpRange(options={}){requireLoadOptions(`${FACADE}.jumpRange`,options);return singleJumpRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}ladenJumpRange(){return this.jumpRange({cargo:this.#build.cargoCapacity})}fuelPerJump(distance,options={}){requireLoadOptions(`${FACADE}.fuelPerJump`,options);return fuelPerJump(distance,this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}totalRange(options={}){requireLoadOptions(`${FACADE}.totalRange`,options);return totalRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}standardLoadResult(load){return this.#standardLoad(load)}jumpRangeSummary(){const maximum=this.#require(this.standardLoadResult("maximum"),"maximum load");const unladen=this.#require(this.standardLoadResult("unladen"),"unladen load");const laden=this.#require(this.standardLoadResult("laden"),"laden load");return{max:this.jumpRange(maximum),unladen:this.jumpRange(unladen),laden:this.jumpRange(laden),totalMax:this.totalRange(maximum),totalUnladen:this.totalRange(unladen),totalLaden:this.totalRange(laden)}}buildMass(options={}){requireLoadOptions(`${FACADE}.buildMass`,options);const unladen=this.#build.unladenMass;const fuel=options.fuel??this.#build.fuelCapacity.main;const cargo=options.cargo??0;return Object.freeze({hull:this.#state.ship.hullMass,modules:calculateUnladenMass(0,this.#state.calculationModules()),unladen:unladen,fuel:fuel,cargo:cargo,total:unladen+fuel+cargo})}buildCost(){const hull=this.#state.ship.hullCost;let modules=0;let mercCoins=0;const unpriced=[];const materials=[];for(const module of this.#state.modules()){const stats=this.#state.statsFor(module);if(stats?.cost!==void 0){modules+=stats.cost}else if(stats!==null||!isNonOutfittingSlot(module.Slot)&&!isBuiltInHullModule(module)){unpriced.push({slot:module.Slot,symbol:module.Item})}const variant=preEngineeredVariantFor(module);mercCoins+=variant?.mercCoinCost??0;const engineering=module.Engineering;if(!engineering)continue;const grade=engineering.Level;const bought=variant?.grade??0;if(Number.isInteger(grade)&&grade>bought&&grade<=5){const climb=getBlueprintCost(engineering.BlueprintName,grade,bought);if(climb){materials.push(climb.materials);mercCoins+=climb.mercCoins}}const experimental=engineering.ExperimentalEffect;if(experimental!==void 0&&experimental.toLowerCase()!==variant?.experimentalEffectSymbol?.toLowerCase()){const cost=getExperimentalEffectCost(experimental);if(cost)materials.push(cost)}}return deepFreeze({credits:{total:hull+modules,hull:hull,modules:modules,rebuy:Math.trunc((hull+modules)*.05),unpriced:unpriced},mercCoins:mercCoins,materials:sumMaterials(...materials)})}powerBudget(){const modules=this.#state.modules();const consumers=[];for(const module of modules){const consumer=powerConsumerFor(module,this.#state.statsFor(module));if(consumer)consumers.push(consumer)}return powerBudget(powerAvailable(modules,this.#state.statsFor),consumers)}heatMetricsResult(){const input=heatInputResultFor(this.#state.ship,this.#state.effectiveModules(),this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(heatMetrics(input.value)):input}mobilityMetricsResult(options={}){return this.#mobility(options)}mobilityCapacitorMetricsResult(options={}){return this.#mobilityCapacitor(options)}shieldMetricsResult(){return this.#shields()}shieldCapacitorMetricsResult(options={}){return this.#shieldCapacitor(options)}shieldRecoveryResult(options={}){return this.#recovery(options)}cellBanks(){return cellBankSummary(orderBySlotLayout(cellBankInputsFor(this.#state.modules(),this.powerBudget(),this.#state.statsFor),this.#state.layout(),bank=>bank.slot))}armourMetrics(){return armourMetrics(armourInputFor(this.#state.ship,this.#state.modules(),this.#state.statsFor))}weaponMetrics(){const weapons=[];for(const module of this.#state.modules()){const record=this.#state.statsFor(module);const stats=weaponStatsFor(this.#state.effectiveModule(module),record);if(!stats)continue;weapons.push({slot:module.Slot,symbol:module.Item,name:record?.name??module.Item,enabled:module.On!==false,metrics:weaponMetrics(stats),ammunition:ammunitionCapacity(stats),...stats.maximumRange===void 0?{}:{maximumRange:stats.maximumRange},...stats.falloffRange===void 0?{}:{falloffRange:stats.falloffRange},...stats.projectileRange===void 0?{}:{projectileRange:{...stats.projectileRange}},...stats.armourPiercing===void 0?{}:{armourPiercing:stats.armourPiercing}})}const orderedWeapons=orderBySlotLayout(weapons,this.#state.layout(),weapon=>weapon.slot);return{weapons:orderedWeapons,total:sumWeaponMetrics(orderedWeapons.filter(weapon=>weapon.enabled).map(weapon=>weapon.metrics))}}weaponsCapacitorMetrics(options={}){const weaponsPips=requirePips(`${FACADE}.weaponsCapacitorMetrics`,"weaponsPips",options.weaponsPips??4);return weaponsCapacitorMetrics(weaponsCapacitorInputFor(this.#state.effectiveModules(),weaponsPips,this.powerBudget(),this.#state.statsFor))}distributorMetricsResult(options={}){return this.#distributor(options)}#mobility(options){const input=this.#mobilityInput(`${FACADE}.mobilityMetricsResult`,options);return input.complete?completeResult(mobilityMetrics(input.value)):input}#mobilityCapacitor(options){const scope=`${FACADE}.mobilityCapacitorMetricsResult`;const enginesPips=requirePips(scope,"enginesPips",options.enginesPips??4);const input=this.#mobilityInput(scope,options);return input.complete?completeResult(mobilityCapacitorMetrics({...input.value,enginesPips:enginesPips})):input}#mobilityInput(scope,options){requireLoadOptions(scope,options);return mobilityInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),()=>this.#loadedMass(options.cargo??0)+(options.fuel??this.#state.statedMainFuel()??this.#build.fuelCapacity.main),this.#state.statsFor)}#shields(){const input=shieldInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(shieldMetrics(input.value)):input}#shieldCapacitor(options){const systemsPips=requirePips(`${FACADE}.shieldCapacitorMetricsResult`,"systemsPips",options.systemsPips??4);const input=shieldCapacitorInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldCapacitorMetrics(input.value)):input}#recovery(options){const systemsPips=requirePips(`${FACADE}.shieldRecoveryResult`,"systemsPips",options.systemsPips??4);const input=shieldRecoveryInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldRecovery(input.value)):input}#distributor(options){const scope=`${FACADE}.distributorMetricsResult`;const pips={systemsPips:requirePips(scope,"systemsPips",options.systemsPips??4),enginesPips:requirePips(scope,"enginesPips",options.enginesPips??4),weaponsPips:requirePips(scope,"weaponsPips",options.weaponsPips??4)};const input=distributorInputResultFor(this.#state.effectiveModules(),pips,this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(distributorMetrics(input.value)):input}#standardLoad(load){if(load!=="maximum"&&load!=="unladen"&&load!=="laden"){throw new RangeError(`${FACADE}.standardLoadResult: load must be 'maximum', 'unladen', or 'laden'`)}const fuel=this.#build.fuelCapacity;const cargo=load==="laden"?this.#build.cargoCapacity:0;const mass=load==="maximum"?this.#build.unladenMass:0;let drive=null;let maximumFuel=null;if(load==="maximum"){const fitted=this.#state.frameShiftDriveModule();let driveError=null;try{drive=this.#state.resolveDrive();maximumFuel=drive?.maxFuel??null}catch(error){if(!(error instanceof Error))throw error;driveError=error}if(maximumFuel===null){return incompleteResult([{field:"frameShiftDrive",reason:fitted?"unresolved":"missing",slot:fitted?.Slot??"FrameShiftDrive",...fitted?{symbol:fitted.Item}:{},message:driveError?.message??"FrameShiftDrive: no frame shift drive is fitted",params:fitted?{field:"frameShiftDrive",reason:"unresolved",slot:fitted.Slot,symbol:fitted.Item}:{field:"frameShiftDrive",reason:"missing",slot:"FrameShiftDrive"}}])}}const carriedFuel=load==="maximum"?Math.min(fuel.main,maximumFuel):fuel.main;const value=Object.freeze({fuel:carriedFuel,cargo:cargo,mass:this.#build.unladenMass+carriedFuel+cargo});if(load==="maximum"){try{this.jumpRange(value)}catch(error){if(!(error instanceof RangeError))throw error;const fitted=this.#state.frameShiftDriveModule();const field=drive!==null&&(!Number.isFinite(drive.maxFuel)||drive.maxFuel<0)?"frameShiftDrive":!Number.isFinite(value.fuel)||value.fuel<0?"fuelCapacity":!Number.isFinite(mass)||mass<0?"mass":"frameShiftDrive";const driveParams=field==="frameShiftDrive"&&fitted?{slot:fitted.Slot,symbol:fitted.Item}:{};return incompleteResult([{field:field,reason:"invalid",...driveParams,message:error.message,params:{field:field,reason:"invalid",...driveParams}}])}}return completeResult(value)}#require(result,what){if(result.value===null){throw new TypeError(`${FACADE}: cannot determine ${what} (${result.issues.map(issue=>issue.message).join("; ")})`)}return result.value}#loadedMass(cargo){return this.#build.unladenMass+cargo}#maxJumpFuel(fsd){return Math.min(this.#build.fuelCapacity.main,fsd.maxFuel)}};export{BuildMetrics};//# sourceMappingURL=chunk-S3MONE55.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/build-metrics.ts"],"names":["loadoutInternals","fittedThrusterParamsFor","preEngineeredVariantFor","powerConsumerFor","powerAvailable","heatInputResultFor","completeResult","cellBankInputsFor","armourInputFor","weaponStatsFor","weaponsCapacitorInputFor","mobilityInputResultFor","shieldInputResultFor","shieldCapacitorInputResultFor","shieldRecoveryInputResultFor","distributorInputResultFor","incompleteResult","weaponsCapacitorMetrics","weaponMetrics","sumWeaponMetrics","powerBudget","isNonOutfittingSlot","isBuiltInHullModule","orderBySlotLayout","shieldCapacitorMetrics","cellBankSummary","shieldRecovery","shieldMetrics","heatMetrics","frameShiftDriveMassFactor","singleJumpRange","fuelPerJump","totalRange","calculateUnladenMass","mobilityCapacitorMetrics","mobilityMetrics","distributorMetrics","getExperimentalEffectCost","ammunitionCapacity","armourMetrics","requirePips","requireFiniteNonNegative","getBlueprintCost","sumMaterials","deepFreeze","FACADE","requireLoadOptions","scope","options","field","value","BuildMetrics","_BuildMetrics","build","state","constructor","this","of","loadout","frameShiftDrive","drive","resolveDrive","TypeError","thrusters","modules","statsFor","loadedMass","cargo","fuel","fuelCapacity","main","maxJumpRange","fsd","maxJumpFuel","jumpRange","ladenJumpRange","cargoCapacity","distance","standardLoadResult","load","standardLoad","jumpRangeSummary","maximum","require","unladen","laden","max","totalMax","totalUnladen","totalLaden","buildMass","unladenMass","Object","freeze","hull","ship","hullMass","calculationModules","total","buildCost","hullCost","mercCoins","unpriced","materials","module","stats","cost","Slot","push","slot","symbol","Item","variant","mercCoinCost","engineering","Engineering","grade","Level","bought","Number","isInteger","climb","BlueprintName","experimental","ExperimentalEffect","toLowerCase","experimentalEffectSymbol","credits","rebuy","Math","trunc","consumers","consumer","heatMetricsResult","input","effectiveModules","complete","mobilityMetricsResult","mobility","mobilityCapacitorMetricsResult","mobilityCapacitor","shieldMetricsResult","shields","shieldCapacitorMetricsResult","shieldCapacitor","shieldRecoveryResult","recovery","cellBanks","layout","bank","weapons","record","effectiveModule","name","enabled","On","metrics","ammunition","maximumRange","falloffRange","projectileRange","armourPiercing","orderedWeapons","weapon","filter","map","weaponsPips","distributorMetricsResult","distributor","mobilityInput","enginesPips","statedMainFuel","systemsPips","pips","RangeError","mass","maximumFuel","fitted","frameShiftDriveModule","driveError","maxFuel","error","Error","reason","message","params","carriedFuel","min","isFinite","driveParams","result","what","issues","issue","join"],"mappings":"O,o/CAkHA,IAAM6C,OAAS,eAuQf,SAASC,mBAAmBC,MAAeC,SACvC,IAAA,MAAWC,QAAS,CAAC,OAAQ,SAAmB,CAC5C,MAAMC,MAAQF,QAAQC,OACtB,GAAIC,aAAU,EAAWT,yBAAyBM,MAAOE,MAAOC,MACpE,CACJ,CAuBO,IAAMC,aAAN,MAAMC,cACAC,OACAC,OAED,WAAAC,CAAYF,MAAoBC,OACpCE,MAAKH,MAASA,MACdG,MAAKF,MAASA,KAClB,CAqBA,SAAOG,CAAGJ,OACN,OAAO,IAAID,cAAaC,MAAOrD,iBAAiBqD,MAAO,GAAGR,oBAC9D,CASA,OAAAa,GACI,OAAOF,MAAKH,KAChB,CAUA,eAAAM,GACI,MAAMC,MAAQJ,MAAKF,MAAOO,eAC1B,GAAID,QAAU,KAAM,CAChB,MAAM,IAAIE,UAAU,GAAGjB,yCAC3B,CACA,OAAOe,KACX,CAgCA,SAAAG,GACI,OAAO9D,wBAAwBuD,MAAKF,MAAOU,UAAWR,MAAKF,MAAOW,SACtE,CAyBA,yBAAApC,CAA0BmB,QAAuB,CAAA,GAC7CF,mBAAmB,GAAGD,mCAAoCG,SAC1D,OAAOnB,0BACH2B,MAAKU,WAAYlB,QAAQmB,OAAS,GAClCnB,QAAQoB,MAAQZ,MAAKH,MAAOgB,aAAaC,KACzCd,KAAKG,kBAEb,CAWA,YAAAY,GACI,MAAMC,IAAMhB,KAAKG,kBACjB,OAAO7B,gBAAgB0B,MAAKU,WAAY,GAAIV,MAAKiB,YAAaD,KAAMA,IACxE,CAWA,SAAAE,CAAU1B,QAAuB,CAAA,GAC7BF,mBAAmB,GAAGD,mBAAoBG,SAC1C,OAAOlB,gBACH0B,MAAKU,WAAYlB,QAAQmB,OAAS,GAClCnB,QAAQoB,MAAQZ,MAAKH,MAAOgB,aAAaC,KACzCd,KAAKG,kBAEb,CAQA,cAAAgB,GACI,OAAOnB,KAAKkB,UAAU,CAAEP,MAAOX,MAAKH,MAAOuB,eAC/C,CAYA,WAAA7C,CAAY8C,SAAkB7B,QAAuB,CAAA,GACjDF,mBAAmB,GAAGD,qBAAsBG,SAC5C,OAAOjB,YACH8C,SACArB,MAAKU,WAAYlB,QAAQmB,OAAS,GAClCnB,QAAQoB,MAAQZ,MAAKH,MAAOgB,aAAaC,KACzCd,KAAKG,kBAEb,CAoBA,UAAA3B,CAAWgB,QAAuB,CAAA,GAC9BF,mBAAmB,GAAGD,oBAAqBG,SAC3C,OAAOhB,WACHwB,MAAKU,WAAYlB,QAAQmB,OAAS,GAClCnB,QAAQoB,MAAQZ,MAAKH,MAAOgB,aAAaC,KACzCd,KAAKG,kBAEb,CAqBA,kBAAAmB,CAAmBC,MACf,OAAOvB,MAAKwB,aAAcD,KAC9B,CAsBA,gBAAAE,GACI,MAAMC,QAAU1B,MAAK2B,QAAS3B,KAAKsB,mBAAmB,WAAY,gBAClE,MAAMM,QAAU5B,MAAK2B,QAAS3B,KAAKsB,mBAAmB,WAAY,gBAClE,MAAMO,MAAQ7B,MAAK2B,QAAS3B,KAAKsB,mBAAmB,SAAU,cAC9D,MAAO,CACHQ,IAAK9B,KAAKkB,UAAUQ,SACpBE,QAAS5B,KAAKkB,UAAUU,SACxBC,MAAO7B,KAAKkB,UAAUW,OACtBE,SAAU/B,KAAKxB,WAAWkD,SAC1BM,aAAchC,KAAKxB,WAAWoD,SAC9BK,WAAYjC,KAAKxB,WAAWqD,OAEpC,CAmCA,SAAAK,CAAU1C,QAAuB,CAAA,GAC7BF,mBAAmB,GAAGD,mBAAoBG,SAC1C,MAAMoC,QAAU5B,MAAKH,MAAOsC,YAC5B,MAAMvB,KAAOpB,QAAQoB,MAAQZ,MAAKH,MAAOgB,aAAaC,KACtD,MAAMH,MAAQnB,QAAQmB,OAAS,EAC/B,OAAOyB,OAAOC,OAAO,CACjBC,KAAMtC,MAAKF,MAAOyC,KAAKC,SACvBhC,QAAS/B,qBAAqB,EAAGuB,MAAKF,MAAO2C,sBAC7Cb,gBACAhB,UACAD,YACA+B,MAAOd,QAAUhB,KAAOD,OAEhC,CA8CA,SAAAgC,GACI,MAAML,KAAOtC,MAAKF,MAAOyC,KAAKK,SAC9B,IAAIpC,QAAU,EACd,IAAIqC,UAAY,EAChB,MAAMC,SAA+C,GACrD,MAAMC,UAAgD,GACtD,IAAA,MAAWC,UAAUhD,MAAKF,MAAOU,UAAW,CACxC,MAAMyC,MAAQjD,MAAKF,MAAOW,SAASuC,QACnC,GAAIC,OAAOC,YAAS,EAAW,CAC3B1C,SAAWyC,MAAMC,IACrB,MAAA,GACID,QAAU,OACRpF,oBAAoBmF,OAAOG,QAAUrF,oBAAoBkF,QAC7D,CACEF,SAASM,KAAK,CAAEC,KAAML,OAAOG,KAAMG,OAAQN,OAAOO,MACtD,CACA,MAAMC,QAAU9G,wBAAwBsG,QACxCH,WAAaW,SAASC,cAAgB,EACtC,MAAMC,YAAcV,OAAOW,YAC3B,IAAKD,YAAa,SAClB,MAAME,MAAQF,YAAYG,MAC1B,MAAMC,OAASN,SAASI,OAAS,EAGjC,GAAIG,OAAOC,UAAUJ,QAAUA,MAAQE,QAAUF,OAAS,EAAG,CACzD,MAAMK,MAAQ/E,iBAAiBwE,YAAYQ,cAAeN,MAAOE,QACjE,GAAIG,MAAO,CACPlB,UAAUK,KAAKa,MAAMlB,WACrBF,WAAaoB,MAAMpB,SACvB,CACJ,CACA,MAAMsB,aAAeT,YAAYU,mBACjC,GACID,oBAAiB,GACjBA,aAAaE,gBAAkBb,SAASc,0BAA0BD,cACpE,CACE,MAAMnB,KAAOrE,0BAA0BsF,cACvC,GAAIjB,KAAMH,UAAUK,KAAKF,KAC7B,CACJ,CACA,OAAO9D,WAAW,CACdmF,QAAS,CACL7B,MAAOJ,KAAO9B,QACd8B,UACA9B,gBACAgE,MAAOC,KAAKC,OAAOpC,KAAO9B,SAAW,KACrCsC,mBAEJD,oBACAE,UAAW5D,gBAAgB4D,YAEnC,CA0BA,WAAAnF,GACI,MAAM4C,QAAUR,MAAKF,MAAOU,UAC5B,MAAMmE,UAA6B,GACnC,IAAA,MAAW3B,UAAUxC,QAAS,CAC1B,MAAMoE,SAAWjI,iBAAiBqG,OAAQhD,MAAKF,MAAOW,SAASuC,SAC/D,GAAI4B,SAAUD,UAAUvB,KAAKwB,SACjC,CACA,OAAOhH,YAAYhB,eAAe4D,QAASR,MAAKF,MAAOW,UAAWkE,UACtE,CAkBA,iBAAAE,GACI,MAAMC,MAAQjI,mBACVmD,MAAKF,MAAOyC,KACZvC,MAAKF,MAAOiF,mBACZ/E,KAAKpC,cACLoC,MAAKF,MAAOW,UAEhB,OAAOqE,MAAME,SAAWlI,eAAesB,YAAY0G,MAAMpF,QAAUoF,KACvE,CAoBA,qBAAAG,CAAsBzF,QAAuB,CAAA,GACzC,OAAOQ,MAAKkF,SAAU1F,QAC1B,CAsBA,8BAAA2F,CACI3F,QAAoC,CAAA,GAEpC,OAAOQ,MAAKoF,kBAAmB5F,QACnC,CAkBA,mBAAA6F,GACI,OAAOrF,MAAKsF,SAChB,CAuBA,4BAAAC,CACI/F,QAAkC,CAAA,GAElC,OAAOQ,MAAKwF,gBAAiBhG,QACjC,CAqBA,oBAAAiG,CAAqBjG,QAAiC,CAAA,GAClD,OAAOQ,MAAK0F,SAAUlG,QAC1B,CAmBA,SAAAmG,GACI,OAAO1H,gBACHF,kBACIhB,kBAAkBiD,MAAKF,MAAOU,UAAWR,KAAKpC,cAAeoC,MAAKF,MAAOW,UACzET,MAAKF,MAAO8F,SACXC,MAASA,KAAKxC,MAG3B,CAmBA,aAAAtE,GACI,OAAOA,cACH/B,eAAegD,MAAKF,MAAOyC,KAAMvC,MAAKF,MAAOU,UAAWR,MAAKF,MAAOW,UAE5E,CA2BA,aAAA/C,GACI,MAAMoI,QAAiC,GACvC,IAAA,MAAW9C,UAAUhD,MAAKF,MAAOU,UAAW,CACxC,MAAMuF,OAAS/F,MAAKF,MAAOW,SAASuC,QACpC,MAAMC,MAAQhG,eAAe+C,MAAKF,MAAOkG,gBAAgBhD,QAAS+C,QAClE,IAAK9C,MAAO,SACZ6C,QAAQ1C,KAAK,CACTC,KAAML,OAAOG,KACbG,OAAQN,OAAOO,KACf0C,KAAMF,QAAQE,MAAQjD,OAAOO,KAC7B2C,QAASlD,OAAOmD,KAAO,MACvBC,QAAS1I,cAAcuF,OACvBoD,WAAYvH,mBAAmBmE,UAC3BA,MAAMqD,oBAAiB,EAAY,CAAA,EAAK,CAAEA,aAAcrD,MAAMqD,iBAC9DrD,MAAMsD,oBAAiB,EAAY,CAAA,EAAK,CAAEA,aAActD,MAAMsD,iBAC9DtD,MAAMuD,uBAAoB,EACxB,CAAA,EACA,CAAEA,gBAAiB,IAAKvD,MAAMuD,qBAChCvD,MAAMwD,sBAAmB,EACvB,CAAA,EACA,CAAEA,eAAgBxD,MAAMwD,iBAEtC,CACA,MAAMC,eAAiB3I,kBACnB+H,QACA9F,MAAKF,MAAO8F,SACXe,QAAWA,OAAOtD,MAEvB,MAAO,CACHyC,QAASY,eACThE,MAAO/E,iBACH+I,eAAeE,OAAQD,QAAWA,OAAOT,SAASW,IAAKF,QAAWA,OAAOP,UAGrF,CAoBA,uBAAA3I,CAAwB+B,QAA0B,CAAA,GAC9C,MAAMsH,YAAc9H,YAChB,GAAGK,iCACH,cACAG,QAAQsH,aAAe,GAE3B,OAAOrJ,wBACHP,yBACI8C,MAAKF,MAAOiF,mBACZ+B,YACA9G,KAAKpC,cACLoC,MAAKF,MAAOW,UAGxB,CAsBA,wBAAAsG,CACIvH,QAA8B,CAAA,GAE9B,OAAOQ,MAAKgH,YAAaxH,QAC7B,CAGA,SAAA0F,CAAU1F,SACN,MAAMsF,MAAQ9E,MAAKiH,cAAe,GAAG5H,+BAAgCG,SACrE,OAAOsF,MAAME,SAAWlI,eAAe6B,gBAAgBmG,MAAMpF,QAAWoF,KAC5E,CAGA,kBAAAM,CACI5F,SAEA,MAAMD,MAAQ,GAAGF,wCACjB,MAAM6H,YAAclI,YAAYO,MAAO,cAAeC,QAAQ0H,aAAe,GAC7E,MAAMpC,MAAQ9E,MAAKiH,cAAe1H,MAAOC,SACzC,OAAOsF,MAAME,SACPlI,eAAe4B,yBAAyB,IAAKoG,MAAMpF,MAAOwH,2BAC1DpC,KACV,CAGA,cAAAmC,CAAe1H,MAAeC,SAC1BF,mBAAmBC,MAAOC,SAC1B,OAAOrC,uBACH6C,MAAKF,MAAOyC,KACZvC,MAAKF,MAAOU,UACZ,IAAMR,KAAKpC,cACX,IACIoC,MAAKU,WAAYlB,QAAQmB,OAAS,IACjCnB,QAAQoB,MAAQZ,MAAKF,MAAOqH,kBAAoBnH,MAAKH,MAAOgB,aAAaC,MAC9Ed,MAAKF,MAAOW,SAEpB,CAOA,QAAA6E,GACI,MAAMR,MAAQ1H,qBACV4C,MAAKF,MAAOyC,KACZvC,MAAKF,MAAOU,UACZ,IAAMR,KAAKpC,cACXoC,MAAKF,MAAOW,UAEhB,OAAOqE,MAAME,SAAWlI,eAAeqB,cAAc2G,MAAMpF,QAAUoF,KACzE,CAGA,gBAAAU,CAAiBhG,SACb,MAAM4H,YAAcpI,YAChB,GAAGK,sCACH,cACAG,QAAQ4H,aAAe,GAE3B,MAAMtC,MAAQzH,8BACV2C,MAAKF,MAAOyC,KACZvC,MAAKF,MAAOU,UACZ,IAAMR,KAAKpC,cACXwJ,YACApH,MAAKF,MAAOW,UAEhB,OAAOqE,MAAME,SAAWlI,eAAekB,uBAAuB8G,MAAMpF,QAAUoF,KAClF,CAGA,SAAAY,CAAUlG,SACN,MAAM4H,YAAcpI,YAChB,GAAGK,8BACH,cACAG,QAAQ4H,aAAe,GAE3B,MAAMtC,MAAQxH,6BACV0C,MAAKF,MAAOyC,KACZvC,MAAKF,MAAOU,UACZ,IAAMR,KAAKpC,cACXwJ,YACApH,MAAKF,MAAOW,UAEhB,OAAOqE,MAAME,SAAWlI,eAAeoB,eAAe4G,MAAMpF,QAAUoF,KAC1E,CAGA,YAAAkC,CAAaxH,SACT,MAAMD,MAAQ,GAAGF,kCACjB,MAAMgI,KAAO,CACTD,YAAapI,YAAYO,MAAO,cAAeC,QAAQ4H,aAAe,GACtEF,YAAalI,YAAYO,MAAO,cAAeC,QAAQ0H,aAAe,GACtEJ,YAAa9H,YAAYO,MAAO,cAAeC,QAAQsH,aAAe,IAE1E,MAAMhC,MAAQvH,0BACVyC,MAAKF,MAAOiF,mBACZsC,KACArH,KAAKpC,cACLoC,MAAKF,MAAOW,UAEhB,OAAOqE,MAAME,SAAWlI,eAAe8B,mBAAmBkG,MAAMpF,QAAUoF,KAC9E,CAGA,aAAAtD,CAAcD,MACV,GAAIA,OAAS,WAAaA,OAAS,WAAaA,OAAS,QAAS,CAC9D,MAAM,IAAI+F,WACN,GAAGjI,2EAEX,CAEA,MAAMuB,KAAOZ,MAAKH,MAAOgB,aACzB,MAAMF,MAAQY,OAAS,QAAUvB,MAAKH,MAAOuB,cAAgB,EAC7D,MAAMmG,KAAOhG,OAAS,UAAYvB,MAAKH,MAAOsC,YAAc,EAC5D,IAAI/B,MAAsC,KAC1C,IAAIoH,YAA6B,KACjC,GAAIjG,OAAS,UAAW,CACpB,MAAMkG,OAASzH,MAAKF,MAAO4H,wBAC3B,IAAIC,WAA2B,KAC/B,IACIvH,MAAQJ,MAAKF,MAAOO,eACpBmH,YAAcpH,OAAOwH,SAAW,IACpC,CAAA,MAASC,OACL,KAAMA,iBAAiBC,OAAQ,MAAMD,MACrCF,WAAaE,KACjB,CACA,GAAIL,cAAgB,KAAM,CACtB,OAAOhK,iBAAiB,CACpB,CACIiC,MAAO,kBACPsI,OAAQN,OAAS,aAAe,UAChCpE,KAAMoE,QAAQtE,MAAQ,qBAClBsE,OAAS,CAAEnE,OAAQmE,OAAOlE,MAAS,CAAA,EACvCyE,QACIL,YAAYK,SACZ,kDACJC,OAAQR,OACF,CACIhI,MAAO,kBACPsI,OAAQ,aACR1E,KAAMoE,OAAOtE,KACbG,OAAQmE,OAAOlE,MAEnB,CACI9D,MAAO,kBACPsI,OAAQ,UACR1E,KAAM,qBAI5B,CACJ,CACA,MAAM6E,YAAc3G,OAAS,UAAYkD,KAAK0D,IAAIvH,KAAKE,KAAM0G,aAAgB5G,KAAKE,KAClF,MAAMpB,MAAQ0C,OAAOC,OAAO,CACxBzB,KAAMsH,YACNvH,YACA4G,KAAMvH,MAAKH,MAAOsC,YAAc+F,YAAcvH,QAElD,GAAIY,OAAS,UAAW,CACpB,IACIvB,KAAKkB,UAAUxB,MACnB,CAAA,MAASmI,OACL,KAAMA,iBAAiBP,YAAa,MAAMO,MAC1C,MAAMJ,OAASzH,MAAKF,MAAO4H,wBAC3B,MAAMjI,MACFW,QAAU,QAAU2D,OAAOqE,SAAShI,MAAMwH,UAAYxH,MAAMwH,QAAU,GAChE,mBACC7D,OAAOqE,SAAS1I,MAAMkB,OAASlB,MAAMkB,KAAO,EAC3C,gBACCmD,OAAOqE,SAASb,OAASA,KAAO,EAC/B,OACA,kBACd,MAAMc,YACF5I,QAAU,mBAAqBgI,OACzB,CAAEpE,KAAMoE,OAAOtE,KAAMG,OAAQmE,OAAOlE,MACpC,CAAA,EACV,OAAO/F,iBAAiB,CACpB,CACIiC,YACAsI,OAAQ,aACLM,YACHL,QAASH,MAAMG,QACfC,OAAQ,CAAExI,YAAOsI,OAAQ,aAAcM,eAGnD,CACJ,CACA,OAAOvL,eAAe4C,MAC1B,CAGA,QAAAiC,CAAY2G,OAA8BC,MACtC,GAAID,OAAO5I,QAAU,KAAM,CACvB,MAAM,IAAIY,UACN,GAAGjB,4BAA4BkJ,SAASD,OAAOE,OAAO3B,IAAK4B,OAAUA,MAAMT,SAASU,KAAK,SAEjG,CACA,OAAOJ,OAAO5I,KAClB,CAGA,WAAAgB,CAAYC,OACR,OAAOX,MAAKH,MAAOsC,YAAcxB,KACrC,CAGA,YAAAM,CAAaD,KACT,OAAOyD,KAAK0D,IAAInI,MAAKH,MAAOgB,aAAaC,KAAME,IAAI4G,QACvD,UACJjI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getBlueprintsForModule}from"./chunk-
|
|
1
|
+
import{getBlueprintsForModule}from"./chunk-LOWDDWDT.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent,requireString}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var blueprint_journal_names_default={MC_Overcharged:"Weapon_Overcharged",Scanner_LongRange:"Sensor_LongRange",Scanner_WideAngle:"Sensor_WideAngle"};var BLUEPRINT_JOURNAL_NAMES=deepFreeze(blueprint_journal_names_default);function resolveBlueprintForModule(moduleSymbol,blueprintSymbol){requireStringIfPresent(moduleSymbol,"resolveBlueprintForModule: moduleSymbol");const wanted=normalizeKey(requireString(blueprintSymbol,"resolveBlueprintForModule: blueprintSymbol"),"resolveBlueprintForModule: blueprintSymbol");const offered=getBlueprintsForModule(moduleSymbol);if(offered.some(id=>id.toLowerCase()===wanted))return blueprintSymbol;for(const id of offered){const journalName=BLUEPRINT_JOURNAL_NAMES[id];if(journalName!==void 0&&journalName.toLowerCase()===wanted)return id}return blueprintSymbol}export{resolveBlueprintForModule};//# sourceMappingURL=chunk-SDXUPP4P.js.map
|