Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
390128f503 | ||
|
|
8a0fbe32e8 | ||
|
|
24a0ed126b | ||
|
|
8d6c992f1f | ||
|
|
30ee96a196 | ||
|
|
ebe217223d | ||
|
|
82b3855fc8 | ||
|
|
1a102fcf31 | ||
|
|
f72fb7e62e | ||
|
|
ec20d84344 | ||
|
|
c735d8f87c | ||
|
|
493267be2c | ||
|
|
8cf1ec75b2 | ||
|
|
341d6d1da7 | ||
|
|
c0b65f457d | ||
|
|
15dca29e4b | ||
|
|
150d36ff75 | ||
|
|
7a2a250de3 | ||
|
|
829ba7cae7 | ||
|
|
1938d30343 | ||
|
|
29141c7202 | ||
|
|
e8830e6853 | ||
|
|
9ed650c1a9 | ||
|
|
ceb68bc8fa | ||
|
|
c05df1399a |
@@ -32,140 +32,6 @@
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
||||
<AbilityDef Name="ARA_EggSpew_Base" Abstract="True">
|
||||
<cooldownTicksRange>5000</cooldownTicksRange>
|
||||
<aiCanUse>false</aiCanUse>
|
||||
<displayOrder>300</displayOrder>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||
<warmupStartSound>AcidSpray_Warmup</warmupStartSound>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>1</range>
|
||||
<warmupTime>7</warmupTime>
|
||||
<soundCast>AcidSpray_Resolve</soundCast>
|
||||
<violent>false</violent>
|
||||
<targetable>false</targetable>
|
||||
<targetParams>
|
||||
<canTargetSelf>True</canTargetSelf>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>4</needCost>
|
||||
<failMessage>营养值不足,需要进食</failMessage>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityBodyPartCheck">
|
||||
<requiredPart>ARA_Ovary</requiredPart>
|
||||
<failMessage>卵巢受损或缺失,无法生育</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef Name="ARA_EggSpew_Base_Proj" ParentName="BaseGrenadeProjectile" Abstract="True">
|
||||
<thingClass>Projectile_SpawnsThing</thingClass>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_EggSac</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
</graphicData>
|
||||
<projectile>
|
||||
<damageDef>Bullet</damageDef>
|
||||
<speed>21</speed>
|
||||
<damageAmountBase>0</damageAmountBase>
|
||||
<tryAdjacentFreeSpaces>true</tryAdjacentFreeSpaces>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<AbilityDef ParentName="ARA_EggSpew_Base">
|
||||
<defName>ARA_EggSpew</defName>
|
||||
<label>生育虫卵</label>
|
||||
<description>从卵巢中排出一颗休眠的虫卵,阿拉克涅女皇种可以通过与其交互将其激活,并选择孵化的督虫虫族类型——参阅虫卵的具体信息,了解各个督虫的特点。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_Proj_EggSac</projectileDef>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="ARA_EggSpew_Base_Proj">
|
||||
<defName>ARA_Proj_EggSac</defName>
|
||||
<label>阿拉克涅虫卵</label>
|
||||
<projectile>
|
||||
<spawnsThingDef>ARA_InteractiveEggSac</spawnsThingDef>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<AbilityDef ParentName="ARA_EggSpew_Base">
|
||||
<defName>ARA_EggSpew_BaseFighter</defName>
|
||||
<label>生育虫卵-武斗虫</label>
|
||||
<description>从卵巢中排出一颗休眠的虫卵,阿拉克涅女皇种可以通过与其交互将其激活,并选择孵化的督虫虫族类型——参阅虫卵的具体信息,了解各个督虫的特点。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_Proj_EggSac_BaseFighter</projectileDef>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_1KYC</requiredResearch>
|
||||
<failMessage>需要科技 基因节点KYC-1"武斗虫" 以解锁此孵化路径</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="ARA_EggSpew_Base_Proj">
|
||||
<defName>ARA_Proj_EggSac_BaseFighter</defName>
|
||||
<label>阿拉克涅虫卵</label>
|
||||
<projectile>
|
||||
<spawnsThingDef>ARA_InteractiveEggSac_Basic_Fighter</spawnsThingDef>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
|
||||
<AbilityDef>
|
||||
<defName>ARA_EggSpewBioforgeIncubator</defName>
|
||||
<label>生育孵化茧 基础酸性武器</label>
|
||||
<description>孵化茧</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<cooldownTicksRange>5000</cooldownTicksRange>
|
||||
<aiCanUse>true</aiCanUse>
|
||||
<displayOrder>300</displayOrder>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||
<warmupStartSound>AcidSpray_Warmup</warmupStartSound>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>1</range>
|
||||
<warmupTime>12</warmupTime>
|
||||
<soundCast>AcidSpray_Resolve</soundCast>
|
||||
<violent>false</violent>
|
||||
<targetable>false</targetable>
|
||||
<targetParams>
|
||||
<canTargetSelf>True</canTargetSelf>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_Proj_BioforgeIncubator</projectileDef>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>1</needCost>
|
||||
<failMessage>营养值不足,需要进食</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="BaseGrenadeProjectile">
|
||||
<defName>ARA_Proj_BioforgeIncubator</defName>
|
||||
<label>阿拉克涅孵化茧</label>
|
||||
<thingClass>Projectile_SpawnsThing</thingClass>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_BioforgeIncubator</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
</graphicData>
|
||||
<projectile>
|
||||
<damageDef>Bullet</damageDef>
|
||||
<speed>21</speed>
|
||||
<damageAmountBase>0</damageAmountBase>
|
||||
<spawnsThingDef>ARA_BioforgeIncubator_AcidBase</spawnsThingDef>
|
||||
<tryAdjacentFreeSpaces>true</tryAdjacentFreeSpaces>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
|
||||
<AbilityDef>
|
||||
<defName>ARA_AcidSprayBurst_Queen</defName>
|
||||
<label>女皇种酸液轰炸</label>
|
||||
@@ -328,8 +194,8 @@
|
||||
|
||||
<AbilityDef>
|
||||
<defName>ARA_BaseRace_Acid_Launcher</defName>
|
||||
<label>酸嗜种投射</label>
|
||||
<description></description>
|
||||
<label>酸噬种投射</label>
|
||||
<description>将一只阿拉克涅酸噬种辅虫发射到指定地点,落地后这只寿命有限的辅虫将立刻对敌人展开攻击。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<cooldownTicksRange>5000</cooldownTicksRange>
|
||||
<aiCanUse>true</aiCanUse>
|
||||
@@ -362,7 +228,7 @@
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="BaseGrenadeProjectile">
|
||||
<defName>ArachnaeBase_Race_Acid_Proj</defName>
|
||||
<label>阿拉克涅酸嗜种</label>
|
||||
<label>阿拉克涅酸噬种</label>
|
||||
<thingClass>Projectile_SpawnsPawnZeroAge</thingClass>
|
||||
<uiIconPath>Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_south</uiIconPath>
|
||||
<graphicData>
|
||||
|
||||
98
1.6/1.6/Defs/AbilityDefs/Abilities_EggSpew.xml
Normal file
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<AbilityDef Name="ARA_EggSpew_Base" Abstract="True">
|
||||
<cooldownTicksRange>5000</cooldownTicksRange>
|
||||
<aiCanUse>false</aiCanUse>
|
||||
<displayOrder>300</displayOrder>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||
<warmupStartSound>AcidSpray_Warmup</warmupStartSound>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>1</range>
|
||||
<warmupTime>7</warmupTime>
|
||||
<soundCast>AcidSpray_Resolve</soundCast>
|
||||
<violent>false</violent>
|
||||
<targetable>false</targetable>
|
||||
<targetParams>
|
||||
<canTargetSelf>True</canTargetSelf>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>4</needCost>
|
||||
<failMessage>营养值不足,需要进食</failMessage>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityBodyPartCheck">
|
||||
<requiredPart>ARA_Ovary</requiredPart>
|
||||
<failMessage>卵巢受损或缺失,无法生育</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef Name="ARA_EggSpew_Base_Proj" ParentName="BaseGrenadeProjectile" Abstract="True">
|
||||
<thingClass>Projectile_SpawnsThing</thingClass>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_EggSac</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
</graphicData>
|
||||
<projectile>
|
||||
<damageDef>Bullet</damageDef>
|
||||
<speed>21</speed>
|
||||
<damageAmountBase>0</damageAmountBase>
|
||||
<tryAdjacentFreeSpaces>true</tryAdjacentFreeSpaces>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<AbilityDef Name="ARA_CocoonSpew_Base" Abstract="True">
|
||||
<cooldownTicksRange>5000</cooldownTicksRange>
|
||||
<aiCanUse>true</aiCanUse>
|
||||
<displayOrder>300</displayOrder>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||
<warmupStartSound>AcidSpray_Warmup</warmupStartSound>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>1</range>
|
||||
<warmupTime>12</warmupTime>
|
||||
<soundCast>AcidSpray_Resolve</soundCast>
|
||||
<violent>false</violent>
|
||||
<targetable>false</targetable>
|
||||
<targetParams>
|
||||
<canTargetSelf>True</canTargetSelf>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>1</needCost>
|
||||
<failMessage>营养值不足,需要进食</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef Name="ARA_CocoonSpew_Base_Proj" ParentName="BaseGrenadeProjectile" Abstract="True">
|
||||
<label>阿拉克涅孵化茧</label>
|
||||
<thingClass>Projectile_SpawnsThing</thingClass>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_BioforgeIncubator</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
</graphicData>
|
||||
<projectile>
|
||||
<damageDef>Bullet</damageDef>
|
||||
<speed>21</speed>
|
||||
<damageAmountBase>0</damageAmountBase>
|
||||
<tryAdjacentFreeSpaces>true</tryAdjacentFreeSpaces>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
|
||||
<AbilityDef ParentName="ARA_EggSpew_Base">
|
||||
<defName>ARA_EggSpew</defName>
|
||||
<label>生育虫卵</label>
|
||||
<description>从卵巢中排出一颗休眠的虫卵,阿拉克涅女皇种可以通过与其交互将其激活,并选择孵化的督虫虫族类型——参阅虫卵的具体信息,了解各个督虫的特点。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_Proj_EggSac</projectileDef>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
</Defs>
|
||||
@@ -20,7 +20,7 @@
|
||||
<cooldownTicksRange>600</cooldownTicksRange>
|
||||
<verbProperties>
|
||||
<verbClass>ArachnaeSwarm.Verb_CastAbilityTrackingCharge</verbClass>
|
||||
<label>tracking charge</label>
|
||||
<label>追踪冲撞</label>
|
||||
<targetParams>
|
||||
<canTargetPawns>true</canTargetPawns>
|
||||
<canTargetBuildings>false</canTargetBuildings>
|
||||
@@ -28,7 +28,7 @@
|
||||
<canTargetMechs>true</canTargetMechs>
|
||||
<canTargetSelf>false</canTargetSelf>
|
||||
</targetParams>
|
||||
<range>60</range>
|
||||
<range>30</range>
|
||||
<warmupTime>1.0</warmupTime>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
@@ -49,5 +49,4 @@
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
||||
</Defs>
|
||||
92
1.6/1.6/Defs/AnimationDefs/ARA_Flight_Anims.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<AnimationDef>
|
||||
<defName>ARA_FlyEast</defName>
|
||||
<durationTicks>60</durationTicks>
|
||||
<keyframeParts>
|
||||
<li>
|
||||
<key>ARA_Flight_Attachment</key>
|
||||
<value>
|
||||
<keyframes>
|
||||
<li><graphicState>ARA_FlyEast_0</graphicState><tick>0</tick></li>
|
||||
<li><graphicState>ARA_FlyEast_1</graphicState><tick>4</tick></li>
|
||||
<li><graphicState>ARA_FlyEast_2</graphicState><tick>8</tick></li>
|
||||
<li><graphicState>ARA_FlyEast_3</graphicState><tick>12</tick></li>
|
||||
<li><graphicState>ARA_FlyEast_4</graphicState><tick>16</tick></li>
|
||||
<li><graphicState>ARA_FlyEast_5</graphicState><tick>20</tick></li>
|
||||
<li><graphicState>ARA_FlyEast_6</graphicState><tick>24</tick></li>
|
||||
<li><graphicState>ARA_FlyEast_7</graphicState><tick>28</tick></li>
|
||||
</keyframes>
|
||||
</value>
|
||||
</li>
|
||||
<li>
|
||||
<key>Root</key>
|
||||
<value><workerType>AnimationWorker_Keyframes</workerType><keyframes>
|
||||
<li><tick>0</tick><offset>(0,0,-0.05)</offset></li>
|
||||
<li><tick>30</tick><offset>(0,0,0.05)</offset></li>
|
||||
<li><tick>60</tick><offset>(0,0,-0.05)</offset></li>
|
||||
</keyframes></value>
|
||||
</li>
|
||||
</keyframeParts>
|
||||
</AnimationDef>
|
||||
|
||||
<AnimationDef>
|
||||
<defName>ARA_FlyNorth</defName>
|
||||
<durationTicks>60</durationTicks>
|
||||
<keyframeParts>
|
||||
<li>
|
||||
<key>ARA_Flight_Attachment</key>
|
||||
<value>
|
||||
<keyframes>
|
||||
<li><graphicState>ARA_FlyNorth_0</graphicState><tick>0</tick></li>
|
||||
<li><graphicState>ARA_FlyNorth_1</graphicState><tick>4</tick></li>
|
||||
<li><graphicState>ARA_FlyNorth_2</graphicState><tick>8</tick></li>
|
||||
<li><graphicState>ARA_FlyNorth_3</graphicState><tick>12</tick></li>
|
||||
<li><graphicState>ARA_FlyNorth_4</graphicState><tick>16</tick></li>
|
||||
<li><graphicState>ARA_FlyNorth_5</graphicState><tick>20</tick></li>
|
||||
<li><graphicState>ARA_FlyNorth_6</graphicState><tick>24</tick></li>
|
||||
<li><graphicState>ARA_FlyNorth_7</graphicState><tick>28</tick></li>
|
||||
</keyframes>
|
||||
</value>
|
||||
</li>
|
||||
<li>
|
||||
<key>Root</key>
|
||||
<value><workerType>AnimationWorker_Keyframes</workerType><keyframes>
|
||||
<li><tick>0</tick><offset>(0,0,-0.05)</offset></li>
|
||||
<li><tick>30</tick><offset>(0,0,0.05)</offset></li>
|
||||
<li><tick>60</tick><offset>(0,0,-0.05)</offset></li>
|
||||
</keyframes></value>
|
||||
</li>
|
||||
</keyframeParts>
|
||||
</AnimationDef>
|
||||
|
||||
<AnimationDef>
|
||||
<defName>ARA_FlySouth</defName>
|
||||
<durationTicks>60</durationTicks>
|
||||
<keyframeParts>
|
||||
<li>
|
||||
<key>ARA_Flight_Attachment</key>
|
||||
<value>
|
||||
<keyframes>
|
||||
<li><graphicState>ARA_FlySouth_0</graphicState><tick>0</tick></li>
|
||||
<li><graphicState>ARA_FlySouth_1</graphicState><tick>4</tick></li>
|
||||
<li><graphicState>ARA_FlySouth_2</graphicState><tick>8</tick></li>
|
||||
<li><graphicState>ARA_FlySouth_3</graphicState><tick>12</tick></li>
|
||||
<li><graphicState>ARA_FlySouth_4</graphicState><tick>16</tick></li>
|
||||
<li><graphicState>ARA_FlySouth_5</graphicState><tick>20</tick></li>
|
||||
<li><graphicState>ARA_FlySouth_6</graphicState><tick>24</tick></li>
|
||||
<li><graphicState>ARA_FlySouth_7</graphicState><tick>28</tick></li>
|
||||
</keyframes>
|
||||
</value>
|
||||
</li>
|
||||
<li>
|
||||
<key>Root</key>
|
||||
<value><workerType>AnimationWorker_Keyframes</workerType><keyframes>
|
||||
<li><tick>0</tick><offset>(0,0,-0.05)</offset></li>
|
||||
<li><tick>30</tick><offset>(0,0,0.05)</offset></li>
|
||||
<li><tick>60</tick><offset>(0,0,-0.05)</offset></li>
|
||||
</keyframes></value>
|
||||
</li>
|
||||
</keyframeParts>
|
||||
</AnimationDef>
|
||||
</Defs>
|
||||
@@ -1,84 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_normal</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
<headShapeDef>normal</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>0</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_eyeMoving</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>15</duration>
|
||||
<eyeballOffset>(-0.005,0,0)</eyeballOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>1002</priority>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>500</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_eyeMoving2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>15</duration>
|
||||
<eyeballOffset>(0.005,0,0)</eyeballOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>1001</priority>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>500</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_eyeFlicker</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>1001</priority>
|
||||
<roopIntervalMin>10 </roopIntervalMin>
|
||||
<roopIntervalMax>30</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_blink</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,-0.005)</browOffset>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>12</duration>
|
||||
<browOffset>(0,0,-0.01)</browOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,-0.005)</browOffset>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>500</roopIntervalMax>
|
||||
<priority>1000</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
|
||||
</Defs>
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<!-- 裸体想法 -->
|
||||
<!-- <FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Thought_Naked</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>200</priority>
|
||||
<targetThoughtDefs>
|
||||
<li>Naked</li>
|
||||
<li>GroinUncovered_Disapproved_Male</li>
|
||||
<li>GroinUncovered_Disapproved_Female</li>
|
||||
<li>GroinOrChestUncovered_Disapproved_Male</li>
|
||||
<li>GroinOrChestUncovered_Disapproved_Female</li>
|
||||
<li>GroinChestOrHairUncovered_Disapproved_Male</li>
|
||||
<li>GroinChestOrHairUncovered_Disapproved_Female</li>
|
||||
<li>GroinChestHairOrFaceUncovered_Disapproved_Male</li>
|
||||
<li>GroinChestHairOrFaceUncovered_Disapproved_Female</li>
|
||||
</targetThoughtDefs>
|
||||
</FacialAnimation.FaceAnimationDef> -->
|
||||
|
||||
</Defs>
|
||||
@@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_AttackMelee</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<browOffset>(0,0,-0.00875)</browOffset>
|
||||
<lidOffset>(0.0,0,-0.005)</lidOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>AttackMelee</li>
|
||||
</targetJobs>
|
||||
<priority>10200</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>AttackMelee2</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>AttackMelee</li>
|
||||
</targetJobs>
|
||||
<priority>10201</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_AttackStatic</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<browOffset>(0,0,-0.00875)</browOffset>
|
||||
<lidOffset>(0.0,0,-0.005)</lidOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>AttackStatic</li>
|
||||
</targetJobs>
|
||||
<priority>10200</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>AttackStatic2</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>AttackStatic</li>
|
||||
</targetJobs>
|
||||
<priority>10201</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,67 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_DoBill</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<lidOffset>(0,0,-0.00625)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,-0.0075)</eyeballOffset>
|
||||
<headOffset>(0,0,-0.0007)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<browOffset>(0,0,-0.00325)</browOffset>
|
||||
<mouthOffset>(0,0,-0.00125)</mouthOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>0</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>DoBill</li>
|
||||
</targetJobs>
|
||||
<priority>10000</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_DoBill2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<lidOffset>(0,0,-0.0035)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,-0.00375)</eyeballOffset>
|
||||
<headOffset>(0,0,-0.0035)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<browOffset>(0,0,-0.00025)</browOffset>
|
||||
<mouthOffset>(0,0,-0.000625)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>6</duration>
|
||||
<lidOffset>(0,0,-0.007)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,-0.00525)</eyeballOffset>
|
||||
<headOffset>(0,0,-0.0075)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<browOffset>(0,0,-0.00375)</browOffset>
|
||||
<mouthOffset>(0,0,-0.00125)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<lidOffset>(0,0,-0.0035)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,-0.00375)</eyeballOffset>
|
||||
<headOffset>(0,0,-0.0035)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<browOffset>(0,0,-0.00025)</browOffset>
|
||||
<mouthOffset>(0,0,-0.000625)</mouthOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>100</roopIntervalMin>
|
||||
<roopIntervalMax>200</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>DoBill</li>
|
||||
</targetJobs>
|
||||
<priority>10001</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Goto</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
<headOffset>(0.0,0,-0.0025)</headOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Goto</li>
|
||||
</targetJobs>
|
||||
<priority>10300</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,32 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Ingest</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<headOffset>(0.0,0,0.0025)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<headOffset>(0.0,0,0.005)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>6</duration>
|
||||
<headOffset>(0.0,0,0)</headOffset>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>30</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>Ingest</li>
|
||||
</targetJobs>
|
||||
<priority>10</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,76 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_laydown</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>0</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>LayDown</li>
|
||||
</targetJobs>
|
||||
<priority>10001</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_laydown2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>240</duration>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>100</roopIntervalMin>
|
||||
<roopIntervalMax>500</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>LayDown</li>
|
||||
</targetJobs>
|
||||
<priority>10002</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_laydown3</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>15</duration>
|
||||
<lidOffset>(0.0,0,0.0015)</lidOffset>
|
||||
<headOffset>(0,0,0.0035)</headOffset>
|
||||
<browOffset>(0,0,0.00025)</browOffset>
|
||||
<mouthOffset>(0,0,0.000625)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>60</duration>
|
||||
<lidOffset>(0.0,0,0.00275)</lidOffset>
|
||||
<headOffset>(0,0,0.0075)</headOffset>
|
||||
<browOffset>(0,0,0.00375)</browOffset>
|
||||
<mouthOffset>(0,0,0.00125)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0.0,0,0.0015)</lidOffset>
|
||||
<headOffset>(0,0,0.0035)</headOffset>
|
||||
<browOffset>(0,0,0.00025)</browOffset>
|
||||
<mouthOffset>(0,0,0.000625)</mouthOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>40</roopIntervalMin>
|
||||
<roopIntervalMax>200</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>LayDown</li>
|
||||
</targetJobs>
|
||||
<priority>10003</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,80 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Lovin</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>8</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<headOffset>(0.0,0,0.00125)</headOffset>
|
||||
<browOffset>(0.0,0,-0.005)</browOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0.0,0,-0.001)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,0.0075)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>8</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<headOffset>(0.0,0,-0.00375)</headOffset>
|
||||
<browOffset>(0.0,0,-0.0075)</browOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0.0,0,-0.0015)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,0.0075)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.002)</mouthOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>8</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<headOffset>(0.0,0,0.0075)</headOffset>
|
||||
<browOffset>(0.0,0,0.00125)</browOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0.0,0,0.001)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,0.0075)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.001)</mouthOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<targetJobs>
|
||||
<li>Lovin</li>
|
||||
<li>MLI_Jobs_MassLoveIn</li>
|
||||
<li>MLI_Jobs_SingleLoveIn</li>
|
||||
</targetJobs>
|
||||
<priority>10400</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Lovin2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>240</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<headOffset>(0.0,0,0.01)</headOffset>
|
||||
<browOffset>(0.0,0,-0.00)</browOffset>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<lidOffset>(0.0,0,-0.001)</lidOffset>
|
||||
<mouthOffset>(0,0,-0.001)</mouthOffset>
|
||||
<eyeballOffset>(0.0,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>240</roopIntervalMin>
|
||||
<roopIntervalMax>240</roopIntervalMax>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<targetJobs>
|
||||
<li>Lovin</li>
|
||||
<li>MLI_Jobs_MassLoveIn</li>
|
||||
<li>MLI_Jobs_SingleLoveIn</li>
|
||||
</targetJobs>
|
||||
<priority>10500</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,33 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Mine</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.005)</lidOffset>
|
||||
<headOffset>(0,0,0)</headOffset>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>5</duration>
|
||||
<lidOffset>(0,0,0.01)</lidOffset>
|
||||
<headOffset>(0,0,-0.01)</headOffset>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthOffset>(0,0,-0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>0</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>Mine</li>
|
||||
</targetJobs>
|
||||
<priority>10000</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_RemoveApparel</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(-0.005,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0.005,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>RemoveApparel</li>
|
||||
</targetJobs>
|
||||
<priority>105</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_RemoveApparel2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<eyeballOffset>(0.0,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>RemoveApparel</li>
|
||||
</targetJobs>
|
||||
<priority>104</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_RemoveApparel3</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>120</duration>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<headOffset>(0.0,0,0.005)</headOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>RemoveApparel</li>
|
||||
</targetJobs>
|
||||
<priority>110</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,100 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Research</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<headOffset>(0,0,-0.01)</headOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.00375)</mouthOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Research</li>
|
||||
</targetJobs>
|
||||
<priority>10001</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Research2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<browOffset>(0,0,0.00325)</browOffset>
|
||||
<lidOffset>(0,0,0.00625)</lidOffset>
|
||||
<headOffset>(0,0,0.005)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>40</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>20</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>40</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>8</duration>
|
||||
<browOffset>(0,0,0.00325)</browOffset>
|
||||
<lidOffset>(0,0,0.00625)</lidOffset>
|
||||
<headOffset>(0,0,0.005)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>900</roopIntervalMin>
|
||||
<roopIntervalMax>1200</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>Research</li>
|
||||
</targetJobs>
|
||||
<priority>10002</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_SocialRelax</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>SocialRelax</li>
|
||||
</targetJobs>
|
||||
<priority>10200</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,35 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_StandAndBeSociallyActive</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<headOffset>(0.0,0,-0.0025)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<headOffset>(0.0,0,-0.005)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<headOffset>(0.0,0,0)</headOffset>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>100</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>StandAndBeSociallyActive</li>
|
||||
</targetJobs>
|
||||
<priority>10</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,53 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Strip</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(-0.005,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0.005,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Strip</li>
|
||||
</targetJobs>
|
||||
<priority>105</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>Strip2</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Strip</li>
|
||||
</targetJobs>
|
||||
<priority>106</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,84 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_WaitCombat</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wait_Combat</li>
|
||||
</targetJobs>
|
||||
<priority>10200</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Wait_Combat_Rare</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>15</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<browOffset>(0,0,-0.00375)</browOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0,0,-0.0025)</lidOffset>
|
||||
<headOffset>(0,0,-0.00625)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>45</duration>
|
||||
<browOffset>(0,0,-0.01)</browOffset>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<headOffset>(0,0,-0.0175)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.005)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>30</duration>
|
||||
<browOffset>(0,0,-0.01)</browOffset>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<headOffset>(0,0,-0.015)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.005)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>7</duration>
|
||||
<browOffset>(0,0,-0.00375)</browOffset>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0,0,-0.0025)</lidOffset>
|
||||
<headOffset>(0,0,-0.0085)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>30</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wait_Combat</li>
|
||||
</targetJobs>
|
||||
<priority>10301</priority>
|
||||
<roopIntervalMin>1000</roopIntervalMin>
|
||||
<roopIntervalMax>2000</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Wait_Downed</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>30</duration>
|
||||
<browOffset>(0,0,0.015)</browOffset>
|
||||
<lidOffset>(0,0,0.01)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,0.0075)</browOffset>
|
||||
<lidOffset>(0,0,0.005)</lidOffset>
|
||||
<headOffset>(0,0,0.005)</headOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>100</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>Wait_Downed</li>
|
||||
</targetJobs>
|
||||
<priority>10000</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>Wait_Downed2</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<lidOffset>(0,0,0.005)</lidOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wait_Downed</li>
|
||||
</targetJobs>
|
||||
<priority>10001</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,77 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Wear</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(-0.005,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0.005,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wear</li>
|
||||
</targetJobs>
|
||||
<priority>105</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Wear2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<eyeballOffset>(0.0,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wear</li>
|
||||
</targetJobs>
|
||||
<priority>104</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>Wear3</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>120</duration>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<headOffset>(0.0,0,0.005)</headOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wear</li>
|
||||
</targetJobs>
|
||||
<priority>110</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -63,9 +63,9 @@
|
||||
<slot>Adulthood</slot>
|
||||
<workDisables>
|
||||
<li>Cleaning</li>
|
||||
<li>Hauling</li>
|
||||
<!-- <li>Hauling</li> -->
|
||||
<li>Mining</li>
|
||||
<li>PlantWork</li>
|
||||
<!-- <li>PlantWork</li> -->
|
||||
<li>Animals</li>
|
||||
<li>Hunting</li>
|
||||
<li>Crafting</li>
|
||||
@@ -92,14 +92,14 @@
|
||||
<slot>Adulthood</slot>
|
||||
<workDisables>
|
||||
<li>Cleaning</li>
|
||||
<li>Hauling</li>
|
||||
<!-- <li>Hauling</li> -->
|
||||
<!-- <li>Mining</li> -->
|
||||
<li>PlantWork</li>
|
||||
<li>Animals</li>
|
||||
<li>Hunting</li>
|
||||
<li>Crafting</li>
|
||||
<li>Cooking</li>
|
||||
<li>Constructing</li>
|
||||
<!-- <li>Constructing</li> -->
|
||||
<li>Caring</li>
|
||||
<li>Social</li>
|
||||
<li>Artistic</li>
|
||||
@@ -121,21 +121,21 @@
|
||||
<slot>Adulthood</slot>
|
||||
<workDisables>
|
||||
<li>Cleaning</li>
|
||||
<li>Hauling</li>
|
||||
<!-- <li>Hauling</li> -->
|
||||
<li>Mining</li>
|
||||
<li>PlantWork</li>
|
||||
<li>Animals</li>
|
||||
<li>Hunting</li>
|
||||
<!-- <li>Crafting</li> -->
|
||||
<li>Cooking</li>
|
||||
<!-- <li>Constructing</li> -->
|
||||
<li>Constructing</li>
|
||||
<li>Caring</li>
|
||||
<li>Social</li>
|
||||
<!-- <li>Artistic</li> -->
|
||||
<li>Intellectual</li>
|
||||
</workDisables>
|
||||
<skillGains>
|
||||
<Construction>5</Construction>
|
||||
<Crafting>5</Crafting>
|
||||
</skillGains>
|
||||
|
||||
<spawnCategories>
|
||||
@@ -153,7 +153,7 @@
|
||||
<!-- <li>Hauling</li> -->
|
||||
<li>Mining</li>
|
||||
<li>PlantWork</li>
|
||||
<li>Animals</li>
|
||||
<!-- <li>Animals</li> -->
|
||||
<!-- <li>Hunting</li> -->
|
||||
<li>Crafting</li>
|
||||
<li>Cooking</li>
|
||||
@@ -173,6 +173,37 @@
|
||||
</spawnCategories>
|
||||
</AlienRace.AlienBackstoryDef>
|
||||
|
||||
<AlienRace.AlienBackstoryDef ParentName="ARA_BaseBackStory">
|
||||
<defName>Arachnae_Node_BS_Adult_Skyraider</defName>
|
||||
<title>阿拉克涅空天种</title>
|
||||
<titleShort>空天种</titleShort>
|
||||
<description>[PAWN_nameDef]是一只阿拉克涅空天种督虫,空天种作为阿拉克涅督虫中的精锐,进化出了强大的飞行能力,是巢穴中无可争议的空中霸主。\n\n作为为数不多拥有飞行能力的虫族,她可以从空中掠袭猎物并将其带至千米高空之上俯冲投下,只留其余猎物在地面无助的挣扎。</description>
|
||||
<slot>Adulthood</slot>
|
||||
<workDisables>
|
||||
<li>Cleaning</li>
|
||||
<!-- <li>Hauling</li> -->
|
||||
<li>Mining</li>
|
||||
<li>PlantWork</li>
|
||||
<!-- <li>Animals</li> -->
|
||||
<!-- <li>Hunting</li> -->
|
||||
<li>Crafting</li>
|
||||
<li>Cooking</li>
|
||||
<li>Constructing</li>
|
||||
<li>Caring</li>
|
||||
<li>Social</li>
|
||||
<li>Artistic</li>
|
||||
<li>Intellectual</li>
|
||||
</workDisables>
|
||||
<skillGains>
|
||||
<Shooting>5</Shooting>
|
||||
<Melee>5</Melee>
|
||||
</skillGains>
|
||||
|
||||
<spawnCategories>
|
||||
<li>ArachnaeNode_spawnCategories_Skyraider</li>
|
||||
</spawnCategories>
|
||||
</AlienRace.AlienBackstoryDef>
|
||||
|
||||
<AlienRace.AlienBackstoryDef ParentName="ARA_BaseBackStory">
|
||||
<defName>Arachnae_Node_BS_Adult_Facehugger</defName>
|
||||
<title>阿拉克涅原虫种</title>
|
||||
|
||||
@@ -679,6 +679,14 @@
|
||||
<solid>false</solid>
|
||||
<bleedRate>1.5</bleedRate>
|
||||
</BodyPartDef>
|
||||
<BodyPartDef>
|
||||
<defName>ARA_Sickle</defName>
|
||||
<label>巨镰</label>
|
||||
<hitPoints>25</hitPoints>
|
||||
<skinCovered>false</skinCovered>
|
||||
<solid>true</solid>
|
||||
<bleedRate>0</bleedRate>
|
||||
</BodyPartDef>
|
||||
|
||||
<BodyPartGroupDef>
|
||||
<defName>ARA_Genitalias</defName>
|
||||
@@ -695,6 +703,12 @@
|
||||
<label>毒针器官</label>
|
||||
<listOrder>126</listOrder>
|
||||
</BodyPartGroupDef>
|
||||
<BodyPartGroupDef>
|
||||
<defName>ARA_Sickles</defName>
|
||||
<label>巨镰器官</label>
|
||||
<listOrder>126</listOrder>
|
||||
</BodyPartGroupDef>
|
||||
|
||||
|
||||
<BodyDef>
|
||||
<defName>ArachnaeMyrmecocystus_Body</defName>
|
||||
@@ -2124,8 +2138,8 @@
|
||||
<li>
|
||||
<def>ARA_Tail</def>
|
||||
<height>Bottom</height>
|
||||
<depth>Inside</depth>
|
||||
<coverage>0.25</coverage>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
@@ -2159,6 +2173,24 @@
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Sickle</def>
|
||||
<customLabel>左镰刀</customLabel>
|
||||
<coverage>0.1</coverage>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>ARA_Sickles</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Sickle</def>
|
||||
<customLabel>右镰刀</customLabel>
|
||||
<coverage>0.1</coverage>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>ARA_Sickles</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</corePart>
|
||||
</BodyDef>
|
||||
|
||||
34
1.6/1.6/Defs/GraphicStateDefs/ARA_Flight_Graphics.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<!-- North Frames -->
|
||||
<GraphicStateDef><defName>ARA_FlyNorth_0</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_1_north</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyNorth_1</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_2_north</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyNorth_2</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_3_north</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyNorth_3</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_4_north</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyNorth_4</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_5_north</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyNorth_5</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_6_north</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyNorth_6</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_7_north</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyNorth_7</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_8_north</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
|
||||
<!-- East Frames -->
|
||||
<GraphicStateDef><defName>ARA_FlyEast_0</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_1_east</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyEast_1</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_2_east</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyEast_2</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_3_east</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyEast_3</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_4_east</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyEast_4</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_5_east</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyEast_5</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_6_east</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyEast_6</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_7_east</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlyEast_7</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_8_east</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
|
||||
<!-- South Frames -->
|
||||
<GraphicStateDef><defName>ARA_FlySouth_0</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_1_south</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlySouth_1</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_2_south</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlySouth_2</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_3_south</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlySouth_3</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_4_south</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlySouth_4</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_5_south</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlySouth_5</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_6_south</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlySouth_6</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_7_south</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
<GraphicStateDef><defName>ARA_FlySouth_7</defName><defaultGraphicData><graphicClass>Graphic_Single</graphicClass><texPath>Things/Pawn/Animal/Goose/Goose_Flying_8_south</texPath><drawSize>1.35</drawSize></defaultGraphicData></GraphicStateDef>
|
||||
|
||||
</Defs>
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
<HeadTypeDef ParentName="ARA_FemaleHeadtypeBase">
|
||||
<defName>ARA_QUEEN_Female_AverageNormalA</defName>
|
||||
<graphicPath>Textures/Pawns/General/Invisible/Inv</graphicPath>
|
||||
<graphicPath>ArachnaeSwarm/Things/General/Invisible/Inv</graphicPath>
|
||||
</HeadTypeDef>
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
<nodeClass>PawnRenderNode_AttachmentHead</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_FlipWhenCrawling</workerClass>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_Facehugger_Upperhead</texPath>
|
||||
<colorType>Skin</colorType>
|
||||
<parentTagDef>Head</parentTagDef>
|
||||
<useSkinShader>false</useSkinShader>
|
||||
<useRottenColor>false</useRottenColor>
|
||||
|
||||
@@ -4,7 +4,21 @@
|
||||
<JobDef>
|
||||
<defName>ARA_StartInteractiveProduction</defName>
|
||||
<driverClass>ArachnaeSwarm.JobDriver_StartProduction</driverClass>
|
||||
<reportString>正在启动生产 TargetA.</reportString>
|
||||
<reportString>正在启动孵化 TargetA.</reportString>
|
||||
<allowOpportunisticPrefix>true</allowOpportunisticPrefix>
|
||||
</JobDef>
|
||||
|
||||
<JobDef>
|
||||
<defName>ARA_AddToQueueJob</defName>
|
||||
<driverClass>ArachnaeSwarm.JobDriver_AddToQueue</driverClass>
|
||||
<reportString>正在添加虫族孵化订单。</reportString>
|
||||
<allowOpportunisticPrefix>true</allowOpportunisticPrefix>
|
||||
</JobDef>
|
||||
|
||||
<JobDef>
|
||||
<defName>ARA_AddProcessToQueueJob</defName>
|
||||
<driverClass>ArachnaeSwarm.JobDriver_AddProcessToQueue</driverClass>
|
||||
<reportString>正在添加物品孵化订单。</reportString>
|
||||
<allowOpportunisticPrefix>true</allowOpportunisticPrefix>
|
||||
</JobDef>
|
||||
|
||||
|
||||
@@ -12,12 +12,6 @@
|
||||
<maxGenerationAge>30</maxGenerationAge>
|
||||
<minGenerationAge>10</minGenerationAge>
|
||||
<canBeScattered>false</canBeScattered>
|
||||
<abilities>
|
||||
<li>ARA_EggSpew</li>
|
||||
<li>ARA_EggSpew_BaseFighter</li>
|
||||
<li>ARA_AcidSprayBurst_Queen</li>
|
||||
<li>ARA_BindDrone</li>
|
||||
</abilities>
|
||||
<xenotypeSet>
|
||||
<xenotypeChances>
|
||||
|
||||
@@ -166,13 +160,16 @@
|
||||
</li>
|
||||
</backstoryFiltersOverride>
|
||||
<abilities>
|
||||
<li>ARA_EggSpewBioforgeIncubator</li>
|
||||
<li>ARA_BioforgeIncubator_ClothBase</li>
|
||||
<li>ARA_BioforgeIncubator_AcidBase</li>
|
||||
<li>ARA_BioforgeIncubator_ToxicNeedleBase</li>
|
||||
<li>ARA_BioforgeIncubator_BoneBase</li>
|
||||
</abilities>
|
||||
<apparelTags>
|
||||
</apparelTags>
|
||||
<apparelMoney>0</apparelMoney>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<defName>ArachnaeNode_Race_Facehugger</defName>
|
||||
<label>阿拉克涅原虫种</label>
|
||||
<race>ArachnaeNode_Race_Facehugger</race>
|
||||
@@ -216,6 +213,34 @@
|
||||
</apparelTags>
|
||||
<apparelMoney>0</apparelMoney>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<defName>ArachnaeNode_Race_Skyraider</defName>
|
||||
<label>阿拉克涅空天种</label>
|
||||
<race>ArachnaeNode_Race_Skyraider</race>
|
||||
<defaultFactionType>PlayerColony</defaultFactionType>
|
||||
<invNutrition>0</invNutrition>
|
||||
<flyingAnimationFramePathPrefix>Things/Pawn/Animal/Goose/Goose_Flying_</flyingAnimationFramePathPrefix>
|
||||
<flyingAnimationDrawSize>1.35</flyingAnimationDrawSize>
|
||||
<flyingAnimationFrameCount>2</flyingAnimationFrameCount>
|
||||
<flyingAnimationTicksPerFrame>2</flyingAnimationTicksPerFrame>
|
||||
<flyingAnimationInheritColors>false</flyingAnimationInheritColors>
|
||||
<backstoryFiltersOverride>
|
||||
<li>
|
||||
<categories>
|
||||
<li>ArachnaeNode_spawnCategoriesA</li>
|
||||
<li>ArachnaeNode_spawnCategories_Fighter</li>
|
||||
</categories>
|
||||
</li>
|
||||
</backstoryFiltersOverride>
|
||||
<abilities>
|
||||
<li>ARA_BaseRace_Acid_Launcher</li>
|
||||
<li>ARA_AcidSprayBurst</li>
|
||||
<li>ARA_Toxic_Needle_Fire</li>
|
||||
</abilities>
|
||||
<apparelTags>
|
||||
</apparelTags>
|
||||
<apparelMoney>0</apparelMoney>
|
||||
</PawnKindDef>
|
||||
|
||||
<PawnKindDef Name="ARA_InsectKindBase" ParentName="AnimalKindBase" Abstract="True">
|
||||
<defaultFactionType>PlayerColony</defaultFactionType>
|
||||
@@ -231,7 +256,7 @@
|
||||
</li>
|
||||
</moveSpeedFactorByTerrainTag>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<!--<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Slavey</defName>
|
||||
<label>阿拉克涅苦役种</label>
|
||||
<race>ArachnaeBase_Race_Slavey</race>
|
||||
@@ -252,7 +277,7 @@
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
</PawnKindDef>-->
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Scavenger</defName>
|
||||
<label>阿拉克涅食腐种</label>
|
||||
@@ -299,7 +324,7 @@
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Acid</defName>
|
||||
<label>阿拉克涅酸嗜种</label>
|
||||
<label>阿拉克涅酸噬种</label>
|
||||
<race>ArachnaeBase_Race_Acid</race>
|
||||
<lifeStages>
|
||||
<li>
|
||||
|
||||
6
1.6/1.6/Defs/PawnRenderNodeTagDefs/ARA_NodeTagDefs.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<PawnRenderNodeTagDef>
|
||||
<defName>ARA_Flight_Attachment</defName>
|
||||
</PawnRenderNodeTagDef>
|
||||
</Defs>
|
||||
159
1.6/1.6/Defs/PawnRenderTreeDefs/ARA_RenderTree.xml
Normal file
@@ -0,0 +1,159 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<PawnRenderTreeDef>
|
||||
<defName>ARA_ArachnaeRenderTree</defName>
|
||||
<root Class="PawnRenderNodeProperties_Parent">
|
||||
<debugLabel>Root</debugLabel>
|
||||
<tagDef>Root</tagDef>
|
||||
<children>
|
||||
<li>
|
||||
<debugLabel>Body</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Body</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Body</workerClass>
|
||||
<tagDef>Body</tagDef>
|
||||
<skipFlag>Body</skipFlag>
|
||||
<colorType>Skin</colorType>
|
||||
<useRottenColor>true</useRottenColor>
|
||||
<useSkinShader>true</useSkinShader>
|
||||
<children>
|
||||
<li Class="PawnRenderNodeProperties_Tattoo" MayRequire="Ludeon.RimWorld.Ideology">
|
||||
<debugLabel>Body tattoo</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Tattoo_Body</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Body_Tattoo</workerClass>
|
||||
<colorType>Skin</colorType>
|
||||
<useRottenColor>true</useRottenColor>
|
||||
<baseLayer>2</baseLayer>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Wounds - pre apparel</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayWounds</workerClass>
|
||||
<overlayLayer>Body</overlayLayer>
|
||||
<baseLayer>8</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Swaddle" MayRequire="Ludeon.RimWorld.Biotech">
|
||||
<debugLabel>Baby swaddle</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Swaddle</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Swaddle</workerClass>
|
||||
<texPath>Things/Pawn/Humanlike/Apparel/SwaddledBaby/Swaddled_Child</texPath>
|
||||
<swaddleColorOffset>0.1</swaddleColorOffset>
|
||||
<brightnessRange>0.6~0.89</brightnessRange>
|
||||
<baseLayer>10</baseLayer>
|
||||
</li>
|
||||
|
||||
<!-- ===== OUR CUSTOM NODE INSERTION START ===== -->
|
||||
<!-- Using Milira's exact structure for testing -->
|
||||
<li>
|
||||
<debugLabel>Arachnae Flight Attachment</debugLabel>
|
||||
<tagDef>ARA_Flight_Attachment</tagDef>
|
||||
<texPath>ArachnaeSwarm/Things/General/Invisible/Inv</texPath>
|
||||
<baseLayer>60</baseLayer>
|
||||
<drawData>
|
||||
<dataSouth>
|
||||
<layer>-10</layer>
|
||||
</dataSouth>
|
||||
</drawData>
|
||||
</li>
|
||||
<!-- ===== OUR CUSTOM NODE INSERTION END ===== -->
|
||||
|
||||
<li Class="PawnRenderNodeProperties_Parent">
|
||||
<debugLabel>Apparel root</debugLabel>
|
||||
<tagDef>ApparelBody</tagDef>
|
||||
<baseLayer>20</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Wounds - post apparel</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayWounds</workerClass>
|
||||
<overlayOverApparel>true</overlayOverApparel>
|
||||
<overlayLayer>Body</overlayLayer>
|
||||
<baseLayer>30</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Firefoam</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayFirefoam</workerClass>
|
||||
<overlayLayer>Body</overlayLayer>
|
||||
<baseLayer>40</baseLayer>
|
||||
</li>
|
||||
</children>
|
||||
</li>
|
||||
<li>
|
||||
<debugLabel>Head stump</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Stump</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Stump</workerClass>
|
||||
<texPath>Things/Pawn/Humanlike/Heads/None_Average_Stump</texPath>
|
||||
<baseLayer>50</baseLayer>
|
||||
<colorType>Skin</colorType>
|
||||
<skipFlag>Head</skipFlag>
|
||||
<useSkinShader>true</useSkinShader>
|
||||
<useRottenColor>true</useRottenColor>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
</li>
|
||||
<li>
|
||||
<debugLabel>Head</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Head</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Head</workerClass>
|
||||
<tagDef>Head</tagDef>
|
||||
<skipFlag>Head</skipFlag>
|
||||
<baseLayer>50</baseLayer>
|
||||
<colorType>Skin</colorType>
|
||||
<useRottenColor>true</useRottenColor>
|
||||
<useSkinShader>true</useSkinShader>
|
||||
<children>
|
||||
<li Class="PawnRenderNodeProperties_Tattoo" MayRequire="Ludeon.RimWorld.Ideology">
|
||||
<debugLabel>Head tattoo</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Tattoo_Head</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Tattoo_Head</workerClass>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
<colorType>Skin</colorType>
|
||||
<baseLayer>52</baseLayer>
|
||||
</li>
|
||||
<li>
|
||||
<debugLabel>Beard</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Beard</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Beard</workerClass>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
<colorType>Hair</colorType>
|
||||
<skipFlag>Beard</skipFlag>
|
||||
<baseLayer>60</baseLayer>
|
||||
</li>
|
||||
<li>
|
||||
<debugLabel>Hair</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Hair</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_FlipWhenCrawling</workerClass>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
<colorType>Hair</colorType>
|
||||
<skipFlag>Hair</skipFlag>
|
||||
<baseLayer>62</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Head wounds</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayWounds</workerClass>
|
||||
<overlayLayer>Head</overlayLayer>
|
||||
<baseLayer>65</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Parent">
|
||||
<debugLabel>Apparel root</debugLabel>
|
||||
<tagDef>ApparelHead</tagDef>
|
||||
<baseLayer>70</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Firefoam</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayFirefoam</workerClass>
|
||||
<overlayLayer>Head</overlayLayer>
|
||||
<baseLayer>85</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Status overlay</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayStatus</workerClass>
|
||||
<baseLayer>100</baseLayer>
|
||||
</li>
|
||||
</children>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Carried">
|
||||
<debugLabel>Weapon/carried thing</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_Carried</workerClass>
|
||||
</li>
|
||||
</children>
|
||||
</root>
|
||||
</PawnRenderTreeDef>
|
||||
</Defs>
|
||||
238
1.6/1.6/Defs/RecipeDefs/ARA_Recipes_Upgrade.xml
Normal file
@@ -0,0 +1,238 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<HediffDef>
|
||||
<defName>ARA_Queen_0_Stage</defName>
|
||||
<label>进化等级——无</label>
|
||||
<description>这只阿拉克涅女皇种刚刚步入纷乱的边缘世界,其基因表达尚未明晰,她也需要更多的经验以思考要如何带领巢穴前进。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<maxSeverity>2.0</maxSeverity>
|
||||
<!-- <stages>
|
||||
<li>
|
||||
<becomeVisible>ture</becomeVisible>
|
||||
</li>
|
||||
<li>
|
||||
<minSeverity>1.01</minSeverity>
|
||||
<becomeVisible>false</becomeVisible>
|
||||
</li>
|
||||
</stages> -->
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_GiveAbility">
|
||||
<abilityDefs>
|
||||
<li>ARA_EggSpew</li>
|
||||
<li>ARA_BindDrone</li>
|
||||
<li>ARA_Queen_Upgrade_1_Stage</li>
|
||||
<li>ARA_AcidSprayBurst_Queen</li>
|
||||
</abilityDefs>
|
||||
</li>
|
||||
<li Class="HediffCompProperties_RemoveIfOtherHediff">
|
||||
<hediffs>
|
||||
<li>ARA_Queen_1_Stage_Transition_Period</li>
|
||||
</hediffs>
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<AbilityDef>
|
||||
<defName>ARA_Queen_Upgrade_1_Stage</defName>
|
||||
<label>女皇种进化——阶段1</label>
|
||||
<description>使女皇种发生内驱性进化,解锁下一等级的虫群植入物和阿拉克涅卵</description>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Queen_Upgrade_1_Stage</iconPath>
|
||||
<cooldownTicksRange>1800</cooldownTicksRange>
|
||||
<hostile>false</hostile>
|
||||
<groupAbility>true</groupAbility>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>true</disableGizmoWhileUndrafted>
|
||||
<aiCanUse>true</aiCanUse>
|
||||
<ai_IsOffensive>true</ai_IsOffensive>
|
||||
<targetRequired>false</targetRequired>
|
||||
<jobDef>CastAbilityOnThing</jobDef>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>1</range>
|
||||
<warmupTime>12</warmupTime>
|
||||
<soundCast>AcidSpray_Resolve</soundCast>
|
||||
<violent>false</violent>
|
||||
<targetable>false</targetable>
|
||||
<targetParams>
|
||||
<canTargetSelf>True</canTargetSelf>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityGiveHediff">
|
||||
<compClass>CompAbilityEffect_GiveHediff</compClass>
|
||||
<hediffDef>ARA_Queen_1_Stage_Transition_Period</hediffDef>
|
||||
<onlyApplyToSelf>True</onlyApplyToSelf>
|
||||
<replaceExisting>true</replaceExisting>
|
||||
<severity>1</severity>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_2WMT</requiredResearch>
|
||||
<failMessage>需要科技 基因节点WMT-2"内在突破" 以解锁进化</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<HediffDef>
|
||||
<defName>ARA_Queen_1_Stage_Transition_Period</defName>
|
||||
<label>女皇种进化——阶段1</label>
|
||||
<description>使女皇种发生内驱性进化,解锁下一等级的虫群植入物和阿拉克涅卵</description>
|
||||
<!-- <hediffClass>HediffWithComps</hediffClass> -->
|
||||
<hediffClass>Hediff_High</hediffClass>
|
||||
<initialSeverity>1</initialSeverity>
|
||||
<maxSeverity>1.01</maxSeverity>
|
||||
<alwaysShowSeverity>true</alwaysShowSeverity>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_ReplaceHediff">
|
||||
<hediffs>
|
||||
<li>
|
||||
<hediff>ARA_Queen_1_Stage</hediff>
|
||||
<severityRange>0.02~0.15</severityRange>
|
||||
</li>
|
||||
</hediffs>
|
||||
<message>{PAWN_nameDef} 获得了一定的见解以发展巢穴,她可以用基因的织网编织更加复杂更加强大的虫群。</message>
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<HediffDef>
|
||||
<defName>ARA_Queen_1_Stage</defName>
|
||||
<label>进化等级——等级1</label>
|
||||
<description>这只阿拉克涅女皇种获得了一定的见解以发展巢穴,她可以用基因的织网编织更加复杂更加强大的虫群。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<maxSeverity>1.0</maxSeverity>
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_GiveAbility">
|
||||
<abilityDefs>
|
||||
<li>ARA_EggSpew</li>
|
||||
<li>ARA_BindDrone</li>
|
||||
<li>ARA_AcidSprayBurst_Queen</li>
|
||||
<li>ARA_Queen_Upgrade_2_Stage</li>
|
||||
</abilityDefs>
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<AbilityDef>
|
||||
<defName>ARA_Queen_Upgrade_2_Stage</defName>
|
||||
<label>女皇种进化——阶段2</label>
|
||||
<description>使女皇种发生内驱性进化,解锁下一等级的虫群植入物和阿拉克涅卵</description>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Queen_Upgrade_2_Stage</iconPath>
|
||||
<cooldownTicksRange>1800</cooldownTicksRange>
|
||||
<hostile>false</hostile>
|
||||
<groupAbility>true</groupAbility>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>true</disableGizmoWhileUndrafted>
|
||||
<aiCanUse>true</aiCanUse>
|
||||
<ai_IsOffensive>true</ai_IsOffensive>
|
||||
<targetRequired>false</targetRequired>
|
||||
<jobDef>CastAbilityOnThing</jobDef>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>1</range>
|
||||
<warmupTime>12</warmupTime>
|
||||
<soundCast>AcidSpray_Resolve</soundCast>
|
||||
<violent>false</violent>
|
||||
<targetable>false</targetable>
|
||||
<targetParams>
|
||||
<canTargetSelf>True</canTargetSelf>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityGiveHediff">
|
||||
<compClass>CompAbilityEffect_GiveHediff</compClass>
|
||||
<hediffDef>ARA_Queen_2_Stage_Transition_Period</hediffDef>
|
||||
<onlyApplyToSelf>True</onlyApplyToSelf>
|
||||
<replaceExisting>true</replaceExisting>
|
||||
<severity>1</severity>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_2WMT</requiredResearch>
|
||||
<failMessage>需要科技 基因节点WMT-2"内在突破" 以解锁进化</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<HediffDef>
|
||||
<defName>ARA_Queen_2_Stage_Transition_Period</defName>
|
||||
<label>女皇种进化——阶段2</label>
|
||||
<description>使女皇种发生内驱性进化,解锁下一等级的虫群植入物和阿拉克涅卵</description>
|
||||
<!-- <hediffClass>HediffWithComps</hediffClass> -->
|
||||
<hediffClass>Hediff_High</hediffClass>
|
||||
<initialSeverity>1</initialSeverity>
|
||||
<maxSeverity>1.01</maxSeverity>
|
||||
<alwaysShowSeverity>true</alwaysShowSeverity>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_ReplaceHediff">
|
||||
<hediffs>
|
||||
<li>
|
||||
<hediff>ARA_Queen_2_Stage</hediff>
|
||||
<severityRange>0.02~0.15</severityRange>
|
||||
</li>
|
||||
</hediffs>
|
||||
<message>{PAWN_nameDef} 获得了一定的见解以发展巢穴,她可以用基因的织网编织更加复杂更加强大的虫群。</message>
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<HediffDef>
|
||||
<defName>ARA_Queen_2_Stage</defName>
|
||||
<label>进化等级——等级2</label>
|
||||
<description>这只阿拉克涅女皇种获得了一定的见解以发展巢穴,她可以用基因的织网编织更加复杂更加强大的虫群。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<maxSeverity>1.0</maxSeverity>
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_GiveAbility">
|
||||
<abilityDefs>
|
||||
<li>ARA_EggSpew</li>
|
||||
<li>ARA_BindDrone</li>
|
||||
<li>ARA_AcidSprayBurst_Queen</li>
|
||||
<!-- <li>ARA_Queen_Upgrade_2_Stage</li> -->
|
||||
</abilityDefs>
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
|
||||
<RecipeDef ParentName="SurgeryInstallBodyPartArtificialBase">
|
||||
<defName>ARA_Install_</defName>
|
||||
<label>安装暗物质能源炉</label>
|
||||
<description>为合成人安装暗物质能源炉。</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>WULA_Energy_Furnace_DM_Engine</ThingDef>
|
||||
<HediffDef>WULA_Energy_Furnace_Hediff_DM_Engine</HediffDef>
|
||||
</descriptionHyperlinks>
|
||||
<jobString>安装暗物质能源炉中</jobString>
|
||||
<anesthetize>false</anesthetize>
|
||||
<ingredients Inherit="False">
|
||||
<li>
|
||||
<filter>
|
||||
<thingDefs>
|
||||
<li>WULA_Energy_Furnace_DM_Engine</li>
|
||||
</thingDefs>
|
||||
</filter>
|
||||
<count>1</count>
|
||||
</li>
|
||||
</ingredients>
|
||||
|
||||
<fixedIngredientFilter>
|
||||
<thingDefs>
|
||||
<li>WULA_Energy_Furnace_DM_Engine</li>
|
||||
</thingDefs>
|
||||
</fixedIngredientFilter>
|
||||
<appliedOnFixedBodyParts>
|
||||
<li>WULA_Energy_Furnace_Bodypart</li>
|
||||
</appliedOnFixedBodyParts>
|
||||
<addsHediff>WULA_Energy_Furnace_Hediff_DM_Engine</addsHediff>
|
||||
<recipeUsers Inherit="False">
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</recipeUsers>
|
||||
</RecipeDef>
|
||||
</Defs>
|
||||
@@ -15,6 +15,18 @@
|
||||
<researchViewY>3.20</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
</ResearchProjectDef>
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_2WMT</defName>
|
||||
<label>基因节点WMT-2"内在突破"</label>
|
||||
<description>允许女皇种进化到下一个阶段。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>4.50</researchViewX>
|
||||
<researchViewY>3.10</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<!-- 酸类发展 -->
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_6VXI</defName>
|
||||
@@ -43,8 +55,8 @@
|
||||
<!-- 孵化发展 -->
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_1KYC</defName>
|
||||
<label>基因节点KYC-1"武斗虫"</label>
|
||||
<description>允许女皇种孵化新的虫族——战士种和跃袭种。</description>
|
||||
<label>基因节点KYC-1"战士虫"</label>
|
||||
<description>允许女皇种孵化新的虫族——战士种。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>1.00</researchViewX>
|
||||
<researchViewY>2.20</researchViewY>
|
||||
@@ -93,7 +105,7 @@
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_4DIL</defName>
|
||||
<label>基因节点DIL-4"编织"</label>
|
||||
<description>允许工艺种孵化覆壳茧,为虫族提供基础防具。</description>
|
||||
<description>允许工艺种孵化织物茧,为虫族提供基础防具。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>1.00</researchViewX>
|
||||
<researchViewY>5.10</researchViewY>
|
||||
@@ -128,18 +140,6 @@
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<!-- 工艺种进化 -->
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_2WMT</defName>
|
||||
<label>基因节点WMT-2"进化"</label>
|
||||
<description>允许女皇种为工艺种执行进化手术,使其可以孵化更复杂的茧。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>4.50</researchViewX>
|
||||
<researchViewY>3.10</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<!-- 建筑发展 -->
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_5SHL</defName>
|
||||
|
||||
15
1.6/1.6/Defs/Stats/ARA_Stats.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<StatDef>
|
||||
<defName>ARA_IncubationSpeedFactor</defName>
|
||||
<label>孵化速度</label>
|
||||
<description>应用于孵化池的孵化速度乘数。</description>
|
||||
<category>Building</category>
|
||||
<defaultBaseValue>1</defaultBaseValue>
|
||||
<minValue>0.001</minValue>
|
||||
<toStringStyle>PercentZero</toStringStyle>
|
||||
<showIfUndefined>false</showIfUndefined>
|
||||
</StatDef>
|
||||
|
||||
</Defs>
|
||||
@@ -10,6 +10,7 @@
|
||||
<ComfyTemperatureMin>-3000</ComfyTemperatureMin>
|
||||
<ComfyTemperatureMax>3000</ComfyTemperatureMax>
|
||||
<Wildness>0</Wildness>
|
||||
<Fertility MayRequire="Ludeon.RimWorld.Biotech">0</Fertility>
|
||||
</statBases>
|
||||
<uiIconScale>1.1</uiIconScale>
|
||||
|
||||
@@ -59,9 +60,11 @@
|
||||
<li>(0.0, 0, -0.12)</li>
|
||||
<li>(-0.07, 0, 0.08)</li>
|
||||
</headPosPerRotation>
|
||||
<!-- <deathAction Class="DeathActionProperties_Vanish">
|
||||
<deathAction Class="DeathActionProperties_Vanish">
|
||||
<workerClass>DeathActionWorker_Vanish</workerClass>
|
||||
</deathAction> -->
|
||||
<filth>Filth_Slime</filth>
|
||||
<filthCountRange>1~3</filthCountRange>
|
||||
</deathAction>
|
||||
</race>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
@@ -80,33 +83,6 @@
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ArachnaeBase_Race">
|
||||
<defName>ArachnaeBase_Race_Slavey</defName>
|
||||
<label>阿拉克涅苦役种</label>
|
||||
<description>阿拉克涅辅虫之一,智力低下,能执行搬运工作,注定在度过短暂的时光后死亡。</description>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AdvancedTraining">
|
||||
<!-- <skillLevels>
|
||||
<li>
|
||||
<skill>Plants</skill>
|
||||
<level>8</level>
|
||||
</li>
|
||||
<li>
|
||||
<skill>Mining</skill>
|
||||
<level>8</level>
|
||||
</li>
|
||||
</skillLevels> -->
|
||||
<trainables>
|
||||
<li>
|
||||
<trainable>Haul</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
</trainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ArachnaeBase_Race">
|
||||
<defName>ArachnaeBase_Race_Scavenger</defName>
|
||||
<label>阿拉克涅食腐种</label>
|
||||
@@ -160,7 +136,7 @@
|
||||
<ThingDef ParentName="ArachnaeBase_Race">
|
||||
<defName>ArachnaeBase_Race_Maid</defName>
|
||||
<label>阿拉克涅家政种</label>
|
||||
<description>阿拉克涅辅虫之一,智力低下,可以执行清洁工作,注定在度过短暂的时光后死亡。</description>
|
||||
<description>阿拉克涅辅虫之一,智力低下,可以执行清洁和搬运工作,注定在度过短暂的时光后死亡。</description>
|
||||
<race>
|
||||
<specialTrainables>
|
||||
<li>ARA_Cleaning</li>
|
||||
@@ -174,6 +150,11 @@
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>Haul</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
</trainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
</li>
|
||||
@@ -181,7 +162,7 @@
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BaseDrone" MayRequire="Ludeon.RimWorld.Odyssey">
|
||||
<defName>ArachnaeBase_Race_Acid</defName>
|
||||
<label>阿拉克涅酸嗜种</label>
|
||||
<label>阿拉克涅酸噬种</label>
|
||||
<description>阿拉克涅辅虫之一,智力低下,一般被作为活体炮弹打出,击中敌人后若是还没散架,就会继续依靠带酸液的颚撕咬敌军。</description>
|
||||
<race>
|
||||
<thinkTreeConstant>WarUrchinConstant</thinkTreeConstant>
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
<li>
|
||||
<name>ArachnaeNode Hair</name>
|
||||
<userCustomizable>true</userCustomizable>
|
||||
<path>ArachnaeSwarm/Hair/ARA_Scattered_Hair_Long</path>
|
||||
<path>ArachnaeSwarm/Hair/ARA_ArachnaeNode_Hair</path>
|
||||
<inFrontOfBody>true</inFrontOfBody>
|
||||
<layerInvert>false</layerInvert>
|
||||
<colorChannel>hair</colorChannel>
|
||||
@@ -85,9 +85,6 @@
|
||||
<drawSize>1</drawSize>
|
||||
<alignWithHead>true</alignWithHead>
|
||||
<scaleWithPawnDrawsize>true</scaleWithPawnDrawsize>
|
||||
<useSkipFlags>
|
||||
<li></li>
|
||||
</useSkipFlags>
|
||||
<conditions>
|
||||
<BodyPart>
|
||||
<bodyPart>Head</bodyPart>
|
||||
@@ -126,9 +123,6 @@
|
||||
<alignWithHead>true</alignWithHead>
|
||||
<scaleWithPawnDrawsize>true</scaleWithPawnDrawsize>
|
||||
<linkVariantIndexWithPrevious>true</linkVariantIndexWithPrevious>
|
||||
<useSkipFlags>
|
||||
<li></li>
|
||||
</useSkipFlags>
|
||||
<conditions>
|
||||
<BodyPart>
|
||||
<bodyPart>Head</bodyPart>
|
||||
@@ -678,7 +672,7 @@
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_Myrmecocystus</defName>
|
||||
<label>阿拉克涅蜜罐种</label>
|
||||
<description>阿拉克涅督虫之一,拥有非常广泛的食谱,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。这种督虫非常脆弱,并且没有可以接入武装器官的副肢,除了生产虫蜜外能执行烹饪工作。\n\n作为督虫,她可以繁育并监管若干阿拉克涅苦役种辅虫,以协助巢穴进行搬运工作。</description>
|
||||
<description>阿拉克涅督虫之一,拥有非常广泛的食谱,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。这种督虫除了生产虫蜜外也能执行烹饪和种植工作。\n\n作为督虫,她可以繁育并监管若干阿拉克涅食腐种辅虫,以协助巢穴进行收割和播种工作。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
@@ -722,8 +716,8 @@
|
||||
<cooldownTicks>9999</cooldownTicks>
|
||||
<productionQueue>
|
||||
<li>
|
||||
<pawnKind>ArachnaeBase_Race_Slavey</pawnKind>
|
||||
<count>4</count>
|
||||
<pawnKind>ArachnaeBase_Race_Scavenger</pawnKind>
|
||||
<count>2</count>
|
||||
<cooldownTicks>1000</cooldownTicks>
|
||||
</li>
|
||||
</productionQueue>
|
||||
@@ -780,7 +774,7 @@
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_ShieldHead</defName>
|
||||
<label>阿拉克涅盾头种</label>
|
||||
<description>阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,防御力超群的同时还可以定时剥落甲壳素供虫巢使用。坚韧的鳌刺挥舞起来非常缓慢但是可以破开岩壁,以完成虫群的采矿工作。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。</description>
|
||||
<description>阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,防御力超群的同时还可以定时剥落甲壳素供虫巢使用。坚韧的鳌刺挥舞起来非常缓慢但是可以破开岩壁和固定结构,以完成虫群的采矿和建筑工作。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
@@ -813,7 +807,7 @@
|
||||
</south>
|
||||
<north>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</north>
|
||||
</north>
|
||||
<east>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</east>
|
||||
@@ -904,7 +898,7 @@
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith</defName>
|
||||
<label>阿拉克涅工艺种</label>
|
||||
<description>阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。除此之外,她们的辅肢比普通的虫族更加复杂灵活,这使得她们不仅可以执行手工、建造、艺术等复杂的工作,也可以操作武装器官——虽然她们本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁工作。</description>
|
||||
<description>阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。除此之外,她们的辅肢比普通的虫族更加复杂灵活,这使得她们不仅可以执行手工、艺术等复杂的工作,也可以操作武装器官——虽然她们本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁和搬运工作。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
@@ -917,7 +911,7 @@
|
||||
<offsets>
|
||||
<north>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</north>
|
||||
</north>
|
||||
</offsets>
|
||||
</li>
|
||||
</bodyAddons>
|
||||
@@ -990,10 +984,99 @@
|
||||
</lifeStageAges>
|
||||
</race>
|
||||
</AlienRace.ThingDef_AlienRace>
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_Fighter</defName>
|
||||
<label>阿拉克涅战士种</label>
|
||||
<description>阿拉克涅督虫之一,是巢穴中真正的战士,除了战斗外也可以进行狩猎和驯兽工作。其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n作为督虫,她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫,以阻止敌人的远程火力开火。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
<alienPartGenerator>
|
||||
<!-- 额外身体部件 -->
|
||||
<bodyAddons>
|
||||
<li>
|
||||
<path>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_Fighter_Claw</path>
|
||||
<inFrontOfBody>true</inFrontOfBody>
|
||||
</li>
|
||||
<li>
|
||||
<path>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_Fighter_Tail</path>
|
||||
<inFrontOfBody>false</inFrontOfBody>
|
||||
<offsets>
|
||||
<north>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</north>
|
||||
</offsets>
|
||||
</li>
|
||||
</bodyAddons>
|
||||
</alienPartGenerator>
|
||||
</generalSettings>
|
||||
<raceRestriction>
|
||||
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
|
||||
</raceRestriction>
|
||||
</alienRace>
|
||||
<comps>
|
||||
</comps>
|
||||
|
||||
<!-- 基础属性设置 -->
|
||||
<statBases>
|
||||
<!-- 移动速度 -->
|
||||
<MoveSpeed>4.5</MoveSpeed>
|
||||
|
||||
<!-- <RestRateMultiplier>1</RestRateMultiplier> -->
|
||||
<!-- <HungerRateMultiplier>1</HungerRateMultiplier> -->
|
||||
<!-- <EatingSpeed>5</EatingSpeed> -->
|
||||
<MaxNutrition>2</MaxNutrition>
|
||||
|
||||
<CarryingCapacity>100</CarryingCapacity>
|
||||
<MeatAmount>60</MeatAmount>
|
||||
<LeatherAmount>30</LeatherAmount>
|
||||
|
||||
<MeleeDodgeChance>1.25</MeleeDodgeChance>
|
||||
<MeleeHitChance>1.25</MeleeHitChance>
|
||||
|
||||
<!-- <NegotiationAbility>1</NegotiationAbility> -->
|
||||
<!-- <SellPriceFactor>1</SellPriceFactor> -->
|
||||
<!-- <SocialImpact>1</SocialImpact> -->
|
||||
<!-- <TradePriceImprovement>0.5</TradePriceImprovement> -->
|
||||
|
||||
<!-- 自带的甲壳可以防御外部攻击 -->
|
||||
<ArmorRating_Blunt>0.4</ArmorRating_Blunt>
|
||||
<ArmorRating_Sharp>0.4</ArmorRating_Sharp>
|
||||
<ArmorRating_Heat>0.3</ArmorRating_Heat>
|
||||
</statBases>
|
||||
|
||||
<tools>
|
||||
<li>
|
||||
<label>巨镰</label>
|
||||
<capacities>
|
||||
<li>Cut</li>
|
||||
</capacities>
|
||||
<power>20</power>
|
||||
<cooldownTime>2.5</cooldownTime>
|
||||
<linkedBodyPartsGroup>ARA_Sickles</linkedBodyPartsGroup>
|
||||
<!-- <ensureLinkedBodyPartsGroupAlwaysUsable>true</ensureLinkedBodyPartsGroupAlwaysUsable> -->
|
||||
<chanceFactor>0.5</chanceFactor>
|
||||
</li>
|
||||
</tools>
|
||||
|
||||
<race>
|
||||
<!-- 身体类型 -->
|
||||
<body>ArachnaeFighter_Body</body>
|
||||
<baseBodySize>0.85</baseBodySize>
|
||||
<baseHealthScale>2</baseHealthScale>
|
||||
<lifeExpectancy>5</lifeExpectancy>
|
||||
<lifeStageAges Inherit="False">
|
||||
<li>
|
||||
<def>ArachnaeNode_Myrmecocystus_Adult</def>
|
||||
<minAge>0</minAge>
|
||||
</li>
|
||||
</lifeStageAges>
|
||||
</race>
|
||||
</AlienRace.ThingDef_AlienRace>
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_Facehugger</defName>
|
||||
<label>阿拉克涅原虫种</label>
|
||||
<description>阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。\n\n不同于普通阿拉克涅虫族,高度未分化的身体决定了其无法孕育任何辅虫,在完成寄生前也无法进行任何工作。</description>
|
||||
<description>阿拉克涅督虫之一,呈现高度未分化状态的特殊督虫,可以通过独特的神经链接管控制受害者的身体,并释放灵能信号以使得周围的人忽略其存在。\n\n不同于普通阿拉克涅虫族,高度未分化的身体决定了其无法孕育任何辅虫,在完成寄生前也难以胜任任何工作。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
@@ -1055,10 +1138,11 @@
|
||||
</li>
|
||||
</comps>
|
||||
</AlienRace.ThingDef_AlienRace>
|
||||
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_Fighter</defName>
|
||||
<label>阿拉克涅战士种</label>
|
||||
<description>阿拉克涅督虫之一,是巢穴中真正的战士,除了战斗外也可以进行狩猎和搬运。其拥有强大的可塑性基因,随着科技的解锁其将获得更多的能力。\n\n作为督虫,她可以向敌人投射寿命有限但是非常恼人的阿拉克涅酸噬种辅虫,以阻止敌人的远程火力开火。</description>
|
||||
<defName>ArachnaeNode_Race_Skyraider</defName>
|
||||
<label>阿拉克涅空天种</label>
|
||||
<description>阿拉克涅督虫中的精锐,进化出了强大的飞行能力,是巢穴中无可争议的空中霸主。\n\n作为为数不多拥有飞行能力的虫族,她可以从空中掠袭猎物并将其带至千米高空之上俯冲投下,只留其余猎物在地面无助的挣扎。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
@@ -1075,7 +1159,7 @@
|
||||
<offsets>
|
||||
<north>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</north>
|
||||
</north>
|
||||
</offsets>
|
||||
</li>
|
||||
</bodyAddons>
|
||||
@@ -1085,7 +1169,20 @@
|
||||
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
|
||||
</raceRestriction>
|
||||
</alienRace>
|
||||
|
||||
<comps>
|
||||
<!-- Add our new flight component here -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_PawnFlight"> <!-- 2. 添加我们的飞行组件 -->
|
||||
|
||||
<!-- 飞行触发条件:仅在征召时飞行 -->
|
||||
<flightCondition>Drafted</flightCondition>
|
||||
|
||||
<!-- 链接到我们刚刚创建的 AnimationDef -->
|
||||
<flyingAnimationNorth>ARA_FlyNorth</flyingAnimationNorth>
|
||||
<flyingAnimationEast>ARA_FlyEast</flyingAnimationEast>
|
||||
<flyingAnimationSouth>ARA_FlySouth</flyingAnimationSouth>
|
||||
|
||||
</li>
|
||||
</comps>
|
||||
|
||||
<!-- 基础属性设置 -->
|
||||
@@ -1093,6 +1190,9 @@
|
||||
<!-- 移动速度 -->
|
||||
<MoveSpeed>4.5</MoveSpeed>
|
||||
|
||||
<MaxFlightTime>9999</MaxFlightTime>
|
||||
<FlightCooldown>0</FlightCooldown>
|
||||
|
||||
<!-- <RestRateMultiplier>1</RestRateMultiplier> -->
|
||||
<!-- <HungerRateMultiplier>1</HungerRateMultiplier> -->
|
||||
<!-- <EatingSpeed>5</EatingSpeed> -->
|
||||
@@ -1116,9 +1216,25 @@
|
||||
<ArmorRating_Heat>0.3</ArmorRating_Heat>
|
||||
</statBases>
|
||||
|
||||
<tools>
|
||||
<li>
|
||||
<label>巨镰</label>
|
||||
<capacities>
|
||||
<li>Cut</li>
|
||||
</capacities>
|
||||
<power>20</power>
|
||||
<cooldownTime>2.5</cooldownTime>
|
||||
<linkedBodyPartsGroup>ARA_Sickles</linkedBodyPartsGroup>
|
||||
<!-- <ensureLinkedBodyPartsGroupAlwaysUsable>true</ensureLinkedBodyPartsGroupAlwaysUsable> -->
|
||||
<chanceFactor>0.5</chanceFactor>
|
||||
</li>
|
||||
</tools>
|
||||
|
||||
<race>
|
||||
<!-- 身体类型 -->
|
||||
<body>ArachnaeFighter_Body</body>
|
||||
<renderTree>ARA_ArachnaeRenderTree</renderTree>
|
||||
<flightStartChanceOnJobStart>1.0</flightStartChanceOnJobStart>
|
||||
<baseBodySize>0.85</baseBodySize>
|
||||
<baseHealthScale>2</baseHealthScale>
|
||||
<lifeExpectancy>5</lifeExpectancy>
|
||||
|
||||
@@ -472,7 +472,6 @@
|
||||
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
|
||||
<!-- 可以驯服的宠物,主要是防止小虫由别人驯服 -->
|
||||
<petList>
|
||||
<li>ArachnaeBase_Race_Slavey</li>
|
||||
<li>ArachnaeBase_Race_Scavenger</li>
|
||||
<li>ArachnaeBase_Race_HardJaw</li>
|
||||
</petList>
|
||||
@@ -751,6 +750,7 @@
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_Queen_0_Stage</li>
|
||||
<li>ARA_HiveMindMaster</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
|
||||
182
1.6/1.6/Defs/Thing_Misc/Apparels/ARA_Apparel.xml
Normal file
@@ -0,0 +1,182 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<!-- 内衬 -->
|
||||
<ThingDef Name="ARA_ApparelOnSkinBase" ParentName="ApparelMakeableBase" Abstract="True">
|
||||
<graphicData>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<shaderType>CutoutComplex</shaderType>
|
||||
</graphicData>
|
||||
<smeltable>false</smeltable>
|
||||
<thingCategories>
|
||||
<li>ApparelMisc</li>
|
||||
</thingCategories>
|
||||
<costStuffCount>0</costStuffCount>
|
||||
<stuffCategories Inherit="False" />
|
||||
<apparel>
|
||||
<tags>
|
||||
<li>ARA_Apparel</li>
|
||||
<li>ARA_Inner</li>
|
||||
</tags>
|
||||
<bodyPartGroups>
|
||||
<li>Torso</li>
|
||||
</bodyPartGroups>
|
||||
<layers>
|
||||
<li>OnSkin</li>
|
||||
</layers>
|
||||
<canBeDesiredForIdeo>false</canBeDesiredForIdeo>
|
||||
<canBeGeneratedToSatisfyWarmth>false</canBeGeneratedToSatisfyWarmth>
|
||||
<canBeGeneratedToSatisfyToxicEnvironmentResistance>false</canBeGeneratedToSatisfyToxicEnvironmentResistance>
|
||||
<useWornGraphicMask>true</useWornGraphicMask>
|
||||
</apparel>
|
||||
<recipeMaker Inherit="False" IsNull="True"/>
|
||||
<possessionCount>1</possessionCount>
|
||||
<statBases>
|
||||
<Mass>0.1</Mass>
|
||||
</statBases>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="ARA_ApparelOnSkinBase">
|
||||
<defName>ARA_Bodystocking_White</defName>
|
||||
<label>连身白丝</label>
|
||||
<description>阿拉克涅虫群的装饰性织物,对于虫群来说应该是没啥用的东西。</description>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Apparel/ARA_Bodystocking_White</texPath>
|
||||
</graphicData>
|
||||
<apparel>
|
||||
<wornGraphicPath>ArachnaeSwarm/Apparel/ARA_Bodystocking_White</wornGraphicPath>
|
||||
</apparel>
|
||||
<statBases>
|
||||
<WorkToMake>3000</WorkToMake>
|
||||
</statBases>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_ApparelOnSkinBase">
|
||||
<defName>ARA_Bodystocking_Black</defName>
|
||||
<label>连身黑丝</label>
|
||||
<description>阿拉克涅虫群的装饰性织物,对于虫群来说应该是没啥用的东西。</description>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Apparel/ARA_Bodystocking_Black</texPath>
|
||||
</graphicData>
|
||||
<apparel>
|
||||
<wornGraphicPath>ArachnaeSwarm/Apparel/ARA_Bodystocking_Black</wornGraphicPath>
|
||||
</apparel>
|
||||
<statBases>
|
||||
<WorkToMake>3000</WorkToMake>
|
||||
</statBases>
|
||||
</ThingDef>
|
||||
<AbilityDef ParentName="ARA_CocoonSpew_Base">
|
||||
<defName>ARA_BioforgeIncubator_ClothBase</defName>
|
||||
<label>投放孵化茧 基础织物</label>
|
||||
<description>投放一枚织物茧,内含可以孵化一套基础织物的营养和遗传物质——参阅茧的超链接,了解其能生产的所有装备的特点。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_BioforgeIncubator_ClothBase_Proj</projectileDef>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_4DIL</requiredResearch>
|
||||
<failMessage>需要科技 基因节点DIL-4"编织" 以解锁此孵化路径</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="ARA_CocoonSpew_Base_Proj">
|
||||
<defName>ARA_BioforgeIncubator_ClothBase_Proj</defName>
|
||||
<projectile>
|
||||
<spawnsThingDef>ARA_BioforgeIncubator_ClothBase</spawnsThingDef>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BioforgeIncubator_Base">
|
||||
<defName>ARA_BioforgeIncubator_ClothBase</defName>
|
||||
<label>阿拉克涅孵化茧 基础织物</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含孵化一套基础织物装备的营养物质,可以通过阿拉克涅工艺种的交互完成激活进程——参阅茧的超链接,了解其能生产的所有装备的特点。\n\n孵化茧对温度极度敏感(该类型的茧适温为-30~55°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ARA_Bodystocking_White</ThingDef>
|
||||
<ThingDef>ARA_Bodystocking_Black</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_4DIL</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<comps>
|
||||
<!-- The new, GrowthVat-style fuel component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>10</fuelCapacity>
|
||||
<fuelLabel>营养</fuelLabel>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelConsumptionRate>0</fuelConsumptionRate> <!-- IMPORTANT: Disable base class consumption -->
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<initialFuelPercent>1</initialFuelPercent>
|
||||
<autoRefuelPercent>1</autoRefuelPercent>
|
||||
</li>
|
||||
<!-- The refactored producer component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_InteractiveProducer">
|
||||
<processes>
|
||||
<li>
|
||||
<thingDef>ARA_Bodystocking_White</thingDef>
|
||||
<productionTicks>6000</productionTicks>
|
||||
<totalNutritionNeeded>1</totalNutritionNeeded>
|
||||
</li>
|
||||
<li>
|
||||
<thingDef>ARA_Bodystocking_Black</thingDef>
|
||||
<productionTicks>6000</productionTicks>
|
||||
<totalNutritionNeeded>1</totalNutritionNeeded>
|
||||
</li>
|
||||
</processes>
|
||||
|
||||
<whitelist>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</whitelist>
|
||||
<spawnCount>1</spawnCount>
|
||||
<destroyOnSpawn>True</destroyOnSpawn>
|
||||
<minSafeTemperature>-30</minSafeTemperature>
|
||||
<maxSafeTemperature>55</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<damagePerTickWhenUnfueled>0.2</damagePerTickWhenUnfueled>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
|
||||
<qualityThresholds>
|
||||
<li>
|
||||
<quality>Legendary</quality>
|
||||
<threshold>0.99</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Masterwork</quality>
|
||||
<threshold>0.90</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Excellent</quality>
|
||||
<threshold>0.70</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Good</quality>
|
||||
<threshold>0.50</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Normal</quality>
|
||||
<threshold>0.20</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Poor</quality>
|
||||
<threshold>0.10</threshold>
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>-30</minSafeTemperature>
|
||||
<maxSafeTemperature>55</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
<ApparelLayerDef>
|
||||
<defName>Shield</defName>
|
||||
<label>盾牌</label>
|
||||
<drawOrder>275</drawOrder>
|
||||
</ApparelLayerDef>
|
||||
</Defs>
|
||||
@@ -63,6 +63,110 @@
|
||||
<li>RewardStandardQualitySuper</li>
|
||||
</thingSetMakerTags>
|
||||
</ThingDef>
|
||||
<AbilityDef ParentName="ARA_CocoonSpew_Base">
|
||||
<defName>ARA_BioforgeIncubator_BoneBase</defName>
|
||||
<label>投放孵化茧 骨刃器官</label>
|
||||
<description>投放一枚武装器官茧,内含可以孵化一套基础骨刃武装器官的营养和遗传物质——参阅茧的超链接,了解其能生产的所有装备的特点。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_BioforgeIncubator_BoneBase_Proj</projectileDef>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_5DIL</requiredResearch>
|
||||
<failMessage>需要科技 基因节点DIL-5"骨刀" 以解锁此孵化路径</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="ARA_CocoonSpew_Base_Proj">
|
||||
<defName>ARA_BioforgeIncubator_BoneBase_Proj</defName>
|
||||
<projectile>
|
||||
<spawnsThingDef>ARA_BioforgeIncubator_BoneBase</spawnsThingDef>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BioforgeIncubator_Base">
|
||||
<defName>ARA_BioforgeIncubator_BoneBase</defName>
|
||||
<label>阿拉克涅孵化茧 基础骨片装备</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含孵化一个骨片武装器官的营养物质,可以通过阿拉克涅工艺种的交互完成激活进程——参阅茧的超链接,了解其能生产的所有装备的特点。\n\n孵化茧对温度极度敏感(该类型的茧适温为-20~35°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ARA_MW_Bone_Sword</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_5DIL</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<comps>
|
||||
<!-- The new, GrowthVat-style fuel component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>10</fuelCapacity>
|
||||
<fuelLabel>营养</fuelLabel>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelConsumptionRate>0</fuelConsumptionRate> <!-- IMPORTANT: Disable base class consumption -->
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<initialFuelPercent>1</initialFuelPercent>
|
||||
<autoRefuelPercent>1</autoRefuelPercent>
|
||||
</li>
|
||||
<!-- The refactored producer component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_InteractiveProducer">
|
||||
<processes>
|
||||
<li>
|
||||
<thingDef>ARA_MW_Bone_Sword</thingDef>
|
||||
<productionTicks>60000</productionTicks>
|
||||
<totalNutritionNeeded>15</totalNutritionNeeded>
|
||||
</li>
|
||||
</processes>
|
||||
|
||||
<whitelist>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</whitelist>
|
||||
<spawnCount>1</spawnCount>
|
||||
<destroyOnSpawn>True</destroyOnSpawn>
|
||||
<minSafeTemperature>-20</minSafeTemperature>
|
||||
<maxSafeTemperature>35</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<damagePerTickWhenUnfueled>0.2</damagePerTickWhenUnfueled>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
|
||||
<qualityThresholds>
|
||||
<li>
|
||||
<quality>Legendary</quality>
|
||||
<threshold>0.99</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Masterwork</quality>
|
||||
<threshold>0.90</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Excellent</quality>
|
||||
<threshold>0.70</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Good</quality>
|
||||
<threshold>0.50</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Normal</quality>
|
||||
<threshold>0.20</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Poor</quality>
|
||||
<threshold>0.10</threshold>
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>-20</minSafeTemperature>
|
||||
<maxSafeTemperature>35</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="BaseHumanMakeableGun">
|
||||
<defName>ARA_RW_Basic_Fist_Needle_Gun</defName>
|
||||
@@ -151,6 +255,111 @@
|
||||
<speed>40</speed>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<AbilityDef ParentName="ARA_CocoonSpew_Base">
|
||||
<defName>ARA_BioforgeIncubator_ToxicNeedleBase</defName>
|
||||
<label>投放孵化茧 毒针器官</label>
|
||||
<description>投放一枚武装器官茧,内含可以孵化一套基础毒针武装器官的营养和遗传物质——参阅茧的超链接,了解其能生产的所有装备的特点。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_BioforgeIncubator_ToxicNeedleBase_Proj</projectileDef>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_5PAV</requiredResearch>
|
||||
<failMessage>需要科技 基因节点PAV-5"毒刺" 以解锁此孵化路径</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="ARA_CocoonSpew_Base_Proj">
|
||||
<defName>ARA_BioforgeIncubator_ToxicNeedleBase_Proj</defName>
|
||||
<projectile>
|
||||
<spawnsThingDef>ARA_BioforgeIncubator_ToxicNeedleBase</spawnsThingDef>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BioforgeIncubator_Base">
|
||||
<defName>ARA_BioforgeIncubator_ToxicNeedleBase</defName>
|
||||
<label>阿拉克涅孵化茧 基础毒针武器</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含孵化一个毒针武装器官的营养物质,可以通过阿拉克涅工艺种的交互完成激活进程——参阅茧的超链接,了解其能生产的所有装备的特点。\n\n孵化茧对温度极度敏感(该类型的茧适温为0~22°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ARA_RW_Basic_Fist_Needle_Gun</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_5PAV</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<comps>
|
||||
<!-- The new, GrowthVat-style fuel component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>10</fuelCapacity>
|
||||
<fuelLabel>营养</fuelLabel>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelConsumptionRate>0</fuelConsumptionRate> <!-- IMPORTANT: Disable base class consumption -->
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<initialFuelPercent>1</initialFuelPercent>
|
||||
<autoRefuelPercent>1</autoRefuelPercent>
|
||||
</li>
|
||||
<!-- The refactored producer component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_InteractiveProducer">
|
||||
<processes>
|
||||
<li>
|
||||
<thingDef>ARA_RW_Basic_Fist_Needle_Gun</thingDef>
|
||||
<productionTicks>40000</productionTicks>
|
||||
<totalNutritionNeeded>10</totalNutritionNeeded>
|
||||
<!--<requiredResearch>ARA_Technology_5PAV</requiredResearch>-->
|
||||
</li>
|
||||
</processes>
|
||||
|
||||
<whitelist>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</whitelist>
|
||||
<spawnCount>1</spawnCount>
|
||||
<destroyOnSpawn>True</destroyOnSpawn>
|
||||
<minSafeTemperature>0</minSafeTemperature>
|
||||
<maxSafeTemperature>22</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<damagePerTickWhenUnfueled>0.2</damagePerTickWhenUnfueled>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
|
||||
<qualityThresholds>
|
||||
<li>
|
||||
<quality>Legendary</quality>
|
||||
<threshold>0.99</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Masterwork</quality>
|
||||
<threshold>0.90</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Excellent</quality>
|
||||
<threshold>0.70</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Good</quality>
|
||||
<threshold>0.50</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Normal</quality>
|
||||
<threshold>0.20</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Poor</quality>
|
||||
<threshold>0.10</threshold>
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>0</minSafeTemperature>
|
||||
<maxSafeTemperature>22</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="BaseHumanMakeableGun">
|
||||
<defName>ARA_RW_Basic_Acid_Bladder_Gun</defName>
|
||||
@@ -247,4 +456,169 @@
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<AbilityDef ParentName="ARA_CocoonSpew_Base">
|
||||
<defName>ARA_BioforgeIncubator_AcidBase</defName>
|
||||
<label>投放孵化茧 酸液器官</label>
|
||||
<description>投放一枚武装器官茧,内含可以孵化一套基础酸液武装器官的营养和遗传物质——参阅茧的超链接,了解其能生产的所有装备的特点。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_7VXI</requiredResearch>
|
||||
<failMessage>需要科技 基因节点VXI-7"外置酸袋" 以解锁此孵化路径</failMessage>
|
||||
</li>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_BioforgeIncubator_AcidBase_Proj</projectileDef>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="ARA_CocoonSpew_Base_Proj">
|
||||
<defName>ARA_BioforgeIncubator_AcidBase_Proj</defName>
|
||||
<projectile>
|
||||
<spawnsThingDef>ARA_BioforgeIncubator_AcidBase</spawnsThingDef>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BioforgeIncubator_Base">
|
||||
<defName>ARA_BioforgeIncubator_AcidBase</defName>
|
||||
<label>阿拉克涅孵化茧 基础酸性武器</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含孵化一个酸性武装器官的营养物质,可以通过阿拉克涅工艺种的交互完成激活进程——参阅茧的超链接,了解其能生产的所有装备的特点。\n\n孵化茧对温度极度敏感(该类型的茧适温为10~28°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ARA_RW_Basic_Acid_Bladder_Gun</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_7VXI</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<comps>
|
||||
<!-- The new, GrowthVat-style fuel component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>10</fuelCapacity>
|
||||
<fuelLabel>营养</fuelLabel>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelConsumptionRate>0</fuelConsumptionRate> <!-- IMPORTANT: Disable base class consumption -->
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<initialFuelPercent>1</initialFuelPercent>
|
||||
<autoRefuelPercent>1</autoRefuelPercent>
|
||||
</li>
|
||||
<!-- The refactored producer component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_InteractiveProducer">
|
||||
<processes>
|
||||
<li>
|
||||
<thingDef>ARA_RW_Basic_Acid_Bladder_Gun</thingDef>
|
||||
<productionTicks>80000</productionTicks>
|
||||
<totalNutritionNeeded>30</totalNutritionNeeded>
|
||||
<!--<requiredResearch>ARA_Technology_7VXI</requiredResearch>-->
|
||||
</li>
|
||||
</processes>
|
||||
|
||||
<whitelist>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</whitelist>
|
||||
<spawnCount>1</spawnCount>
|
||||
<destroyOnSpawn>True</destroyOnSpawn>
|
||||
<minSafeTemperature>10</minSafeTemperature>
|
||||
<maxSafeTemperature>28</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<damagePerTickWhenUnfueled>0.2</damagePerTickWhenUnfueled>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
|
||||
<qualityThresholds>
|
||||
<li>
|
||||
<quality>Legendary</quality>
|
||||
<threshold>0.99</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Masterwork</quality>
|
||||
<threshold>0.90</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Excellent</quality>
|
||||
<threshold>0.70</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Good</quality>
|
||||
<threshold>0.50</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Normal</quality>
|
||||
<threshold>0.20</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Poor</quality>
|
||||
<threshold>0.10</threshold>
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
<!--
|
||||
当一个生产流程完成时,系统会通过以下三个步骤来确定最终的物品品质:
|
||||
|
||||
第 1 步: 计算“基础品质分” (Base Quality Score)
|
||||
基础品质分代表了在整个生产过程中,理想条件所占的比例。理想条件被严格定义为:燃料充足 且 温度适宜。
|
||||
|
||||
公式:
|
||||
|
||||
基础品质分 = 在理想条件下度过的时间(ticks) / 生产总需时间(ticks)
|
||||
|
||||
C# 代码对应:
|
||||
baseQuality = (_selectedProcess.productionTicks > 0) ? (float)ticksUnderOptimalConditions / _selectedProcess.productionTicks : 0f;
|
||||
|
||||
说明:
|
||||
|
||||
ticksUnderOptimalConditions 是一个计数器,只有在同时满足燃料充足和温度安全这两个条件的游戏刻(Tick),它才会加 1。
|
||||
_selectedProcess.productionTicks 是在 XML 中为该产品定义的总生产时间。
|
||||
这个得分的范围是 0.0 (0%) 到 1.0 (100%)。如果整个过程都完美无缺,这个分数就是 1.0。
|
||||
第 2 步: 计算“温度惩罚分” (Temperature Penalty Score)
|
||||
温度惩罚分是一个独立累加的负面分数。它只在环境温度超出安全范围时才会累积。
|
||||
|
||||
公式:
|
||||
|
||||
每刻惩罚增加量 = 超出安全范围的度数 × penaltyPerDegreePerTick
|
||||
温度惩罚分 = 所有惩罚增加量的总和
|
||||
|
||||
C# 代码对应:
|
||||
temperaturePenaltyPercent = Mathf.Min(1f, temperaturePenaltyPercent + tempDelta * Props.penaltyPerDegreePerTick);
|
||||
|
||||
说明:
|
||||
|
||||
penaltyPerDegreePerTick 是一个可在 XML 中配置的系数,代表每超出1度、每刻所产生的惩罚量。
|
||||
这个惩罚是不可逆的。即使温度恢复正常,已经累积的惩罚也不会减少。
|
||||
它的最大值被限制在 1.0 (100%),以防止无限累加。
|
||||
第 3 步: 计算“最终品质分”并映射到品质等级
|
||||
最终品质分由基础分减去惩罚分得出,这个分数将直接决定物品的品质等级。
|
||||
|
||||
公式:
|
||||
|
||||
最终品质分 = 基础品质分 - 温度惩罚分
|
||||
|
||||
C# 代码对应:
|
||||
finalQualityScore = Mathf.Clamp01(baseQuality - temperaturePenaltyPercent);
|
||||
|
||||
映射到品质等级:
|
||||
得到 finalQualityScore (一个 0.0 到 1.0 之间的值) 后,系统会通过一系列 if-else if 判断,将其映射到游戏中的 QualityCategory (品质等级)。例如,在我们的代码中:
|
||||
|
||||
>= 0.99 -> 传说 (Legendary)
|
||||
>= 0.90 -> 杰作 (Masterwork)
|
||||
>= 0.70 -> 优秀 (Excellent)
|
||||
>= 0.50 -> 良好 (Good)
|
||||
>= 0.20 -> 普通 (Normal)
|
||||
>= 0.10 -> 差 (Poor)
|
||||
< 0.10 -> 劣质 (Awful)
|
||||
总结
|
||||
这个系统的核心在于,它鼓励玩家全程维持最佳生产环境。
|
||||
仅仅保持燃料充足或温度适宜是不够的,必须两者兼顾才能提高“基础品质分”。
|
||||
同时,必须极力避免温度超出安全范围,因为“温度惩罚分”是纯粹的惩罚,它只会单方面地拉低最终品质,且无法挽回。
|
||||
这种设计为玩家提供了一个清晰的目标和富有挑战性的过程管理,而不是一个简单的“放置-等待”式生产。
|
||||
-->
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>10</minSafeTemperature>
|
||||
<maxSafeTemperature>28</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
</Defs>
|
||||
243
1.6/1.6/Defs/Thing_building/ARA_BioforgeIncubator.xml
Normal file
@@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<!-- 1. 加成建筑 "孵化加速器" -->
|
||||
<ThingDef ParentName="BuildingBase">
|
||||
<defName>ARA_IncubationAccelerator</defName>
|
||||
<label>孵化加速器</label>
|
||||
<description>一个辅助性的生物机械装置,当放置在大型孵化池旁边时,可以加速其内部的孵化过程。</description>
|
||||
<graphicData>
|
||||
<texPath>Things/Building/Misc/ToolCabinet</texPath>
|
||||
<graphicClass>Graphic_Multi</graphicClass>
|
||||
</graphicData>
|
||||
<size>(1,1)</size>
|
||||
<comps>
|
||||
<!-- 使用原版的 CompFacility -->
|
||||
<li Class="CompProperties_Facility">
|
||||
<statOffsets>
|
||||
<!-- 提供我们自定义的孵化速度加成 -->
|
||||
<ARA_IncubationSpeedFactor>0.60</ARA_IncubationSpeedFactor>
|
||||
</statOffsets>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
|
||||
<!-- 3. 主建筑 "生物孵化池" -->
|
||||
<ThingDef ParentName="BuildingBase">
|
||||
<defName>ARA_BioforgeIncubator_Thing</defName>
|
||||
<label>生物质物品孵化池</label>
|
||||
<description>一个大型的、需要消耗大量营养物质的孵化设施,可以同时孵化多个单位,并能通过链接外部设备来提高效率。</description>
|
||||
<graphicData>
|
||||
<texPath>Things/Building/AncientHeatVent</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<shaderType>CutoutComplex</shaderType>
|
||||
<drawSize>(7,7)</drawSize>
|
||||
</graphicData>
|
||||
<size>(7,7)</size>
|
||||
<tickerType>Normal</tickerType>
|
||||
<stuffCategories Inherit="False"/>
|
||||
<costStuffCount>0</costStuffCount>
|
||||
<costList>
|
||||
<ARA_Carapace>50</ARA_Carapace>
|
||||
</costList>
|
||||
<castEdgeShadows>false</castEdgeShadows>
|
||||
<staticSunShadowHeight>0</staticSunShadowHeight>
|
||||
<altitudeLayer>Building</altitudeLayer>
|
||||
<passability>PassThroughOnly</passability>
|
||||
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
|
||||
<pathCost>50</pathCost>
|
||||
<statBases>
|
||||
<MaxHitPoints>250</MaxHitPoints>
|
||||
<WorkToBuild>2800</WorkToBuild>
|
||||
<Flammability>1.0</Flammability>
|
||||
</statBases>
|
||||
<placeWorkers>
|
||||
<li>PlaceWorker_PreventInteractionSpotOverlap</li>
|
||||
</placeWorkers>
|
||||
<fillPercent>0.8</fillPercent>
|
||||
<interactionCellOffset>(0,0,-1)</interactionCellOffset>
|
||||
<hasInteractionCell>true</hasInteractionCell>
|
||||
<designationCategory>ARA_Buildings</designationCategory>
|
||||
<uiOrder>2600</uiOrder>
|
||||
<surfaceType>Item</surfaceType>
|
||||
<building>
|
||||
<workTableRoomRole>Laboratory</workTableRoomRole>
|
||||
<workTableNotInRoomRoleFactor>0.8</workTableNotInRoomRoleFactor>
|
||||
</building>
|
||||
<comps>
|
||||
|
||||
<!-- a. 我们新的队列物品生产组件 -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_QueuedInteractiveProducer">
|
||||
<!-- 队列和交互设置 -->
|
||||
<productionQueueLimit>3</productionQueueLimit>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
<whitelist>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li> <!-- 示例:允许普通殖民者操作 -->
|
||||
</whitelist>
|
||||
|
||||
<!-- 质量系统设置 -->
|
||||
<minSafeTemperature>10</minSafeTemperature>
|
||||
<maxSafeTemperature>30</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<qualityThresholds>
|
||||
<li>
|
||||
<quality>Legendary</quality>
|
||||
<threshold>0.99</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Masterwork</quality>
|
||||
<threshold>0.90</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Excellent</quality>
|
||||
<threshold>0.70</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Good</quality>
|
||||
<threshold>0.50</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Normal</quality>
|
||||
<threshold>0.20</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Poor</quality>
|
||||
<threshold>0.10</threshold>
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
|
||||
<!-- 生产列表 -->
|
||||
<processes>
|
||||
<li>
|
||||
<thingDef>ARA_RW_Basic_Acid_Bladder_Gun</thingDef>
|
||||
<productionTicks>80000</productionTicks>
|
||||
<totalNutritionNeeded>30</totalNutritionNeeded>
|
||||
<requiredResearch>ARA_Technology_7VXI</requiredResearch>
|
||||
</li>
|
||||
<li>
|
||||
<thingDef>ARA_RW_Basic_Fist_Needle_Gun</thingDef>
|
||||
<productionTicks>40000</productionTicks>
|
||||
<totalNutritionNeeded>10</totalNutritionNeeded>
|
||||
<requiredResearch>ARA_Technology_5PAV</requiredResearch>
|
||||
</li>
|
||||
</processes>
|
||||
</li>
|
||||
|
||||
<!-- b. 我们的营养燃料组件 -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>100.0</fuelCapacity>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelGizmoLabel>生物质</fuelGizmoLabel>
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<targetFuelLevelConfigurable>true</targetFuelLevelConfigurable>
|
||||
</li>
|
||||
|
||||
<!-- c. 原版的设施链接接收组件 -->
|
||||
<li Class="CompProperties_AffectedByFacilities">
|
||||
<linkableFacilities>
|
||||
<li>ARA_IncubationAccelerator</li>
|
||||
</linkableFacilities>
|
||||
</li>
|
||||
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="BuildingBase">
|
||||
<defName>ARA_BioforgeIncubator</defName>
|
||||
<label>生物质孵化池</label>
|
||||
<description>一个大型的、需要消耗大量营养物质的孵化设施,可以同时孵化多个单位,并能通过链接外部设备来提高效率。</description>
|
||||
<graphicData>
|
||||
<texPath>Things/Building/AncientHeatVent</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<shaderType>CutoutComplex</shaderType>
|
||||
<drawSize>(7,7)</drawSize>
|
||||
</graphicData>
|
||||
<size>(7,7)</size>
|
||||
<tickerType>Normal</tickerType>
|
||||
<stuffCategories Inherit="False"/>
|
||||
<costStuffCount>0</costStuffCount>
|
||||
<costList>
|
||||
<ARA_Carapace>50</ARA_Carapace>
|
||||
</costList>
|
||||
<castEdgeShadows>false</castEdgeShadows>
|
||||
<staticSunShadowHeight>0</staticSunShadowHeight>
|
||||
<altitudeLayer>Building</altitudeLayer>
|
||||
<passability>PassThroughOnly</passability>
|
||||
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
|
||||
<pathCost>50</pathCost>
|
||||
<statBases>
|
||||
<MaxHitPoints>250</MaxHitPoints>
|
||||
<WorkToBuild>2800</WorkToBuild>
|
||||
<Flammability>1.0</Flammability>
|
||||
</statBases>
|
||||
<placeWorkers>
|
||||
<li>PlaceWorker_PreventInteractionSpotOverlap</li>
|
||||
</placeWorkers>
|
||||
<fillPercent>0.8</fillPercent>
|
||||
<interactionCellOffset>(0,0,-1)</interactionCellOffset>
|
||||
<hasInteractionCell>true</hasInteractionCell>
|
||||
<designationCategory>ARA_Buildings</designationCategory>
|
||||
<uiOrder>2600</uiOrder>
|
||||
<surfaceType>Item</surfaceType>
|
||||
<building>
|
||||
<workTableRoomRole>Laboratory</workTableRoomRole>
|
||||
<workTableNotInRoomRoleFactor>0.8</workTableNotInRoomRoleFactor>
|
||||
</building>
|
||||
<comps>
|
||||
|
||||
<!-- a. 我们自己的队列生产组件 -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_QueuedPawnSpawner">
|
||||
<productionQueueLimit>5</productionQueueLimit>
|
||||
<minNutritionToStart>0.5</minNutritionToStart>
|
||||
<whitelist>
|
||||
<li>ARA_ArachnaeQueen</li>
|
||||
</whitelist>
|
||||
<spawnablePawns>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_Myrmecocystus</pawnKind>
|
||||
<delayTicks>180000</delayTicks>
|
||||
<totalNutritionNeeded>5.0</totalNutritionNeeded>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_ShieldHead</pawnKind>
|
||||
<delayTicks>180000</delayTicks>
|
||||
<totalNutritionNeeded>5.0</totalNutritionNeeded>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_WeaponSmith</pawnKind>
|
||||
<delayTicks>180000</delayTicks>
|
||||
<totalNutritionNeeded>5.0</totalNutritionNeeded>
|
||||
<!--<requiredResearch>ARA_AdvancedBiology</requiredResearch>-->
|
||||
</li>
|
||||
</spawnablePawns>
|
||||
</li>
|
||||
|
||||
<!-- b. 我们的营养燃料组件 -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>100.0</fuelCapacity>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelGizmoLabel>生物质</fuelGizmoLabel>
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<targetFuelLevelConfigurable>true</targetFuelLevelConfigurable>
|
||||
</li>
|
||||
|
||||
<!-- c. 原版的设施链接接收组件 -->
|
||||
<li Class="CompProperties_AffectedByFacilities">
|
||||
<linkableFacilities>
|
||||
<li>ARA_IncubationAccelerator</li>
|
||||
</linkableFacilities>
|
||||
</li>
|
||||
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
</Defs>
|
||||
@@ -33,7 +33,6 @@
|
||||
<!-- <claimable>false</claimable> -->
|
||||
<deconstructible>false</deconstructible>
|
||||
<repairable>false</repairable>
|
||||
<quickTargetable>true</quickTargetable>
|
||||
<isTargetable>true</isTargetable>
|
||||
<expandHomeArea>false</expandHomeArea>
|
||||
</building>
|
||||
@@ -52,6 +51,15 @@
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
<!-- T1 -->
|
||||
<ThingDef ParentName="ARA_EggSpew_Base_Proj">
|
||||
<defName>ARA_Proj_EggSac</defName>
|
||||
<label>阿拉克涅虫卵</label>
|
||||
<projectile>
|
||||
<spawnsThingDef>ARA_InteractiveEggSac</spawnsThingDef>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_InteractiveEggSac_Base">
|
||||
<defName>ARA_InteractiveEggSac</defName>
|
||||
<label>阿拉克涅虫卵囊</label>
|
||||
@@ -60,6 +68,7 @@
|
||||
<ThingDef>ArachnaeNode_Race_Myrmecocystus</ThingDef>
|
||||
<ThingDef>ArachnaeNode_Race_ShieldHead</ThingDef>
|
||||
<ThingDef>ArachnaeNode_Race_WeaponSmith</ThingDef>
|
||||
<ThingDef>ArachnaeNode_Race_Fighter</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
@@ -67,28 +76,28 @@
|
||||
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_SpawnPawnFromList">
|
||||
<pawnKinds>
|
||||
<li>ArachnaeNode_Race_Myrmecocystus</li>
|
||||
<li>ArachnaeNode_Race_ShieldHead</li>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</pawnKinds>
|
||||
<whitelist>
|
||||
<li>ARA_ArachnaeQueen</li>
|
||||
</whitelist>
|
||||
<pawnKindDelays>
|
||||
<spawnablePawns>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_Myrmecocystus</pawnKind>
|
||||
<delay>180000</delay>
|
||||
<delayTicks>10000</delayTicks>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_ShieldHead</pawnKind>
|
||||
<delay>180000</delay>
|
||||
<delayTicks>120000</delayTicks>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_WeaponSmith</pawnKind>
|
||||
<delay>180000</delay>
|
||||
<delayTicks>180000</delayTicks>
|
||||
</li>
|
||||
</pawnKindDelays>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_Fighter</pawnKind>
|
||||
<delayTicks>120000</delayTicks>
|
||||
<requiredResearch>ARA_Technology_1KYC</requiredResearch>
|
||||
</li>
|
||||
</spawnablePawns>
|
||||
<whitelist>
|
||||
<li>ARA_ArachnaeQueen</li>
|
||||
</whitelist>
|
||||
<destroyOnSpawn>true</destroyOnSpawn>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
@@ -114,28 +123,23 @@
|
||||
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_SpawnPawnFromList">
|
||||
<pawnKinds>
|
||||
<li>ArachnaeNode_Race_Myrmecocystus</li>
|
||||
<li>ArachnaeNode_Race_ShieldHead</li>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</pawnKinds>
|
||||
<whitelist>
|
||||
<li>ARA_ArachnaeQueen</li>
|
||||
</whitelist>
|
||||
<pawnKindDelays>
|
||||
<spawnablePawns>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_Myrmecocystus</pawnKind>
|
||||
<delay>300</delay>
|
||||
<delayTicks>300</delayTicks>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_ShieldHead</pawnKind>
|
||||
<delay>300</delay>
|
||||
<delayTicks>300</delayTicks>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_WeaponSmith</pawnKind>
|
||||
<delay>300</delay>
|
||||
<delayTicks>300</delayTicks>
|
||||
</li>
|
||||
</pawnKindDelays>
|
||||
</spawnablePawns>
|
||||
<whitelist>
|
||||
<li>ARA_ArachnaeQueen</li>
|
||||
</whitelist>
|
||||
<destroyOnSpawn>true</destroyOnSpawn>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
@@ -147,40 +151,4 @@
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_InteractiveEggSac_Base">
|
||||
<defName>ARA_InteractiveEggSac_Basic_Fighter</defName>
|
||||
<label>阿拉克涅虫卵囊 武斗虫</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程——参阅虫卵的超链接,了解各个督虫的特点。\n\n卵囊对温度极度敏感(该类型的卵适温为-10~22°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ArachnaeNode_Race_Fighter</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_1KYC</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_SpawnPawnFromList">
|
||||
<pawnKinds>
|
||||
<li>ArachnaeNode_Race_Fighter</li>
|
||||
</pawnKinds>
|
||||
<whitelist>
|
||||
<li>ARA_ArachnaeQueen</li>
|
||||
</whitelist>
|
||||
<pawnKindDelays>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_Fighter</pawnKind>
|
||||
<delay>12</delay>
|
||||
</li>
|
||||
</pawnKindDelays>
|
||||
<destroyOnSpawn>true</destroyOnSpawn>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>-10</minSafeTemperature>
|
||||
<maxSafeTemperature>22</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
</Defs>
|
||||
@@ -32,314 +32,9 @@
|
||||
<spawnMtbHours>4</spawnMtbHours>
|
||||
<spawnRadius>5</spawnRadius>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BioforgeIncubator_Base">
|
||||
<defName>ARA_BioforgeIncubator_AcidBase</defName>
|
||||
<label>阿拉克涅孵化茧 基础酸性武器</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含孵化一个酸性武装器官的营养物质,可以通过阿拉克涅工艺种的交互完成激活进程——参阅茧的超链接,了解其能生产的所有装备的特点。\n\n孵化茧对温度极度敏感(该类型的茧适温为10~28°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ARA_RW_Basic_Acid_Bladder_Gun</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_7VXI</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<comps>
|
||||
<!-- The new, GrowthVat-style fuel component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>10</fuelCapacity>
|
||||
<fuelLabel>营养</fuelLabel>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelConsumptionRate>0</fuelConsumptionRate> <!-- IMPORTANT: Disable base class consumption -->
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<initialFuelPercent>1</initialFuelPercent>
|
||||
<autoRefuelPercent>1</autoRefuelPercent>
|
||||
</li>
|
||||
<!-- The refactored producer component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_InteractiveProducer">
|
||||
<processes>
|
||||
<li>
|
||||
<thingDef>ARA_RW_Basic_Acid_Bladder_Gun</thingDef>
|
||||
<productionTicks>80000</productionTicks>
|
||||
<totalNutritionNeeded>30</totalNutritionNeeded>
|
||||
</li>
|
||||
</processes>
|
||||
|
||||
<whitelist>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</whitelist>
|
||||
<spawnCount>1</spawnCount>
|
||||
<destroyOnSpawn>True</destroyOnSpawn>
|
||||
<minSafeTemperature>10</minSafeTemperature>
|
||||
<maxSafeTemperature>28</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<damagePerTickWhenUnfueled>0.2</damagePerTickWhenUnfueled>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
|
||||
<qualityThresholds>
|
||||
<li>
|
||||
<quality>Legendary</quality>
|
||||
<threshold>0.99</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Masterwork</quality>
|
||||
<threshold>0.90</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Excellent</quality>
|
||||
<threshold>0.70</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Good</quality>
|
||||
<threshold>0.50</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Normal</quality>
|
||||
<threshold>0.20</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Poor</quality>
|
||||
<threshold>0.10</threshold>
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
<!--
|
||||
当一个生产流程完成时,系统会通过以下三个步骤来确定最终的物品品质:
|
||||
|
||||
第 1 步: 计算“基础品质分” (Base Quality Score)
|
||||
基础品质分代表了在整个生产过程中,理想条件所占的比例。理想条件被严格定义为:燃料充足 且 温度适宜。
|
||||
|
||||
公式:
|
||||
|
||||
基础品质分 = 在理想条件下度过的时间(ticks) / 生产总需时间(ticks)
|
||||
|
||||
C# 代码对应:
|
||||
baseQuality = (_selectedProcess.productionTicks > 0) ? (float)ticksUnderOptimalConditions / _selectedProcess.productionTicks : 0f;
|
||||
|
||||
说明:
|
||||
|
||||
ticksUnderOptimalConditions 是一个计数器,只有在同时满足燃料充足和温度安全这两个条件的游戏刻(Tick),它才会加 1。
|
||||
_selectedProcess.productionTicks 是在 XML 中为该产品定义的总生产时间。
|
||||
这个得分的范围是 0.0 (0%) 到 1.0 (100%)。如果整个过程都完美无缺,这个分数就是 1.0。
|
||||
第 2 步: 计算“温度惩罚分” (Temperature Penalty Score)
|
||||
温度惩罚分是一个独立累加的负面分数。它只在环境温度超出安全范围时才会累积。
|
||||
|
||||
公式:
|
||||
|
||||
每刻惩罚增加量 = 超出安全范围的度数 × penaltyPerDegreePerTick
|
||||
温度惩罚分 = 所有惩罚增加量的总和
|
||||
|
||||
C# 代码对应:
|
||||
temperaturePenaltyPercent = Mathf.Min(1f, temperaturePenaltyPercent + tempDelta * Props.penaltyPerDegreePerTick);
|
||||
|
||||
说明:
|
||||
|
||||
penaltyPerDegreePerTick 是一个可在 XML 中配置的系数,代表每超出1度、每刻所产生的惩罚量。
|
||||
这个惩罚是不可逆的。即使温度恢复正常,已经累积的惩罚也不会减少。
|
||||
它的最大值被限制在 1.0 (100%),以防止无限累加。
|
||||
第 3 步: 计算“最终品质分”并映射到品质等级
|
||||
最终品质分由基础分减去惩罚分得出,这个分数将直接决定物品的品质等级。
|
||||
|
||||
公式:
|
||||
|
||||
最终品质分 = 基础品质分 - 温度惩罚分
|
||||
|
||||
C# 代码对应:
|
||||
finalQualityScore = Mathf.Clamp01(baseQuality - temperaturePenaltyPercent);
|
||||
|
||||
映射到品质等级:
|
||||
得到 finalQualityScore (一个 0.0 到 1.0 之间的值) 后,系统会通过一系列 if-else if 判断,将其映射到游戏中的 QualityCategory (品质等级)。例如,在我们的代码中:
|
||||
|
||||
>= 0.99 -> 传说 (Legendary)
|
||||
>= 0.90 -> 杰作 (Masterwork)
|
||||
>= 0.70 -> 优秀 (Excellent)
|
||||
>= 0.50 -> 良好 (Good)
|
||||
>= 0.20 -> 普通 (Normal)
|
||||
>= 0.10 -> 差 (Poor)
|
||||
< 0.10 -> 劣质 (Awful)
|
||||
总结
|
||||
这个系统的核心在于,它鼓励玩家全程维持最佳生产环境。
|
||||
仅仅保持燃料充足或温度适宜是不够的,必须两者兼顾才能提高“基础品质分”。
|
||||
同时,必须极力避免温度超出安全范围,因为“温度惩罚分”是纯粹的惩罚,它只会单方面地拉低最终品质,且无法挽回。
|
||||
这种设计为玩家提供了一个清晰的目标和富有挑战性的过程管理,而不是一个简单的“放置-等待”式生产。
|
||||
-->
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>10</minSafeTemperature>
|
||||
<maxSafeTemperature>28</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BioforgeIncubator_Base">
|
||||
<defName>ARA_BioforgeIncubator_ToxicNeedleBase</defName>
|
||||
<label>阿拉克涅孵化茧 基础毒针武器</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含孵化一个毒针武装器官的营养物质,可以通过阿拉克涅工艺种的交互完成激活进程——参阅茧的超链接,了解其能生产的所有装备的特点。\n\n孵化茧对温度极度敏感(该类型的茧适温为0~22°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ARA_RW_Basic_Fist_Needle_Gun</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_5PAV</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<comps>
|
||||
<!-- The new, GrowthVat-style fuel component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>10</fuelCapacity>
|
||||
<fuelLabel>营养</fuelLabel>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelConsumptionRate>0</fuelConsumptionRate> <!-- IMPORTANT: Disable base class consumption -->
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<initialFuelPercent>1</initialFuelPercent>
|
||||
<autoRefuelPercent>1</autoRefuelPercent>
|
||||
</li>
|
||||
<!-- The refactored producer component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_InteractiveProducer">
|
||||
<processes>
|
||||
<li>
|
||||
<thingDef>ARA_RW_Basic_Fist_Needle_Gun</thingDef>
|
||||
<productionTicks>40000</productionTicks>
|
||||
<totalNutritionNeeded>10</totalNutritionNeeded>
|
||||
</li>
|
||||
</processes>
|
||||
|
||||
<whitelist>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</whitelist>
|
||||
<spawnCount>1</spawnCount>
|
||||
<destroyOnSpawn>True</destroyOnSpawn>
|
||||
<minSafeTemperature>0</minSafeTemperature>
|
||||
<maxSafeTemperature>22</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<damagePerTickWhenUnfueled>0.2</damagePerTickWhenUnfueled>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
|
||||
<qualityThresholds>
|
||||
<li>
|
||||
<quality>Legendary</quality>
|
||||
<threshold>0.99</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Masterwork</quality>
|
||||
<threshold>0.90</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Excellent</quality>
|
||||
<threshold>0.70</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Good</quality>
|
||||
<threshold>0.50</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Normal</quality>
|
||||
<threshold>0.20</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Poor</quality>
|
||||
<threshold>0.10</threshold>
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>0</minSafeTemperature>
|
||||
<maxSafeTemperature>22</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_BioforgeIncubator_Base">
|
||||
<defName>ARA_BioforgeIncubator_BoneBase</defName>
|
||||
<label>阿拉克涅孵化茧 基础骨片装备</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含孵化一个骨片武装器官的营养物质,可以通过阿拉克涅工艺种的交互完成激活进程——参阅茧的超链接,了解其能生产的所有装备的特点。\n\n孵化茧对温度极度敏感(该类型的茧适温为-20~35°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ARA_MW_Bone_Sword</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_5DIL</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<comps>
|
||||
<!-- The new, GrowthVat-style fuel component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
|
||||
<fuelCapacity>10</fuelCapacity>
|
||||
<fuelLabel>营养</fuelLabel>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelConsumptionRate>0</fuelConsumptionRate> <!-- IMPORTANT: Disable base class consumption -->
|
||||
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
|
||||
<initialFuelPercent>1</initialFuelPercent>
|
||||
<autoRefuelPercent>1</autoRefuelPercent>
|
||||
</li>
|
||||
<!-- The refactored producer component -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_InteractiveProducer">
|
||||
<processes>
|
||||
<li>
|
||||
<thingDef>ARA_MW_Bone_Sword</thingDef>
|
||||
<productionTicks>60000</productionTicks>
|
||||
<totalNutritionNeeded>15</totalNutritionNeeded>
|
||||
</li>
|
||||
</processes>
|
||||
|
||||
<whitelist>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</whitelist>
|
||||
<spawnCount>1</spawnCount>
|
||||
<destroyOnSpawn>True</destroyOnSpawn>
|
||||
<minSafeTemperature>20</minSafeTemperature>
|
||||
<maxSafeTemperature>35</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<damagePerTickWhenUnfueled>0.2</damagePerTickWhenUnfueled>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
|
||||
<qualityThresholds>
|
||||
<li>
|
||||
<quality>Legendary</quality>
|
||||
<threshold>0.99</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Masterwork</quality>
|
||||
<threshold>0.90</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Excellent</quality>
|
||||
<threshold>0.70</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Good</quality>
|
||||
<threshold>0.50</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Normal</quality>
|
||||
<threshold>0.20</threshold>
|
||||
</li>
|
||||
<li>
|
||||
<quality>Poor</quality>
|
||||
<threshold>0.10</threshold>
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>-20</minSafeTemperature>
|
||||
<maxSafeTemperature>35</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
<li Class="ArachnaeSwarm.CompProperties_DelayedTerrainSpawn">
|
||||
<terrainToSpawn>ARA_InsectCreep</terrainToSpawn>
|
||||
<spawnRadius>2.5</spawnRadius>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
|
||||
<!-- Trained behavior: Haul-->
|
||||
<li Class="ThinkNode_ChancePerHour_Constant">
|
||||
<mtbHours>0.5</mtbHours>
|
||||
<mtbHours>0.15</mtbHours>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ConditionalRequireCapacities">
|
||||
<requiredCapacities>
|
||||
|
||||
@@ -17,4 +17,8 @@
|
||||
<NotProducing>未在生产</NotProducing>
|
||||
<ARA_NeedArachnaeToStartIncubation>未孵化,需要阿拉克涅工艺种交互</ARA_NeedArachnaeToStartIncubation>
|
||||
|
||||
<!-- Added for CompQueuedPawnSpawner -->
|
||||
<NutritionNeeded>所需营养</NutritionNeeded>
|
||||
<ARA_Incubate>孵化 {0}</ARA_Incubate>
|
||||
|
||||
</LanguageData>
|
||||
@@ -1 +1 @@
|
||||
3528588530
|
||||
3563955520
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
@@ -112,12 +112,20 @@ namespace ArachnaeSwarm
|
||||
|
||||
foreach (var process in Props.processes)
|
||||
{
|
||||
yield return new FloatMenuOption("StartProduction".Translate(process.thingDef.label), () =>
|
||||
if (process.requiredResearch != null && !process.requiredResearch.IsFinished)
|
||||
{
|
||||
this._selectedProcess = process;
|
||||
Job job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("ARA_StartInteractiveProduction"), parent);
|
||||
selPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
|
||||
});
|
||||
string disabledText = "StartProduction".Translate(process.thingDef.label) + " (" + "Requires".Translate() + ": " + process.requiredResearch.label + ")";
|
||||
yield return new FloatMenuOption(disabledText, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return new FloatMenuOption("StartProduction".Translate(process.thingDef.label), () =>
|
||||
{
|
||||
this._selectedProcess = process;
|
||||
Job job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("ARA_StartInteractiveProduction"), parent);
|
||||
selPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,273 @@
|
||||
using RimWorld;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
// Data contract for a single production order in the queue
|
||||
public class QueuedProcessOrder : IExposable
|
||||
{
|
||||
public ProcessDef process; // Using the existing ProcessDef
|
||||
public int productionUntilTick = -1;
|
||||
|
||||
// Quality-related fields
|
||||
public int ticksUnderOptimalConditions;
|
||||
public float temperaturePenaltyPercent;
|
||||
|
||||
public void ExposeData()
|
||||
{
|
||||
Scribe_Deep.Look(ref process, "process");
|
||||
Scribe_Values.Look(ref productionUntilTick, "productionUntilTick", -1);
|
||||
Scribe_Values.Look(ref ticksUnderOptimalConditions, "ticksUnderOptimalConditions", 0);
|
||||
Scribe_Values.Look(ref temperaturePenaltyPercent, "temperaturePenaltyPercent", 0f);
|
||||
}
|
||||
}
|
||||
|
||||
// Properties for the new queued producer component
|
||||
public class CompProperties_QueuedInteractiveProducer : CompProperties
|
||||
{
|
||||
public List<ProcessDef> processes;
|
||||
public List<PawnKindDef> whitelist;
|
||||
public int productionQueueLimit = 1;
|
||||
public float minNutritionToStart = 0.1f;
|
||||
|
||||
// Quality-related properties from CompInteractiveProducer
|
||||
public float minSafeTemperature = 7f;
|
||||
public float maxSafeTemperature = 32f;
|
||||
public float penaltyPerDegreePerTick = 0.00001f;
|
||||
public List<QualityThreshold> qualityThresholds;
|
||||
public IntRange spawnCount = new IntRange(1, 1);
|
||||
|
||||
public CompProperties_QueuedInteractiveProducer()
|
||||
{
|
||||
compClass = typeof(CompQueuedInteractiveProducer);
|
||||
}
|
||||
}
|
||||
|
||||
// The main component logic
|
||||
public class CompQueuedInteractiveProducer : ThingComp
|
||||
{
|
||||
private List<QueuedProcessOrder> productionOrders = new List<QueuedProcessOrder>();
|
||||
public ProcessDef selectedProcess; // For passing to the JobDriver
|
||||
|
||||
private CompRefuelableNutrition _fuelComp;
|
||||
private CompAffectedByFacilities _facilitiesComp;
|
||||
|
||||
public CompProperties_QueuedInteractiveProducer Props => (CompProperties_QueuedInteractiveProducer)props;
|
||||
private CompRefuelableNutrition FuelComp => _fuelComp ?? (_fuelComp = parent.GetComp<CompRefuelableNutrition>());
|
||||
private CompAffectedByFacilities FacilitiesComp => _facilitiesComp ?? (_facilitiesComp = parent.GetComp<CompAffectedByFacilities>());
|
||||
|
||||
public override void Initialize(CompProperties props)
|
||||
{
|
||||
base.Initialize(props);
|
||||
_fuelComp = parent.GetComp<CompRefuelableNutrition>();
|
||||
_facilitiesComp = parent.GetComp<CompAffectedByFacilities>();
|
||||
}
|
||||
|
||||
public override IEnumerable<FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
|
||||
{
|
||||
if (Props.whitelist == null || !Props.whitelist.Contains(selPawn.kindDef)) yield break;
|
||||
if (FuelComp != null && (!FuelComp.HasFuel || FuelComp.NutritionStored < Props.minNutritionToStart))
|
||||
{
|
||||
yield return new FloatMenuOption("CannotStartProduction".Translate(), null);
|
||||
yield break;
|
||||
}
|
||||
|
||||
foreach (var process in Props.processes)
|
||||
{
|
||||
if (process.requiredResearch != null && !process.requiredResearch.IsFinished)
|
||||
{
|
||||
yield return new FloatMenuOption("StartProduction".Translate(process.thingDef.label) + " (" + "Requires".Translate() + ": " + process.requiredResearch.label + ")", null);
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return new FloatMenuOption("StartProduction".Translate(process.thingDef.label), () =>
|
||||
{
|
||||
this.selectedProcess = process;
|
||||
Job job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("ARA_AddProcessToQueueJob"), parent);
|
||||
selPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AddToQueue()
|
||||
{
|
||||
if (selectedProcess == null) return;
|
||||
productionOrders.Add(new QueuedProcessOrder { process = selectedProcess });
|
||||
selectedProcess = null;
|
||||
}
|
||||
|
||||
public override void CompTick()
|
||||
{
|
||||
base.CompTick();
|
||||
var producingOrders = productionOrders.Where(o => o.productionUntilTick > 0).ToList();
|
||||
bool hasFuel = FuelComp?.HasFuel ?? true;
|
||||
float ambientTemperature = parent.AmbientTemperature;
|
||||
bool isTempSafe = ambientTemperature >= Props.minSafeTemperature && ambientTemperature <= Props.maxSafeTemperature;
|
||||
|
||||
// Update progress and penalties for active orders
|
||||
foreach(var order in producingOrders)
|
||||
{
|
||||
if(hasFuel && isTempSafe)
|
||||
{
|
||||
order.ticksUnderOptimalConditions++;
|
||||
}
|
||||
if (!isTempSafe)
|
||||
{
|
||||
float tempDelta = (ambientTemperature > Props.maxSafeTemperature) ? ambientTemperature - Props.maxSafeTemperature : Props.minSafeTemperature - ambientTemperature;
|
||||
order.temperaturePenaltyPercent = Mathf.Min(1f, order.temperaturePenaltyPercent + tempDelta * Props.penaltyPerDegreePerTick);
|
||||
}
|
||||
if (!hasFuel)
|
||||
{
|
||||
order.productionUntilTick++; // Pause production
|
||||
}
|
||||
}
|
||||
|
||||
// Update fuel consumption
|
||||
if (FuelComp != null)
|
||||
{
|
||||
float totalConsumptionRatePerDay = 0f;
|
||||
if(hasFuel)
|
||||
{
|
||||
foreach (var order in producingOrders)
|
||||
{
|
||||
if (order.process.totalNutritionNeeded > 0 && order.process.productionTicks > 0)
|
||||
{
|
||||
totalConsumptionRatePerDay += (order.process.totalNutritionNeeded / order.process.productionTicks) * 60000f;
|
||||
}
|
||||
}
|
||||
}
|
||||
FuelComp.currentConsumptionRate = totalConsumptionRatePerDay;
|
||||
}
|
||||
|
||||
// Finish completed orders
|
||||
productionOrders.RemoveAll(order =>
|
||||
{
|
||||
if (order.productionUntilTick > 0 && Find.TickManager.TicksGame >= order.productionUntilTick)
|
||||
{
|
||||
FinishProduction(order);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// Start new orders
|
||||
int currentlyProducingCount = productionOrders.Count(o => o.productionUntilTick > 0);
|
||||
if (currentlyProducingCount < Props.productionQueueLimit)
|
||||
{
|
||||
var waitingOrder = productionOrders.FirstOrDefault(o => o.productionUntilTick == -1);
|
||||
if (waitingOrder != null)
|
||||
{
|
||||
float speedFactor = 1f + (FacilitiesComp?.GetStatOffset(StatDef.Named("ARA_IncubationSpeedFactor")) ?? 0f);
|
||||
int modifiedDelay = (int)(waitingOrder.process.productionTicks / speedFactor);
|
||||
waitingOrder.productionUntilTick = Find.TickManager.TicksGame + modifiedDelay;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private (QualityCategory quality, float baseScore, float penalty) GetEstimatedQualityDetails(QueuedProcessOrder order)
|
||||
{
|
||||
if (order == null || Props.qualityThresholds.NullOrEmpty())
|
||||
{
|
||||
return (QualityCategory.Normal, 0f, 0f);
|
||||
}
|
||||
float progress = (order.process.productionTicks > 0) ? (float)order.ticksUnderOptimalConditions / order.process.productionTicks : 1f;
|
||||
float finalQualityPercent = Mathf.Clamp01(progress - order.temperaturePenaltyPercent);
|
||||
QualityCategory finalQuality = QualityCategory.Awful;
|
||||
foreach (var threshold in Props.qualityThresholds.OrderByDescending(q => q.threshold))
|
||||
{
|
||||
if (finalQualityPercent >= threshold.threshold)
|
||||
{
|
||||
finalQuality = threshold.quality;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (finalQuality, progress, order.temperaturePenaltyPercent);
|
||||
}
|
||||
|
||||
private void FinishProduction(QueuedProcessOrder order)
|
||||
{
|
||||
var qualityDetails = GetEstimatedQualityDetails(order);
|
||||
QualityCategory finalQuality = qualityDetails.quality;
|
||||
|
||||
for (int i = 0; i < Props.spawnCount.RandomInRange; i++)
|
||||
{
|
||||
Thing product = ThingMaker.MakeThing(order.process.thingDef);
|
||||
product.TryGetComp<CompQuality>()?.SetQuality(finalQuality, ArtGenerationContext.Colony);
|
||||
GenPlace.TryPlaceThing(product, parent.Position, parent.Map, ThingPlaceMode.Near);
|
||||
}
|
||||
}
|
||||
|
||||
public override string CompInspectStringExtra()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int producingCount = productionOrders.Count(o => o.productionUntilTick > 0);
|
||||
int queuedCount = productionOrders.Count - producingCount;
|
||||
|
||||
sb.AppendLine($"生产槽位: {producingCount} / {Props.productionQueueLimit}");
|
||||
if (queuedCount > 0) sb.AppendLine($"等待队列: {queuedCount}");
|
||||
|
||||
if (FacilitiesComp != null)
|
||||
{
|
||||
float speedFactor = 1f + FacilitiesComp.GetStatOffset(StatDef.Named("ARA_IncubationSpeedFactor"));
|
||||
if(speedFactor != 1f) sb.AppendLine($"生产速度: {speedFactor.ToStringPercent()}");
|
||||
}
|
||||
|
||||
var producingNow = productionOrders.Where(o => o.productionUntilTick > 0).OrderBy(o => o.productionUntilTick);
|
||||
if (producingNow.Any())
|
||||
{
|
||||
sb.AppendLine("正在生产:");
|
||||
foreach (var order in producingNow)
|
||||
{
|
||||
int remainingTicks = order.productionUntilTick - Find.TickManager.TicksGame;
|
||||
var qualityDetails = GetEstimatedQualityDetails(order);
|
||||
sb.AppendLine($" - {order.process.thingDef.LabelCap}: {remainingTicks.ToStringTicksToPeriod(true, false, true, true)} (品质: {qualityDetails.quality.GetLabel()})");
|
||||
}
|
||||
}
|
||||
|
||||
// 添加温度信息
|
||||
string tempStr = "CurrentTemperature".Translate(parent.AmbientTemperature.ToStringTemperature("F0"));
|
||||
tempStr += $" ({"SafeTemperatureRange".Translate()}: {Props.minSafeTemperature.ToStringTemperature("F0")} ~ {Props.maxSafeTemperature.ToStringTemperature("F0")})";
|
||||
sb.AppendLine(tempStr);
|
||||
|
||||
return sb.ToString().TrimEnd();
|
||||
}
|
||||
|
||||
public override void PostExposeData()
|
||||
{
|
||||
base.PostExposeData();
|
||||
Scribe_Collections.Look(ref productionOrders, "productionOrders", LookMode.Deep);
|
||||
Scribe_Deep.Look(ref selectedProcess, "selectedProcess");
|
||||
}
|
||||
|
||||
public override IEnumerable<Gizmo> CompGetGizmosExtra()
|
||||
{
|
||||
foreach (Gizmo gizmo in base.CompGetGizmosExtra())
|
||||
{
|
||||
yield return gizmo;
|
||||
}
|
||||
|
||||
if (productionOrders.Any())
|
||||
{
|
||||
var lastOrder = productionOrders.Last();
|
||||
|
||||
yield return new Command_Action
|
||||
{
|
||||
defaultLabel = "CommandCancelProduction".Translate() + ": " + lastOrder.process.thingDef.LabelCap,
|
||||
defaultDesc = "CommandCancelProductionDesc".Translate(),
|
||||
icon = ContentFinder<Texture2D>.Get("UI/Designators/Cancel"),
|
||||
action = () =>
|
||||
{
|
||||
productionOrders.Remove(lastOrder);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,37 +10,32 @@ namespace ArachnaeSwarm
|
||||
public CompProperties_RefuelableNutrition()
|
||||
{
|
||||
compClass = typeof(CompRefuelableNutrition);
|
||||
// 默认启用这些Gizmo,除非在XML中明确设置为false
|
||||
this.targetFuelLevelConfigurable = true;
|
||||
this.showAllowAutoRefuelToggle = true;
|
||||
}
|
||||
}
|
||||
|
||||
[StaticConstructorOnStartup]
|
||||
public class CompRefuelableNutrition : CompRefuelable
|
||||
{
|
||||
private static readonly Texture2D FuelIcon = ContentFinder<Texture2D>.Get("UI/Icons/ThingCategories/FoodMeals");
|
||||
|
||||
// This rate is controlled externally, e.g., by a producer comp. Units: nutrition per day.
|
||||
public float currentConsumptionRate = 0f;
|
||||
|
||||
public float NutritionStored => Fuel;
|
||||
|
||||
public new CompProperties_RefuelableNutrition Props => (CompProperties_RefuelableNutrition)props;
|
||||
|
||||
public override void CompTick()
|
||||
{
|
||||
// Call the base tick for things like vacuum logic, but we will handle fuel consumption ourselves.
|
||||
// 调用基类的Tick,让它处理真空等情况。
|
||||
// 基类的燃料消耗逻辑将因为 fuelConsumptionRate 为0而无效。
|
||||
base.CompTick();
|
||||
|
||||
// External consumption logic
|
||||
if (currentConsumptionRate > 0)
|
||||
// 我们自己的动态消耗逻辑
|
||||
if (currentConsumptionRate > 0 && HasFuel)
|
||||
{
|
||||
// Convert per-day rate to per-tick rate and consume
|
||||
float consumptionPerTick = currentConsumptionRate / 60000f;
|
||||
ConsumeFuel(consumptionPerTick);
|
||||
}
|
||||
}
|
||||
|
||||
// Note: The base class's ConsumeFuel is sufficient.
|
||||
// public void ConsumeFuel(float amount) { ... }
|
||||
|
||||
public new void Refuel(List<Thing> fuelThings)
|
||||
{
|
||||
@@ -48,49 +43,52 @@ namespace ArachnaeSwarm
|
||||
if (fuelNeeded < 0.001f) return;
|
||||
|
||||
float totalNutritionGained = 0;
|
||||
List<Thing> thingsToProcess = new List<Thing>(fuelThings);
|
||||
var thingsToProcess = new List<Thing>(fuelThings);
|
||||
|
||||
foreach (var thing in thingsToProcess)
|
||||
{
|
||||
if (fuelNeeded <= 0) break;
|
||||
|
||||
float nutritionPerUnit = thing.GetStatValue(StatDefOf.Nutrition);
|
||||
if (nutritionPerUnit <= 0) continue;
|
||||
|
||||
int numToTake = Mathf.CeilToInt(fuelNeeded / nutritionPerUnit);
|
||||
numToTake = Mathf.Min(numToTake, thing.stackCount);
|
||||
|
||||
|
||||
float nutritionFromThis = numToTake * nutritionPerUnit;
|
||||
|
||||
base.Refuel(nutritionFromThis);
|
||||
totalNutritionGained += nutritionFromThis;
|
||||
|
||||
thing.SplitOff(numToTake).Destroy();
|
||||
|
||||
fuelNeeded = TargetFuelLevel - Fuel;
|
||||
}
|
||||
|
||||
if (totalNutritionGained > 0 && Props.fuelGizmoLabel != null)
|
||||
{
|
||||
// Removed PawnUtility.ShouldSendNotificationAbout check as it requires a Pawn.
|
||||
Messages.Message("MessageRefueled".Translate(parent.LabelShort, totalNutritionGained.ToString("0.##"), Props.fuelGizmoLabel), parent, MessageTypeDefOf.PositiveEvent);
|
||||
}
|
||||
}
|
||||
|
||||
public override string CompInspectStringExtra()
|
||||
{
|
||||
// Build the string from scratch to avoid the base class's incorrect time calculation.
|
||||
string text = Props.FuelLabel + ": " + Fuel.ToStringDecimalIfSmall() + " / " + Props.fuelCapacity.ToStringDecimalIfSmall();
|
||||
|
||||
// If we have a custom consumption rate, calculate and display our own time estimate.
|
||||
|
||||
if (currentConsumptionRate > 0f && HasFuel)
|
||||
{
|
||||
int numTicks = (int)(Fuel / (currentConsumptionRate / 60000f));
|
||||
text += " (" + numTicks.ToStringTicksToPeriod() + ")";
|
||||
}
|
||||
|
||||
else if (!HasFuel && !Props.outOfFuelMessage.NullOrEmpty())
|
||||
{
|
||||
text += "\n" + Props.outOfFuelMessage;
|
||||
}
|
||||
|
||||
if (Props.targetFuelLevelConfigurable)
|
||||
{
|
||||
text += "\n" + "ConfiguredTargetFuelLevel".Translate(TargetFuelLevel.ToStringDecimalIfSmall());
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
// Removed CompGetGizmosExtra override because Command_Refuel is a private class in CompRefuelable.
|
||||
}
|
||||
}
|
||||
@@ -10,11 +10,20 @@ namespace ArachnaeSwarm
|
||||
public List<ThingDef> blacklist;
|
||||
}
|
||||
|
||||
public class ProcessDef
|
||||
public class ProcessDef : IExposable
|
||||
{
|
||||
public ThingDef thingDef;
|
||||
public int productionTicks;
|
||||
public float totalNutritionNeeded;
|
||||
public ResearchProjectDef requiredResearch;
|
||||
|
||||
public void ExposeData()
|
||||
{
|
||||
Scribe_Defs.Look(ref thingDef, "thingDef");
|
||||
Scribe_Values.Look(ref productionTicks, "productionTicks", 0);
|
||||
Scribe_Values.Look(ref totalNutritionNeeded, "totalNutritionNeeded", 0f);
|
||||
Scribe_Defs.Look(ref requiredResearch, "requiredResearch");
|
||||
}
|
||||
}
|
||||
|
||||
public class QualityThreshold
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
using System.Collections.Generic;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class JobDriver_AddProcessToQueue : JobDriver
|
||||
{
|
||||
private const TargetIndex BuildingInd = TargetIndex.A;
|
||||
|
||||
protected Building Building => (Building)job.GetTarget(BuildingInd).Thing;
|
||||
|
||||
public override bool TryMakePreToilReservations(bool errorOnFailed)
|
||||
{
|
||||
return pawn.Reserve(Building, job, 1, -1, null, errorOnFailed);
|
||||
}
|
||||
|
||||
protected override IEnumerable<Toil> MakeNewToils()
|
||||
{
|
||||
this.FailOnDespawnedNullOrForbidden(BuildingInd);
|
||||
|
||||
yield return Toils_Goto.GotoThing(BuildingInd, PathEndMode.InteractionCell);
|
||||
|
||||
Toil work = ToilMaker.MakeToil("MakeNewToils");
|
||||
work.initAction = delegate
|
||||
{
|
||||
// Call the new component's method
|
||||
Building.GetComp<CompQueuedInteractiveProducer>().AddToQueue();
|
||||
};
|
||||
work.defaultCompleteMode = ToilCompleteMode.Instant;
|
||||
yield return work;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,20 @@ using Verse.AI.Group;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
// 新的统一入口类
|
||||
public class PawnSpawnEntry
|
||||
{
|
||||
public PawnKindDef pawnKind;
|
||||
public int delayTicks = 0; // 默认延迟为0
|
||||
public ResearchProjectDef requiredResearch; // 可选的科技需求
|
||||
}
|
||||
|
||||
public class CompProperties_SpawnPawnFromList : CompProperties
|
||||
{
|
||||
public List<PawnKindDef> pawnKinds;
|
||||
// 合并后的新列表
|
||||
public List<PawnSpawnEntry> spawnablePawns;
|
||||
|
||||
public List<PawnKindDef> whitelist;
|
||||
public List<PawnKindDelay> pawnKindDelays;
|
||||
public bool destroyOnSpawn = false;
|
||||
public IntRange spawnCount = new IntRange(1, 1);
|
||||
public Type lordJob;
|
||||
@@ -32,10 +41,4 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class PawnKindDelay
|
||||
{
|
||||
public PawnKindDef pawnKind;
|
||||
public int delay;
|
||||
}
|
||||
@@ -0,0 +1,203 @@
|
||||
using RimWorld;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class CompProperties_QueuedPawnSpawner : CompProperties
|
||||
{
|
||||
public List<QueuedPawnSpawnEntry> spawnablePawns;
|
||||
public List<PawnKindDef> whitelist;
|
||||
public int productionQueueLimit = 1;
|
||||
public float minNutritionToStart = 0.1f;
|
||||
|
||||
public CompProperties_QueuedPawnSpawner()
|
||||
{
|
||||
compClass = typeof(CompQueuedPawnSpawner);
|
||||
}
|
||||
}
|
||||
|
||||
public class CompQueuedPawnSpawner : ThingComp
|
||||
{
|
||||
private List<QueuedProductionOrder> productionOrders = new List<QueuedProductionOrder>();
|
||||
public QueuedPawnSpawnEntry selectedEntry;
|
||||
|
||||
private CompRefuelableNutrition _fuelComp;
|
||||
private CompAffectedByFacilities _facilitiesComp;
|
||||
|
||||
public CompProperties_QueuedPawnSpawner Props => (CompProperties_QueuedPawnSpawner)props;
|
||||
|
||||
private CompRefuelableNutrition FuelComp => _fuelComp ?? (_fuelComp = parent.GetComp<CompRefuelableNutrition>());
|
||||
private CompAffectedByFacilities FacilitiesComp => _facilitiesComp ?? (_facilitiesComp = parent.GetComp<CompAffectedByFacilities>());
|
||||
|
||||
public override void Initialize(CompProperties props)
|
||||
{
|
||||
base.Initialize(props);
|
||||
_fuelComp = parent.GetComp<CompRefuelableNutrition>();
|
||||
_facilitiesComp = parent.GetComp<CompAffectedByFacilities>();
|
||||
}
|
||||
|
||||
public override IEnumerable<FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
|
||||
{
|
||||
if (Props.whitelist == null || !Props.whitelist.Contains(selPawn.kindDef)) yield break;
|
||||
|
||||
if (FuelComp != null && (!FuelComp.HasFuel || FuelComp.NutritionStored < Props.minNutritionToStart))
|
||||
{
|
||||
yield return new FloatMenuOption("CannotStartProduction".Translate(), null);
|
||||
yield break;
|
||||
}
|
||||
|
||||
foreach (var entry in Props.spawnablePawns)
|
||||
{
|
||||
if (entry.requiredResearch != null && !entry.requiredResearch.IsFinished)
|
||||
{
|
||||
yield return new FloatMenuOption("ARA_Incubate".Translate(entry.pawnKind.label) + " (" + "Requires".Translate() + ": " + entry.requiredResearch.label + ")", null);
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return new FloatMenuOption("ARA_Incubate".Translate(entry.pawnKind.label), () =>
|
||||
{
|
||||
this.selectedEntry = entry;
|
||||
Job job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("ARA_AddToQueueJob"), parent);
|
||||
selPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AddToQueue()
|
||||
{
|
||||
if (selectedEntry == null)
|
||||
{
|
||||
Log.Error("Tried to add to queue but selectedEntry was null.");
|
||||
return;
|
||||
}
|
||||
productionOrders.Add(new QueuedProductionOrder { entry = selectedEntry });
|
||||
selectedEntry = null;
|
||||
}
|
||||
|
||||
public override void CompTick()
|
||||
{
|
||||
base.CompTick();
|
||||
|
||||
var producingOrders = productionOrders.Where(o => o.spawnUntilTick > 0).ToList();
|
||||
bool hasFuel = FuelComp?.HasFuel ?? true;
|
||||
|
||||
if (!hasFuel && FuelComp != null && producingOrders.Any())
|
||||
{
|
||||
foreach (var order in producingOrders)
|
||||
{
|
||||
order.spawnUntilTick++;
|
||||
}
|
||||
}
|
||||
|
||||
if (FuelComp != null)
|
||||
{
|
||||
float totalConsumptionRatePerDay = 0f;
|
||||
if(hasFuel)
|
||||
{
|
||||
foreach (var order in producingOrders)
|
||||
{
|
||||
if (order.entry.totalNutritionNeeded > 0 && order.entry.delayTicks > 0)
|
||||
{
|
||||
totalConsumptionRatePerDay += (order.entry.totalNutritionNeeded / order.entry.delayTicks) * 60000f;
|
||||
}
|
||||
}
|
||||
}
|
||||
FuelComp.currentConsumptionRate = totalConsumptionRatePerDay;
|
||||
}
|
||||
|
||||
productionOrders.RemoveAll(order =>
|
||||
{
|
||||
if (order.spawnUntilTick > 0 && Find.TickManager.TicksGame >= order.spawnUntilTick)
|
||||
{
|
||||
Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(order.entry.pawnKind, parent.Faction));
|
||||
if (pawn != null) GenPlace.TryPlaceThing(pawn, parent.Position, parent.Map, ThingPlaceMode.Near);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
int currentlyProducingCount = productionOrders.Count(o => o.spawnUntilTick > 0);
|
||||
if (currentlyProducingCount < Props.productionQueueLimit)
|
||||
{
|
||||
var waitingOrder = productionOrders.FirstOrDefault(o => o.spawnUntilTick == -1);
|
||||
if (waitingOrder != null)
|
||||
{
|
||||
float speedFactor = 1f;
|
||||
if (FacilitiesComp != null)
|
||||
{
|
||||
speedFactor += FacilitiesComp.GetStatOffset(StatDef.Named("ARA_IncubationSpeedFactor"));
|
||||
}
|
||||
int modifiedDelay = (int)(waitingOrder.entry.delayTicks / speedFactor);
|
||||
waitingOrder.spawnUntilTick = Find.TickManager.TicksGame + modifiedDelay;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override string CompInspectStringExtra()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int producingCount = productionOrders.Count(o => o.spawnUntilTick > 0);
|
||||
int queuedCount = productionOrders.Count - producingCount;
|
||||
|
||||
sb.AppendLine($"生产槽位: {producingCount} / {Props.productionQueueLimit}");
|
||||
if (queuedCount > 0) sb.AppendLine($"等待队列: {queuedCount}");
|
||||
|
||||
if (FacilitiesComp != null)
|
||||
{
|
||||
float speedFactor = 1f + FacilitiesComp.GetStatOffset(StatDef.Named("ARA_IncubationSpeedFactor"));
|
||||
if(speedFactor != 1f) sb.AppendLine($"孵化速度: {speedFactor.ToStringPercent()}");
|
||||
}
|
||||
|
||||
var producingNow = productionOrders.Where(o => o.spawnUntilTick > 0).OrderBy(o => o.spawnUntilTick);
|
||||
if (producingNow.Any())
|
||||
{
|
||||
sb.AppendLine("正在孵化:");
|
||||
foreach (var order in producingNow)
|
||||
{
|
||||
int remainingTicks = order.spawnUntilTick - Find.TickManager.TicksGame;
|
||||
sb.AppendLine($" - {order.entry.pawnKind.LabelCap}: {remainingTicks.ToStringTicksToPeriod(true, false, true, true)}");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString().TrimEnd();
|
||||
}
|
||||
|
||||
public override void PostExposeData()
|
||||
{
|
||||
base.PostExposeData();
|
||||
Scribe_Collections.Look(ref productionOrders, "productionOrders", LookMode.Deep, new object[0]);
|
||||
Scribe_Deep.Look(ref selectedEntry, "selectedEntry");
|
||||
}
|
||||
|
||||
public override IEnumerable<Gizmo> CompGetGizmosExtra()
|
||||
{
|
||||
foreach (Gizmo gizmo in base.CompGetGizmosExtra())
|
||||
{
|
||||
yield return gizmo;
|
||||
}
|
||||
|
||||
if (productionOrders.Any())
|
||||
{
|
||||
var lastOrder = productionOrders.Last();
|
||||
|
||||
yield return new Command_Action
|
||||
{
|
||||
defaultLabel = "CommandCancelProduction".Translate() + ": " + lastOrder.entry.pawnKind.LabelCap,
|
||||
defaultDesc = "CommandCancelProductionDesc".Translate(),
|
||||
icon = ContentFinder<Texture2D>.Get("UI/Designators/Cancel"),
|
||||
action = () =>
|
||||
{
|
||||
productionOrders.Remove(lastOrder);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using Verse;
|
||||
using RimWorld;
|
||||
using Verse.AI;
|
||||
using Verse.AI.Group;
|
||||
using UnityEngine; // Add this for ContentFinder
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
@@ -13,14 +14,15 @@ namespace ArachnaeSwarm
|
||||
|
||||
private int spawnUntilTick = -1;
|
||||
private PawnKindDef spawningPawnKind;
|
||||
private PawnKindDef selectedPawnKind;
|
||||
// This component uses its own PawnSpawnEntry, separate from the Queued spawner
|
||||
private PawnSpawnEntry selectedEntry;
|
||||
public bool IsHatching => spawnUntilTick > 0;
|
||||
|
||||
|
||||
public override IEnumerable<FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
|
||||
{
|
||||
if (spawnUntilTick > 0)
|
||||
{
|
||||
yield break; // 正在延迟中,不显示菜单
|
||||
yield break;
|
||||
}
|
||||
|
||||
if (Props.whitelist == null || !Props.whitelist.Contains(selPawn.kindDef))
|
||||
@@ -28,26 +30,36 @@ namespace ArachnaeSwarm
|
||||
yield break;
|
||||
}
|
||||
|
||||
if (Props.pawnKinds != null)
|
||||
if (Props.spawnablePawns != null)
|
||||
{
|
||||
foreach (PawnKindDef pawnKind in Props.pawnKinds)
|
||||
foreach (PawnSpawnEntry entry in Props.spawnablePawns)
|
||||
{
|
||||
yield return new FloatMenuOption("ARA_Incubate".Translate(pawnKind.label), () =>
|
||||
if (entry.pawnKind == null) continue;
|
||||
|
||||
if (entry.requiredResearch != null && !entry.requiredResearch.IsFinished)
|
||||
{
|
||||
Job job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("ARA_IncubateJob"), parent);
|
||||
selectedPawnKind = pawnKind;
|
||||
selPawn.jobs.TryTakeOrderedJob(job);
|
||||
});
|
||||
string disabledText = "ARA_Incubate".Translate(entry.pawnKind.label) + " (" + "Requires".Translate() + ": " + entry.requiredResearch.label + ")";
|
||||
yield return new FloatMenuOption(disabledText, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return new FloatMenuOption("ARA_Incubate".Translate(entry.pawnKind.label), () =>
|
||||
{
|
||||
Job job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("ARA_IncubateJob"), parent);
|
||||
this.selectedEntry = entry;
|
||||
selPawn.jobs.TryTakeOrderedJob(job);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void StartIncubation()
|
||||
{
|
||||
spawningPawnKind = selectedPawnKind;
|
||||
int delay = Props.pawnKindDelays?.FirstOrDefault(pkd => pkd.pawnKind == selectedPawnKind)?.delay ?? 0;
|
||||
spawnUntilTick = Find.TickManager.TicksGame + delay;
|
||||
if (this.selectedEntry == null) return;
|
||||
|
||||
spawningPawnKind = this.selectedEntry.pawnKind;
|
||||
spawnUntilTick = Find.TickManager.TicksGame + this.selectedEntry.delayTicks;
|
||||
}
|
||||
|
||||
public override void CompTick()
|
||||
@@ -59,8 +71,6 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void SpawnPawn(PawnKindDef pawnKind)
|
||||
{
|
||||
try
|
||||
@@ -124,7 +134,6 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override string CompInspectStringExtra()
|
||||
{
|
||||
if (spawnUntilTick > 0)
|
||||
@@ -147,7 +156,31 @@ namespace ArachnaeSwarm
|
||||
base.PostExposeData();
|
||||
Scribe_Values.Look(ref spawnUntilTick, "spawnUntilTick", -1);
|
||||
Scribe_Defs.Look(ref spawningPawnKind, "spawningPawnKind");
|
||||
Scribe_Defs.Look(ref selectedPawnKind, "selectedPawnKind");
|
||||
// selectedEntry is not saved because the interaction is a one-off action.
|
||||
}
|
||||
|
||||
// Moved to the correct position, at the class level.
|
||||
public override IEnumerable<Gizmo> CompGetGizmosExtra()
|
||||
{
|
||||
foreach (var g in base.CompGetGizmosExtra())
|
||||
{
|
||||
yield return g;
|
||||
}
|
||||
|
||||
if (IsHatching)
|
||||
{
|
||||
yield return new Command_Action
|
||||
{
|
||||
defaultLabel = "CommandCancelProduction".Translate(),
|
||||
defaultDesc = "CommandCancelProductionDesc".Translate(),
|
||||
icon = ContentFinder<Texture2D>.Get("UI/Designators/Cancel"),
|
||||
action = () =>
|
||||
{
|
||||
spawnUntilTick = -1;
|
||||
spawningPawnKind = null;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class JobDriver_AddToQueue : JobDriver
|
||||
{
|
||||
private const TargetIndex IncubatorInd = TargetIndex.A;
|
||||
|
||||
public override bool TryMakePreToilReservations(bool errorOnFailed)
|
||||
{
|
||||
return pawn.Reserve(job.GetTarget(IncubatorInd), job, 1, -1, null, errorOnFailed);
|
||||
}
|
||||
|
||||
protected override IEnumerable<Toil> MakeNewToils()
|
||||
{
|
||||
this.FailOnDespawnedNullOrForbidden(IncubatorInd);
|
||||
|
||||
yield return Toils_Goto.GotoThing(IncubatorInd, PathEndMode.Touch);
|
||||
|
||||
Toil addToQueue = new Toil();
|
||||
addToQueue.initAction = () =>
|
||||
{
|
||||
CompQueuedPawnSpawner comp = job.GetTarget(IncubatorInd).Thing.TryGetComp<CompQueuedPawnSpawner>();
|
||||
if (comp != null)
|
||||
{
|
||||
comp.AddToQueue();
|
||||
}
|
||||
};
|
||||
addToQueue.defaultCompleteMode = ToilCompleteMode.Instant;
|
||||
yield return addToQueue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
// 重命名以避免冲突
|
||||
public class QueuedPawnSpawnEntry : IExposable
|
||||
{
|
||||
public PawnKindDef pawnKind;
|
||||
public int delayTicks = 0;
|
||||
public ResearchProjectDef requiredResearch;
|
||||
public float totalNutritionNeeded = 0f;
|
||||
|
||||
public void ExposeData()
|
||||
{
|
||||
Scribe_Defs.Look(ref pawnKind, "pawnKind");
|
||||
Scribe_Values.Look(ref delayTicks, "delayTicks", 0);
|
||||
Scribe_Defs.Look(ref requiredResearch, "requiredResearch");
|
||||
Scribe_Values.Look(ref totalNutritionNeeded, "totalNutritionNeeded", 0f);
|
||||
}
|
||||
}
|
||||
|
||||
// 重命名以避免冲突
|
||||
public class QueuedProductionOrder : IExposable
|
||||
{
|
||||
public QueuedPawnSpawnEntry entry;
|
||||
public int spawnUntilTick = -1;
|
||||
|
||||
public void ExposeData()
|
||||
{
|
||||
if (Scribe.mode == LoadSaveMode.Saving || Scribe.mode == LoadSaveMode.LoadingVars)
|
||||
{
|
||||
if (Scribe.EnterNode("entry"))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (entry == null) entry = new QueuedPawnSpawnEntry();
|
||||
entry.ExposeData();
|
||||
}
|
||||
finally
|
||||
{
|
||||
Scribe.ExitNode();
|
||||
}
|
||||
}
|
||||
}
|
||||
Scribe_Values.Look(ref spawnUntilTick, "spawnUntilTick", -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Project ToolsVersion="15.0"
|
||||
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@@ -71,6 +72,9 @@
|
||||
<Compile Include="ARA_SpawnPawnFromList\CompProperties_SpawnPawnFromList.cs" />
|
||||
<Compile Include="ARA_SpawnPawnFromList\CompSpawnPawnFromList.cs" />
|
||||
<Compile Include="ARA_SpawnPawnFromList\JobDriver_Incubate.cs" />
|
||||
<Compile Include="ARA_SpawnPawnFromList\CompQueuedPawnSpawner.cs" />
|
||||
<Compile Include="ARA_SpawnPawnFromList\ProductionContracts.cs" />
|
||||
<Compile Include="ARA_SpawnPawnFromList\JobDriver_AddToQueue.cs" />
|
||||
<Compile Include="ARA_QueenAbility\CompProperties_AbilitySprayLiquidMulti.cs" />
|
||||
<Compile Include="ARA_QueenAbility\CompAbilityEffect_SprayLiquidMulti.cs" />
|
||||
<Compile Include="DRM_HediffCurseFlame\Hediff_CurseFlame.cs" />
|
||||
@@ -115,6 +119,8 @@
|
||||
<Compile Include="ARA_CompInteractiveProducer\CompRefuelableNutrition.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\DataContracts.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\CompTemperatureRuinableDamage.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\CompQueuedInteractiveProducer.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\JobDriver_AddProcessToQueue.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ARA_HuggingFace\Hediff_Possession.cs" />
|
||||
@@ -132,6 +138,9 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="HediffComp_Temperature.cs" />
|
||||
<Compile Include="CompPawnFlight.cs" />
|
||||
<Compile Include="CompProperties_PawnFlight.cs" />
|
||||
<Compile Include="HarmonyPatches.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Abilities\CompAbilityEffect_TrackingCharge.cs" />
|
||||
|
||||
14
Source/ArachnaeSwarm/CompPawnFlight.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
/// <summary>
|
||||
/// A marker component that holds custom flight properties.
|
||||
/// The actual flight logic is handled by Harmony patches that check for this component
|
||||
/// and use its properties to override or trigger vanilla flight behavior.
|
||||
/// </summary>
|
||||
public class CompPawnFlight : ThingComp
|
||||
{
|
||||
public CompProperties_PawnFlight Props => (CompProperties_PawnFlight)props;
|
||||
}
|
||||
}
|
||||
49
Source/ArachnaeSwarm/CompProperties_PawnFlight.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public enum FlightCondition
|
||||
{
|
||||
Drafted
|
||||
}
|
||||
|
||||
public class CompProperties_PawnFlight : CompProperties
|
||||
{
|
||||
// --- Custom Flight Logic ---
|
||||
public FlightCondition flightCondition = FlightCondition.Drafted;
|
||||
|
||||
// --- Vanilla PawnKindDef Flight Parameters ---
|
||||
[NoTranslate]
|
||||
public string flyingAnimationFramePathPrefix;
|
||||
|
||||
[NoTranslate]
|
||||
public string flyingAnimationFramePathPrefixFemale;
|
||||
|
||||
public int flyingAnimationFrameCount;
|
||||
|
||||
public int flyingAnimationTicksPerFrame = -1;
|
||||
|
||||
public float flyingAnimationDrawSize = 1f;
|
||||
|
||||
public bool flyingAnimationDrawSizeIsMultiplier;
|
||||
|
||||
public bool flyingAnimationInheritColors;
|
||||
|
||||
// --- Vanilla PawnKindLifeStage Flight Parameters ---
|
||||
// Note: These are normally defined per lifestage, we define them once here for simplicity.
|
||||
// The harmony patch will need to inject these into the correct lifestage at runtime.
|
||||
public AnimationDef flyingAnimationEast;
|
||||
public AnimationDef flyingAnimationNorth;
|
||||
public AnimationDef flyingAnimationSouth;
|
||||
public AnimationDef flyingAnimationEastFemale;
|
||||
public AnimationDef flyingAnimationNorthFemale;
|
||||
public AnimationDef flyingAnimationSouthFemale;
|
||||
|
||||
|
||||
public CompProperties_PawnFlight()
|
||||
{
|
||||
compClass = typeof(CompPawnFlight);
|
||||
}
|
||||
}
|
||||
}
|
||||
81
Source/ArachnaeSwarm/HarmonyPatches.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
using HarmonyLib;
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
[HarmonyPatch]
|
||||
public static class FlightHarmonyPatches
|
||||
{
|
||||
// Corrected Patch 1: The method signature now correctly matches the static target method.
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(Pawn_FlightTracker), "GetBestFlyAnimation")]
|
||||
public static bool GetBestFlyAnimation_Prefix(Pawn pawn, ref AnimationDef __result) // Correct parameters: Pawn pawn, not __instance and ___pawn
|
||||
{
|
||||
var flightComp = pawn?.TryGetComp<CompPawnFlight>();
|
||||
if (flightComp == null) // No props check needed, as the crash was due to wrong signature
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var compProps = flightComp.Props;
|
||||
AnimationDef selectedAnim = null;
|
||||
|
||||
if (pawn.gender == Gender.Female && compProps.flyingAnimationNorthFemale != null)
|
||||
{
|
||||
switch (pawn.Rotation.AsInt)
|
||||
{
|
||||
case 0: selectedAnim = compProps.flyingAnimationNorthFemale; break;
|
||||
case 1: selectedAnim = compProps.flyingAnimationEastFemale; break;
|
||||
case 2: selectedAnim = compProps.flyingAnimationSouthFemale; break;
|
||||
case 3: selectedAnim = compProps.flyingAnimationEastFemale ?? compProps.flyingAnimationEast; break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (pawn.Rotation.AsInt)
|
||||
{
|
||||
case 0: selectedAnim = compProps.flyingAnimationNorth; break;
|
||||
case 1: selectedAnim = compProps.flyingAnimationEast; break;
|
||||
case 2: selectedAnim = compProps.flyingAnimationSouth; break;
|
||||
case 3: selectedAnim = compProps.flyingAnimationEast; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedAnim != null)
|
||||
{
|
||||
__result = selectedAnim;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Patch 2 remains correct as Notify_JobStarted is a non-static method.
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(Pawn_FlightTracker), "Notify_JobStarted")]
|
||||
public static bool Notify_JobStarted_Prefix(Job job, Pawn_FlightTracker __instance, Pawn ___pawn)
|
||||
{
|
||||
var flightComp = ___pawn?.TryGetComp<CompPawnFlight>();
|
||||
if (flightComp == null || __instance == null || !__instance.CanEverFly || ___pawn == null || ___pawn.Dead)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var compProps = flightComp.Props;
|
||||
bool shouldBeFlying = (compProps.flightCondition == FlightCondition.Drafted && ___pawn.Drafted);
|
||||
|
||||
if (shouldBeFlying)
|
||||
{
|
||||
if (!__instance.Flying) __instance.StartFlying();
|
||||
job.flying = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (__instance.Flying) __instance.ForceLand();
|
||||
job.flying = false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||