Entities preview: focus on energy generation (part 2)
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.
| Slot | Mass fraction | Tag |
|---|---|---|
| VACUUM_VESSEL | 0.35/0.31/0.39 | STRUCTURE_CONTAINMENT |
| SUPPORT_FRAME | 0.15/0.13/0.17 | STRUCTURE_SUPPORT |
| TOROIDAL_MAGNET_COILS | 0.20/0.18/0.22 | MAGNETIC_CONTAINMENT |
| PLASMA_HEATING_SYSTEM | 0.15/0.13/0.17 | ENERGY_GENERATION |
| CENTRAL_SOLENOID | 0.10/0.09/0.11 | ELECTROMAGNETIC_CONTROL |
| DIVERTOR_PLATES | 0.08/0.07/0.09 | PARTICLE_ABSORPTION |
| FEEDBACK_SENSORS | 0.05/0.04/0.06 | PLASMA_DETECTION |
| CRYOGENIC_COOLING | 0.02/0.01/0.03 | TEMPERATURE_REGULATION |
| Slot | Mass fraction | Tag |
|---|---|---|
| SUPER_RADIANT_SCATTERER | 0.3/0.26/0.23 | STRUCTURE_CONTAINMENT |
| SUPPORT_FRAME | 0.15/0.13/0.17 | STRUCTURE_SUPPORT |
| ERGOSPHERE_INJECTOR | 0.15/0.13/0.17 | PARTICLE_TRANSPORT |
| FRAME_DRAG_SENSOR | 0.10/0.09/0.11 | FIELD_DETECTION |
| TORQUE_BUFFER | 0.10/0.09/0.11 | FORCE_DAMPING |
| ROTATIONAL_ENERGY_EXTRACTOR | 0.05/0.04/0.06 | ENERGY_CONVERSION |
| MATTER_INPUT_STABILIZER | 0.02/0.01/0.03 | MASS_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.
| Symbol | Name | Type | Unit | Description |
|---|---|---|---|---|
QUA | Quality | Design | Dimensionless | The overall craftsmanship or inherent excellence of the entity, encompassing material purity and structural precision. It influences durability, efficiency, and resistance to degradation over time. |
MIND | Minimum density | Design | kg/m3 | Minimum density that can be sustained before internal structure begins to degrade or suffer performance penalties. |
MAXD | Maximum density | Design | kg/m3 | Maximum density that can be sustained before internal structure loses coherence or suffers performance penalties. |
DNSN | Density sensitivity | Design | Dimensionless | Degree to which performance degrades when operating away from the optimal density range, controlling how sharply efficiency, stability, or integrity respond to density deviations. |
SFSN | Surface sensitivity | Design | Dimensionless | Extent to which performance is influenced by surface-related effects when density deviates, capturing how geometry and exposed area amplify penalties or benefits. |
DOOP | Density out of range penalty | Design | Dimensionless | Scaling factor defining severity of performance loss when density falls outside safe bounds, representing structural brittleness or tolerance to off-nominal configurations. |
ING | Integrity | Design/Runtime | J/kg | The 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. |
INGM | Integrity minimum efficiency | Design | Dimensionless | The lowest fraction of performance the unit can still provide when integrity approaches zero. |
INGE | Integrity efficiency exponent | Design | Dimensionless | The rate at which the unit approaches its minimum performance level. |
LOAD | Load | Runtime | Normalised | The 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. |
ENEF | Energy efficiency | Design/runtime | Normalised | Fraction of input or output energy successfully converted into intended input/output, capturing losses due to heat, resistance, or inefficiencies across operational processes. |
THWT | Thermal threshold | Design/runtime | J/kg/K | The thermal mass and soak capacity. Defines the energy limit a structure can absorb before suffering permanent damage. |
MTIM | Base manufacturing time | Design | s/kg | Base manufacturing time of the design under standard production conditions, before faction, skill, equipment, or situational modifiers are applied. |
MDIF | Base manufacturing difficulty | Design | Dimensionless | Base manufacturing difficulty of the design under standard production conditions, before faction, skill, equipment, or situational modifiers are applied. |
CTIM | Manufacturing time | Design | s/kg | Actual crafting time for this faction and crafting context, after applying recipe, expertise, crafter skill, equipment, and other relevant production modifiers. |
CDIF | Manufacturing difficulty | Design | Dimensionless | Actual 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.
| Attribute | Expression |
|---|---|
MIND | 4800 - 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) |
MAXD | 8200 + 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) |
DNSN | 0.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) |
SFSN | 0.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) |
DOOP | 0.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 |
INGM | 0.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) |
INGE | 1.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 |
MTIM | 24.0 + 16.0 * (e.attr('DENS') / math.sqrt(e.attr('MIND') * e.attr('MAXD'))) + 0.00009 * e.attr('MASS') |
MDIF | 1.08 * (dc['CHAL'] + (dc['VHRD'] - dc['CHAL']) * norm(e.attr('DENS') / math.sqrt(e.attr('MIND') * e.attr('MAXD')), 0.16, 0.36)) |
CTIM | e.attr('MTIM') * e.attr('MASS') * (1.00 - 0.50 * norm(fsk('PTIX'), 0.0, 0.012)) |
CDIF | e.attr('MDIF') * (1.00 - 0.28 * norm(fsk('PDFX'), 0.0, 0.010)) |
| Attribute | Expression |
|---|---|
MIND | 1500 - 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) |
MAXD | 3400 + 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) |
DNSN | 0.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) |
SFSN | 0.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) |
DOOP | 0.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 |
INGM | 0.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) |
INGE | 2.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 |
MTIM | 36.0 + 28.0 * (e.attr('DENS') / math.sqrt(e.attr('MIND') * e.attr('MAXD'))) + 0.00006 * e.attr('MASS') |
MDIF | 1.08 * (dc['EXHD'] + (dc['CRIT'] - dc['EXHD']) * norm(e.attr('DENS') / math.sqrt(e.attr('MIND') * e.attr('MAXD')), 0.21, 0.44)) |
CTIM | e.attr('MTIM') * e.attr('MASS') * (1.00 - 0.50 * norm(fsk('PTIX'), 0.0, 0.012)) |
CDIF | e.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:
| Symbol | Name | Type | Unit | Description |
|---|---|---|---|---|
FCRT | Fuel consumption rate | Design/runtime | kg/s/kg | The maximum fuel mass consumed per unit of mass of the consumer. |
And for each variant:
| Attribute | Expression |
|---|---|
FCRT | 2.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) |
| Attribute | Expression |
|---|---|
FCRT | 4.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:
or:
which can be simplified to:
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.