A lot of people are upset over power 2.0, but ignore that Schema conveniently allowed us to change our own configs with a text editor. This is a detailed study of blockconfig, and what the various change options.
I will not cover anything in the configs that is marked as old, or to be removed.
Before we continue, grab Notepad++ to edit this file. It's very, very useful for making it human-readable.
Starmade essentially just uses some very fancy math to work out how blocks work.
Some terminology, before we continue.
(LIN) Linear: A straight line, essentially. There is no number curve.
(EXP) Exponential: Increases by a factor of itself each time. As it goes up, it rapidly increases.
(LOG) Logarithmic: The inverse of EXP.
Starmade uses DOUBLE or LEVELED variations of all of these. If you've passed HS math, you know what these do. Some googling otherwise will help you.
Schema has also done a wonderful job providing comments within the blockconfig.xml file, so figuring these things out is even easier!
This is a ear-notes version, aka, line-numbers and a brief explanation. I will not hold your hand with this, because i assume you can read!
Anything aligned LEFT is old. Anything aligned CENTER is relevant.
In case you need a file path:
I will not cover anything in the configs that is marked as old, or to be removed.
Before we continue, grab Notepad++ to edit this file. It's very, very useful for making it human-readable.
Starmade essentially just uses some very fancy math to work out how blocks work.
Some terminology, before we continue.
(LIN) Linear: A straight line, essentially. There is no number curve.
(EXP) Exponential: Increases by a factor of itself each time. As it goes up, it rapidly increases.
(LOG) Logarithmic: The inverse of EXP.
Starmade uses DOUBLE or LEVELED variations of all of these. If you've passed HS math, you know what these do. Some googling otherwise will help you.
Schema has also done a wonderful job providing comments within the blockconfig.xml file, so figuring these things out is even easier!
This is a ear-notes version, aka, line-numbers and a brief explanation. I will not hold your hand with this, because i assume you can read!
Anything aligned LEFT is old. Anything aligned CENTER is relevant.
5-114: Old power configs. Ignore these.
These variables determine shield capacity PER CAPACITOR, and recharge PER RECHARGER BLOCK, and the BASE SHIELD CAPACITY of a SHIP CORE.
I literally don't need to explain these. Thanks, Schema!
Schema is even nice enough to explain the math formulae here. Calculators!
Again, mostly explained by the cat-god himself. Reactor Stabilization goes from 0 to 1 in the code, it seems, so it's a decimal. 0.25 is 25%.
...no explanation required! See. This is really simple, if you guys would read...
115-309: New power, new shields.
<ShieldLocalCapacityPerBlock>250</ShieldLocalCapacityPerBlock>
<ShieldLocalRechargePerBlock>25</ShieldLocalRechargePerBlock>
<ShieldLocalDefaultCapacity>0</ShieldLocalDefaultCapacity>
These variables determine shield capacity PER CAPACITOR, and recharge PER RECHARGER BLOCK, and the BASE SHIELD CAPACITY of a SHIP CORE.
These variables control shield radius calculation: How it is calculated, and what each block increases the radius by. As you can see here, shield radius increases exponentially with shield recharge group size.<ShieldLocalRadiusCalcStyle>EXP</ShieldLocalRadiusCalcStyle> <!-- LINEAR, EXP, LOG -->
<ShieldLocalDefaultRadius>10</ShieldLocalDefaultRadius>
<!-- LINEAR -->
<ShieldLocalRadiusPerRechargeBlock>0.1</ShieldLocalRadiusPerRechargeBlock>
<!-- EXP -->
<ShieldLocalRadiusExpMult>15.0</ShieldLocalRadiusExpMult>
<ShieldLocalRadiusExp>0.3</ShieldLocalRadiusExp>
<!-- LOG -->
<ShieldLocalRadiusLogFactor>20.0</ShieldLocalRadiusLogFactor>
<ShieldLocalRadiusLogOffset>0.0</ShieldLocalRadiusLogOffset>
<ShieldUpkeepPerSecondOfTotalCapacity>0.02</ShieldUpkeepPerSecondOfTotalCapacity>
<ShieldLocalPowerConsumptionPerRechargePerSecondResting>0.4</ShieldLocalPowerConsumptionPerRechargePerSecondResting>
<ShieldLocalPowerConsumptionPerRechargePerSecondCharging>0.8</ShieldLocalPowerConsumptionPerRechargePerSecondCharging>
<ShieldLocalRechargeUnderFireModeSec>30.0</ShieldLocalRechargeUnderFireModeSec> <!-- how long after being hit a recharge nerf based on shield status applies -->
<ShieldLocalRechargeUnderFireMinPercent>0.5</ShieldLocalRechargeUnderFireMinPercent> <!-- minimum recharge under fire -->
<ShieldLocalRechargeUnderFireStartAtCharged>1.0</ShieldLocalRechargeUnderFireStartAtCharged> <!-- the nerf starts (100% recharge) at a shild this value percent -->
<ShieldLocalRechargeUnderFireEndAtCharged>0.20</ShieldLocalRechargeUnderFireEndAtCharged> <!-- the nerf reaches its maximum (ShieldLocalRechargeUnderFireMinPercent) at a shild this value percent -->
<ShieldLocalOnZeroShieldsRechargePreventionSec>10.0</ShieldLocalOnZeroShieldsRechargePreventionSec>
<ShieldLocalHitAllOverlapping>true</ShieldLocalHitAllOverlapping>
<ShieldLocalMaxCapacityGroupsPerLocalShield>20</ShieldLocalMaxCapacityGroupsPerLocalShield>
These variables control shield recharge, shield power consumption while recharging and at rest, how much they recharge under fire, how long they are down when shield HP hits zero, if overlapping shields are hit or not, and the max amount of capacitors block PER ship.
<ReactorRebootMinCooldownSec>15</ReactorRebootMinCooldownSec> <!-- cooldown to reboot active reactor when damage is taken to the active reactor -->
<ReactorRebootLogFactor>2</ReactorRebootLogFactor>
<ReactorRebootLogOffset>-2.5</ReactorRebootLogOffset>
<ReactorRebootCooldownInSecPerMissingHpPercent>15</ReactorRebootCooldownInSecPerMissingHpPercent> <!-- cooldown to reboot active reactor when damage is taken to the active reactor -->
<ReactorConduitPowerConsuptionPerSec>0.0</ReactorConduitPowerConsuptionPerSec> <!-- conduit power usage -->
<ReactorSwitchCooldownSec>10</ReactorSwitchCooldownSec> <!-- time in seconds to wait until active reacor can be switched again -->
<ReactorRechargePercentPerSecond>1.0</ReactorRechargePercentPerSecond> <!-- percentage of power capacity recharged per second -->
<ReactorRechargeMultiplierWhenEmpty>1.0</ReactorRechargeMultiplierWhenEmpty> <!-- multiplied with recharget when power was 0 last cycle -->
<ReactorMainCountMultiplier>1.0</ReactorMainCountMultiplier> <!-- for capacity, multiply amount of main reactor blocks with this (capacity = min(reactorBlocks, stabilization)) -->
<ReactorPowerCapacityMultiplier>100.0</ReactorPowerCapacityMultiplier> <!-- multiply capacity end result with this -->
<ReactorStabilizationMultiplier>1.0</ReactorStabilizationMultiplier> <!-- for capacity, multiply amount of main reactor blocks with this (capacity = min(reactorBlocks, stabilization)). stabilization is +1 for each optimal distance stabilizer, falls off when closer -->
<ReactorExplosionStabilityMargin>0.5</ReactorExplosionStabilityMargin> <!-- 1 == 100% stability. Anything lower than this value (ecluding the value iself) explodes-->
<ReactorExplosionStabilityLossMult>2.0</ReactorExplosionStabilityLossMult> <!-- multiplies stabilization loss factor for damage calculation -->
<ReactorExplosionCountMaxPercent>0.001</ReactorExplosionCountMaxPercent> <!-- max explosions per group, % of group size-->
<ReactorExplosionCountPerBlocksInGroup>0.1</ReactorExplosionCountPerBlocksInGroup> <!-- explosions per group, % of group size -->
<ReactorExplosionCountMax>10</ReactorExplosionCountMax> <!-- max explosions per group -->
<ReactorExplosionsPerSecond>2</ReactorExplosionsPerSecond> <!-- explosions per second -->
<ReactorExplosionRadiusPerBlocksInGroup>0.001</ReactorExplosionRadiusPerBlocksInGroup>> <!-- radius of a explosion based on the group's member count, minimum 1 -->
<ReactorExplosionRadiusMax>5.0</ReactorExplosionRadiusMax> <!-- capped at 64 -->
<ReactorExplosionDamagePerBlocksInGroup>5.0</ReactorExplosionDamagePerBlocksInGroup> <!-- damage of a explosion based on the group's member count -->
<ReactorExplosionDamageMax>10000.0</ReactorExplosionDamageMax> <!-- capped at max signed integer -->
<ReactorModuleDischargeMargin>0.9</ReactorModuleDischargeMargin> <!-- at which percentage of resting consumption available a module (weapon) starts to discharge -->
I literally don't need to explain these. Thanks, Schema!
<!-- LINEAR -->
<ReactorStabilizerDistancePerMainReactorBlock>0.5</ReactorStabilizerDistancePerMainReactorBlock> <!-- ReactorStabilizerStartingDistance + blocks * ReactorStabilizerDistancePerMainReactorBlock -->
<!-- EXP -->
<ReactorStabilizerDistanceExpMult>10.0</ReactorStabilizerDistanceExpMult> <!-- ReactorStabilizerStartingDistance + (blocks ^ ReactorStabilizerDistanceExp) * ReactorStabilizerDistanceExp -->
<ReactorStabilizerDistanceExp>0.333</ReactorStabilizerDistanceExp>
<ReactorStabilizerDistanceExpSoftcapMult>0.5</ReactorStabilizerDistanceExpSoftcapMult>
<ReactorStabilizerDistanceExpSoftcapExp>2.5</ReactorStabilizerDistanceExpSoftcapExp>
<ReactorStabilizerDistanceExpSoftCapBlocksStart>150000</ReactorStabilizerDistanceExpSoftCapBlocksStart>
<!-- LOG -->
<ReactorStabilizerDistanceLogFactor>1</ReactorStabilizerDistanceLogFactor> <!-- ReactorStabilizerStartingDistance + (Log10(blocks) + ReactorStabilizerDistanceLogOffset) * ReactorStabilizerDistanceLogFactor -->
<ReactorStabilizerDistanceLogOffset>1</ReactorStabilizerDistanceLogOffset>
<!-- LOG_LEVELED -->
<ReactorStabilizerDistanceLogLeveledSteps>true</ReactorStabilizerDistanceLogLeveledSteps> <!-- true: Optimal Distance only changes only at level change. false: linear between levels -->
<ReactorStabilizerDistanceLogLeveledMultiplier>10</ReactorStabilizerDistanceLogLeveledMultiplier> <!-- ReactorStabilizerStartingDistance + (ReactorLevel^ReactorStabilizerDistanceLogLeveledExp * ReactorStabilizerDistanceLogLeveledMultiplier) -->
<ReactorStabilizerDistanceLogLeveledExp>2</ReactorStabilizerDistanceLogLeveledExp> <!-- ReactorStabilizerStartingDistance + (ReactorLevel^ReactorStabilizerDistanceLogLeveledExp * ReactorStabilizerDistanceLogLeveledMultiplier) -->
Schema is even nice enough to explain the math formulae here. Calculators!
<ReactorStabilizerStartingDistance>-7.5</ReactorStabilizerStartingDistance> <!-- inital distance -->
<ReactorStabilizerLinearFalloffOne>1.0</ReactorStabilizerLinearFalloffOne> <!-- percentage of distance at which or farther away the stabilizer counts as 1 -->
<ReactorStabilizerLinearFalloffZero>0.0</ReactorStabilizerLinearFalloffZero> <!-- percentage of distance at which or closer the stabilizer counts as 0 -->
<ReactorStabilizerFreeMainReactorBlocks>10</ReactorStabilizerFreeMainReactorBlocks> <!-- amount of free stabilization added -->
<ReactorStabilizerDistanceTotalMult>2.0</ReactorStabilizerDistanceTotalMult>
<ReactorStabilizerGroupingProximity>3.0</ReactorStabilizerGroupingProximity>
<ReactorStablizationBonus2>1.0</ReactorStablizationBonus2> <!-- bonus stabilization stacking based on percentage of biggest in group -->
<ReactorStablizationBonus3>1.0</ReactorStablizationBonus3> <!-- bonus stabilization stacking based on percentage of biggest in group -->
<ReactorStablizationBonus4>0.8</ReactorStablizationBonus4> <!-- bonus stabilization stacking based on percentage of biggest in group -->
<ReactorStablizationBonus5>0.6</ReactorStablizationBonus5> <!-- bonus stabilization stacking based on percentage of biggest in group -->
<ReactorStablizationBonus6>0.5</ReactorStablizationBonus6> <!-- bonus stabilization stacking based on percentage of biggest in group -->
<ReactorStabilizerGroupsMax>20</ReactorStabilizerGroupsMax> <!-- max stabilizer groups used (ordered by size biggest first) -->
<ReactorStabilizationPowerEffectiveFull>0.25</ReactorStabilizationPowerEffectiveFull> <!-- reactor stab% (or lower) at which power efficiency is falling -->
Again, mostly explained by the cat-god himself. Reactor Stabilization goes from 0 to 1 in the code, it seems, so it's a decimal. 0.25 is 25%.
<ReactorLowStabilizationExtraDamageStart>0.9999</ReactorLowStabilizationExtraDamageStart> <!-- stabilization where extra damage starts -->
<ReactorLowStabilizationExtraDamageEnd>0.0</ReactorLowStabilizationExtraDamageEnd> <!-- stabilization where extra damage reaches max (and stays at that) -->
<ReactorLowStabilizationExtraDamageStartDamage>0.0</ReactorLowStabilizationExtraDamageStartDamage> <!-- extra damage (1+x) at start -->
<ReactorLowStabilizationExtraDamageEndDamage>2.0</ReactorLowStabilizationExtraDamageEndDamage> <!-- extra damage (1+x) at end (max) -->
<ReactorStabilizationEnergyStreamHitCooldownPerDamageInSec>0.0005</ReactorStabilizationEnergyStreamHitCooldownPerDamageInSec> <!-- seconds of reactor-nerf(cooldown) per damage hit on the stream -->
<ReactorStabilizationEnergyStreamHitMinCooldownInSec>0.01</ReactorStabilizationEnergyStreamHitMinCooldownInSec> <!-- minimum secs of reactor-nerf(cooldown)-->
<ReactorStabilizationEnergyStreamHitMaxCooldownInSec>60.0</ReactorStabilizationEnergyStreamHitMaxCooldownInSec> <!-- maximum secs of reactor-nerf(cooldown)-->
<ReactorStabilizationEnergyStreamHitMaxCooldownReactorEfficiency>0.2</ReactorStabilizationEnergyStreamHitMaxCooldownReactorEfficiency> <!-- power regeneration percent the reactor runs at during reactor-nerf(cooldown) -->
<ReactorStabilizationEnergyStreamDistance>-1</ReactorStabilizationEnergyStreamDistance> <!-- minimum distance at which stabilizer stream appears -->
...no explanation required! See. This is really simple, if you guys would read...
In case you need a file path:
Code:
Starmade/Starmade/data/config/blockBehaviorConfig.xml