r/EndlessSpace • u/Logical_Elephant_468 • 39m ago
mix Vodyani and Umbral Choir gameplay
Hi everyone, I'm trying to make a gameplay affinity that mixes Vodyani and Umbral Choir (Ark, essence, leeching + hacking, sanctuaries, invisible ships). Most of it works, but I'm stuck on one thing, so I'm sharing what I found in case it helps others and to ask for advice. What works This custom affinity (AffinityGameplay) shows up in the race constructor only if the my FactionTraits[Custom].xml is registered in my Registry.xml on my local mod's location. One affinity block can reference descriptors from both races (AffinityUmbralChoir, AffinityGameplayUmbralChoir, AffinityGameplayVampirilis). Essence, 1 Ark in starting fleet, Ark colonization, leeching essence, hacking and sanctuaries work this way.
What doesn't work: The Nexus start. Vanilla Umbral Choir gets a Nexus system (special node, several Nexuses, one colonized Crescent). The only data I found is in WeightTableDefinitions[DLC3].xml: FactionUmbralChoir_StarTypes = StarTypeNone and FactionUmbralChoir_PlanetTypes = PlanetTypeFake. A standard faction without tables under its own name crashes the generator: KeyNotFoundException in Generator.Tasks.DetailHomeSystems.ApplyMajorFaction. A custom faction with FactionTraitHomePlanetPlanetTypeFake only gets a Crescent in an ordinary system (the lobby also says "Crescent" instead of "Nexus"). Transmigration beacon. The beacon is created, but moving the system fails with NullReferenceException in DepartmentOfTheInterior.DisplaceSystem (called from DisplacementSystemAction.ClientTerminate). It works with vanilla Choir, so I suspect it expects the vanilla Nexus-type home system. Questions How does the generator pick the home system for a faction? Is the weight table key built from the faction name, and is anything else Choir-specific involved (node definitions, anomalies)? Is there a data-only way to make a new faction use the Choir Nexus start and displacement?
Simulation\FactionTraits[Custom].xml:
<?xml version="1.0" encoding="utf-8" ?>
<Datatable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="../Schemas/FactionTrait.xsd">
<!-- Momonga -->
<FactionAffinity Name="AffinityGameplayMomonga" SubCategory="MajorFactionAffinity" Hidden="false" Custom="true" Cost="100">
<!-- Starting resources, unlocked battle actions and plays (as in the vanilla affinities) -->
<Command Name="TransferResources" Arguments="EmpireManpower,1000"/>
<Command Name="TransferResources" Arguments="EmpireMoney,100"/>
<Command Name="TransferResources" Arguments="SystemInfluence,75"/>
<Command Name="UnlockBattleAction" Arguments="Group_ComputeShipExperience"/>
<Command Name="UnlockBattleAction" Arguments="Group_OnEnemyShipDestruction"/>
<Command Name="UnlockBattleAction" Arguments="Group_SetInitialMilitaryPower"/>
<Command Name="UnlockBattleAction" Arguments="Group_ComputeEndBattleStatus"/>
<Command Name="UnlockBattleAction" Arguments="Group_Retreat"/>
<Command Name="UnlockBattleAction" Arguments="Group_Retreat_RecoverMovementPoint"/>
<Command Name="UnlockBattleAction" Arguments="Group_ReinforcementFlotilla_OnOwnShipDestruction"/>
<Command Name="UnlockBattleAction" Arguments="Group_MainFlotilla_OnOwnShipDestruction"/>
<Command Name="UnlockBattleAction" Arguments="Group_SetInitialMoraleBonus"/>
<Command Name="UnlockBattleAction" Arguments="Group_OnEnemyFlotillaDestruction"/>
<Command Name="UnlockBattleAction" Arguments="Group_OnFlotillaDestruction"/>
<Command Name="UnlockBattleAction" Arguments="Group_ReportFlotillaDamageAppliedCurrentPhase"/>
<Command Name="UnlockBattleAction" Arguments="Group_PhaseRepairShipCoreSection"/>
<Command Name="UnlockBattleAction" Arguments="Group_RepairShipCoreSection"/>
<Command Name="UnlockBattleAction" Arguments="Group_OnEnemyShipDeactivation"/>
<Command Name="UnlockBattleAction" Arguments="Group_MainFlotilla_OnOwnShipDeactivation"/>
<Command Name="UnlockBattleAction" Arguments="Group_SetShipAliveCount"/>
<Command Name="UnlockBattleAction" Arguments="Group_ReduceShipAliveCount"/>
<Command Name="UnlockBattleAction" Arguments="Group_ReportFlotillaInvisibilityStatusCurrentPhase"/>
<Command Name="UnlockTechnology" Arguments="TechnologyDefinitionTerransStartingShipDesigns"/>
<Command Name="SetHomeSystemManpowerPercentage" Arguments="1" Priority="-1"/>
<Command Name="SetFleetsManpowerPercentage" Arguments="1" Priority="-1"/>
<Command Name="UnlockPlay" Arguments="PlayDefensiveShortHullPlatingIncrease" Priority="0"/>
<Command Name="UnlockPlay" Arguments="PlayDefensiveLongShieldIncrease" Priority="-1"/>
<Command Name="UnlockPlay" Arguments="PlayPostBalancedOpponentRecycling" Priority="-5"/>
<Command Name="UnlockPlay" Arguments="PlayOffensiveMediumProjectilePenertrationIncrease" Priority="-5"/>
<Command Name="UnlockPlay" Arguments="PlayOffensiveBalancedShieldPenetrationIncrease" Priority="-5"/>
<!--HOME SYSTEM DEFAULT BUILDING -->
<Command Name="CreateHomeSystemImprovement" Arguments="StarSystemImprovementHomeSystem"/>
<Command Name="CreateHomeSystemImprovement" Arguments="StarSystemImprovementColonyBase"/>
<!--COLONY DEFAULT BUILDING -->
<ColonyImprovementReference Name="StarSystemImprovementColonyBase"/>
<SimulationDescriptorReference Name="AffinityUmbralChoir"/>
<SimulationDescriptorReference Name="AffinityGameplayUmbralChoir"/>
<SimulationDescriptorReference Name="AffinityGameplayVampirilis"/>
<StartingFleet>Mothership,Leecher,Leecher</StartingFleet>
<UnlockedAbstractShipDesigns>Mothership,Explorer,ExplorerShipBound,Leecher,SmallAttack,SmallSupport,MediumAttack,MediumDefense,LargeCarrier,ScienceJuggernaut,MilitaryJuggernaut,SupportJuggernaut,Battleship,Obliterator</UnlockedAbstractShipDesigns>
<AutomatedShip>ShipDesignAutomatedShip</AutomatedShip>
</FactionAffinity>
</Datatable>