fix: 把被两个提交“优化”坏的督虫出生链路修回来

- 恢复 NodeSwarm 基础种族的 ARA_HiveMindDrone 注入(撤销 d69dc3b 引入的回归)
- Ootheca 与队列孵化统一改为 forceGenerateNewPawn=true,绕开 redress 路径跳过 startingHediffs
- 新出生督虫稳定携带 ARA_HiveMindDrone,不再靠运气触发
This commit is contained in:
2026-02-10 17:47:15 +08:00
parent 3ee4a60c4b
commit 34548bba61
6 changed files with 135 additions and 123 deletions

Binary file not shown.

View File

@@ -64,87 +64,87 @@
<li>ARA_TumorSpew</li>
</abilities>
</PawnKindDef>
<AlienRace.RaceSettings>
<defName>ARA_ArachnaeQueenSettings</defName>
<pawnKindSettings>
<startingColonists>
<li>
<pawnKindEntries>
<li>
<kindDefs>
<li>ARA_ArachnaeQueen</li>
</kindDefs>
<chance>100.0</chance>
</li>
</pawnKindEntries>
<factionDefs>
<li>ARA_New_Hive</li>
</factionDefs>
</li>
</startingColonists>
<alienwandererkinds>
<li>
<pawnKindEntries>
<li>
<kindDefs>
<li>ARA_ArachnaeQueen</li>
<li>ArachnaeNode_Race_ShieldHead</li>
<li>ArachnaeNode_Race_WeaponSmith</li>
<li>ArachnaeNode_Race_Fighter</li>
<li>ArachnaeNode_Race_Facehugger</li>
<li>ArachnaeNode_Race_Myrmecocystus</li>
<li>ArachnaeNode_Race_Smokepop</li>
<li>ArachnaeNode_Race_NeuroSwarm</li>
<li>ArachnaeNode_Race_Skyraider</li>
<li>ArachnaeNode_Race_Praetorian</li>
<li>ARA_MimicNematodeShamblerSwarmer</li>
</kindDefs>
<chance>0</chance>
</li>
</pawnKindEntries>
<factionDefs>
<li>ARA_New_Hive</li>
</factionDefs>
</li>
</alienwandererkinds>
<alienslavekinds>
<li>
<kindDefs>
<li>ARA_ArachnaeQueen</li>
<li>ArachnaeNode_Race_ShieldHead</li>
<li>ArachnaeNode_Race_WeaponSmith</li>
<li>ArachnaeNode_Race_Fighter</li>
<li>ArachnaeNode_Race_Facehugger</li>
<li>ArachnaeNode_Race_Myrmecocystus</li>
<li>ArachnaeNode_Race_Smokepop</li>
<li>ArachnaeNode_Race_NeuroSwarm</li>
<li>ArachnaeNode_Race_Skyraider</li>
<li>ArachnaeNode_Race_Praetorian</li>
<li>ARA_MimicNematodeShamblerSwarmer</li>
</kindDefs>
<chance>0</chance>
</li>
</alienslavekinds>
<alienrefugeekinds>
<li>
<kindDefs>
<li>ARA_ArachnaeQueen</li>
<li>ArachnaeNode_Race_ShieldHead</li>
<li>ArachnaeNode_Race_WeaponSmith</li>
<li>ArachnaeNode_Race_Fighter</li>
<li>ArachnaeNode_Race_Facehugger</li>
<li>ArachnaeNode_Race_Myrmecocystus</li>
<li>ArachnaeNode_Race_Smokepop</li>
<li>ArachnaeNode_Race_NeuroSwarm</li>
<li>ArachnaeNode_Race_Skyraider</li>
<li>ArachnaeNode_Race_Praetorian</li>
<li>ARA_MimicNematodeShamblerSwarmer</li>
</kindDefs>
<chance>0</chance>
</li>
</alienrefugeekinds>
</pawnKindSettings>
</AlienRace.RaceSettings>
<AlienRace.RaceSettings>
<defName>ARA_ArachnaeQueenSettings</defName>
<pawnKindSettings>
<startingColonists>
<li>
<pawnKindEntries>
<li>
<kindDefs>
<li>ARA_ArachnaeQueen</li>
</kindDefs>
<chance>100.0</chance>
</li>
</pawnKindEntries>
<factionDefs>
<li>ARA_New_Hive</li>
</factionDefs>
</li>
</startingColonists>
<alienwandererkinds>
<li>
<pawnKindEntries>
<li>
<kindDefs>
<li>ARA_ArachnaeQueen</li>
<li>ArachnaeNode_Race_ShieldHead</li>
<li>ArachnaeNode_Race_WeaponSmith</li>
<li>ArachnaeNode_Race_Fighter</li>
<li>ArachnaeNode_Race_Facehugger</li>
<li>ArachnaeNode_Race_Myrmecocystus</li>
<li>ArachnaeNode_Race_Smokepop</li>
<li>ArachnaeNode_Race_NeuroSwarm</li>
<li>ArachnaeNode_Race_Skyraider</li>
<li>ArachnaeNode_Race_Praetorian</li>
<li>ARA_MimicNematodeShamblerSwarmer</li>
</kindDefs>
<chance>0</chance>
</li>
</pawnKindEntries>
<factionDefs>
<li>ARA_New_Hive</li>
</factionDefs>
</li>
</alienwandererkinds>
<alienslavekinds>
<li>
<kindDefs>
<li>ARA_ArachnaeQueen</li>
<li>ArachnaeNode_Race_ShieldHead</li>
<li>ArachnaeNode_Race_WeaponSmith</li>
<li>ArachnaeNode_Race_Fighter</li>
<li>ArachnaeNode_Race_Facehugger</li>
<li>ArachnaeNode_Race_Myrmecocystus</li>
<li>ArachnaeNode_Race_Smokepop</li>
<li>ArachnaeNode_Race_NeuroSwarm</li>
<li>ArachnaeNode_Race_Skyraider</li>
<li>ArachnaeNode_Race_Praetorian</li>
<li>ARA_MimicNematodeShamblerSwarmer</li>
</kindDefs>
<chance>0</chance>
</li>
</alienslavekinds>
<alienrefugeekinds>
<li>
<kindDefs>
<li>ARA_ArachnaeQueen</li>
<li>ArachnaeNode_Race_ShieldHead</li>
<li>ArachnaeNode_Race_WeaponSmith</li>
<li>ArachnaeNode_Race_Fighter</li>
<li>ArachnaeNode_Race_Facehugger</li>
<li>ArachnaeNode_Race_Myrmecocystus</li>
<li>ArachnaeNode_Race_Smokepop</li>
<li>ArachnaeNode_Race_NeuroSwarm</li>
<li>ArachnaeNode_Race_Skyraider</li>
<li>ArachnaeNode_Race_Praetorian</li>
<li>ARA_MimicNematodeShamblerSwarmer</li>
</kindDefs>
<chance>0</chance>
</li>
</alienrefugeekinds>
</pawnKindSettings>
</AlienRace.RaceSettings>
<PawnKindDef ParentName="ArachnaeQueenBasePawnKind">
<defName>ArachnaeQueen_Race_Neurotyrant</defName>
<label>阿拉克涅灵吸种</label>
@@ -169,8 +169,8 @@
</apparelTags>
<apparelMoney>0</apparelMoney>
<abilities>
<li>ARA_Neurotyrant_Harvest</li>
<li>ARA_Neurotyrant_PsychicLoadDump</li>
<li>ARA_Neurotyrant_Harvest</li>
<li>ARA_Neurotyrant_PsychicLoadDump</li>
</abilities>
</PawnKindDef>
@@ -213,9 +213,9 @@
<li>Violent</li>
</requiredWorkTags>
<startingHediffs>
<li>
<def>ARA_HiveMindDrone</def>
</li>
<li>
<def>ARA_HiveMindDrone</def>
</li>
</startingHediffs>
<moveSpeedFactorByTerrainTag>
<li>
@@ -317,11 +317,11 @@
</categories>
</li>
</backstoryFiltersOverride>
<startingHediffs>
<li>
<def>ARA_RaceBaseSwarmProduceSwitchHediff</def>
</li>
</startingHediffs>
<startingHediffs>
<li>
<def>ARA_RaceBaseSwarmProduceSwitchHediff</def>
</li>
</startingHediffs>
<apparelTags>
</apparelTags>
<apparelMoney>0</apparelMoney>
@@ -340,11 +340,11 @@
</categories>
</li>
</backstoryFiltersOverride>
<startingHediffs>
<li>
<def>ARA_RaceBaseSwarmProduceSwitchHediff</def>
</li>
</startingHediffs>
<startingHediffs>
<li>
<def>ARA_RaceBaseSwarmProduceSwitchHediff</def>
</li>
</startingHediffs>
<apparelMoney>0</apparelMoney>
</PawnKindDef>
<PawnKindDef Name="ArachnaeNode_Race_Skyraider" ParentName="ArachnaeNodeABasePawnKind">
@@ -369,11 +369,11 @@
<abilities>
<li>ARA_Skyraider_jump</li>
</abilities>
<startingHediffs>
<li>
<def>ARA_RaceBaseSwarmProduceSwitchHediff</def>
</li>
</startingHediffs>
<startingHediffs>
<li>
<def>ARA_RaceBaseSwarmProduceSwitchHediff</def>
</li>
</startingHediffs>
<apparelMoney>0</apparelMoney>
<modExtensions>
<li Class="ArachnaeSwarm.SuperCarryExtension">
@@ -428,11 +428,11 @@
</categories>
</li>
</backstoryFiltersOverride>
<startingHediffs>
<li>
<def>ARA_RaceBaseSwarmProduceSwitchHediff</def>
</li>
</startingHediffs>
<startingHediffs>
<li>
<def>ARA_RaceBaseSwarmProduceSwitchHediff</def>
</li>
</startingHediffs>
<apparelMoney>0</apparelMoney>
</PawnKindDef>
<PawnKindDef Name="ARA_MimicNematodeShamblerBase" ParentName="ArachnaeNodeABasePawnKind" Abstract="True">
@@ -477,9 +477,9 @@
<value>3.0</value>
</li>
</moveSpeedFactorByTerrainTag>
<abilities>
<li>ARA_Suicide_Fast_Ability</li>
</abilities>
<abilities>
<li>ARA_Suicide_Fast_Ability</li>
</abilities>
</PawnKindDef>
<PawnKindDef ParentName="ARA_InsectKindBase">
<defName>ArachnaeBase_Race_Larva</defName>
@@ -637,9 +637,9 @@
</dessicatedBodyGraphicData>
</li>
</lifeStages>
<abilities>
<li>ARA_Baneling_Suicide_Ability</li>
</abilities>
<abilities>
<li>ARA_Baneling_Suicide_Ability</li>
</abilities>
</PawnKindDef>
<PawnKindDef ParentName="ARA_InsectKindBase">
<defName>ArachnaeBase_Race_Empsuicider</defName>
@@ -683,7 +683,7 @@
</li>
</lifeStages>
<abilities>
<li>ARA_Locust_AcidSprayBurst</li>
<li>ARA_Locust_AcidSprayBurst</li>
</abilities>
</PawnKindDef>
@@ -694,8 +694,8 @@
<defaultFactionType>PlayerColony</defaultFactionType>
<forceDeathOnDowned>false</forceDeathOnDowned>
<forceNoDeathNotification>false</forceNoDeathNotification>
<immuneToGameConditionEffects>true</immuneToGameConditionEffects>
<collidesWithPawns>false</collidesWithPawns>
<immuneToGameConditionEffects>true</immuneToGameConditionEffects>
<collidesWithPawns>false</collidesWithPawns>
<combatPower>500</combatPower>
<lifeStages>
<li>
@@ -713,8 +713,8 @@
</dessicatedBodyGraphicData>
</li>
</lifeStages>
<abilities>
<li>ARA_Ability_SlayerCharge</li>
</abilities>
<abilities>
<li>ARA_Ability_SlayerCharge</li>
</abilities>
</PawnKindDef>
</Defs>

View File

@@ -648,6 +648,7 @@
<comps>
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
<hediffs>
<li>ARA_HiveMindDrone</li>
<li>ARA_HiveStrength_Low</li>
<li>ARA_Hive_Cannot_Speak</li>
</hediffs>
@@ -2064,4 +2065,4 @@
<li Class="CompProperties_DrugAddict"/> -->
</comps>
</AlienRace.ThingDef_AlienRace>
</Defs>
</Defs>

View File

@@ -115,7 +115,10 @@ namespace ArachnaeSwarm
{
if (order.spawnUntilTick > 0 && Find.TickManager.TicksGame >= order.spawnUntilTick)
{
Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(order.entry.pawnKind, parent.Faction));
Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(
order.entry.pawnKind,
parent.Faction,
forceGenerateNewPawn: true));
if (pawn != null) GenPlace.TryPlaceThing(pawn, parent.Position, parent.Map, ThingPlaceMode.Near);
return true;
}
@@ -200,4 +203,4 @@ namespace ArachnaeSwarm
}
}
}
}
}

View File

@@ -355,7 +355,10 @@ namespace ArachnaeSwarm
{
if (order.config?.pawnKind == null) return;
Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(order.config.pawnKind, parent.Faction));
Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(
order.config.pawnKind,
parent.Faction,
forceGenerateNewPawn: true));
if (pawn != null)
{
ApplyQualityEffects(pawn, order.QualityPercent, order.config);

View File

@@ -339,7 +339,11 @@ namespace ArachnaeSwarm
if (incubatingPawnKind == null) return;
float finalQuality = QualityPercent;
var pawn = PawnGenerator.GeneratePawn(incubatingPawnKind, Faction);
var request = new PawnGenerationRequest(
incubatingPawnKind,
Faction,
forceGenerateNewPawn: true);
var pawn = PawnGenerator.GeneratePawn(request);
ApplyQualityEffects(pawn, finalQuality);
GenSpawn.Spawn(pawn, Position, Map);
@@ -564,6 +568,7 @@ namespace ArachnaeSwarm
// 首先添加中子通量Gizmo最重要的控制
if (Faction == Faction.OfPlayer)
{
yield return new Gizmo_PawnProgressBar(this);
yield return new Gizmo_NeutronFlux(this);
}
// 然后是基础Gizmo但过滤一些不需要的