diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 9bbea60..7f0b94a 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml index 5205640..ca99351 100644 --- a/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml +++ b/1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml @@ -1070,6 +1070,7 @@ true false true + -50
  • (1, 0.7)
  • @@ -1197,6 +1198,43 @@ --> + + ARA_Genestealer_EjectOrgans + + 畸变种引发目标强烈的突变,使其器官全部外翻到表面,以供虫群采集——这对目标来说几乎是必死的。该技能只能对非虫群的殖民者、囚犯和奴隶释放。 + ArachnaeSwarm/UI/Abilities/ARA_Genestealer_EjectOrgans + 1 + false + true + Mote_HoraxSmallSpellWarmup + HoraxianAbilityCasting + AnomalyAbilityWarmup + CastAbilityOnThingMelee + + Verb_CastAbilityTouch + false + -1 + 3 + + true + false + false + false + + + +
  • + 饮食 + true + Food + 1 + 营养值不足,需要进食 +
  • +
  • + -75 +
  • +
    +
    diff --git a/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml b/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml index 1fe62d8..c10d955 100644 --- a/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml +++ b/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml @@ -883,7 +883,7 @@
  • ARA_Genestealer_ExtractGene
  • ARA_Genestealer_InjectGenes
  • - +
  • ARA_Genestealer_EjectOrgans
  • diff --git a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml index b0387b7..cc400aa 100644 --- a/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml +++ b/1.6/1.6/Defs/HediffDefs/ARA_Hediffs_HiveMind.xml @@ -230,10 +230,20 @@ 0.5
  • + + 1 + 10 + 1 +
  • 0.4 + + 1 + 10 + 1 +
  • 0.8 @@ -244,6 +254,11 @@ 0.25
  • + + 1 + 10 + 1 + diff --git a/1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml b/1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml index 91d07f3..83f0c16 100644 --- a/1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml +++ b/1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml @@ -23,7 +23,7 @@ ARA_Base_Technology - 解锁虫群的基础科技,允许孵化基本的辅虫和武装器官。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n解锁虫群的基础科技,允许孵化基本的辅虫和武装器官。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 100 0.00 3.20 @@ -31,7 +31,7 @@ ARA_Technology_1WMT - 允许女皇种和工艺种进化到下一个阶段。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种和工艺种进化到下一个阶段。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 3000 4.50 3.20 @@ -49,7 +49,7 @@ ARA_Technology_2WMT - 允许女皇种和工艺种进化到下一个阶段。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种和工艺种进化到下一个阶段。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 7000 9.00 3.20 @@ -63,7 +63,7 @@ ARA_Technology_6VXI - 使拥有酸囊的虫族允许喷射强酸击退敌人。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n使拥有酸囊的虫族允许喷射强酸击退敌人。 150 1.00 0.90 @@ -75,7 +75,7 @@ ARA_Technology_7VXI - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 300 2.00 0.90 @@ -87,7 +87,7 @@ ARA_Technology_8VXI - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 1250 5.50 0.90 @@ -102,7 +102,7 @@ ARA_Technology_9VXI - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 2000 10.00 1.50 @@ -117,7 +117,7 @@ ARA_Technology_10VXI - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 3000 11.00 1.50 @@ -129,7 +129,7 @@ ARA_Technology_11VXI - 允许建造天灾酸烧炮组织,一种强大的防御设施,不仅能解决成片的来犯之敌,也可以跨越地图发起打击。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许建造天灾酸烧炮组织,一种强大的防御设施,不仅能解决成片的来犯之敌,也可以跨越地图发起打击。 3000 12.00 0.90 @@ -143,7 +143,7 @@ ARA_Technology_1THD - 允许工艺种孵化新的灵能闪电系武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的灵能闪电系武器。 2500 7.50 2.70 @@ -156,7 +156,7 @@ ARA_Technology_1KYC - 允许女皇种孵化新的虫族——战士种。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种孵化新的虫族——战士种。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 150 1.00 5.40 @@ -168,7 +168,7 @@ ARA_Technology_4KYC - 允许女皇种孵化新的虫族——原虫种,一种可以寄生在别的种族身上以控制它们的特殊督虫。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种孵化新的虫族——原虫种,一种可以寄生在别的种族身上以控制它们的特殊督虫。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 200 1.00 4.90 @@ -180,7 +180,7 @@ ARA_Technology_2KYC - 允许女皇种孵化新的虫族——空天种,敏捷而致命的精锐虫族,拥有以飞行姿态穿梭于战场的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种孵化新的虫族——空天种,敏捷而致命的精锐虫族,拥有以飞行姿态穿梭于战场的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 1600 5.50 4.30 @@ -192,7 +192,7 @@ ARA_Technology_5KYC - 允许女皇种孵化新的虫族——迷雾种,一种拥有厚重甲壳的大型督虫,可以释放烟雾、阻燃剂和召唤虫族增援的信息素以协助虫群进行集群冲击。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种孵化新的虫族——迷雾种,一种拥有厚重甲壳的大型督虫,可以释放烟雾、阻燃剂和召唤虫族增援的信息素以协助虫群进行集群冲击。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 800 5.50 4.80 @@ -204,7 +204,7 @@ ARA_Technology_6KYC - 允许女皇种孵化新的虫族——织域种,一种寿命长且拥有强大灵能的特殊虫族,不仅能协助虫群的科研工作,也是一个强大的施法者。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种孵化新的虫族——织域种,一种寿命长且拥有强大灵能的特殊虫族,不仅能协助虫群的科研工作,也是一个强大的施法者。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 800 6.50 2.70 @@ -216,7 +216,7 @@ ARA_Technology_7KYC - 允许女皇种孵化新的虫族——禁卫种,一种寿命较其他虫族更长的精锐虫族,拥有优秀的远程作战能力和社交能力,同时也可以作为指挥官指挥虫群。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种孵化新的虫族——禁卫种,一种寿命较其他虫族更长的精锐虫族,拥有优秀的远程作战能力和社交能力,同时也可以作为指挥官指挥虫群。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 2800 10.00 3.80 @@ -228,7 +228,7 @@ ARA_Technology_6MEN - 允许女皇种孵化新的虫族——拟线体,一种出生时躯体便已经被阿拉克涅拟线种寄生的虫族,便宜廉价并且可以快速得到的炮灰,倒是没什么纪律性就是了。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许女皇种孵化新的虫族——拟线体,一种出生时躯体便已经被阿拉克涅拟线种寄生的虫族,便宜廉价并且可以快速得到的炮灰,倒是没什么纪律性就是了。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 1800 7.50 2.10 @@ -241,7 +241,7 @@ ARA_Technology_4DIL - 允许工艺种在织物茧孵化新的织物。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种在织物茧孵化新的织物。 250 1.00 1.50 @@ -253,7 +253,7 @@ ARA_Technology_5DIL - 允许工艺种在织物茧孵化新的织物。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种在织物茧孵化新的织物。 800 6.50 3.80 @@ -265,7 +265,7 @@ ARA_Technology_6DIL - 允许工艺种在织物茧孵化新的织物。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种在织物茧孵化新的织物。 800 5.50 3.80 @@ -277,7 +277,7 @@ ARA_Technology_7DIL - 允许工艺种在织物茧孵化新的织物。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种在织物茧孵化新的织物。 1000 10.00 4.80 @@ -289,7 +289,7 @@ ARA_Technology_8DIL - 允许工艺种在织物茧孵化新的织物。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种在织物茧孵化新的织物。 1800 11.00 4.80 @@ -302,7 +302,7 @@ ARA_Technology_5PAV - 允许工艺种孵化新的武器,并允许部分带毒针的虫族进行毒针喷射。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器,并允许部分带毒针的虫族进行毒针喷射。 200 1.00 0.30 @@ -314,7 +314,7 @@ ARA_Technology_6PAV - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 1000 5.50 0.30 @@ -329,7 +329,7 @@ ARA_Technology_7PAV - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 1800 10.00 0.30 @@ -344,7 +344,7 @@ ARA_Technology_7XPAV - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 2000 11.00 0.30 @@ -356,7 +356,7 @@ ARA_Technology_8PAV - 允许虫族建造一种强大的防御设施,具有强大的穿甲能力和较高的射速,专擅于对抗重甲目标。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造一种强大的防御设施,具有强大的穿甲能力和较高的射速,专擅于对抗重甲目标。 2500 12.00 0.30 @@ -370,7 +370,7 @@ ARA_Technology_2MEL - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 600 5.50 2.70 @@ -382,7 +382,7 @@ ARA_Technology_3MEL - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 1200 10.00 0.90 @@ -398,7 +398,7 @@ ARA_Technology_5ESS - 允许阿拉克涅虫群建造特殊的活体建筑,将俘虏投入以产出精华素。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许阿拉克涅虫群建造特殊的活体建筑,将俘虏投入以产出精华素。 250 1.00 4.40 @@ -410,7 +410,7 @@ ARA_Technology_8POD - 允许虫族建造一种特殊的辅虫,可以将物品和虫族以空投的方式送到大地图上的其他地方,不需要燃料。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造一种特殊的辅虫,可以将物品和虫族以空投的方式送到大地图上的其他地方,不需要燃料。 200 2.00 3.90 @@ -422,7 +422,7 @@ ARA_Technology_1NPT - 允许虫族建造一个中央营养供给设施,它可以自动为链接到的、需要营养的建筑自动补充营养。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造一个中央营养供给设施,它可以自动为链接到的、需要营养的建筑自动补充营养。 1800 11.00 0.90 @@ -434,7 +434,7 @@ ARA_Technology_5SHL - 允许虫族建造一种可以提供直射光源以供植物生长的特殊菌瘤。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造一种可以提供直射光源以供植物生长的特殊菌瘤。 250 1.00 2.10 @@ -446,7 +446,7 @@ ARA_Technology_6SHL - 允许虫族建造一种可以控制房间温度的特殊固定辅虫。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造一种可以控制房间温度的特殊固定辅虫。 500 1.00 3.90 @@ -458,7 +458,7 @@ ARA_Technology_1TUN - 允许虫族建造一种可以通过挖掘地道连接两地的特殊固定辅虫,以在两地间快速传输人员和物资。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造一种可以通过挖掘地道连接两地的特殊固定辅虫,以在两地间快速传输人员和物资。 2500 10.00 2.10 @@ -473,7 +473,7 @@ ARA_Technology_6GUT - 允许虫利用活体钜菌的催化能力,使虫群可以建造一系列产出建筑。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫利用活体钜菌的催化能力,使虫群可以建造一系列产出建筑。 1000 6.50 0.90 @@ -488,10 +488,10 @@ ARA_Technology_2NPT - 允许虫族建造用于存放和消化猎物的茧,溶解猎物为阿拉克涅营养供给塔网络提供额外的生物质传输效率和孵化速度。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造用于存放和消化猎物的茧,溶解猎物为阿拉克涅营养供给塔网络提供额外的生物质传输效率和孵化速度。 2000 - 12.00 - 3.80 + 13.00 + 2.10 ARA_ResearchBench
  • ARA_Technology_1NPT
  • @@ -500,10 +500,10 @@ ARA_Technology_3NPT - 允许虫族建造生产阿拉克涅蜜晶糕的巢穴,通过分解虫蜜来生产可食用的蜜晶糕。这种在巢穴内加工过的食物可以帮助虫群抵御冷血动物的影响,并且软糯的口感让非虫族殖民者也能乐在其中。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造生产阿拉克涅蜜晶糕的巢穴,通过分解虫蜜来生产可食用的蜜晶糕。这种在巢穴内加工过的食物可以帮助虫群抵御冷血动物的影响,并且软糯的口感让非虫族殖民者也能乐在其中。 2000 - 13.00 - 3.80 + 14.00 + 2.10 ARA_ResearchBench
  • ARA_Technology_2NPT
  • @@ -512,7 +512,7 @@ ARA_Technology_4NPT - 允许虫族建造孵化池。一种专用于批量生产虫族的孵化场地。孵化池的孵化效率比孵化茧更高。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造孵化池。一种专用于批量生产虫族的孵化场地。孵化池的孵化效率比孵化茧更高。 1800 12.00 2.10 @@ -525,7 +525,7 @@ ARA_Technology_8CPE - 允许虫族在菌毯上种植一种食用作物,可以依靠菌毯和土地的营养成长,以供巢穴获取生物质。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族在菌毯上种植一种食用作物,可以依靠菌毯和土地的营养成长,以供巢穴获取生物质。 250 1.00 2.70 @@ -537,7 +537,7 @@ ARA_Technology_9CPE - 允许虫族在菌毯上种植一种特殊的作物,会成长为拥有攻击性、向敌人发射毒刺的真菌聚合体。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族在菌毯上种植一种特殊的作物,会成长为拥有攻击性、向敌人发射毒刺的真菌聚合体。 600 6.50 0.30 @@ -550,7 +550,7 @@ ARA_Technology_6SPV - 允许工艺种孵化新的武器。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许工艺种孵化新的武器。 800 5.50 1.50 @@ -562,7 +562,7 @@ ARA_Technology_7SPV - 允许虫族建造一种强大的防御设施,能够向进犯的敌军投射以自杀式袭击为核心的爆裂种辅虫。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许虫族建造一种强大的防御设施,能够向进犯的敌军投射以自杀式袭击为核心的爆裂种辅虫。 2500 12.00 1.50 @@ -579,7 +579,7 @@ ARA_Technology_2MED - 允许蜜罐种使用拟线种寄生的能力,并在医药茧中解锁拟线种抑制剂的制作。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许蜜罐种使用拟线种寄生的能力,并在医药茧中解锁拟线种抑制剂的制作。 1600 6.50 2.10 @@ -593,7 +593,7 @@ ARA_Technology_5STL - 允许战士种进行定向进化,抛弃其战斗技能以换取其从殖民者、囚犯和奴隶身上抽取和注入基因的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许战士种进行定向进化,抛弃其战斗技能以换取其从殖民者、囚犯和奴隶身上抽取和注入基因的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 500 2.00 5.40 @@ -605,7 +605,7 @@ ARA_Technology_1VTE - 允许盾头种进行定向进化,抛弃其产出甲壳素和建造建筑的能力以换取战斗能力、移动能力和冲撞攻击的技能。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许盾头种进行定向进化,抛弃其产出甲壳素和建造建筑的能力以换取战斗能力、移动能力和冲撞攻击的技能。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 1200 6.50 4.80 @@ -620,7 +620,7 @@ ARA_Technology_1MED - 允许蜜罐种进行定向进化,抛弃生产虫蜜的能力,以强化其自身的医疗能力并解锁孵化医药茧的技能。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许蜜罐种进行定向进化,抛弃生产虫蜜的能力,以强化其自身的医疗能力并解锁孵化医药茧的技能。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 1200 5.50 2.10 @@ -632,7 +632,7 @@ ARA_Technology_4CLO - 允许战士种进行定向进化,牺牲其使用远程武器的能力以换取强大的近战和永久隐身的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许战士种进行定向进化,牺牲其使用远程武器的能力以换取强大的近战和永久隐身的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 1800 5.50 5.30 @@ -647,7 +647,7 @@ ARA_Technology_1BAC - 允许迷雾种进行定向进化,牺牲其护甲和喷射信息素的能力以换成生产虫群所需高级资源"活化钜菌"的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许迷雾种进行定向进化,牺牲其护甲和喷射信息素的能力以换成生产虫群所需高级资源"活化钜菌"的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 1000 7.50 3.80 @@ -660,7 +660,7 @@ ARA_Technology_9WID - 允许空天种进行定向进化,以牺牲高速和高空机动的能力换取向敌人投射大量磁暴种的能力,这种虫群可以以自杀性攻击的方式释放EMP以对抗机械族。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许空天种进行定向进化,以牺牲高速和高空机动的能力换取向敌人投射大量磁暴种的能力,这种虫群可以以自杀性攻击的方式释放EMP以对抗机械族。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 1500 7.50 1.50 @@ -675,7 +675,7 @@ ARA_Technology_6LOD - 允许空天种进行定向进化,以牺牲高速和高空机动的能力换取向敌人投射大量天巢种的能力,这种飞行辅虫速度很快,并且在近战中很难缠。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许空天种进行定向进化,以牺牲高速和高空机动的能力换取向敌人投射大量天巢种的能力,这种飞行辅虫速度很快,并且在近战中很难缠。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 3500 10.00 5.30 @@ -690,7 +690,7 @@ ARA_Technology_3CON - 允许盾头种进行定向进化,抛弃其防御能力以换取更强大的甲壳素产出能力和建造建筑的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许盾头种进行定向进化,抛弃其防御能力以换取更强大的甲壳素产出能力和建造建筑的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 300 2.00 2.70 @@ -702,7 +702,7 @@ ARA_Technology_8FEL - 允许蜜罐种进行定向进化,抛弃生产虫蜜的能力,以获得防御力增强、生产化合燃料和喷射火焰的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许蜜罐种进行定向进化,抛弃生产虫蜜的能力,以获得防御力增强、生产化合燃料和喷射火焰的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 300 2.00 2.10 @@ -714,7 +714,7 @@ ARA_Technology_3CRP - 允许迷雾种进行定向进化,抛弃喷射信息素的能力,以获得防御力、移动速度的增强和大规模铺设菌毯的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许迷雾种进行定向进化,抛弃喷射信息素的能力,以获得防御力、移动速度的增强和大规模铺设菌毯的能力。\n\n阿拉克涅虫群所有需要蓝图的科技,其蓝图只能通过女皇种的基因试验卵获取。 1300 7.50 0.90 @@ -730,7 +730,7 @@ ARA_Technology_1EVO - 允许实行新的阿拉克涅进化手术,使得阿拉克涅虫族获得更大的营养储存能力和更厚的甲壳。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,使得阿拉克涅虫族获得更大的营养储存能力和更厚的甲壳。 250 2.00 4.40 @@ -742,7 +742,7 @@ ARA_Technology_3EVO - 允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族在腿部植入滑行翼膜,在菌毯上获得更高的移动速度。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族在腿部植入滑行翼膜,在菌毯上获得更高的移动速度。 1000 6.50 4.30 @@ -757,7 +757,7 @@ ARA_Technology_4EVO - 允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族使用蜕荚孵化能发起自杀性袭击的爆裂种。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族使用蜕荚孵化能发起自杀性袭击的爆裂种。 1200 6.50 1.50 @@ -772,7 +772,7 @@ ARA_Technology_5EVO - 允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族植入可以抵挡一次任意数额伤害的反应甲壳。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族植入可以抵挡一次任意数额伤害的反应甲壳。 1500 7.50 4.30 @@ -787,7 +787,7 @@ ARA_Technology_6EVO - 允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族植入可以支持跳跃能力的肌腱。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族植入可以支持跳跃能力的肌腱。 1500 6.50 5.30 @@ -802,7 +802,7 @@ ARA_Technology_7EVO - 允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族植入会自动攻击附近敌人的棘刺腔管。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族植入会自动攻击附近敌人的棘刺腔管。 1500 7.50 4.80 @@ -817,7 +817,7 @@ ARA_Technology_8EVO - 允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族在甲壳植入玻璃钢以获得强大防御力。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族在甲壳植入玻璃钢以获得强大防御力。 2500 10.00 4.30 @@ -835,7 +835,7 @@ ARA_Technology_9EVO - 允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族以丧失自愈能力为代价摆脱寿命的限制。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族以丧失自愈能力为代价摆脱寿命的限制。 4000 11.00 3.80 @@ -850,7 +850,7 @@ ARA_Technology_10EVO - 允许实行新的阿拉克涅进化手术,允许阿拉克涅虫族获得更强大的肺部。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许实行新的阿拉克涅进化手术,使得阿拉克涅虫族获得更强大的肺部。 1000 7.50 5.30 @@ -866,7 +866,7 @@ ARA_Technology_2SYM - 允许阿拉克涅虫族建造特殊的活体建筑——阿拉克涅共生肌群,一种可以和督虫融合的无意识组织体,能为督虫提供强大的战斗力。\n\n霜结体共生肌群可以支持与其融合的阿拉克涅督虫使用多种急冻类武装,可以在控制大范围人群和快速点杀高价值目标间切换。 + <color=#887E78><i>阿拉克涅虫群-主巢触须\n主巢触须的进化路径是包含于每一支虫群中的通用进化路径,它们奠定了虫群在生物学上的优越性。</i></color>\n\n允许阿拉克涅虫族建造特殊的活体建筑——阿拉克涅共生肌群,一种可以和督虫融合的无意识组织体,能为督虫提供强大的战斗力。\n\n霜结体共生肌群可以支持与其融合的阿拉克涅督虫使用多种急冻类武装,可以在控制大范围人群和快速点杀高价值目标间切换。 4000 12.00 4.30 diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml index 180946d..bdc429c 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml @@ -408,6 +408,7 @@
  • Gourmand
  • Wimp
  • DrugDesire
  • +
  • Pyromaniac
  • diff --git a/1.6/1.6/Defs/Thing_building/ARA_Building.xml b/1.6/1.6/Defs/Thing_building/ARA_Building.xml index 14983f2..74274ed 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_Building.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_Building.xml @@ -69,7 +69,6 @@ Misc9
  • ARA_Base_Technology
  • -
  • BasicGravtech
  • ARA_Creep
  • @@ -1063,55 +1062,4 @@ - - - ARA_WallCreep - - 在墙上的阿拉克涅菌瘤,比在地面上的版本照明范围更大,但是不会扩散菌毯。不需要在阿拉克涅菌毯上建造。 - true - - Things/Building/Misc/WallTorch/WallTorch - Graphic_Multi - (0,0,0.9) - (0,0,-0.9) - (-0.9,0,0) - (0.9,0,0) - - false - - - Things/Building/Misc/WallTorch/WallTorch_MenuIcon - BuildingOnTop - Standable - - 0 - - 2 - - - false - true - - - 50 - - -
  • Placeworker_AttachedToWall
  • -
  • PlaceWorker_GlowRadius
  • -
    - -
  • - 12 - (220,210,171,0) -
  • -
  • - 1200000 -
  • -
  • - ARA_InsectCreep - 6 -
  • -
    -
    - \ No newline at end of file diff --git a/1.6/1.6/Defs/Thing_building/ARA_HiveShip.xml b/1.6/1.6/Defs/Thing_building/ARA_HiveShip.xml index 1731f49..b886a79 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_HiveShip.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_HiveShip.xml @@ -7,13 +7,16 @@ ArachnaeSwarm.Building_ArachnaeGravEngine RealtimeOnly Normal - MinifiedThing ArachnaeSwarm/Building/ARA_HiveShip_Heart_Icon Graphic_Single ArachnaeSwarm/Weapon/ARA_Weapon_Empty - (3.25,3.25) + (1,1) true + + (3, 3, 2) + (0,0,0) + 1500 @@ -22,18 +25,29 @@ 800 5000 + ARA_Creep +
  • ArachnaeSwarm/Building/ARA_HiveShip_Heart ArachnaeSwarm/Building/ARA_HiveShip_Heart ArachnaeSwarm/Building/ARA_HiveShip_Heart_Pedestal + + (3.5, 3.5) + (3.5, 3.5) + (3.5, 3.5)
  • + + 50 + 50 + (3,3) - true + + + False 0.6 - Impassable false true @@ -42,21 +56,27 @@
  • GravshipHull
  • -
  • Substructure
  • +
  • ARA_InsectCreepFloor
  • + Blueprint_Build + + ArachnaeSwarm/Building/ARA_HiveShip_Heart_Icon + Graphic_Multi + (3,3) +
  • 30
  • -
  • +
  • GravFieldExtender
  • -
  • PilotConsole
  • +
  • ARA_PilotConsole
  • ARA_HiveShip_Stomach
  • ARA_HiveShip_Tail
  • FuelOptimizer
  • @@ -70,14 +90,68 @@
    + + ARA_PilotConsole + + 链接器是阿拉克涅虫巢用于与猎手虫巢舰进行交流的平台。 + + Graphic_Multi + Things/Building/PilotConsole/PilotConsole + (3.7, 2.6) + + + 150 + 50 + 0 + 0 + 2500 + + (3, 3) + true + 0.4 + Standable + 14 + false + ARA_Creep + + + 140 + 3 + + 1 + 4 + true + (0, 0, 0) + +
  • + CompPilotConsole + Controls + false + false + 1 + 200 +
  • +
  • + +
  • + true + true +
  • +
    + 2100 +
    ARA_HiveShip_Stomach 阿拉克涅虫群猎手虫巢舰的胃囊,它可以储存供虫巢舰进行移动的生物质。 Graphic_Multi - Things/Building/ChemfuelTank/ChemfuelTank + ArachnaeSwarm/Building/ARA_HiveShip_Stomach (2, 2) + + (0.8, 0.8, 1) + (0,0,0) + 200 @@ -88,23 +162,22 @@ (2, 2) - 120 + 15 + 50 - -
  • BasicGravtech
  • -
    +
  • - 250 + 100 true 250 -
  • Chemfuel
  • +
  • ARA_InsectJelly
  • - Chemfuel - Chemfuel + 营养 + 营养 true 1 true @@ -117,8 +190,8 @@
    ARA_HiveShip_Tail - - A chemfuel thruster that increases the range of a gravship. Thrusters require an unobstructed area free of large buildings and gravship substructure.\n\nA gravship can support up to four small thrusters. + + 猎手虫巢舰用于移动的器官。 Graphic_Multi Things/Building/SmallThruster/SmallThruster @@ -136,13 +209,11 @@ (1, 2) 4 + 180 4 - -
  • BasicGravtech
  • -
  • @@ -152,7 +223,7 @@ (1, 0, 5) (0, 0, -5) 20 - 4.0 + 0
  • (0, 0, 0.5)
  • (0, 0, 0.5)
  • @@ -164,7 +235,7 @@ <_MainTex>/Things/Mote/SmallThruster_Burn false - 4 + 16 500 GravshipThrusterExhaust @@ -174,10 +245,15 @@ -10.0~10.0 0.8~1.2 -180.0~180.0 - 1.5~3.0 + 0~0
  • + +
  • + true + true +
  • \ No newline at end of file diff --git a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml index 36ffbed..7f16904 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml @@ -519,7 +519,7 @@ (3,3) 1 - None + Sellable
  • RewardStandardQualitySuper
  • diff --git a/1.6/1.6/Defs/Thing_building/ARA_SwarmTurret.xml b/1.6/1.6/Defs/Thing_building/ARA_SwarmTurret.xml index 76639e4..6d5e181 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_SwarmTurret.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_SwarmTurret.xml @@ -120,7 +120,7 @@ -20 0.96 - + Normal
  • @@ -211,7 +211,7 @@ 0.20 false false - + Normal true true diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml index ca292cc..0b0a438 100644 --- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml @@ -127,4 +127,7 @@ 没有可用的虫化变异 目标是虫群的成员 目标已完成虫化变异 + + 成功将 {0} 的内脏全部翻出 + 目标没有可以翻出的器官 \ No newline at end of file diff --git a/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Stomach.png b/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Stomach.png new file mode 100644 index 0000000..3432b82 Binary files /dev/null and b/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Stomach.png differ diff --git a/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Tail_east.png b/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Tail_east.png new file mode 100644 index 0000000..d14b850 Binary files /dev/null and b/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Tail_east.png differ diff --git a/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Tail_south.png b/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Tail_south.png new file mode 100644 index 0000000..7b89341 Binary files /dev/null and b/Content/Textures/ArachnaeSwarm/Building/ARA_HiveShip_Tail_south.png differ diff --git a/Content/Textures/ArachnaeSwarm/Building/TailAnim/Anim_ARA_HiveShip_Tail_1_east.png b/Content/Textures/ArachnaeSwarm/Building/TailAnim/Anim_ARA_HiveShip_Tail_1_east.png new file mode 100644 index 0000000..79ec0e8 Binary files /dev/null and b/Content/Textures/ArachnaeSwarm/Building/TailAnim/Anim_ARA_HiveShip_Tail_1_east.png differ diff --git a/Content/Textures/ArachnaeSwarm/Terrain/Surfaces/ARA_InsectCreep.png b/Content/Textures/ArachnaeSwarm/Terrain/Surfaces/ARA_InsectCreep.png index 6858ac3..2a69dd8 100644 Binary files a/Content/Textures/ArachnaeSwarm/Terrain/Surfaces/ARA_InsectCreep.png and b/Content/Textures/ArachnaeSwarm/Terrain/Surfaces/ARA_InsectCreep.png differ diff --git a/Content/Textures/ArachnaeSwarm/UI/Abilities/ARA_Genestealer_EjectOrgans.png b/Content/Textures/ArachnaeSwarm/UI/Abilities/ARA_Genestealer_EjectOrgans.png new file mode 100644 index 0000000..f522e23 Binary files /dev/null and b/Content/Textures/ArachnaeSwarm/UI/Abilities/ARA_Genestealer_EjectOrgans.png differ diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo index e8c46e6..3e84bd5 100644 Binary files a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo and b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo differ diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json index 88225bc..b52e983 100644 --- a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json +++ b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json @@ -1,22 +1,18 @@ { "Version": 1, - "WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", + "WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_arachnaegravengine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_arachnaegravengine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\abilities\\ara_ejectorgans\\compabilityeffect_ejectorgans.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_ejectorgans\\compabilityeffect_ejectorgans.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\building_comps\\ara_building_refuelingvat\\building_refuelingvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_building_refuelingvat\\building_refuelingvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\abilities\\ara_genestealer\\compabilityeffect_extractgene.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_genestealer\\compabilityeffect_extractgene.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\ara_hediffterrainspawn\\comphediffterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hediffterrainspawn\\comphediffterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\abilities\\compabilityeffect_randomhediff.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\compabilityeffect_randomhediff.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\abilities\\ara_terrainrestriction\\compabilityeffect_terrainrestriction .cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_terrainrestriction\\compabilityeffect_terrainrestriction .cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -26,7 +22,7 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 2, + "SelectedChildIndex": 1, "Children": [ { "$type": "Bookmark", @@ -34,54 +30,42 @@ }, { "$type": "Document", - "DocumentIndex": 1, - "Title": "Building_RefuelingVat.cs", - "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs", - "RelativeDocumentMoniker": "Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs", - "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs", - "RelativeToolTip": "Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs", - "ViewState": "AgIAAEQAAAAAAAAAAAAAAEABAAAQAAAAAAAAAA==", + "DocumentIndex": 0, + "Title": "CompAbilityEffect_EjectOrgans.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_EjectOrgans\\CompAbilityEffect_EjectOrgans.cs", + "RelativeDocumentMoniker": "Abilities\\ARA_EjectOrgans\\CompAbilityEffect_EjectOrgans.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_EjectOrgans\\CompAbilityEffect_EjectOrgans.cs", + "RelativeToolTip": "Abilities\\ARA_EjectOrgans\\CompAbilityEffect_EjectOrgans.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAC4AAAAoAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-10-24T06:16:14.743Z", + "WhenOpened": "2025-10-25T11:49:25.843Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 0, - "Title": "Building_ArachnaeGravEngine.cs", - "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_ArachnaeGravEngine.cs", - "RelativeDocumentMoniker": "Buildings\\Building_ArachnaeGravEngine.cs", - "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_ArachnaeGravEngine.cs", - "RelativeToolTip": "Buildings\\Building_ArachnaeGravEngine.cs", - "ViewState": "AgIAAHwAAAAAAAAAAAAgwJcAAAAJAAAAAAAAAA==", + "DocumentIndex": 1, + "Title": "CompAbilityEffect_ExtractGene.cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_Genestealer\\CompAbilityEffect_ExtractGene.cs", + "RelativeDocumentMoniker": "Abilities\\ARA_Genestealer\\CompAbilityEffect_ExtractGene.cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_Genestealer\\CompAbilityEffect_ExtractGene.cs", + "RelativeToolTip": "Abilities\\ARA_Genestealer\\CompAbilityEffect_ExtractGene.cs", + "ViewState": "AgIAABEAAAAAAAAAAAAAwCgAAAApAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-10-24T02:30:45.288Z", + "WhenOpened": "2025-10-25T11:49:07.979Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 2, - "Title": "CompHediffTerrainSpawn.cs", - "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", - "RelativeDocumentMoniker": "Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", - "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", - "RelativeToolTip": "Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", - "ViewState": "AgIAAB0AAAAAAAAAAAAswE0AAABHAAAAAAAAAA==", + "Title": "CompAbilityEffect_TerrainRestriction .cs", + "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_TerrainRestriction\\CompAbilityEffect_TerrainRestriction .cs", + "RelativeDocumentMoniker": "Abilities\\ARA_TerrainRestriction\\CompAbilityEffect_TerrainRestriction .cs", + "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_TerrainRestriction\\CompAbilityEffect_TerrainRestriction .cs", + "RelativeToolTip": "Abilities\\ARA_TerrainRestriction\\CompAbilityEffect_TerrainRestriction .cs", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwQAAAABAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-10-23T08:00:28.236Z", + "WhenOpened": "2025-10-25T11:48:39.275Z", "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 3, - "Title": "CompAbilityEffect_RandomHediff.cs", - "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\CompAbilityEffect_RandomHediff.cs", - "RelativeDocumentMoniker": "Abilities\\CompAbilityEffect_RandomHediff.cs", - "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\CompAbilityEffect_RandomHediff.cs", - "RelativeToolTip": "Abilities\\CompAbilityEffect_RandomHediff.cs", - "ViewState": "AgIAALoAAAAAAAAAAAAqwNcAAAAZAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-10-22T06:34:08.063Z" } ] } diff --git a/Source/ArachnaeSwarm/Abilities/ARA_EjectOrgans/CompAbilityEffect_EjectOrgans.cs b/Source/ArachnaeSwarm/Abilities/ARA_EjectOrgans/CompAbilityEffect_EjectOrgans.cs new file mode 100644 index 0000000..390cce1 --- /dev/null +++ b/Source/ArachnaeSwarm/Abilities/ARA_EjectOrgans/CompAbilityEffect_EjectOrgans.cs @@ -0,0 +1,158 @@ +using RimWorld; +using System.Collections.Generic; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompAbilityEffect_EjectOrgans : CompAbilityEffect + { + // 定义免疫的 Hediff 列表 + private static readonly string[] ImmuneHediffs = + { + "ARA_HiveMindMaster", + "ARA_HiveMindDrone", + "ARA_HiveMindWorker" + }; + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + + Pawn caster = parent.pawn; + Pawn targetPawn = target.Pawn; + + if (caster == null || targetPawn == null || targetPawn.Dead) + return; + + // 检查目标是否免疫 + if (IsTargetImmune(targetPawn)) + { + Messages.Message("ARA_TargetBlacklisted".Translate(), targetPawn, MessageTypeDefOf.RejectInput); + return; + } + + List partsToEject = new List(); + + // 遍历所有身体部位 + foreach (BodyPartRecord part in targetPawn.RaceProps.body.AllParts) + { + // 只检查有spawnThingOnRemoved且未缺失的部位 + if (!targetPawn.health.hediffSet.PartIsMissing(part) && + part.def.spawnThingOnRemoved != null) + { + partsToEject.Add(part); + } + } + + if (partsToEject.Count == 0) + return; + + // 执行弹出 + foreach (BodyPartRecord part in partsToEject) + { + // 生成物品 - spawnThingOnRemoved 是 ThingDef 类型 + ThingDef thingDef = part.def.spawnThingOnRemoved; + if (thingDef != null) + { + Thing thing = ThingMaker.MakeThing(thingDef); + GenSpawn.Spawn(thing, caster.Position, caster.Map); + } + + // 标记部位缺失 + targetPawn.health.AddHediff(HediffDefOf.MissingBodyPart, part); + } + + Messages.Message("ARA_EjectedOrgans".Translate(targetPawn.LabelShort), MessageTypeDefOf.NeutralEvent); + } + + public override bool Valid(LocalTargetInfo target, bool throwMessages = false) + { + Pawn targetPawn = target.Pawn; + if (targetPawn == null) + return false; + + // 检查目标是否免疫 + if (IsTargetImmune(targetPawn)) + { + if (throwMessages) + Messages.Message("ARA_TargetBlacklisted".Translate(), targetPawn, MessageTypeDefOf.RejectInput, false); + return false; + } + + // 检查是否有可弹出的器官 + if (!HasEjectableOrgans(targetPawn)) + { + if (throwMessages) + Messages.Message("ARA_NoEjectableOrgans".Translate(), targetPawn, MessageTypeDefOf.RejectInput, false); + return false; + } + + return base.Valid(target, throwMessages); + } + + public override bool GizmoDisabled(out string reason) + { + Pawn caster = parent.pawn; + if (caster == null || caster.Dead) + { + reason = "ARA_CasterDead".Translate(); + return true; + } + + reason = null; + return false; + } + + /// + /// 检查目标是否免疫器官弹出 + /// + private bool IsTargetImmune(Pawn pawn) + { + if (pawn?.health?.hediffSet?.hediffs == null) + return false; + + foreach (Hediff hediff in pawn.health.hediffSet.hediffs) + { + if (hediff?.def != null) + { + string hediffDefName = hediff.def.defName; + foreach (string immuneHediff in ImmuneHediffs) + { + if (hediffDefName == immuneHediff) + return true; + } + } + } + + return false; + } + + /// + /// 检查目标是否有可弹出的器官 + /// + private bool HasEjectableOrgans(Pawn pawn) + { + if (pawn?.RaceProps?.body?.AllParts == null) + return false; + + foreach (BodyPartRecord part in pawn.RaceProps.body.AllParts) + { + if (!pawn.health.hediffSet.PartIsMissing(part) && + part.def.spawnThingOnRemoved != null) + { + return true; + } + } + + return false; + } + } + + public class CompProperties_AbilityEjectOrgans : CompProperties_AbilityEffect + { + public CompProperties_AbilityEjectOrgans() + { + compClass = typeof(CompAbilityEffect_EjectOrgans); + } + } +} diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 19dab84..2b11a57 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -78,6 +78,7 @@ + @@ -115,8 +116,12 @@ + + + + diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/CompForwardClearance.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/CompForwardClearance.cs new file mode 100644 index 0000000..d474719 --- /dev/null +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/CompForwardClearance.cs @@ -0,0 +1,175 @@ +using System.Collections.Generic; +using RimWorld; +using UnityEngine; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompForwardClearance : ThingComp + { + private bool isBlocked = false; + private int lastCheckedTick = -99999; + private const int CheckInterval = 60; // 每60tick检查一次 + + public CompProperties_ForwardClearance Props => (CompProperties_ForwardClearance)props; + + public bool IsBlocked + { + get + { + if (Find.TickManager.TicksGame - lastCheckedTick > CheckInterval) + { + CheckClearance(); + } + return isBlocked; + } + } + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + CheckClearance(); + } + + public override void CompTick() + { + base.CompTick(); + + if (Find.TickManager.TicksGame % CheckInterval == 0) + { + bool previousState = isBlocked; + CheckClearance(); + + // 状态变化时发送信号 + if (isBlocked != previousState) + { + SendStateSignal(); + } + } + } + + public override void CompTickRare() + { + base.CompTickRare(); + CheckClearance(); + } + + /// + /// 检查前方是否有遮挡 + /// + public void CheckClearance() + { + lastCheckedTick = Find.TickManager.TicksGame; + bool newBlockedState = IsForwardBlocked(parent.Position, parent.Rotation, parent.Map, Props); + + if (newBlockedState != isBlocked) + { + isBlocked = newBlockedState; + SendStateSignal(); + } + } + + /// + /// 发送状态信号 + /// + private void SendStateSignal() + { + if (isBlocked) + { + parent.BroadcastCompSignal(Props.blockedSignal); + } + else + { + parent.BroadcastCompSignal(Props.clearSignal); + } + } + + /// + /// 静态方法:检查指定位置和朝向是否有遮挡 + /// + public static bool IsForwardBlocked(IntVec3 position, Rot4 rotation, Map map, CompProperties_ForwardClearance props) + { + if (!position.InBounds(map)) + return false; + + // 获取前方检查的单元格 + List checkCells = GetForwardCells(position, rotation, props.checkDistance); + + foreach (IntVec3 cell in checkCells) + { + if (!cell.InBounds(map)) + continue; + + // 检查屋顶 + if (props.checkRoof && map.roofGrid.Roofed(cell)) + return true; + + // 检查建筑 + if (props.checkBuildings) + { + foreach (Thing thing in map.thingGrid.ThingsListAt(cell)) + { + if (thing.def.passability == Traversability.Impassable && + !thing.def.IsFrame && !thing.def.IsBlueprint) + { + return true; + } + } + } + + // 检查植物 + if (props.checkPlants) + { + Plant plant = cell.GetPlant(map); + if (plant != null && plant.def.passability == Traversability.Impassable) + return true; + } + + // 检查地形 + if (props.checkTerrain) + { + TerrainDef terrain = map.terrainGrid.TerrainAt(cell); + if (terrain != null && terrain.passability == Traversability.Impassable) + return true; + } + } + + return false; + } + + /// + /// 获取前方需要检查的单元格 + /// + public static List GetForwardCells(IntVec3 position, Rot4 rotation, int distance) + { + List cells = new List(); + + // 根据朝向确定检查方向 + IntVec3 direction = rotation.FacingCell; + + for (int i = 1; i <= distance; i++) + { + IntVec3 checkCell = position + direction * i; + cells.Add(checkCell); + } + + return cells; + } + + public override string CompInspectStringExtra() + { + if (IsBlocked) + { + return "ForwardClearanceBlocked".Translate(Props.checkDistance); + } + return "ForwardClearanceClear".Translate(Props.checkDistance); + } + + public override void PostExposeData() + { + base.PostExposeData(); + Scribe_Values.Look(ref isBlocked, "isBlocked", false); + Scribe_Values.Look(ref lastCheckedTick, "lastCheckedTick", -99999); + } + } +} diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/CompProperties_ForwardClearance.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/CompProperties_ForwardClearance.cs new file mode 100644 index 0000000..8074016 --- /dev/null +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/CompProperties_ForwardClearance.cs @@ -0,0 +1,23 @@ +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompProperties_ForwardClearance : CompProperties + { + public int checkDistance = 5; // 检查距离(格数) + public bool checkRoof = true; // 是否检查屋顶 + public bool checkBuildings = true; // 是否检查建筑 + public bool checkPlants = false; // 是否检查植物 + public bool checkTerrain = false; // 是否检查地形 + + // 信号定义 + public string blockedSignal = "ForwardBlocked"; + public string clearSignal = "ForwardClear"; + + public CompProperties_ForwardClearance() + { + compClass = typeof(CompForwardClearance); + } + } +} diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/PlaceWorker_ForwardClearance.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/PlaceWorker_ForwardClearance.cs new file mode 100644 index 0000000..9e0f5b6 --- /dev/null +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_ForwardClearance/PlaceWorker_ForwardClearance.cs @@ -0,0 +1,112 @@ +using System.Collections.Generic; +using RimWorld; +using UnityEngine; +using Verse; + +namespace ArachnaeSwarm +{ + public class PlaceWorker_ForwardClearance : PlaceWorker + { + private static List forwardCells = new List(); + + public override void DrawGhost(ThingDef def, IntVec3 center, Rot4 rot, Color ghostCol, Thing thing = null) + { + // 获取清除检查组件属性 + CompProperties_ForwardClearance compProps = def.GetCompProperties(); + if (compProps == null) return; + + // 获取前方检查的单元格 + forwardCells.Clear(); + forwardCells = CompForwardClearance.GetForwardCells(center, rot, compProps.checkDistance); + + // 绘制检查区域 + Color cellColor = GetBlockedColor(center, rot, Find.CurrentMap, compProps); + GenDraw.DrawFieldEdges(forwardCells, cellColor); + + // 绘制方向指示器 + DrawDirectionIndicator(center, rot, cellColor); + } + + public override AcceptanceReport AllowsPlacing(BuildableDef def, IntVec3 center, Rot4 rot, Map map, Thing thingToIgnore = null, Thing thing = null) + { + // 将 BuildableDef 转换为 ThingDef 来获取组件属性 + ThingDef thingDef = def as ThingDef; + if (thingDef == null) return true; + + CompProperties_ForwardClearance compProps = thingDef.GetCompProperties(); + if (compProps == null) return true; + + // 检查前方是否有遮挡 + if (CompForwardClearance.IsForwardBlocked(center, rot, map, compProps)) + { + return new AcceptanceReport("ForwardClearanceBlockedPlacement".Translate(compProps.checkDistance)); + } + + return true; + } + + public override void PostPlace(Map map, BuildableDef def, IntVec3 loc, Rot4 rot) + { + // 将 BuildableDef 转换为 ThingDef 来获取组件属性 + ThingDef thingDef = def as ThingDef; + if (thingDef == null) return; + + CompProperties_ForwardClearance compProps = thingDef.GetCompProperties(); + if (compProps == null) return; + + // 放置后检查并发送警告 + if (CompForwardClearance.IsForwardBlocked(loc, rot, map, compProps)) + { + Messages.Message("WarningForwardClearanceBlocked".Translate(def.LabelCap, compProps.checkDistance), + MessageTypeDefOf.CautionInput, historical: false); + } + } + + /// + /// 根据遮挡状态获取颜色 + /// + private Color GetBlockedColor(IntVec3 center, Rot4 rot, Map map, CompProperties_ForwardClearance props) + { + if (CompForwardClearance.IsForwardBlocked(center, rot, map, props)) + { + return Color.red; + } + return Color.green; + } + + /// + /// 绘制方向指示器 + /// + private void DrawDirectionIndicator(IntVec3 center, Rot4 rot, Color color) + { + Vector3 startPos = center.ToVector3Shifted(); + Vector3 direction = rot.FacingCell.ToVector3(); + Vector3 endPos = startPos + direction * 2f; // 2格长的方向线 + + // 使用正确的绘制方法 + Material lineMaterial = SolidColorMaterials.SimpleSolidColorMaterial(color); + + // 绘制方向线 + GenDraw.DrawLineBetween(startPos, endPos, lineMaterial, 0.2f); + + // 绘制方向箭头 + DrawDirectionArrow(endPos, direction, lineMaterial); + } + + /// + /// 绘制方向箭头 + /// + private void DrawDirectionArrow(Vector3 pos, Vector3 direction, Material material) + { + float arrowSize = 0.5f; + Vector3 perpendicular = new Vector3(-direction.z, 0f, direction.x); + + Vector3 arrowTip = pos + direction * arrowSize; + Vector3 arrowLeft = pos - direction * arrowSize * 0.5f + perpendicular * arrowSize * 0.5f; + Vector3 arrowRight = pos - direction * arrowSize * 0.5f - perpendicular * arrowSize * 0.5f; + + GenDraw.DrawLineBetween(arrowTip, arrowLeft, material, 0.15f); + GenDraw.DrawLineBetween(arrowTip, arrowRight, material, 0.15f); + } + } +} diff --git a/Source/ArachnaeSwarm/Building_Comps/CompBreakdownDisabler.cs b/Source/ArachnaeSwarm/Building_Comps/CompBreakdownDisabler.cs new file mode 100644 index 0000000..eded3b1 --- /dev/null +++ b/Source/ArachnaeSwarm/Building_Comps/CompBreakdownDisabler.cs @@ -0,0 +1,162 @@ +using System.Collections.Generic; +using RimWorld; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompBreakdownDisabler : ThingComp + { + private CompBreakdownable breakdownable; + private CompPowerTrader powerTrader; + private CompRefuelable refuelable; + private bool wasBrokenDown = false; + + public CompProperties_BreakdownDisabler Props => (CompProperties_BreakdownDisabler)props; + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + // 获取相关的组件 + breakdownable = parent.GetComp(); + powerTrader = parent.GetComp(); + refuelable = parent.GetComp(); + + // 立即修复任何现有的损坏 + if (breakdownable != null && breakdownable.BrokenDown) + { + FixBreakdownImmediately(); + } + } + + public override void CompTick() + { + base.CompTick(); + + // 每 tick 检查是否需要修复 + if (breakdownable != null && breakdownable.BrokenDown && !wasBrokenDown) + { + FixBreakdownImmediately(); + } + + wasBrokenDown = breakdownable?.BrokenDown ?? false; + } + + public override void CompTickRare() + { + base.CompTickRare(); + + // 每 250 ticks 检查一次(更高效) + if (breakdownable != null && breakdownable.BrokenDown && !wasBrokenDown) + { + FixBreakdownImmediately(); + } + + wasBrokenDown = breakdownable?.BrokenDown ?? false; + } + + public override void ReceiveCompSignal(string signal) + { + base.ReceiveCompSignal(signal); + + // 监听损坏信号并立即修复 + if (signal == "Breakdown" && breakdownable != null) + { + FixBreakdownImmediately(); + } + } + + /// + /// 立即修复损坏并消除所有影响 + /// + private void FixBreakdownImmediately() + { + if (breakdownable == null) return; + + // 记录修复前的状态 + bool wasPoweredOn = powerTrader?.PowerOn ?? true; + float fuelAmount = refuelable?.Fuel ?? 0f; + + // 调用修复方法 + breakdownable.Notify_Repaired(); + + // 恢复电力状态 + if (powerTrader != null) + { + // 确保电力交易器恢复正常 + if (wasPoweredOn && !powerTrader.PowerOn) + { + powerTrader.PowerOn = true; + } + } + + // 恢复燃料状态 + if (refuelable != null) + { + refuelable.ConsumeFuel(0f); // 触发更新 + } + + // 发送修复完成的信号 + parent.BroadcastCompSignal("Repaired"); + + // 记录日志(可选) + if (Props.logRepairs) + { + Log.Message($"[BreakdownDisabler] Automatically repaired {parent.Label} at {parent.Position}"); + } + } + + public override void PostDraw() + { + base.PostDraw(); + + // 可选:在修复时显示视觉反馈 + if (breakdownable != null && breakdownable.BrokenDown) + { + // 立即在下一次绘制前修复 + if (Find.TickManager.TicksGame % 10 == 0) // 每10 tick尝试修复一次 + { + FixBreakdownImmediately(); + } + } + } + + public override string CompInspectStringExtra() + { + if (breakdownable != null && breakdownable.BrokenDown) + { + return "AutoRepairSystemActive".Translate(); + } + return null; + } + + public override IEnumerable CompGetGizmosExtra() + { + if (breakdownable != null && breakdownable.BrokenDown) + { + yield return new Command_Action + { + defaultLabel = "ForceAutoRepair".Translate(), + defaultDesc = "ForceAutoRepairDesc".Translate(), + icon = TexCommand.DesirePower, + action = delegate + { + FixBreakdownImmediately(); + Messages.Message("ForcedAutoRepairComplete".Translate(parent.Label), parent, MessageTypeDefOf.PositiveEvent); + } + }; + } + } + } + + public class CompProperties_BreakdownDisabler : CompProperties + { + public bool logRepairs = false; // 是否在控制台记录修复日志 + public bool showVisualFeedback = true; // 是否显示视觉反馈 + + public CompProperties_BreakdownDisabler() + { + compClass = typeof(CompBreakdownDisabler); + } + } +} diff --git a/Source/ArachnaeSwarm/Buildings/Building_ArachnaeGravEngine.cs b/Source/ArachnaeSwarm/Buildings/Building_ArachnaeGravEngine.cs index 9025b30..4fa4650 100644 --- a/Source/ArachnaeSwarm/Buildings/Building_ArachnaeGravEngine.cs +++ b/Source/ArachnaeSwarm/Buildings/Building_ArachnaeGravEngine.cs @@ -15,13 +15,19 @@ namespace ArachnaeSwarm // 自定义图形组件 private Graphic customBaseGraphic; // 基座图形 - 始终静止 - private Graphic customOrbGraphic; // 球体图形 - 正常状态下浮动 + private Graphic customOrbGraphic; // 球体图形 - 正常状态下搏动 private Graphic customCooldownGraphic; // 冷却球体图形 - 冷却状态下静止 - // 渲染相关的变量 - private float orbFloatOffset = 0f; + // 搏动相关的变量 + private float orbPulseScale = 1f; // 球体缩放比例 + private float orbPulseIntensity = 0f; // 搏动强度 private int lastTick = -1; + // 记录初始缩放值 + private Vector2 baseInitialScale; + private Vector2 orbInitialScale; + private Vector2 cooldownInitialScale; + public ArachnaeGravEngineExtension ModExtension { get @@ -42,17 +48,18 @@ namespace ArachnaeSwarm if (customBaseGraphic == null) { string basePath = ModExtension?.baseTexPath ?? "ArachnaeSwarm/Building/ARA_HiveShip_Heart_Pedestal"; + baseInitialScale = ModExtension?.baseScale ?? Vector2.one * 3f; customBaseGraphic = GraphicDatabase.Get( basePath, ShaderDatabase.Cutout, - def.graphicData?.drawSize ?? Vector2.one * 3f, + baseInitialScale, Color.white); } return customBaseGraphic; } } - // 球体图形 - 正常状态下浮动 + // 球体图形 - 正常状态下搏动 private Graphic CustomOrbGraphic { get @@ -60,10 +67,11 @@ namespace ArachnaeSwarm if (customOrbGraphic == null) { string orbPath = ModExtension?.orbTexPath ?? "ArachnaeSwarm/Building/ARA_HiveShip_Heart"; + orbInitialScale = ModExtension?.orbScale ?? Vector2.one * 2f; customOrbGraphic = GraphicDatabase.Get( orbPath, ShaderDatabase.Cutout, - Vector2.one * 2f, + orbInitialScale, Color.white); } return customOrbGraphic; @@ -78,10 +86,11 @@ namespace ArachnaeSwarm if (customCooldownGraphic == null) { string cooldownPath = ModExtension?.cooldownTexPath ?? "ArachnaeSwarm/Building/ARA_HiveShip_Heart_Cooldown"; + cooldownInitialScale = ModExtension?.cooldownScale ?? Vector2.one * 2f; customCooldownGraphic = GraphicDatabase.Get( cooldownPath, ShaderDatabase.Cutout, - Vector2.one * 2f, // 注意:这里应该和球体大小一致,而不是基座大小 + cooldownInitialScale, Color.white); } return customCooldownGraphic; @@ -110,19 +119,6 @@ namespace ArachnaeSwarm } yield return gizmo; } - - // 可以添加虫群特有的 gizmo - if (DebugSettings.ShowDevGizmos) - { - yield return new Command_Action - { - defaultLabel = "DEV: Spawn Arachnae Swarm", - action = delegate - { - SpawnArachnaeSwarm(); - } - }; - } } // 重写 GetFloatMenuOptions 方法,移除检查选项 @@ -162,29 +158,16 @@ namespace ArachnaeSwarm text = text.Replace("GravEngineNotInspected".Translate() + "\n", ""); } - // 添加虫群特有的信息 - if (!string.IsNullOrEmpty(text)) - { - text += "\n"; - } - text += "ArachnaeSwarmControl".Translate(); - return text; } - // 虫群特有的方法 - private void SpawnArachnaeSwarm() - { - Messages.Message("ArachnaeSwarmActivated".Translate(), this, MessageTypeDefOf.PositiveEvent); - } - // 完全重写 DrawAt 方法,实现自定义渲染系统 protected override void DrawAt(Vector3 drawLoc, bool flip = false) { // 不调用基类的 DrawAt,完全自定义渲染 - // 更新浮动效果 - UpdateFloatOffsets(); + // 更新搏动效果 + UpdatePulseEffect(); // 基础位置 - 底座始终静止 Vector3 baseDrawPos = drawLoc; @@ -192,49 +175,75 @@ namespace ArachnaeSwarm // 球体位置 - 根据状态决定 Vector3 orbDrawPos = drawLoc; - orbDrawPos.y += 0.03658537f; // 基础高度偏移 - orbDrawPos.z += 0.05f; // 球体稍微向前偏移,避免与底座重叠 + orbDrawPos.y += 0.05f; // 球体稍微向前偏移,避免与底座重叠 + orbDrawPos.z += 0.05f; // 始终绘制底座 CustomBaseGraphic.Draw(baseDrawPos, flip ? base.Rotation.Opposite : base.Rotation, this, 0f); - - // 根据状态绘制球体 - if (Find.TickManager.TicksGame >= cooldownCompleteTick) - { - // 正常状态:球体浮动 - orbDrawPos.y += orbFloatOffset; - CustomOrbGraphic.Draw(orbDrawPos, flip ? base.Rotation.Opposite : base.Rotation, this, 0f); - } - else - { - // 冷却状态:球体静止,使用冷却贴图 - CustomCooldownGraphic.Draw(orbDrawPos, flip ? base.Rotation.Opposite : base.Rotation, this, 0f); - } + DrawPulsingOrb(orbDrawPos, flip ? base.Rotation.Opposite : base.Rotation, CustomOrbGraphic); } - // 更新浮动效果 - 只更新球体浮动 - private void UpdateFloatOffsets() + // 绘制搏动的球体 + private void DrawPulsingOrb(Vector3 drawPos, Rot4 rotation, Graphic graphic) + { + // 计算搏动缩放,基于初始缩放 + Vector3 baseScale = new Vector3(orbInitialScale.x, 1f, orbInitialScale.y); + Vector3 pulseScale = Vector3.one * orbPulseScale; + Vector3 finalScale = Vector3.Scale(baseScale, pulseScale); + + // 创建缩放矩阵 + Matrix4x4 matrix = Matrix4x4.TRS(drawPos, rotation.AsQuat, finalScale); + + // 获取材质 + Material material = graphic.MatSingle; + + // 绘制缩放后的球体 + Graphics.DrawMesh(MeshPool.plane10, matrix, material, 0); + } + + // 更新搏动效果 - 类似心脏搏动的放大缩小 + private void UpdatePulseEffect() { int currentTick = Find.TickManager.TicksGame; if (currentTick != lastTick) { - // 只在非冷却状态下更新球体浮动 + // 只在非冷却状态下更新球体搏动 if (Find.TickManager.TicksGame >= cooldownCompleteTick) { - // 球体浮动 - 上下浮动 - orbFloatOffset = Mathf.Sin((float)currentTick / 100f) * 0.1f; + // 心脏搏动效果 + float time = (float)currentTick / 60f; // 控制搏动速度 + + // 使用更自然的搏动曲线 + // 快速收缩然后缓慢舒张,类似真实心跳 + float pulse = Mathf.Sin(time * 3f) * 0.5f + 0.5f; // 0到1的范围 + + // 应用非线性变换,使搏动更自然 + pulse = EaseInOutCubic(pulse); + + // 计算缩放比例 (0.9到1.1的范围) + orbPulseScale = 0.9f + pulse * 0.2f; + + // 搏动强度用于可能的其他效果 + orbPulseIntensity = pulse; } else { - // 冷却状态下球体不浮动 - orbFloatOffset = 0f; + // 冷却状态下球体不搏动,保持正常大小 + orbPulseScale = 1f; + orbPulseIntensity = 0f; } lastTick = currentTick; } } + // 缓动函数 - 使搏动更自然 + private float EaseInOutCubic(float x) + { + return x < 0.5f ? 4f * x * x * x : 1f - Mathf.Pow(-2f * x + 2f, 3f) / 2f; + } + // 重写额外的绘制阶段(如果需要) public override void DrawExtraSelectionOverlays() { @@ -264,11 +273,16 @@ namespace ArachnaeSwarm } } - // 扩展 ModExtension 定义,添加基座纹理路径 + // 扩展 ModExtension 定义,添加基座纹理路径和缩放参数 public class ArachnaeGravEngineExtension : DefModExtension { public string baseTexPath; // 基座纹理路径 - 始终静止 - public string orbTexPath; // 球体纹理路径 - 正常状态下浮动 + public string orbTexPath; // 球体纹理路径 - 正常状态下搏动 public string cooldownTexPath; // 冷却球体纹理路径 - 冷却状态下静止 + + // 新增:各部分的初始缩放比例 + public Vector2 baseScale = Vector2.one * 3f; // 基座默认缩放 + public Vector2 orbScale = Vector2.one * 2f; // 球体默认缩放 + public Vector2 cooldownScale = Vector2.one * 2f; // 冷却球体默认缩放 } } diff --git a/非公开资源/Content/Textures/Building/ARA_HiveShip_Stomach.sai2 b/非公开资源/Content/Textures/Building/ARA_HiveShip_Stomach.sai2 new file mode 100644 index 0000000..d7ba978 Binary files /dev/null and b/非公开资源/Content/Textures/Building/ARA_HiveShip_Stomach.sai2 differ diff --git a/非公开资源/Content/Textures/Building/ARA_HiveShip_Tail.sai2 b/非公开资源/Content/Textures/Building/ARA_HiveShip_Tail.sai2 new file mode 100644 index 0000000..08d987f Binary files /dev/null and b/非公开资源/Content/Textures/Building/ARA_HiveShip_Tail.sai2 differ diff --git a/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair.psd b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair.psd new file mode 100644 index 0000000..c3ca36f Binary files /dev/null and b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair.psd differ diff --git a/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair.sai2 b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair.sai2 index b22cc1a..0f7b046 100644 Binary files a/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair.sai2 and b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair.sai2 differ diff --git a/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair1.psd b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair1.psd new file mode 100644 index 0000000..690bd16 Binary files /dev/null and b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair1.psd differ diff --git a/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair2.psd b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair2.psd new file mode 100644 index 0000000..72f32a7 Binary files /dev/null and b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair2.psd differ diff --git a/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair3.psd b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair3.psd new file mode 100644 index 0000000..2b5b189 Binary files /dev/null and b/非公开资源/Content/Textures/Hair/ARA_ArachnaeNode_Hair3.psd differ diff --git a/非公开资源/Content/Textures/Terrain/Surfaces/ARA_InsectCreep.sai2 b/非公开资源/Content/Textures/Terrain/Surfaces/ARA_InsectCreep.sai2 index 606aeed..530e762 100644 Binary files a/非公开资源/Content/Textures/Terrain/Surfaces/ARA_InsectCreep.sai2 and b/非公开资源/Content/Textures/Terrain/Surfaces/ARA_InsectCreep.sai2 differ diff --git a/非公开资源/Content/Textures/UI/Abilities/ARA_Genestealer_EjectOrgans.sai2 b/非公开资源/Content/Textures/UI/Abilities/ARA_Genestealer_EjectOrgans.sai2 new file mode 100644 index 0000000..66ae384 Binary files /dev/null and b/非公开资源/Content/Textures/UI/Abilities/ARA_Genestealer_EjectOrgans.sai2 differ diff --git a/非公开资源/Content/Textures/UI/Memes/ARA_Hive_Worship1.png b/非公开资源/Content/Textures/UI/Memes/ARA_Hive_Worship1.png new file mode 100644 index 0000000..08cdb9d Binary files /dev/null and b/非公开资源/Content/Textures/UI/Memes/ARA_Hive_Worship1.png differ