Entities preview: focus on energy generation (part 2)

Published on
Last changed on

Continued from this post.

Energy generation: slots

To avoid an unbearable explosion of text and so an even longer post, we will be focusing on two variants: ENERGY_GENERATOR_FUSION_TOKAMAK and ENERGY_GENERATOR_SINGULARITY_VELOCITY.

ENERGY_GENERATOR_FUSION_TOKAMAK slots
SlotMass fractionTag
VACUUM_VESSEL0.35/0.31/0.39STRUCTURE_CONTAINMENT
SUPPORT_FRAME0.15/0.13/0.17STRUCTURE_SUPPORT
TOROIDAL_MAGNET_COILS0.20/0.18/0.22MAGNETIC_CONTAINMENT
PLASMA_HEATING_SYSTEM0.15/0.13/0.17ENERGY_GENERATION
CENTRAL_SOLENOID0.10/0.09/0.11ELECTROMAGNETIC_CONTROL
DIVERTOR_PLATES0.08/0.07/0.09PARTICLE_ABSORPTION
FEEDBACK_SENSORS0.05/0.04/0.06PLASMA_DETECTION
CRYOGENIC_COOLING0.02/0.01/0.03TEMPERATURE_REGULATION
ENERGY_GENERATOR_SINGULARITY_VELOCITY slots
SlotMass fractionTag
SUPER_RADIANT_SCATTERER0.3/0.26/0.23STRUCTURE_CONTAINMENT
SUPPORT_FRAME0.15/0.13/0.17STRUCTURE_SUPPORT
ERGOSPHERE_INJECTOR0.15/0.13/0.17PARTICLE_TRANSPORT
FRAME_DRAG_SENSOR0.10/0.09/0.11FIELD_DETECTION
TORQUE_BUFFER0.10/0.09/0.11FORCE_DAMPING
ROTATIONAL_ENERGY_EXTRACTOR0.05/0.04/0.06ENERGY_CONVERSION
MATTER_INPUT_STABILIZER0.02/0.01/0.03MASS_CONTROL

When you combine the above slots with the emergence expressions from below, customisation possibilities become vast and many types of different decisions can be taken at design time. Thanks to materials and slot mass fractions, one can ask the following questions:

  • Do I want the most robust possible version I can build? Even if that means less energetic performance?
  • Or do I want to try and maximise energy efficiency? Or fuel consumption?
  • What skills has my faction invested in? For which entity types/skill combination? What kind of (small but visible) advantage does that bring me?
  • What/who manufactures this at runtime? What relevant skill levels do they enjoy while doing so and what impact will this have?

Etc, etc, etc!

Energy generation: global attributes

This class inherits global attributes which do not need explaining (duh :-)):

  • Mass
  • Volume
  • Density
  • Age
  • Longevity

Energy generation: unit-wide attributes

The class inherits attributes assigned to all unit-layer entities.

Unit layer attributes
SymbolNameTypeUnitDescription
QUAQualityDesignDimensionlessThe overall craftsmanship or inherent excellence of the entity, encompassing material purity and structural precision. It influences durability, efficiency, and resistance to degradation over time.
MINDMinimum densityDesignkg/m3Minimum density that can be sustained before internal structure begins to degrade or suffer performance penalties.
MAXDMaximum densityDesignkg/m3Maximum density that can be sustained before internal structure loses coherence or suffers performance penalties.
DNSNDensity sensitivityDesignDimensionlessDegree to which performance degrades when operating away from the optimal density range, controlling how sharply efficiency, stability, or integrity respond to density deviations.
SFSNSurface sensitivityDesignDimensionlessExtent to which performance is influenced by surface-related effects when density deviates, capturing how geometry and exposed area amplify penalties or benefits.
DOOPDensity out of range penaltyDesignDimensionlessScaling factor defining severity of performance loss when density falls outside safe bounds, representing structural brittleness or tolerance to off-nominal configurations.
INGIntegrityDesign/RuntimeJ/kgThe amount of damage energy the unit can absorb per unit mass before becoming non-viable. It tracks the presence of physical degradation, fractures, or other internal damage that threatens the entity's existence.
INGMIntegrity minimum efficiencyDesignDimensionlessThe lowest fraction of performance the unit can still provide when integrity approaches zero.
INGEIntegrity efficiency exponentDesignDimensionlessThe rate at which the unit approaches its minimum performance level.
LOADLoadRuntimeNormalisedThe active demand placed on a system's throughput, heat management, or energy flow. It is the measure of how hard the system is working relative to its design limits.
ENEFEnergy efficiencyDesign/runtimeNormalisedFraction of input or output energy successfully converted into intended input/output, capturing losses due to heat, resistance, or inefficiencies across operational processes.
THWTThermal thresholdDesign/runtimeJ/kg/KThe thermal mass and soak capacity. Defines the energy limit a structure can absorb before suffering permanent damage.
MTIMBase manufacturing timeDesigns/kgBase manufacturing time of the design under standard production conditions, before faction, skill, equipment, or situational modifiers are applied.
MDIFBase manufacturing difficultyDesignDimensionlessBase manufacturing difficulty of the design under standard production conditions, before faction, skill, equipment, or situational modifiers are applied.
CTIMManufacturing timeDesigns/kgActual crafting time for this faction and crafting context, after applying recipe, expertise, crafter skill, equipment, and other relevant production modifiers.
CDIFManufacturing difficultyDesignDimensionlessActual crafting difficulty for this faction and crafting context, after applying recipe, expertise, crafter skill, equipment, and other relevant production modifiers.

The upcoming (I know it takes forever…) site upgrade will of course provide more details about those attributes, especially when it comes to game engine mechanics (formulae, etc). All in due time! :-)

At this stage, it is important to know one thing: each variant has different values and value ranges for each attribute, based on slots (see below). Let's continue with our two variants as examples, ENERGY_GENERATOR_FUSION_TOKAMAK and ENERGY_GENERATOR_SINGULARITY_VELOCITY, and compare how their attributes emerge from both:

  • base values (the floors and spans)
  • drivers and shapers, based on materials and mass fractions

Refer to this post for more explanation.

ENERGY_GENERATOR_FUSION_TOKAMAK attribute emergence expressions
AttributeExpression
MIND4800 - 1800 * norm(sawhm('COHS', ['CORE_ASSEMBLY','SUPPORT_FRAME']) * math.sqrt(sawhm('INTC', ['LIQUID_METAL_COOLANT','NEUTRON_REFLECTOR'])) * math.sqrt(sawhm('ENTR', ['SAFETY_INJECTOR','TRANS_MUTATION_LAYER'])) * (0.7 + 0.3 * sawhm('SELT', ['CORE_ASSEMBLY','SAFETY_INJECTOR'])), 0.16, 0.36)
MAXD8200 + 10800 * norm(sawhm('STRI', ['CORE_ASSEMBLY','SUPPORT_FRAME']) * math.sqrt(sawhm('THSR', ['CORE_ASSEMBLY','LIQUID_METAL_COOLANT'])) * math.sqrt(sawhm('COHS', ['CORE_ASSEMBLY','NEUTRON_REFLECTOR'])) * (0.7 + 0.3 * sawhm('FDGS', ['NEUTRON_REFLECTOR','SAFETY_INJECTOR'])), 0.17, 0.46)
DNSN0.74 - 0.30 * norm(sawhm('DEFT', ['CORE_ASSEMBLY','SUPPORT_FRAME']) * math.sqrt(sawhm('FDGS', ['LIQUID_METAL_COOLANT','NEUTRON_REFLECTOR'])) * (0.7 + 0.3 * sawhm('SELT', ['SAFETY_INJECTOR','TRANS_MUTATION_LAYER'])), 0.20, 0.54)
SFSN0.64 - 0.22 * norm(sawhm('SFIP', ['LIQUID_METAL_COOLANT','NEUTRON_REFLECTOR']) * math.sqrt(sawhm('FORA', ['CORE_ASSEMBLY','SAFETY_INJECTOR'])) * (0.7 + 0.3 * sawhm('PERC', ['LIQUID_METAL_COOLANT','TRANS_MUTATION_LAYER'])), 0.18, 0.50)
DOOP0.86 - 0.10 * norm(sawhm('SELT', ['CORE_ASSEMBLY','SAFETY_INJECTOR']) * math.sqrt(sawhm('DEFT', ['NEUTRON_REFLECTOR','POWER_DENSITY_OPTIMIZER'])) * (0.7 + 0.3 * sawhm('COHS', ['CORE_ASSEMBLY','SUPPORT_FRAME'])), 0.14, 0.42)
ING(3.2e5 + 4.2e5 * norm(sawhm('STRI', ['CORE_ASSEMBLY','SUPPORT_FRAME']) * math.sqrt(sawhm('COHS', ['CORE_ASSEMBLY','LIQUID_METAL_COOLANT'])) * math.sqrt(sawhm('DEFT', ['NEUTRON_REFLECTOR','SAFETY_INJECTOR'])) * (0.7 + 0.3 * sawhm('RADT', ['TRANS_MUTATION_LAYER','CORE_ASSEMBLY'])), 0.16, 0.44)) * rho_mod
INGM0.16 + 0.24 * norm(sawhm('DEFT', ['CORE_ASSEMBLY','SUPPORT_FRAME']) * math.sqrt(sawhm('SELT', ['SAFETY_INJECTOR','POWER_DENSITY_OPTIMIZER'])) * (0.7 + 0.3 * sawhm('COHS', ['CORE_ASSEMBLY','LIQUID_METAL_COOLANT'])), 0.14, 0.44)
INGE1.82 - 0.22 * norm(sawhm('DEFT', ['CORE_ASSEMBLY','SUPPORT_FRAME']) * math.sqrt(sawhm('SELT', ['SAFETY_INJECTOR','POWER_DENSITY_OPTIMIZER'])) * (0.7 + 0.3 * sawhm('FDGS', ['NEUTRON_REFLECTOR','TRANS_MUTATION_LAYER'])), 0.14, 0.34)
ENEF(0.56 + 0.20 * norm(sawhm('ENSM', ['PLASMA_HEATING_SYSTEM','TOROIDAL_MAGNET_COILS']) * math.sqrt(sawhm('SIGF', ['FEEDBACK_SENSORS','CENTRAL_SOLENOID'])) * math.sqrt(sawhm('THTK', ['DIVERTOR_PLATES','VACUUM_VESSEL'])) * (0.7 + 0.3 * sawhm('FDGS', ['TOROIDAL_MAGNET_COILS','CENTRAL_SOLENOID'])), 0.16, 0.44)) * rho_mod
THWT(2300 + 6100 * norm(sawhm('THSR', ['CORE_ASSEMBLY','LIQUID_METAL_COOLANT','NEUTRON_REFLECTOR']) * math.sqrt(sawhm('ENSM', ['POWER_DENSITY_OPTIMIZER','LIQUID_METAL_COOLANT'])) * math.sqrt(sawhm('ENTR', ['CORE_ASSEMBLY','SAFETY_INJECTOR'])) * (0.7 + 0.3 * sawhm('RADT', ['TRANS_MUTATION_LAYER','CORE_ASSEMBLY'])), 0.15, 0.44)) * rho_mod
MTIM24.0 + 16.0 * (e.attr('DENS') / math.sqrt(e.attr('MIND') * e.attr('MAXD'))) + 0.00009 * e.attr('MASS')
MDIF1.08 * (dc['CHAL'] + (dc['VHRD'] - dc['CHAL']) * norm(e.attr('DENS') / math.sqrt(e.attr('MIND') * e.attr('MAXD')), 0.16, 0.36))
CTIMe.attr('MTIM') * e.attr('MASS') * (1.00 - 0.50 * norm(fsk('PTIX'), 0.0, 0.012))
CDIFe.attr('MDIF') * (1.00 - 0.28 * norm(fsk('PDFX'), 0.0, 0.010))
ENERGY_GENERATOR_SINGULARITY_VELOCITY attribute emergence expressions
AttributeExpression
MIND1500 - 650 * norm(sawhm('COHS', ['SUPER_RADIANT_SCATTERER','SUPPORT_FRAME']) * math.sqrt(sawhm('FDGS', ['FRAME_DRAG_SENSOR','MATTER_INPUT_STABILIZER'])) * math.sqrt(sawhm('ENTR', ['ERGOSPHERE_INJECTOR','ROTATIONAL_ENERGY_EXTRACTOR'])) * (0.7 + 0.3 * sawhm('SELT', ['TORQUE_BUFFER','MATTER_INPUT_STABILIZER'])), 0.16, 0.24)
MAXD3400 + 7600 * norm(sawhm('STRI', ['SUPER_RADIANT_SCATTERER','SUPPORT_FRAME']) * math.sqrt(sawhm('THSR', ['TORQUE_BUFFER','ROTATIONAL_ENERGY_EXTRACTOR'])) * math.sqrt(sawhm('COHS', ['SUPER_RADIANT_SCATTERER','TORQUE_BUFFER'])) * (0.7 + 0.3 * sawhm('FDGS', ['FRAME_DRAG_SENSOR','MATTER_INPUT_STABILIZER'])), 0.16, 0.42)
DNSN0.92 - 0.22 * norm(sawhm('FDGS', ['FRAME_DRAG_SENSOR','MATTER_INPUT_STABILIZER']) * math.sqrt(sawhm('DEFT', ['SUPER_RADIANT_SCATTERER','SUPPORT_FRAME'])) * (0.7 + 0.3 * sawhm('SIGF', ['FRAME_DRAG_SENSOR','ERGOSPHERE_INJECTOR'])), 0.20, 0.68)
SFSN0.74 - 0.18 * norm(sawhm('SFIP', ['TORQUE_BUFFER','SUPER_RADIANT_SCATTERER']) * math.sqrt(sawhm('FORA', ['ERGOSPHERE_INJECTOR','MATTER_INPUT_STABILIZER'])) * (0.7 + 0.3 * sawhm('PERC', ['ERGOSPHERE_INJECTOR','MATTER_INPUT_STABILIZER'])), 0.16, 0.40)
DOOP0.58 - 0.08 * norm(sawhm('SELT', ['TORQUE_BUFFER','MATTER_INPUT_STABILIZER']) * math.sqrt(sawhm('FDGS', ['FRAME_DRAG_SENSOR','ERGOSPHERE_INJECTOR'])) * (0.7 + 0.3 * sawhm('COHS', ['SUPER_RADIANT_SCATTERER','SUPPORT_FRAME'])), 0.14, 0.34)
ING(2.6e5 + 3.1e5 * norm(sawhm('STRI', ['SUPER_RADIANT_SCATTERER','SUPPORT_FRAME']) * math.sqrt(sawhm('COHS', ['SUPER_RADIANT_SCATTERER','TORQUE_BUFFER'])) * math.sqrt(sawhm('DEFT', ['ERGOSPHERE_INJECTOR','MATTER_INPUT_STABILIZER'])) * (0.7 + 0.3 * sawhm('FDGS', ['FRAME_DRAG_SENSOR','MATTER_INPUT_STABILIZER'])), 0.16, 0.46)) * rho_mod
INGM0.06 + 0.10 * norm(sawhm('DEFT', ['SUPER_RADIANT_SCATTERER','SUPPORT_FRAME']) * math.sqrt(sawhm('SELT', ['TORQUE_BUFFER','MATTER_INPUT_STABILIZER'])) * (0.7 + 0.3 * sawhm('COHS', ['SUPER_RADIANT_SCATTERER','ERGOSPHERE_INJECTOR'])), 0.12, 0.24)
INGE2.08 - 0.14 * norm(sawhm('DEFT', ['SUPER_RADIANT_SCATTERER','SUPPORT_FRAME']) * math.sqrt(sawhm('FDGS', ['FRAME_DRAG_SENSOR','MATTER_INPUT_STABILIZER'])) * (0.7 + 0.3 * sawhm('SELT', ['TORQUE_BUFFER','MATTER_INPUT_STABILIZER'])), 0.14, 0.20)
ENEF(0.86 + 0.14 * norm(sawhm('ENSM', ['ROTATIONAL_ENERGY_EXTRACTOR','SUPER_RADIANT_SCATTERER']) * math.sqrt(sawhm('SIGF', ['FRAME_DRAG_SENSOR','ERGOSPHERE_INJECTOR'])) * math.sqrt(sawhm('FDIR', ['ROTATIONAL_ENERGY_EXTRACTOR','SUPER_RADIANT_SCATTERER'])) * (0.7 + 0.3 * sawhm('FDGS', ['FRAME_DRAG_SENSOR','MATTER_INPUT_STABILIZER'])), 0.16, 0.56)) * rho_mod
THWT(2000 + 5000 * norm(sawhm('THSR', ['TORQUE_BUFFER','ROTATIONAL_ENERGY_EXTRACTOR','SUPER_RADIANT_SCATTERER']) * math.sqrt(sawhm('ENSM', ['ROTATIONAL_ENERGY_EXTRACTOR','SUPER_RADIANT_SCATTERER'])) * math.sqrt(sawhm('ENTR', ['SUPER_RADIANT_SCATTERER','FRAME_DRAG_SENSOR'])) * (0.7 + 0.3 * sawhm('FDGS', ['FRAME_DRAG_SENSOR','MATTER_INPUT_STABILIZER'])), 0.14, 0.42)) * rho_mod
MTIM36.0 + 28.0 * (e.attr('DENS') / math.sqrt(e.attr('MIND') * e.attr('MAXD'))) + 0.00006 * e.attr('MASS')
MDIF1.08 * (dc['EXHD'] + (dc['CRIT'] - dc['EXHD']) * norm(e.attr('DENS') / math.sqrt(e.attr('MIND') * e.attr('MAXD')), 0.21, 0.44))
CTIMe.attr('MTIM') * e.attr('MASS') * (1.00 - 0.50 * norm(fsk('PTIX'), 0.0, 0.012))
CDIFe.attr('MDIF') * (1.00 - 0.28 * norm(fsk('PDFX'), 0.0, 0.010))

Energy generation: class attributes

Because of the entity_class == role equivalency, the class also is assigned one extra attribute 100% specific to it:

Class attributes
SymbolNameTypeUnitDescription
FCRTFuel consumption rateDesign/runtimekg/s/kgThe maximum fuel mass consumed per unit of mass of the consumer.

And for each variant:

ENERGY_GENERATOR_FUSION_TOKAMAK FCRT attribute emergence expression
AttributeExpression
FCRT2.6e-9 + 1.8e-9 * norm(sawhm('ENSM', ['PLASMA_HEATING_SYSTEM','TOROIDAL_MAGNET_COILS']) * math.sqrt(sawhm('SIGF', ['FEEDBACK_SENSORS','CENTRAL_SOLENOID'])) * math.sqrt(sawhm('FDGS', ['TOROIDAL_MAGNET_COILS','CENTRAL_SOLENOID'])) * (0.7 + 0.3 * sawhm('PERC', ['VACUUM_VESSEL','DIVERTOR_PLATES'])), 0.16, 0.42)
ENERGY_GENERATOR_SINGULARITY_VELOCITY FCRT attribute emergence expression
AttributeExpression
FCRT4.8e-11 + 7.2e-11 * norm(sawhm('ENSM', ['ROTATIONAL_ENERGY_EXTRACTOR','SUPER_RADIANT_SCATTERER']) * math.sqrt(sawhm('FDIR', ['ROTATIONAL_ENERGY_EXTRACTOR','SUPER_RADIANT_SCATTERER'])) * math.sqrt(sawhm('SIGF', ['FRAME_DRAG_SENSOR','ERGOSPHERE_INJECTOR'])) * (0.7 + 0.3 * sawhm('FDGS', ['FRAME_DRAG_SENSOR','MATTER_INPUT_STABILIZER'])), 0.16, 0.56)

FCRT is an intensive attribute; so to get the total (extensive) power output of a reactor, multiply its value by the mass of the reactor and obtain a value in kg/s. Multiply this by the energy density of the fuel (expressed in J/kg) and you get a final maximum power output:

FCRTmassenergy density

or:

kgskgkgJkg

which can be simplified to:

Js

which can be simplified to good old Watts!

Taking a 1,000 kg velocity reactor, using fuel whose energy density is 3.6 ⋅ 1019 J/kg, using materials to obtain ENEF = 0.93 and FCRT = 8.4 ⋅ 10-11, the power output is 2.81 ⋅ 1012 Watts. Not too bad for a 1-tonne engine!

The QUA attribute comes on top of this: given it is by default 1.0, a lower or higher quality manufacturing would result in a slightly different total power output.
Good meta: a faction can choose to spend experience points in a skill that increases the chance of high-quality manufacturing, among many other things!

And finally at runtime, a player may decide to:

  • throttle the reactor because power needs throughout the ship/station are not that great.
  • push it beyond 100% regime, because emergency power is sorely needed right here right now go faster you stupid piece of junk. In other words, call Scotty and beg him to reverse the polarisation of the triple laser-beam antimatter buffer. Or something like that 8-}.

Continued here.

Please signin to add your comment.