Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c43bc0f0bb | ||
|
|
b954781675 | ||
|
|
acfc078f91 | ||
|
|
b28594c604 | ||
|
|
7a6d5380e1 | ||
|
|
b6f9e6193a | ||
|
|
6e53b19e20 | ||
|
|
db3e576e1a | ||
|
|
e9bbd8d6ea | ||
|
|
b0d411f66d | ||
|
|
e996fedfee | ||
|
|
66e94fbf62 | ||
|
|
f2af6b526b | ||
|
|
a75add9a59 | ||
|
|
eec1e2a3bf | ||
|
|
25bd3019df | ||
|
|
a963f83818 | ||
|
|
8b8b8addae | ||
|
|
514b7ff0f9 | ||
|
|
13a9b23b71 | ||
|
|
359ab98f58 | ||
|
|
aabe7e9541 | ||
|
|
816ae30c19 | ||
|
|
e6650d0b14 | ||
|
|
3983c53e72 | ||
|
|
472be4418c | ||
|
|
ddb493cc75 | ||
|
|
64afb0cbd6 | ||
|
|
11d3d5d340 | ||
|
|
a3d15c30e8 | ||
|
|
8f94e4903b | ||
|
|
d8c2dc165b | ||
|
|
a84e7bbb94 | ||
|
|
3a3c30087a | ||
|
|
c87c88a681 | ||
|
|
f2db87b7b4 | ||
|
|
4449cf0e9b | ||
|
|
a226443064 | ||
|
|
ce818c56f0 | ||
|
|
f3e87bdd40 | ||
|
|
3d0bc51391 | ||
|
|
e220192bbe | ||
|
|
c049cf4c5e | ||
|
|
00d43cfba3 | ||
|
|
f6071f3bea | ||
|
|
3df5314d4e | ||
|
|
0982682cc9 | ||
|
|
760ddee0cc | ||
|
|
0207f5abd1 | ||
|
|
62b0ad265e | ||
|
|
b45df3cbfc | ||
|
|
fda704ee2e | ||
|
|
5643623725 | ||
|
|
bafda90d2e | ||
|
|
aab5e225c1 | ||
|
|
4423a16a28 | ||
|
|
b495a2025d |
40
.gitignore
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
# 忽略包含敏感信息的环境变量文件
|
||||
.env
|
||||
|
||||
# 忽略 Python 缓存文件
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
|
||||
# 忽略 VSCode 设置
|
||||
.vscode/
|
||||
|
||||
# MCP Server generated files
|
||||
Source/MCP/*.log
|
||||
|
||||
# Visual Studio/C# 编译和临时文件
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
.vs/
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# Kilo Code MCP vector cache
|
||||
Source/MCP/vector_cache/
|
||||
Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json
|
||||
Source/MCP/pid.txt
|
||||
|
||||
# Kilo Code logs
|
||||
.kilocode/logs/
|
||||
|
||||
# MCP Knowledge Base Cache and Logs
|
||||
*.log
|
||||
MCP/vector_cache/*.txt
|
||||
MCP/mcpserver.log
|
||||
|
||||
# Exclude MCP local RAG folder
|
||||
MCP/local_rag/
|
||||
Data
|
||||
@@ -4,12 +4,12 @@
|
||||
<defName>ARA_BindDrone</defName>
|
||||
<label>信息素标记</label>
|
||||
<description>使用信息素标记一只阿拉克涅督虫,受到标记的督虫和其麾下的辅虫将誓死效忠于女皇种,并与其建立心灵链接。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath> <!-- Placeholder: You'll need to create this icon -->
|
||||
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_BindDrone</iconPath> <!-- Placeholder: You'll need to create this icon -->
|
||||
|
||||
<hotKey>Misc1</hotKey>
|
||||
<jobDef>CastAbilityOnThing</jobDef>
|
||||
<targetRequired>true</targetRequired>
|
||||
<cooldownTicksRange>60</cooldownTicksRange> <!-- 1 second cooldown -->
|
||||
<cooldownTicksRange>60</cooldownTicksRange> <!-- 1 second cooldown -->
|
||||
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
@@ -32,14 +32,9 @@
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
||||
|
||||
<AbilityDef>
|
||||
<defName>ARA_EggSpew</defName>
|
||||
<label>生育虫卵</label>
|
||||
<description>从卵巢中排出一颗休眠的虫卵,阿拉克涅女皇种可以通过与其交互将其激活,并选择孵化的督虫虫族类型——参阅虫卵的具体信息,了解各个督虫的特点。</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<AbilityDef Name="ARA_EggSpew_Base" Abstract="True">
|
||||
<cooldownTicksRange>5000</cooldownTicksRange>
|
||||
<aiCanUse>true</aiCanUse>
|
||||
<aiCanUse>false</aiCanUse>
|
||||
<displayOrder>300</displayOrder>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||
@@ -47,7 +42,7 @@
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>1</range>
|
||||
<warmupTime>12</warmupTime>
|
||||
<warmupTime>7</warmupTime>
|
||||
<soundCast>AcidSpray_Resolve</soundCast>
|
||||
<violent>false</violent>
|
||||
<targetable>false</targetable>
|
||||
@@ -56,9 +51,6 @@
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ARA_Proj_EggSac</projectileDef>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>4</needCost>
|
||||
@@ -70,11 +62,64 @@
|
||||
</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>
|
||||
<label>生育孵化茧 基础酸性武器</label>
|
||||
<description>孵化茧</description>
|
||||
<iconPath>UI/Commands/EggSpew</iconPath>
|
||||
<cooldownTicksRange>5000</cooldownTicksRange>
|
||||
<aiCanUse>true</aiCanUse>
|
||||
@@ -99,21 +144,36 @@
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>0</needCost>
|
||||
<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</defName>
|
||||
<defName>ARA_AcidSprayBurst_Queen</defName>
|
||||
<label>女皇种酸液轰炸</label>
|
||||
<description>阿拉克涅女皇种向目标地点喷射大量腐蚀性酸液,喷射将持续数秒以完全覆盖一片区域。</description>
|
||||
<iconPath>UI/Abilities/AcidSpray</iconPath>
|
||||
<cooldownTicksRange>5000</cooldownTicksRange> <!-- 2 hours -->
|
||||
<cooldownTicksRange>5000</cooldownTicksRange> <!-- 2 hours -->
|
||||
<aiCanUse>true</aiCanUse>
|
||||
<displayOrder>300</displayOrder>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||
<warmupStartSound>AcidSpray_Warmup</warmupStartSound>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
@@ -132,10 +192,10 @@
|
||||
<sprayEffecter>AcidSpray_Directional</sprayEffecter>
|
||||
|
||||
<!-- CompProperties_AbilitySprayLiquidMulti 新增的属性 -->
|
||||
<shotCount>32</shotCount> <!-- 总共发射5次 -->
|
||||
<ticksBetweenShots>3</ticksBetweenShots> <!-- 每次发射间隔12 Ticks (0.2秒) -->
|
||||
<shotCount>32</shotCount> <!-- 总共发射5次 -->
|
||||
<ticksBetweenShots>3</ticksBetweenShots> <!-- 每次发射间隔12 Ticks (0.2秒) -->
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>0.5</needCost>
|
||||
<failMessage>营养值不足,需要进食</failMessage>
|
||||
@@ -144,9 +204,12 @@
|
||||
<requiredPart>ARA_Acid_sac</requiredPart>
|
||||
<failMessage>酸囊受损或缺失,无法喷射酸液</failMessage>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_6VXI</requiredResearch>
|
||||
<failMessage>需要科技 基因节点VXI-6"酸囊" 以解锁技能</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
||||
<ThingDef>
|
||||
<defName>ARA_Proj_StrongSludgeSpray</defName>
|
||||
<label>阿拉克涅虫族酸液</label>
|
||||
@@ -172,55 +235,20 @@
|
||||
<shadowSize>0</shadowSize>
|
||||
<spawnTerrain>ARA_InsectCreep</spawnTerrain>
|
||||
<terrainChance>0.75</terrainChance>
|
||||
<filth>Filth_Slime</filth>
|
||||
<filth>Filth_SpentAcid</filth>
|
||||
<filthCount>1</filthCount>
|
||||
<filthChance>0.25</filthChance>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BaseGrenadeProjectile">
|
||||
<defName>ARA_Proj_EggSac</defName>
|
||||
<label>阿拉克涅虫卵</label>
|
||||
<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>
|
||||
<spawnsThingDef>ARA_InteractiveEggSac</spawnsThingDef>
|
||||
<tryAdjacentFreeSpaces>true</tryAdjacentFreeSpaces>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="BaseGrenadeProjectile">
|
||||
<defName>ARA_Proj_BioforgeIncubator</defName>
|
||||
<label>阿拉克涅孵化茧</label>
|
||||
<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>
|
||||
<spawnsThingDef>ARA_BioforgeIncubator</spawnsThingDef>
|
||||
<tryAdjacentFreeSpaces>true</tryAdjacentFreeSpaces>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
|
||||
<AbilityDef>
|
||||
<defName>ARA_AcidSprayBurst_Myrmecocystus</defName>
|
||||
<label>蜜罐种酸液轰炸</label>
|
||||
<description>阿拉克涅蜜罐种向目标地点喷射大量腐蚀性酸液,虽然不如女皇种所喷射的酸雨那样强劲,但是虫酸的伤害依然是实打实的。</description>
|
||||
<defName>ARA_AcidSprayBurst</defName>
|
||||
<label>酸液轰炸</label>
|
||||
<description>阿拉克涅督虫向目标地点喷射大量腐蚀性酸液,虽然不如女皇种所喷射的酸雨那样强劲,但是虫酸的伤害依然是实打实的。</description>
|
||||
<iconPath>UI/Abilities/AcidSpray</iconPath>
|
||||
<cooldownTicksRange>12000</cooldownTicksRange> <!-- 2 hours -->
|
||||
<cooldownTicksRange>12000</cooldownTicksRange> <!-- 2 hours -->
|
||||
<aiCanUse>true</aiCanUse>
|
||||
<displayOrder>300</displayOrder>
|
||||
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
|
||||
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
|
||||
<warmupStartSound>AcidSpray_Warmup</warmupStartSound>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
@@ -239,10 +267,10 @@
|
||||
<sprayEffecter>AcidSpray_Directional</sprayEffecter>
|
||||
|
||||
<!-- CompProperties_AbilitySprayLiquidMulti 新增的属性 -->
|
||||
<shotCount>16</shotCount> <!-- 总共发射5次 -->
|
||||
<ticksBetweenShots>3</ticksBetweenShots> <!-- 每次发射间隔12 Ticks (0.2秒) -->
|
||||
<shotCount>16</shotCount> <!-- 总共发射5次 -->
|
||||
<ticksBetweenShots>3</ticksBetweenShots> <!-- 每次发射间隔12 Ticks (0.2秒) -->
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>0.5</needCost>
|
||||
<failMessage>营养值不足,需要进食</failMessage>
|
||||
@@ -251,6 +279,142 @@
|
||||
<requiredPart>ARA_Acid_sac</requiredPart>
|
||||
<failMessage>酸囊受损或缺失,无法喷射酸液</failMessage>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_6VXI</requiredResearch>
|
||||
<failMessage>需要科技 基因节点VXI-6"酸囊" 以解锁技能</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<AbilityDef>
|
||||
<defName>ARA_Toxic_Needle_Fire</defName>
|
||||
<label>毒针连射</label>
|
||||
<description>阿拉克涅督虫使用可以喷射剧毒尾针的毒针腺对敌方进行一轮射击。</description>
|
||||
<writeCombatLog>True</writeCombatLog>
|
||||
<showPsycastEffects>False</showPsycastEffects>
|
||||
<cooldownTicksRange>6000</cooldownTicksRange>
|
||||
<iconPath>UI/Abilities/AcidSpray</iconPath>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_AbilityShoot</verbClass>
|
||||
<defaultProjectile>Bullet_ARA_RW_Basic_Fist_Needle_Gun</defaultProjectile>
|
||||
<range>24.9</range>
|
||||
<soundCast>Heatspikes_Shot</soundCast>
|
||||
<soundCastTail>Heatspikes_Tail</soundCastTail>
|
||||
<muzzleFlashScale>9</muzzleFlashScale>
|
||||
<ticksBetweenBurstShots>6</ticksBetweenBurstShots>
|
||||
<warmupTime>0</warmupTime>
|
||||
<burstShotCount>12</burstShotCount>
|
||||
<accuracyTouch>0.9</accuracyTouch>
|
||||
<accuracyShort>0.8</accuracyShort>
|
||||
<accuracyMedium>0.7</accuracyMedium>
|
||||
<accuracyLong>0.6</accuracyLong>
|
||||
<ai_IsWeapon>false</ai_IsWeapon>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>0.1</needCost>
|
||||
<failMessage>营养值不足,需要进食</failMessage>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityBodyPartCheck">
|
||||
<requiredPart>ARA_Toxic_Needle</requiredPart>
|
||||
<failMessage>毒针腺受损或缺失,无法发射毒针</failMessage>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityResearchPrereq">
|
||||
<requiredResearch>ARA_Technology_5PAV</requiredResearch>
|
||||
<failMessage>需要科技 基因节点PAV-5"毒刺" 以解锁技能</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
||||
<AbilityDef>
|
||||
<defName>ARA_BaseRace_Acid_Launcher</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>
|
||||
<charges>3</charges>
|
||||
<cooldownPerCharge>true</cooldownPerCharge>
|
||||
<verbProperties>
|
||||
<verbClass>Verb_CastAbility</verbClass>
|
||||
<range>24</range>
|
||||
<warmupTime>1</warmupTime>
|
||||
<soundCast>AcidSpray_Resolve</soundCast>
|
||||
<violent>false</violent>
|
||||
<targetParams>
|
||||
<canTargetLocations>true</canTargetLocations>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="CompProperties_AbilityLaunchProjectile">
|
||||
<projectileDef>ArachnaeBase_Race_Acid_Proj</projectileDef>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityNeedCost">
|
||||
<needDef>Food</needDef>
|
||||
<needCost>0.5</needCost>
|
||||
<failMessage>营养值不足,需要进食</failMessage>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<ThingDef ParentName="BaseGrenadeProjectile">
|
||||
<defName>ArachnaeBase_Race_Acid_Proj</defName>
|
||||
<label>阿拉克涅酸嗜种</label>
|
||||
<thingClass>Projectile_SpawnsPawnZeroAge</thingClass>
|
||||
<uiIconPath>Wula/Things/WULA_Attack_Cat/WULA_Cat_Thin_south</uiIconPath>
|
||||
<graphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<graphicClass>Graphic_Multi</graphicClass>
|
||||
</graphicData>
|
||||
<projectile>
|
||||
<speed>41</speed>
|
||||
<spawnsPawnKind>ArachnaeBase_Race_Acid</spawnsPawnKind>
|
||||
<tryAdjacentFreeSpaces>true</tryAdjacentFreeSpaces>
|
||||
<damageDef>ARA_AcidBurn</damageDef>
|
||||
<damageAmountBase>10</damageAmountBase>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
|
||||
<AbilityDef>
|
||||
<defName>ARA_Ability_Possess</defName>
|
||||
<label>原虫种突袭寄生</label>
|
||||
<description>跃向目标,随后尝试使用长尾刺穿对象并截断其神经中枢信号,以自己的控制信号取而代之,进而完全侵占目标躯体。\n\n被侵占躯体的对象视为阿拉克涅虫族的一员,需要接受女皇种的信息素标记,并且不再拥有感情和高级需求,仅作为躯壳活着。目标的技能熟练度和背景故事会替换为原虫种的技能熟练度和背景故事,一旦宿主死亡,原虫种将从宿主身上逃离。</description>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Ability_Possess</iconPath>
|
||||
<cooldownTicksRange>800</cooldownTicksRange>
|
||||
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
|
||||
<hotKey>Misc1</hotKey>
|
||||
<verbProperties>
|
||||
<!-- 使用我们新的Verb -->
|
||||
<verbClass>ArachnaeSwarm.Verb_JumpAndCastOnLanding</verbClass>
|
||||
<warmupTime>1.0</warmupTime>
|
||||
<range>9.9</range>
|
||||
<requireLineOfSight>true</requireLineOfSight>
|
||||
<soundCast>Longjump_Jump</soundCast>
|
||||
<soundLanding>Longjump_Land</soundLanding>
|
||||
<targetParams>
|
||||
<canTargetPawns>true</canTargetPawns>
|
||||
<canTargetBuildings>false</canTargetBuildings>
|
||||
<canTargetSelf>false</canTargetSelf>
|
||||
<canTargetLocations>false</canTargetLocations>
|
||||
</targetParams>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<!-- comps部分现在只包含夺舍效果,因为跳跃由Verb处理 -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_AbilityPossess">
|
||||
<!-- Base success chance range (60% to 100%) -->
|
||||
<successChance>0.1</successChance>
|
||||
<!-- Bonus success chance per point of damage dealt (1%) -->
|
||||
<successChanceBonusPerDamage>0.01</successChanceBonusPerDamage>
|
||||
<!-- Optional: Hediff to apply on successful possession -->
|
||||
<hediffToApplyOnSuccess>ARA_HiveMindDrone</hediffToApplyOnSuccess>
|
||||
<!-- Optional: A list of race ThingDefs that cannot be possessed -->
|
||||
<raceBlacklist>
|
||||
<li>ArachnaeQueen_Race</li>
|
||||
</raceBlacklist>
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
</Defs>
|
||||
53
1.6/1.6/Defs/AbilityDefs/Abilities_TrackingCharge.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<!-- 1. Definition for the PawnFlyer itself -->
|
||||
<ThingDef ParentName="PawnFlyerBase">
|
||||
<defName>ARA_Flyer_TrackingCharge</defName>
|
||||
<thingClass>ArachnaeSwarm.PawnFlyer_TrackingCharge</thingClass>
|
||||
<pawnFlyer>
|
||||
<flightSpeed>0.5</flightSpeed>
|
||||
<heightFactor>0</heightFactor>
|
||||
</pawnFlyer>
|
||||
</ThingDef>
|
||||
|
||||
<!-- 2. The final Ability Definition -->
|
||||
<AbilityDef>
|
||||
<defName>ARA_Ability_TrackingCharge</defName>
|
||||
<label>追踪冲撞</label>
|
||||
<description>阿拉克涅盾头种对目标发起蓄势冲撞,对路径上的一切造成伤害。飞行的距离越远,伤害越高。</description>
|
||||
<iconPath>UI/Commands/WarTrumpet</iconPath> <!-- Placeholder Icon -->
|
||||
<cooldownTicksRange>600</cooldownTicksRange>
|
||||
<verbProperties>
|
||||
<verbClass>ArachnaeSwarm.Verb_CastAbilityTrackingCharge</verbClass>
|
||||
<label>tracking charge</label>
|
||||
<targetParams>
|
||||
<canTargetPawns>true</canTargetPawns>
|
||||
<canTargetBuildings>false</canTargetBuildings>
|
||||
<canTargetAnimals>true</canTargetAnimals>
|
||||
<canTargetMechs>true</canTargetMechs>
|
||||
<canTargetSelf>false</canTargetSelf>
|
||||
</targetParams>
|
||||
<range>60</range>
|
||||
<warmupTime>1.0</warmupTime>
|
||||
</verbProperties>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TrackingCharge">
|
||||
<homingSpeed>1.5</homingSpeed>
|
||||
<initialDamage>15</initialDamage>
|
||||
<damagePerTile>2</damagePerTile>
|
||||
<inertiaDistance>6</inertiaDistance>
|
||||
<collisionDamageDef>Blunt</collisionDamageDef>
|
||||
<flyerDef>ARA_Flyer_TrackingCharge</flyerDef>
|
||||
<collisionRadius>1.5</collisionRadius> <!-- Larger collision radius -->
|
||||
<impactSound>Pawn_Melee_BigBash_HitPawn</impactSound>
|
||||
<damageHostileOnly>true</damageHostileOnly> <!-- Set to false to damage everyone in the path -->
|
||||
</li>
|
||||
<li Class="CompProperties_AbilityEffecterOnCaster">
|
||||
<effecterDef>WarTrumpet</effecterDef>
|
||||
<maintainTicks>20</maintainTicks> <!-- Long enough for the "2nd wave" to spawn -->
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
|
||||
</Defs>
|
||||
@@ -15,9 +15,6 @@
|
||||
<Shooting>2</Shooting>
|
||||
<Melee>2</Melee>
|
||||
</skillGains>
|
||||
<forcedHediffs>
|
||||
<li>ARA_HiveMindMaster</li>
|
||||
</forcedHediffs>
|
||||
|
||||
<spawnCategories>
|
||||
<li>ArachnaeQueen_spawnCategoriesA</li>
|
||||
@@ -56,10 +53,6 @@
|
||||
<li>ArachnaeNode_spawnCategoriesA</li>
|
||||
</spawnCategories>
|
||||
|
||||
<forcedHediffs>
|
||||
<li>ARA_HiveMindDrone</li>
|
||||
</forcedHediffs>
|
||||
|
||||
<requiresSpawnCategory>true</requiresSpawnCategory>
|
||||
</AlienRace.AlienBackstoryDef>
|
||||
<AlienRace.AlienBackstoryDef ParentName="ARA_BaseBackStory">
|
||||
@@ -68,7 +61,24 @@
|
||||
<titleShort>蜜罐种</titleShort>
|
||||
<description>[PAWN_nameDef]是一只阿拉克涅蜜罐种督虫。基因的选择性表达使其长出了肿胀的囊袋和复杂的口器,这使得她可以吞噬那些未经过处理的尸体和各种杂食或是将其进一步分解,并通过消化器官将其转变为阿拉克涅虫蜜以供其他虫族食用。\n\n[PAWN_nameDef]在战斗中并不是一个值得正视的对手,她没有可以接入武装器官的副肢,脆弱臃肿的特性也决定了她几乎无法躲开任何攻击。</description>
|
||||
<slot>Adulthood</slot>
|
||||
<requiredWorkTags>Cooking</requiredWorkTags>
|
||||
<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>
|
||||
<Cooking>5</Cooking>
|
||||
</skillGains>
|
||||
|
||||
<spawnCategories>
|
||||
<li>ArachnaeNode_spawnCategories_Myrmecocystus</li>
|
||||
@@ -80,9 +90,98 @@
|
||||
<titleShort>盾头种</titleShort>
|
||||
<description>[PAWN_nameDef]是一只阿拉克涅盾头种督虫。盾头种是一种笨重的阿拉克涅虫族,她们拥有厚厚的经常过度生长的甲壳,除了生产甲壳素外,也拥有接入武装器官的辅肢,可以凭借虫群的武装器官和自己与生俱来的盔甲承担保卫虫巢的任务。</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>
|
||||
<Mining>5</Mining>
|
||||
</skillGains>
|
||||
|
||||
<spawnCategories>
|
||||
<li>ArachnaeNode_spawnCategories_ShieldHead</li>
|
||||
</spawnCategories>
|
||||
</AlienRace.AlienBackstoryDef>
|
||||
<AlienRace.AlienBackstoryDef ParentName="ARA_BaseBackStory">
|
||||
<defName>Arachnae_Node_BS_Adult_WeaponSmith</defName>
|
||||
<title>阿拉克涅工艺种</title>
|
||||
<titleShort>工艺种</titleShort>
|
||||
<description>[PAWN_nameDef]是一只阿拉克涅工艺种督虫。能够产出专门用来孵化阿拉克涅武装器官的孵化茧,以强化虫巢的战斗力。\n\n尽管[PAWN_nameDef]可以拿起武装器官,但是非常害怕任何伤害,尽量避免她直接暴露在攻击下。</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>
|
||||
<Construction>5</Construction>
|
||||
</skillGains>
|
||||
|
||||
<spawnCategories>
|
||||
<li>ArachnaeNode_spawnCategories_WeaponSmith</li>
|
||||
</spawnCategories>
|
||||
</AlienRace.AlienBackstoryDef>
|
||||
<AlienRace.AlienBackstoryDef ParentName="ARA_BaseBackStory">
|
||||
<defName>Arachnae_Node_BS_Adult_Fighter</defName>
|
||||
<title>阿拉克涅战士种</title>
|
||||
<titleShort>战士种</titleShort>
|
||||
<description>[PAWN_nameDef]是一只阿拉克涅战士种督虫,可以进行狩猎和搬运,擅长操纵所有的虫巢武器,无论是近战还是远程都是一个难缠的对手。虽然无法在常规状态下孵化辅虫,但是其可以将阿拉克涅酸噬种像炮弹一样往敌人的脸上发射,以这种辅虫的有限寿命换取敌方的远程哑火。</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_Fighter</li>
|
||||
</spawnCategories>
|
||||
</AlienRace.AlienBackstoryDef>
|
||||
|
||||
<AlienRace.AlienBackstoryDef ParentName="ARA_BaseBackStory">
|
||||
<defName>Arachnae_Node_BS_Adult_Facehugger</defName>
|
||||
<title>阿拉克涅原虫种</title>
|
||||
<titleShort>原虫种</titleShort>
|
||||
<description>[PAWN_nameDef]是一只阿拉克涅原虫种督虫。[PAWN_nameDef]通过独特的神经链接管伸入受害者身体来接管受害者的身体。不同于普通阿拉克涅虫族,阿拉克涅原虫种拥有自我意识,不需要女皇种的监管。</description>
|
||||
<slot>Adulthood</slot>
|
||||
|
||||
<spawnCategories>
|
||||
<li>ArachnaeNode_spawnCategories_Facehugger</li>
|
||||
</spawnCategories>
|
||||
</AlienRace.AlienBackstoryDef>
|
||||
</Defs>
|
||||
@@ -14,7 +14,7 @@
|
||||
<!-- 背部组织,仅包含骨骼和甲片 -->
|
||||
<li>
|
||||
<def>ARA_Dorsum</def>
|
||||
<coverage>0</coverage>
|
||||
<coverage>0.25</coverage>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
@@ -42,7 +42,7 @@
|
||||
<!-- 胸部组织,包含骨骼和各类重点维生器官 -->
|
||||
<li>
|
||||
<def>ARA_Sternum</def>
|
||||
<coverage>0</coverage>
|
||||
<coverage>0.25</coverage>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
@@ -156,7 +156,7 @@
|
||||
<def>ARA_Tail</def>
|
||||
<height>Bottom</height>
|
||||
<depth>Inside</depth>
|
||||
<coverage>0</coverage>
|
||||
<coverage>0.25</coverage>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
@@ -583,17 +583,29 @@
|
||||
<BodyPartDef>
|
||||
<defName>ARA_Dorsum</defName>
|
||||
<label>背部组织群</label>
|
||||
<conceptual>true</conceptual>
|
||||
<hitPoints>50</hitPoints>
|
||||
<permanentInjuryChanceFactor>0.5</permanentInjuryChanceFactor>
|
||||
<skinCovered>true</skinCovered>
|
||||
<solid>false</solid>
|
||||
<bleedRate>0.25</bleedRate>
|
||||
</BodyPartDef>
|
||||
<BodyPartDef>
|
||||
<defName>ARA_Sternum</defName>
|
||||
<label>胸部组织群</label>
|
||||
<conceptual>true</conceptual>
|
||||
<hitPoints>50</hitPoints>
|
||||
<permanentInjuryChanceFactor>0.5</permanentInjuryChanceFactor>
|
||||
<skinCovered>true</skinCovered>
|
||||
<solid>false</solid>
|
||||
<bleedRate>0.25</bleedRate>
|
||||
</BodyPartDef>
|
||||
<BodyPartDef>
|
||||
<defName>ARA_Tail</defName>
|
||||
<label>尾部组织群</label>
|
||||
<conceptual>true</conceptual>
|
||||
<hitPoints>50</hitPoints>
|
||||
<permanentInjuryChanceFactor>0.5</permanentInjuryChanceFactor>
|
||||
<skinCovered>true</skinCovered>
|
||||
<solid>false</solid>
|
||||
<bleedRate>0.25</bleedRate>
|
||||
</BodyPartDef>
|
||||
<BodyPartDef>
|
||||
<defName>ARA_Exoskeleton_Dorsum</defName>
|
||||
@@ -658,6 +670,15 @@
|
||||
<solid>false</solid>
|
||||
<bleedRate>1.5</bleedRate>
|
||||
</BodyPartDef>
|
||||
<BodyPartDef>
|
||||
<defName>ARA_Toxic_Needle</defName>
|
||||
<label>毒针腺</label>
|
||||
<hitPoints>10</hitPoints>
|
||||
<permanentInjuryChanceFactor>0.1</permanentInjuryChanceFactor>
|
||||
<skinCovered>false</skinCovered>
|
||||
<solid>false</solid>
|
||||
<bleedRate>1.5</bleedRate>
|
||||
</BodyPartDef>
|
||||
|
||||
<BodyPartGroupDef>
|
||||
<defName>ARA_Genitalias</defName>
|
||||
@@ -669,6 +690,11 @@
|
||||
<label>酸腺器官</label>
|
||||
<listOrder>125</listOrder>
|
||||
</BodyPartGroupDef>
|
||||
<BodyPartGroupDef>
|
||||
<defName>ARA_Toxic_Needles</defName>
|
||||
<label>毒针器官</label>
|
||||
<listOrder>126</listOrder>
|
||||
</BodyPartGroupDef>
|
||||
|
||||
<BodyDef>
|
||||
<defName>ArachnaeMyrmecocystus_Body</defName>
|
||||
@@ -1395,4 +1421,745 @@
|
||||
</parts>
|
||||
</corePart>
|
||||
</BodyDef>
|
||||
<BodyDef>
|
||||
<defName>ArachnaeWeaponSmith_Body</defName>
|
||||
<label>阿拉克涅工艺种</label> <!-- EN: beetle-like with claw -->
|
||||
<corePart>
|
||||
<def>Torso</def>
|
||||
<height>Middle</height>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Ribcage</def>
|
||||
<coverage>0.036</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Sternum</def>
|
||||
<coverage>0.015</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Pelvis</def>
|
||||
<coverage>0.025</coverage>
|
||||
<height>Bottom</height>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Spine</def>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Stomach</def>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Heart</def>
|
||||
<coverage>0.020</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Lung</def>
|
||||
<customLabel>左肺</customLabel>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Lung</def>
|
||||
<customLabel>右肺</customLabel>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Kidney</def>
|
||||
<customLabel>左肾</customLabel>
|
||||
<coverage>0.017</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Kidney</def>
|
||||
<customLabel>右肾</customLabel>
|
||||
<coverage>0.017</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Liver</def>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Neck</def>
|
||||
<coverage>0.075</coverage>
|
||||
<height>Top</height>
|
||||
<groups>
|
||||
<li>Neck</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Head</def>
|
||||
<coverage>0.80</coverage>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>FullHead</li>
|
||||
<li>HeadAttackTool</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Skull</def>
|
||||
<coverage>0.18</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>Eyes</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Brain</def>
|
||||
<coverage>0.8</coverage>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>Eyes</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Eye</def>
|
||||
<customLabel>left eye</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<groups>
|
||||
<li>FullHead</li>
|
||||
<li>Eyes</li>
|
||||
</groups>
|
||||
<woundAnchorTag>LeftEye</woundAnchorTag>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<visibleHediffRots>
|
||||
<li>South</li>
|
||||
<li>West</li>
|
||||
</visibleHediffRots>
|
||||
</li>
|
||||
<li>
|
||||
<def>Eye</def>
|
||||
<customLabel>right eye</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<groups>
|
||||
<li>FullHead</li>
|
||||
<li>Eyes</li>
|
||||
</groups>
|
||||
<woundAnchorTag>RightEye</woundAnchorTag>
|
||||
<visibleHediffRots>
|
||||
<li>South</li>
|
||||
<li>East</li>
|
||||
</visibleHediffRots>
|
||||
</li>
|
||||
<li>
|
||||
<def>Ear</def>
|
||||
<customLabel>左耳</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Ear</def>
|
||||
<customLabel>右耳</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Nose</def>
|
||||
<coverage>0.10</coverage>
|
||||
<groups>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Jaw</def>
|
||||
<coverage>0.15</coverage>
|
||||
<groups>
|
||||
<li>Teeth</li>
|
||||
<li>FullHead</li>
|
||||
<li>Mouth</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Tongue</def>
|
||||
<coverage>0.001</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Shoulder</def>
|
||||
<customLabel>左肩</customLabel>
|
||||
<coverage>0.12</coverage>
|
||||
<woundAnchorTag>LeftShoulder</woundAnchorTag>
|
||||
<groups>
|
||||
<li>Shoulders</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Arm</def>
|
||||
<customLabel>左辅肢</customLabel>
|
||||
<coverage>0.77</coverage>
|
||||
<groups>
|
||||
<li>Arms</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Hand</def>
|
||||
<customLabel>左手</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Hands</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Shoulder</def>
|
||||
<customLabel>右肩</customLabel>
|
||||
<coverage>0.12</coverage>
|
||||
<woundAnchorTag>RightShoulder</woundAnchorTag>
|
||||
<groups>
|
||||
<li>Shoulders</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Arm</def>
|
||||
<customLabel>右辅肢</customLabel>
|
||||
<coverage>0.77</coverage>
|
||||
<groups>
|
||||
<li>Arms</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Hand</def>
|
||||
<customLabel>右手</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Hands</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Waist</def>
|
||||
<coverage>0</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Waist</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Leg</def>
|
||||
<customLabel>左腿</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Legs</li>
|
||||
</groups>
|
||||
<woundAnchorTag>LeftLeg</woundAnchorTag>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Foot</def>
|
||||
<customLabel>左足</customLabel>
|
||||
<coverage>0.1</coverage>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Feet</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Leg</def>
|
||||
<customLabel>右腿</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Legs</li>
|
||||
</groups>
|
||||
<woundAnchorTag>RightLeg</woundAnchorTag>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Foot</def>
|
||||
<customLabel>右足</customLabel>
|
||||
<coverage>0.1</coverage>
|
||||
<groups>
|
||||
<li>Feet</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Dorsum</def>
|
||||
<height>Bottom</height>
|
||||
<depth>Inside</depth>
|
||||
<coverage>0.25</coverage>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<!-- 甲片,防御作用 -->
|
||||
<li>
|
||||
<def>ARA_Chitin_Shell</def>
|
||||
<coverage>0.5</coverage>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Arm</def>
|
||||
<customLabel>左辅肢(其二)</customLabel>
|
||||
<coverage>0.17</coverage>
|
||||
<groups>
|
||||
<li>Arms</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Arm</def>
|
||||
<customLabel>右辅肢(其二)</customLabel>
|
||||
<coverage>0.17</coverage>
|
||||
<groups>
|
||||
<li>Arms</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</corePart>
|
||||
</BodyDef>
|
||||
<BodyDef>
|
||||
<defName>ArachnaeFighter_Body</defName>
|
||||
<label>阿拉克涅战士种</label> <!-- EN: beetle-like with claw -->
|
||||
<corePart>
|
||||
<def>Torso</def>
|
||||
<height>Middle</height>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Ribcage</def>
|
||||
<coverage>0.036</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Sternum</def>
|
||||
<coverage>0.015</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Pelvis</def>
|
||||
<coverage>0.025</coverage>
|
||||
<height>Bottom</height>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Spine</def>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Stomach</def>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Heart</def>
|
||||
<coverage>0.020</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Lung</def>
|
||||
<customLabel>左肺</customLabel>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Lung</def>
|
||||
<customLabel>右肺</customLabel>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Kidney</def>
|
||||
<customLabel>左肾</customLabel>
|
||||
<coverage>0.017</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Kidney</def>
|
||||
<customLabel>右肾</customLabel>
|
||||
<coverage>0.017</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Liver</def>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Neck</def>
|
||||
<coverage>0.075</coverage>
|
||||
<height>Top</height>
|
||||
<groups>
|
||||
<li>Neck</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Head</def>
|
||||
<coverage>0.80</coverage>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>FullHead</li>
|
||||
<li>HeadAttackTool</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Skull</def>
|
||||
<coverage>0.18</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>Eyes</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Brain</def>
|
||||
<coverage>0.8</coverage>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>Eyes</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Eye</def>
|
||||
<customLabel>left eye</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<groups>
|
||||
<li>FullHead</li>
|
||||
<li>Eyes</li>
|
||||
</groups>
|
||||
<woundAnchorTag>LeftEye</woundAnchorTag>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<visibleHediffRots>
|
||||
<li>South</li>
|
||||
<li>West</li>
|
||||
</visibleHediffRots>
|
||||
</li>
|
||||
<li>
|
||||
<def>Eye</def>
|
||||
<customLabel>right eye</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<groups>
|
||||
<li>FullHead</li>
|
||||
<li>Eyes</li>
|
||||
</groups>
|
||||
<woundAnchorTag>RightEye</woundAnchorTag>
|
||||
<visibleHediffRots>
|
||||
<li>South</li>
|
||||
<li>East</li>
|
||||
</visibleHediffRots>
|
||||
</li>
|
||||
<li>
|
||||
<def>Ear</def>
|
||||
<customLabel>左耳</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Ear</def>
|
||||
<customLabel>右耳</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Nose</def>
|
||||
<coverage>0.10</coverage>
|
||||
<groups>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Jaw</def>
|
||||
<coverage>0.15</coverage>
|
||||
<groups>
|
||||
<li>Teeth</li>
|
||||
<li>FullHead</li>
|
||||
<li>Mouth</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Tongue</def>
|
||||
<coverage>0.001</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Shoulder</def>
|
||||
<customLabel>左肩</customLabel>
|
||||
<coverage>0.12</coverage>
|
||||
<woundAnchorTag>LeftShoulder</woundAnchorTag>
|
||||
<groups>
|
||||
<li>Shoulders</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Arm</def>
|
||||
<customLabel>左辅肢</customLabel>
|
||||
<coverage>0.77</coverage>
|
||||
<groups>
|
||||
<li>Arms</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Hand</def>
|
||||
<customLabel>左手</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Hands</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Shoulder</def>
|
||||
<customLabel>右肩</customLabel>
|
||||
<coverage>0.12</coverage>
|
||||
<woundAnchorTag>RightShoulder</woundAnchorTag>
|
||||
<groups>
|
||||
<li>Shoulders</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Arm</def>
|
||||
<customLabel>右辅肢</customLabel>
|
||||
<coverage>0.77</coverage>
|
||||
<groups>
|
||||
<li>Arms</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Hand</def>
|
||||
<customLabel>右手</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Hands</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Waist</def>
|
||||
<coverage>0</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Waist</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Leg</def>
|
||||
<customLabel>左腿</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Legs</li>
|
||||
</groups>
|
||||
<woundAnchorTag>LeftLeg</woundAnchorTag>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Foot</def>
|
||||
<customLabel>左足</customLabel>
|
||||
<coverage>0.1</coverage>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Feet</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Leg</def>
|
||||
<customLabel>右腿</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Legs</li>
|
||||
</groups>
|
||||
<woundAnchorTag>RightLeg</woundAnchorTag>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Foot</def>
|
||||
<customLabel>右足</customLabel>
|
||||
<coverage>0.1</coverage>
|
||||
<groups>
|
||||
<li>Feet</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<!-- 尾部组织群 -->
|
||||
<li>
|
||||
<def>ARA_Tail</def>
|
||||
<height>Bottom</height>
|
||||
<depth>Inside</depth>
|
||||
<coverage>0.25</coverage>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<!-- 甲片,防御作用 -->
|
||||
<li>
|
||||
<def>ARA_Chitin_Shell</def>
|
||||
<coverage>0.01</coverage>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<!-- 酸囊 -->
|
||||
<li>
|
||||
<def>ARA_Acid_sac</def>
|
||||
<coverage>0.005</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Acid_sacs</li>
|
||||
</groups>
|
||||
</li>
|
||||
<!-- 毒针腺 -->
|
||||
<li>
|
||||
<def>ARA_Toxic_Needle</def>
|
||||
<coverage>0.005</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Toxic_Needles</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</corePart>
|
||||
</BodyDef>
|
||||
</Defs>
|
||||
|
||||
@@ -14,4 +14,34 @@
|
||||
<hediff>AcidBurn</hediff>
|
||||
<scaleDamageToBuildingsBasedOnFlammability>false</scaleDamageToBuildingsBasedOnFlammability>
|
||||
</DamageDef>
|
||||
<DamageDef ParentName="Bullet">
|
||||
<defName>ARA_Fist_Needle</defName>
|
||||
<label>刺针毒素</label>
|
||||
<workerClass>DamageWorker_AddInjury</workerClass>
|
||||
<armorCategory>Sharp</armorCategory>
|
||||
<hediff>Cut</hediff>
|
||||
<hediffSolid>Crack</hediffSolid>
|
||||
<additionalHediffs>
|
||||
<li>
|
||||
<hediff>ToxicBuildup</hediff>
|
||||
<severityPerDamageDealt>0.02</severityPerDamageDealt>
|
||||
<victimSeverityScaling>ToxicResistance</victimSeverityScaling>
|
||||
<inverseStatScaling>true</inverseStatScaling>
|
||||
<victimSeverityScalingByInvBodySize>true</victimSeverityScalingByInvBodySize>
|
||||
</li>
|
||||
</additionalHediffs>
|
||||
<applyAdditionalHediffsIfHuntingForFood>false</applyAdditionalHediffsIfHuntingForFood>
|
||||
</DamageDef>
|
||||
<DamageDef ParentName="CutBase">
|
||||
<defName>ARA_AcidCut_Damage</defName>
|
||||
<label>酸性撕咬</label>
|
||||
<workerClass>DamageWorker_AddInjury</workerClass>
|
||||
<deathMessage>{0} 被携带酸液的巨颚咬死了。</deathMessage>
|
||||
<additionalHediffs>
|
||||
<li>
|
||||
<hediff>ARA_AcidCoverd</hediff>
|
||||
<severityPerDamageDealt>0.01</severityPerDamageDealt>
|
||||
</li>
|
||||
</additionalHediffs>
|
||||
</DamageDef>
|
||||
</Defs>
|
||||
@@ -138,5 +138,116 @@
|
||||
<FacialAnimation.SkinTypeDef ParentName="ArachnaeNode_Skin" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_ShieldHead_SkinNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_ShieldHead</raceName>
|
||||
</FacialAnimation.SkinTypeDef>
|
||||
|
||||
<FacialAnimation.BrowTypeDef ParentName="ArachnaeNode_Brow" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_BrowNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.BrowTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeA" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_EyeNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeB" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_EyeNormal2</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeC" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_EyeNormal3</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeD" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_EyeNormal4</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.HeadTypeDef ParentName="ArachnaeNode_Head" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_HeadNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.HeadTypeDef>
|
||||
<FacialAnimation.LidTypeDef ParentName="ArachnaeNode_Lid" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_LidNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.LidTypeDef>
|
||||
<FacialAnimation.MouthTypeDef ParentName="ArachnaeNode_Mouth" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_MouthNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.MouthTypeDef>
|
||||
<FacialAnimation.SkinTypeDef ParentName="ArachnaeNode_Skin" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith_SkinNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_WeaponSmith</raceName>
|
||||
</FacialAnimation.SkinTypeDef>
|
||||
|
||||
<FacialAnimation.BrowTypeDef ParentName="ArachnaeNode_Brow" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_BrowNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.BrowTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeA" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_EyeNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeB" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_EyeNormal2</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeC" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_EyeNormal3</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeD" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_EyeNormal4</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.HeadTypeDef ParentName="ArachnaeNode_Head" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_HeadNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.HeadTypeDef>
|
||||
<FacialAnimation.LidTypeDef ParentName="ArachnaeNode_Lid" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_LidNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.LidTypeDef>
|
||||
<FacialAnimation.MouthTypeDef ParentName="ArachnaeNode_Mouth" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_MouthNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.MouthTypeDef>
|
||||
<FacialAnimation.SkinTypeDef ParentName="ArachnaeNode_Skin" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Facehugger_SkinNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Facehugger</raceName>
|
||||
</FacialAnimation.SkinTypeDef>
|
||||
|
||||
<FacialAnimation.BrowTypeDef ParentName="ArachnaeNode_Brow" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_BrowNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.BrowTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeA" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_EyeNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeB" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_EyeNormal2</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeC" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_EyeNormal3</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.EyeballTypeDef ParentName="ArachnaeNode_EyeD" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_EyeNormal4</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.EyeballTypeDef>
|
||||
<FacialAnimation.HeadTypeDef ParentName="ArachnaeNode_Head" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_HeadNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.HeadTypeDef>
|
||||
<FacialAnimation.LidTypeDef ParentName="ArachnaeNode_Lid" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_LidNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.LidTypeDef>
|
||||
<FacialAnimation.MouthTypeDef ParentName="ArachnaeNode_Mouth" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_MouthNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.MouthTypeDef>
|
||||
<FacialAnimation.SkinTypeDef ParentName="ArachnaeNode_Skin" MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Race_Fighter_SkinNormal</defName>
|
||||
<raceName>ArachnaeNode_Race_Fighter</raceName>
|
||||
</FacialAnimation.SkinTypeDef>
|
||||
</Defs>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Defs>
|
||||
<HairDef>
|
||||
<!--<HairDef>
|
||||
<defName>ARA_Scattered_Hair_Long</defName>
|
||||
<label>散发(长)</label>
|
||||
<hairGender>Female</hairGender>
|
||||
@@ -9,5 +9,5 @@
|
||||
<styleTags>
|
||||
<li>ARA_HiveNode_Style</li>
|
||||
</styleTags>
|
||||
</HairDef>
|
||||
</HairDef>-->
|
||||
</Defs>
|
||||
|
||||
@@ -2,17 +2,24 @@
|
||||
<Defs>
|
||||
<HediffDef>
|
||||
<defName>ARA_HiveMindMaster</defName>
|
||||
<label>阿拉克涅主巢</label>
|
||||
<description>虫群意识的中心节点, 作为主脑统御整个阿拉克涅虫群.</description>
|
||||
<label>阿拉克涅女皇种</label>
|
||||
<description>阿拉克涅女皇种是虫群意识的中心节点, 作为主脑统御整个阿拉克涅虫群。其体内拥有大量未分化的修复细胞,可以以常人无法想象的速度自行治愈所有的创伤。</description>
|
||||
<hediffClass>ArachnaeSwarm.Hediff_HiveMindMaster</hediffClass>
|
||||
<defaultLabelColor>(0.8, 0.3, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>true</scenarioCanAdd>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<maxSeverity>100</maxSeverity>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_HiveMindMaster">
|
||||
<scanIntervalTicks>3200</scanIntervalTicks>
|
||||
</li>
|
||||
</comps>
|
||||
<stages>
|
||||
<li>
|
||||
<label>连接至 {0} 个虫群工蜂</label>
|
||||
<minSeverity>0</minSeverity>
|
||||
<foodPoisoningChanceFactor>0</foodPoisoningChanceFactor>
|
||||
<regeneration>500</regeneration>
|
||||
<!-- Stat offsets will be added here later -->
|
||||
<disablesNeeds>
|
||||
<li>Joy</li>
|
||||
@@ -30,12 +37,12 @@
|
||||
|
||||
<HediffDef>
|
||||
<defName>ARA_HiveMindDrone</defName>
|
||||
<label>阿拉克涅工蜂</label>
|
||||
<description>阿拉克涅工蜂通过心灵与阿拉克涅女皇种相链接。如果女皇死亡,工蜂也将停止生命活动。</description>
|
||||
<label>阿拉克涅督虫</label>
|
||||
<description>阿拉克涅督虫通过心灵与阿拉克涅女皇种相链接。如果女皇死亡,督虫也将停止生命活动。</description>
|
||||
<hediffClass>ArachnaeSwarm.Hediff_HiveMindDrone</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>true</scenarioCanAdd>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_HiveMindDrone">
|
||||
<unlinkedDieDelayTicks>6400</unlinkedDieDelayTicks> <!-- Default to 30 seconds -->
|
||||
@@ -43,13 +50,14 @@
|
||||
<li Class="HediffCompProperties_MessageAfterTicks">
|
||||
<ticks>1</ticks>
|
||||
<letterLabel>{0_labelShort} 诞生</letterLabel>
|
||||
<letterText>一只新的阿拉克涅督虫 {0_labelShort} 已经破茧而出!她正在四处徘徊,等待女皇种与其建立链接——使用阿拉克涅女皇种的信息素标记技能完成链接,否则督虫将在一段时间后死亡!</letterText>
|
||||
<letterText>一只新的阿拉克涅督虫 {0_labelShort} 已经破茧而出!她正在四处徘徊,等待女皇种的指示——使用阿拉克涅女皇种的信息素标记技能完成链接,或者等待其自行建立链接。</letterText>
|
||||
<letterType>HumanPregnancy</letterType>
|
||||
</li>
|
||||
</comps>
|
||||
<stages>
|
||||
<li>
|
||||
<minSeverity>0</minSeverity>
|
||||
<foodPoisoningChanceFactor>0</foodPoisoningChanceFactor>
|
||||
<disablesNeeds>
|
||||
<li>Mood</li>
|
||||
<li>Joy</li>
|
||||
@@ -63,4 +71,18 @@
|
||||
</li>
|
||||
</stages>
|
||||
</HediffDef>
|
||||
|
||||
<HediffDef>
|
||||
<defName>ARA_HiveMindWorker</defName>
|
||||
<label>阿拉克涅辅虫</label>
|
||||
<description>阿拉克涅辅虫通过心灵与阿拉克涅督虫种相链接。如果督虫死亡,辅虫也将停止生命活动。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<comps>
|
||||
</comps>
|
||||
<stages>
|
||||
</stages>
|
||||
</HediffDef>
|
||||
</Defs>
|
||||
93
1.6/1.6/Defs/HediffDefs/ARA_Hediffs_Possession.xml
Normal file
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<HediffDef>
|
||||
<defName>ARA_Possession</defName>
|
||||
<label>阿拉克涅原虫</label>
|
||||
<description>这个生物的身体被阿拉克涅原虫所夺取了,这具身体原本的主人已经没有可能再回来了。</description>
|
||||
<hediffClass>ArachnaeSwarm.Hediff_Possession</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<maxSeverity>1.0</maxSeverity>
|
||||
<renderNodeProperties>
|
||||
<li>
|
||||
<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>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
<drawSize>0.85</drawSize>
|
||||
<drawData>
|
||||
<dataNorth>
|
||||
<offset>(0, 0, 0.2)</offset>
|
||||
</dataNorth>
|
||||
<dataEast>
|
||||
<offset>(0, 0, 0.2)</offset>
|
||||
</dataEast>
|
||||
<dataSouth>
|
||||
<offset>(0, 0, 0.2)</offset>
|
||||
</dataSouth>
|
||||
<dataWest>
|
||||
<offset>(0, 0, 0.2)</offset>
|
||||
</dataWest>
|
||||
<defaultData>
|
||||
<layer>800</layer>
|
||||
</defaultData>
|
||||
</drawData>
|
||||
</li>
|
||||
</renderNodeProperties>
|
||||
<stages>
|
||||
<li>
|
||||
<minSeverity>0</minSeverity>
|
||||
<disablesNeeds>
|
||||
<li>Mood</li>
|
||||
<li>Joy</li>
|
||||
<li>Beauty</li>
|
||||
<li>Comfort</li>
|
||||
<li>Outdoors</li>
|
||||
<li>Indoors</li>
|
||||
<li>DrugDesire</li>
|
||||
<li>RoomSize</li>
|
||||
</disablesNeeds>
|
||||
</li>
|
||||
</stages>
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_DisappearsOnDeath"/>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<HediffDef>
|
||||
<defName>ARA_Facehugger_LowOperation</defName>
|
||||
<label>阿拉克涅原虫</label>
|
||||
<description>脱离了宿主的阿拉克涅原虫不仅非常脆弱,其小小的身躯也无法让其承担专业性工作。</description>
|
||||
<hediffClass>ArachnaeSwarm.Hediff_Possession</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<maxSeverity>1.0</maxSeverity>
|
||||
<stages>
|
||||
<li>
|
||||
<capMods>
|
||||
<!-- <li>
|
||||
<capacity>Consciousness</capacity>
|
||||
<setMax>0.3</setMax>
|
||||
</li> -->
|
||||
<li>
|
||||
<capacity>Talking</capacity>
|
||||
<setMax>0</setMax>
|
||||
</li>
|
||||
<li>
|
||||
<capacity>Manipulation</capacity>
|
||||
<setMax>0.2</setMax>
|
||||
</li>
|
||||
<li>
|
||||
<capacity>Moving</capacity>
|
||||
<setMax>0.25</setMax>
|
||||
</li>
|
||||
</capMods>
|
||||
</li>
|
||||
</stages>
|
||||
</HediffDef>
|
||||
</Defs>
|
||||
47
1.6/1.6/Defs/HediffDefs/ARA_Hediffs_Temperature.xml
Normal file
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<HediffDef>
|
||||
<defName>ARA_TemperatureRegulation</defName>
|
||||
<label>冷血动物</label>
|
||||
<description>阿拉克涅虫族是冷血动物,这代表着她们对外界的温度变化更加敏感——在适宜温度下她们将变得敏捷而致命,在不适温度下她们将难以行动。\n\n此类阿拉克涅虫族可以接受在16~26°C的温度下活动,温度接近21°C时会获得额外的意识加成。</description>
|
||||
<hediffClass>Hediff_High</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.8, 0.9)</defaultLabelColor>
|
||||
<maxSeverity>1.0</maxSeverity>
|
||||
<minSeverity>-0.01</minSeverity>
|
||||
<initialSeverity>0.5</initialSeverity>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_Temperature">
|
||||
<minComfortableTemperature>16</minComfortableTemperature>
|
||||
<maxComfortableTemperature>26</maxComfortableTemperature>
|
||||
<severityChangeIn>0.01</severityChangeIn>
|
||||
<severityChangeOut>-0.01</severityChangeOut>
|
||||
</li>
|
||||
</comps>
|
||||
<stages>
|
||||
<li>
|
||||
<minSeverity>0</minSeverity>
|
||||
<label>不适</label>
|
||||
<capMods>
|
||||
<li>
|
||||
<capacity>Consciousness</capacity>
|
||||
<offset>-0.5</offset>
|
||||
</li>
|
||||
</capMods>
|
||||
</li>
|
||||
<li>
|
||||
<minSeverity>0.4</minSeverity>
|
||||
<label>适应</label>
|
||||
</li>
|
||||
<li>
|
||||
<minSeverity>0.8</minSeverity>
|
||||
<label>舒适</label>
|
||||
<capMods>
|
||||
<li>
|
||||
<capacity>Consciousness</capacity>
|
||||
<offset>0.25</offset>
|
||||
</li>
|
||||
</capMods>
|
||||
</li>
|
||||
</stages>
|
||||
</HediffDef>
|
||||
</Defs>
|
||||
@@ -14,7 +14,8 @@
|
||||
<canBeScattered>false</canBeScattered>
|
||||
<abilities>
|
||||
<li>ARA_EggSpew</li>
|
||||
<li>ARA_AcidSprayBurst</li>
|
||||
<li>ARA_EggSpew_BaseFighter</li>
|
||||
<li>ARA_AcidSprayBurst_Queen</li>
|
||||
<li>ARA_BindDrone</li>
|
||||
</abilities>
|
||||
<xenotypeSet>
|
||||
@@ -40,13 +41,19 @@
|
||||
</requiredWorkTags>
|
||||
<startingHediffs>
|
||||
</startingHediffs>
|
||||
<moveSpeedFactorByTerrainTag>
|
||||
<li>
|
||||
<key>ARA_Creep</key>
|
||||
<value>2.0</value>
|
||||
</li>
|
||||
</moveSpeedFactorByTerrainTag>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef Name="ArachnaeQueen_Colonist" ParentName="ArachnaeQueenBasePawnKind">
|
||||
<defName>ARA_ArachnaeQueen</defName>
|
||||
<label>阿拉克涅女皇种</label>
|
||||
<race>ArachnaeQueen_Race</race>
|
||||
<defaultFactionType>PlayerColony</defaultFactionType>
|
||||
<invNutrition>2.55</invNutrition>
|
||||
<invNutrition>0</invNutrition>
|
||||
<backstoryFiltersOverride>
|
||||
<li>
|
||||
<categories>
|
||||
@@ -95,6 +102,12 @@
|
||||
</requiredWorkTags>
|
||||
<startingHediffs>
|
||||
</startingHediffs>
|
||||
<moveSpeedFactorByTerrainTag>
|
||||
<li>
|
||||
<key>ARA_Creep</key>
|
||||
<value>2.0</value>
|
||||
</li>
|
||||
</moveSpeedFactorByTerrainTag>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<defName>ArachnaeNode_Race_Myrmecocystus</defName>
|
||||
@@ -111,7 +124,7 @@
|
||||
</li>
|
||||
</backstoryFiltersOverride>
|
||||
<abilities>
|
||||
<li>ARA_AcidSprayBurst_Myrmecocystus</li>
|
||||
<li>ARA_AcidSprayBurst</li>
|
||||
</abilities>
|
||||
<apparelTags>
|
||||
</apparelTags>
|
||||
@@ -134,84 +147,198 @@
|
||||
<apparelTags>
|
||||
</apparelTags>
|
||||
<apparelMoney>0</apparelMoney>
|
||||
<abilities>
|
||||
<li>ARA_Ability_TrackingCharge</li>
|
||||
</abilities>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith</defName>
|
||||
<label>阿拉克涅工艺种</label>
|
||||
<race>ArachnaeNode_Race_WeaponSmith</race>
|
||||
<defaultFactionType>PlayerColony</defaultFactionType>
|
||||
<invNutrition>0</invNutrition>
|
||||
<backstoryFiltersOverride>
|
||||
<li>
|
||||
<categories>
|
||||
<li>ArachnaeNode_spawnCategoriesA</li>
|
||||
<li>ArachnaeNode_spawnCategories_WeaponSmith</li>
|
||||
</categories>
|
||||
</li>
|
||||
</backstoryFiltersOverride>
|
||||
<abilities>
|
||||
<li>ARA_EggSpewBioforgeIncubator</li>
|
||||
</abilities>
|
||||
<apparelTags>
|
||||
</apparelTags>
|
||||
<apparelMoney>0</apparelMoney>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<defName>ArachnaeNode_Race_Facehugger</defName>
|
||||
<label>阿拉克涅原虫种</label>
|
||||
<race>ArachnaeNode_Race_Facehugger</race>
|
||||
<defaultFactionType>PlayerColony</defaultFactionType>
|
||||
<invNutrition>0</invNutrition>
|
||||
<backstoryFiltersOverride>
|
||||
<li>
|
||||
<categories>
|
||||
<li>ArachnaeNode_spawnCategoriesA</li>
|
||||
<li>ArachnaeNode_spawnCategories_Facehugger</li>
|
||||
</categories>
|
||||
</li>
|
||||
</backstoryFiltersOverride>
|
||||
<abilities>
|
||||
<li>ARA_Ability_Possess</li>
|
||||
</abilities>
|
||||
<apparelTags>
|
||||
</apparelTags>
|
||||
<apparelMoney>0</apparelMoney>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<defName>ArachnaeNode_Race_Fighter</defName>
|
||||
<label>阿拉克涅战士种</label>
|
||||
<race>ArachnaeNode_Race_Fighter</race>
|
||||
<defaultFactionType>PlayerColony</defaultFactionType>
|
||||
<invNutrition>0</invNutrition>
|
||||
<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>
|
||||
<canArriveManhunter>false</canArriveManhunter>
|
||||
<forceDeathOnDowned>true</forceDeathOnDowned>
|
||||
<forceNoDeathNotification>true</forceNoDeathNotification>
|
||||
<combatPower>75</combatPower>
|
||||
<ecoSystemWeight>0</ecoSystemWeight>
|
||||
<moveSpeedFactorByTerrainTag>
|
||||
<li>
|
||||
<key>ARA_Creep</key>
|
||||
<value>2.0</value>
|
||||
</li>
|
||||
</moveSpeedFactorByTerrainTag>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Slavey</defName>
|
||||
<label>阿拉克涅苦役种</label>
|
||||
<race>ArachnaeBase_Race_Slavey</race>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<color>(156,148,125)</color>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Scavenger</defName>
|
||||
<label>阿拉克涅食腐种</label>
|
||||
<race>ArachnaeBase_Race_Scavenger</race>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<color>(156,148,125)</color>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_HardJaw</defName>
|
||||
<label>阿拉克涅坚颚种</label>
|
||||
<race>ArachnaeBase_Race_HardJaw</race>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<color>(156,148,125)</color>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Acid</defName>
|
||||
<label>阿拉克涅酸嗜种</label>
|
||||
<race>ArachnaeBase_Race_Acid</race>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<color>(156,148,125)</color>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ARA_InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Maid</defName>
|
||||
<label>阿拉克涅家政种</label>
|
||||
<race>ArachnaeBase_Race_Maid</race>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<color>(156,148,125)</color>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
|
||||
<PawnKindDef ParentName="InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Slavey</defName>
|
||||
<label>阿拉克涅苦役种</label>
|
||||
<race>ArachnaeBase_Race_Slavey</race>
|
||||
<combatPower>75</combatPower>
|
||||
<ecoSystemWeight>0.35</ecoSystemWeight>
|
||||
<forceDeathOnDowned>true</forceDeathOnDowned>
|
||||
<forceNoDeathNotification>true</forceNoDeathNotification>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<color>(156,148,125)</color>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_Scavenger</defName>
|
||||
<label>阿拉克涅食腐种</label>
|
||||
<race>ArachnaeBase_Race_Scavenger</race>
|
||||
<combatPower>75</combatPower>
|
||||
<ecoSystemWeight>0.35</ecoSystemWeight>
|
||||
<forceDeathOnDowned>true</forceDeathOnDowned>
|
||||
<forceNoDeathNotification>true</forceNoDeathNotification>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<color>(156,148,125)</color>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="InsectKindBase">
|
||||
<defName>ArachnaeBase_Race_HardJaw</defName>
|
||||
<label>阿拉克涅坚颚种</label>
|
||||
<race>ArachnaeBase_Race_HardJaw</race>
|
||||
<combatPower>75</combatPower>
|
||||
<ecoSystemWeight>0.35</ecoSystemWeight>
|
||||
<forceDeathOnDowned>true</forceDeathOnDowned>
|
||||
<forceNoDeathNotification>true</forceNoDeathNotification>
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<color>(156,148,125)</color>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
</shadowData>
|
||||
</bodyGraphicData>
|
||||
<dessicatedBodyGraphicData>
|
||||
<texPath>Things/Pawn/Animal/Spelopede/Dessicated_Spelopede</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
</dessicatedBodyGraphicData>
|
||||
</li>
|
||||
</lifeStages>
|
||||
</PawnKindDef>
|
||||
</Defs>
|
||||
156
1.6/1.6/Defs/ResearchProjectDefs/ARA_ResearchProjects.xml
Normal file
@@ -0,0 +1,156 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<ResearchProjectDef Abstract="True" Name="ARA_techBase">
|
||||
<techLevel>Animal</techLevel>
|
||||
<tab>ARA_ResearchTab</tab>
|
||||
<heldByFactionCategoryTags Inherit="False" />
|
||||
</ResearchProjectDef>
|
||||
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Base_Technology</defName>
|
||||
<label>基础基因序列获取</label>
|
||||
<description>解锁虫群的基础科技,允许孵化基本的辅虫和武装器官</description>
|
||||
<baseCost>100</baseCost>
|
||||
<researchViewX>0.00</researchViewX>
|
||||
<researchViewY>3.20</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
</ResearchProjectDef>
|
||||
<!-- 酸类发展 -->
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_6VXI</defName>
|
||||
<label>基因节点VXI-6"酸囊"</label>
|
||||
<description>使拥有酸囊的虫族允许喷射强酸击退敌人。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>1.00</researchViewX>
|
||||
<researchViewY>0.20</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_7VXI</defName>
|
||||
<label>基因节点VXI-7"外置酸袋"</label>
|
||||
<description>允许工艺种孵化新的酸类武器茧</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>2.00</researchViewX>
|
||||
<researchViewY>0.20</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Technology_6VXI</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<!-- 孵化发展 -->
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_1KYC</defName>
|
||||
<label>基因节点KYC-1"武斗虫"</label>
|
||||
<description>允许女皇种孵化新的虫族——战士种和跃袭种。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>1.00</researchViewX>
|
||||
<researchViewY>2.20</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_3KYC</defName>
|
||||
<label>基因节点KYC-3"冰壳虫"</label>
|
||||
<description>允许女皇种孵化新的虫族——冰壳种,拥有使得附近温度极急剧下降的特殊能力,此类虫族的卵需要在较低的温度下才能正常孵化。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>2.00</researchViewX>
|
||||
<researchViewY>2.20</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_2KYC</defName>
|
||||
<label>基因节点KYC-2"熔火虫"</label>
|
||||
<description>允许女皇种孵化新的虫族——熔火种,拥有喷射高温射流和在近距离灼烧敌人的能力,此类虫族的卵需要在较高的温度下才能正常孵化。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>5.50</researchViewX>
|
||||
<researchViewY>2.20</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Technology_2WMT</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_4KYC</defName>
|
||||
<label>基因节点KYC-4"原虫"</label>
|
||||
<description>允许女皇种孵化新的虫族——原虫种,一种可以寄生在别的种族身上以控制它们的特殊督虫。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>5.50</researchViewX>
|
||||
<researchViewY>1.50</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Technology_2WMT</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<!-- 硬壳发展 -->
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_4DIL</defName>
|
||||
<label>基因节点DIL-4"编织"</label>
|
||||
<description>允许工艺种孵化覆壳茧,为虫族提供基础防具。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>1.00</researchViewX>
|
||||
<researchViewY>5.10</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_5DIL</defName>
|
||||
<label>基因节点DIL-5"骨刀"</label>
|
||||
<description>允许工艺种孵化骨刃茧,为虫族提供基础近战武器。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>2.00</researchViewX>
|
||||
<researchViewY>5.10</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Technology_4DIL</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
<!-- 毒类发展 -->
|
||||
<ResearchProjectDef ParentName="ARA_techBase">
|
||||
<defName>ARA_Technology_5PAV</defName>
|
||||
<label>基因节点PAV-5"毒刺"</label>
|
||||
<description>允许工艺种孵化新的毒针类武器茧,并允许部分带毒针的虫族进行毒针喷射。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>1.00</researchViewX>
|
||||
<researchViewY>4.40</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</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>
|
||||
<label>基因节点SHL-5"光瘤"</label>
|
||||
<description>允许虫族建造一种可以提供直射光源以供植物生长的特殊菌瘤。</description>
|
||||
<baseCost>150</baseCost>
|
||||
<researchViewX>1.00</researchViewX>
|
||||
<researchViewY>1.20</researchViewY>
|
||||
<requiredResearchBuilding>ARA_ResearchBench</requiredResearchBuilding>
|
||||
<prerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</prerequisites>
|
||||
</ResearchProjectDef>
|
||||
</Defs>
|
||||
9
1.6/1.6/Defs/ResearchTabDef/ARA_ResearchTabs.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Defs>
|
||||
<ResearchTabDef>
|
||||
<defName>ARA_ResearchTab</defName>
|
||||
<label>阿拉克涅虫群进化</label>
|
||||
<generalTitle>阿拉克涅虫群进化探索</generalTitle>
|
||||
<generalDescription>探索、改进阿拉克涅虫群的生命形态,以孵化更强的个体和创造更先进的武装器官等虫群装备。\n\n只有阿拉克涅虫族才能进行这个科技树的研究!</generalDescription>
|
||||
</ResearchTabDef>
|
||||
</Defs>
|
||||
@@ -5,7 +5,7 @@
|
||||
<label>新阿拉克涅虫巢</label>
|
||||
<description>一只阿拉克涅虫族女皇种降落在荒无人烟的边缘世界,准备着手建立属于自己的虫巢。</description>
|
||||
<scenario>
|
||||
<summary>以一只阿拉克涅虫族女皇种为初始殖民者开始游戏。</summary>
|
||||
<summary>以一只阿拉克涅虫族女皇种为初始殖民者开始游戏,附带4枚初诞阿拉克涅虫卵囊。</summary>
|
||||
<playerFaction>
|
||||
<def>PlayerFaction</def>
|
||||
<factionDef>ARA_New_Hive</factionDef>
|
||||
@@ -52,7 +52,7 @@
|
||||
<li Class="ScenPart_StartingThing_Defined">
|
||||
<def>StartingThing_Defined</def>
|
||||
<thingDef>ARA_InsectJelly</thingDef>
|
||||
<count>60</count>
|
||||
<count>200</count>
|
||||
</li>
|
||||
<li Class="ScenPart_StartingThing_Defined">
|
||||
<def>StartingThing_Defined</def>
|
||||
@@ -62,7 +62,7 @@
|
||||
<li Class="ScenPart_StartingThing_Defined">
|
||||
<def>StartingThing_Defined</def>
|
||||
<thingDef>ARA_InteractiveEggSac_Start</thingDef>
|
||||
<count>3</count>
|
||||
<count>4</count>
|
||||
</li>
|
||||
<!-- 附近的物品 -->
|
||||
<li Class="ScenPart_ScatterThingsNearPlayerStart">
|
||||
@@ -81,6 +81,11 @@
|
||||
<thingDef>Steel</thingDef>
|
||||
<count>720</count>
|
||||
</li>
|
||||
<!-- 初始科技 -->
|
||||
<li Class="ScenPart_StartingResearch">
|
||||
<def>StartingResearch</def>
|
||||
<project>ARA_Base_Technology</project>
|
||||
</li>
|
||||
</parts>
|
||||
</scenario>
|
||||
</ScenarioDef>
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
<LeatherAmount>0</LeatherAmount>
|
||||
<ArmorRating_Blunt>0.1</ArmorRating_Blunt>
|
||||
<ArmorRating_Sharp>0.1</ArmorRating_Sharp>
|
||||
<ComfyTemperatureMin>-3000</ComfyTemperatureMin>
|
||||
<ComfyTemperatureMax>3000</ComfyTemperatureMax>
|
||||
<Wildness>0</Wildness>
|
||||
</statBases>
|
||||
<uiIconScale>1.1</uiIconScale>
|
||||
@@ -33,6 +35,7 @@
|
||||
<useMeatFrom>Megaspider</useMeatFrom>
|
||||
<lifeExpectancy>0.1</lifeExpectancy>
|
||||
<trainability>Advanced</trainability>
|
||||
<!-- <hasCorpse>false</hasCorpse> -->
|
||||
<!-- <specialTrainables>
|
||||
<li MayRequire="Ludeon.RimWorld.Odyssey">Dig</li>
|
||||
<li>ARA_Sowing</li>
|
||||
@@ -60,6 +63,22 @@
|
||||
<workerClass>DeathActionWorker_Vanish</workerClass>
|
||||
</deathAction> -->
|
||||
</race>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_TemperatureRegulation</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
<allowDuplicates>false</allowDuplicates>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_HiveMindWorker</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
<allowDuplicates>false</allowDuplicates>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ArachnaeBase_Race">
|
||||
<defName>ArachnaeBase_Race_Slavey</defName>
|
||||
@@ -77,16 +96,14 @@
|
||||
<level>8</level>
|
||||
</li>
|
||||
</skillLevels> -->
|
||||
<instantTrainables>
|
||||
<!-- <li>ARA_Sowing</li>
|
||||
<li>Dig</li> -->
|
||||
<li>Haul</li>
|
||||
<!-- 救援 -->
|
||||
<!-- <li>Rescue</li> -->
|
||||
<!-- 觅食 -->
|
||||
<!-- <li>Forage</li> -->
|
||||
</instantTrainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
<trainables>
|
||||
<li>
|
||||
<trainable>Haul</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
</trainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
@@ -101,10 +118,14 @@
|
||||
</race>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AdvancedTraining">
|
||||
<instantTrainables>
|
||||
<li>ARA_Sowing</li>
|
||||
</instantTrainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
<trainables>
|
||||
<li>
|
||||
<trainable>ARA_Sowing</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
</trainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
@@ -120,12 +141,103 @@
|
||||
</race>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AdvancedTraining">
|
||||
<instantTrainables>
|
||||
<li>Dig</li>
|
||||
<li>AttackTarget</li>
|
||||
</instantTrainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
<trainables>
|
||||
<li>
|
||||
<trainable>Dig</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
<li>
|
||||
<trainable>AttackTarget</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
</trainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ArachnaeBase_Race">
|
||||
<defName>ArachnaeBase_Race_Maid</defName>
|
||||
<label>阿拉克涅家政种</label>
|
||||
<description>阿拉克涅辅虫之一,智力低下,可以执行清洁工作,注定在度过短暂的时光后死亡。</description>
|
||||
<race>
|
||||
<specialTrainables>
|
||||
<li>ARA_Cleaning</li>
|
||||
</specialTrainables>
|
||||
</race>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AdvancedTraining">
|
||||
<trainables>
|
||||
<li>
|
||||
<trainable>ARA_Cleaning</trainable>
|
||||
<trainInstantly>true</trainInstantly>
|
||||
<setWanted>true</setWanted>
|
||||
</li>
|
||||
</trainables>
|
||||
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BaseDrone" MayRequire="Ludeon.RimWorld.Odyssey">
|
||||
<defName>ArachnaeBase_Race_Acid</defName>
|
||||
<label>阿拉克涅酸嗜种</label>
|
||||
<description>阿拉克涅辅虫之一,智力低下,一般被作为活体炮弹打出,击中敌人后若是还没散架,就会继续依靠带酸液的颚撕咬敌军。</description>
|
||||
<race>
|
||||
<thinkTreeConstant>WarUrchinConstant</thinkTreeConstant>
|
||||
<baseBodySize>0.5</baseBodySize>
|
||||
<!-- <hasCorpse>false</hasCorpse> -->
|
||||
<body>BeetleLikeWithClaw</body>
|
||||
<lifeStageAges>
|
||||
<li>
|
||||
<def>EusocialInsectAdult</def>
|
||||
<minAge>0</minAge>
|
||||
<soundWounded>Pawn_Spelopede_Pain</soundWounded>
|
||||
<soundDeath>Pawn_Spelopede_Death</soundDeath>
|
||||
<soundCall>Pawn_Spelopede_Call</soundCall>
|
||||
<soundAngry>Pawn_Spelopede_Angry</soundAngry>
|
||||
</li>
|
||||
</lifeStageAges>
|
||||
</race>
|
||||
<statBases>
|
||||
<MoveSpeed>6</MoveSpeed>
|
||||
</statBases>
|
||||
<comps>
|
||||
<li Class="CompProperties_MechPowerCell">
|
||||
<totalPowerTicks>4400</totalPowerTicks> <!-- 2 hours -->
|
||||
<labelOverride>寿命</labelOverride>
|
||||
<tooltipOverride>这种特殊的阿拉克涅辅虫从出生起就走在死亡的道路上了——它们的寿命就是如此短暂。</tooltipOverride>
|
||||
<showGizmoOnNonPlayerControlled>true</showGizmoOnNonPlayerControlled>
|
||||
</li>
|
||||
</comps>
|
||||
<tools Inherit="False">
|
||||
<li>
|
||||
<label>酸性巨颚</label>
|
||||
<capacities>
|
||||
<li>ARA_AcidCut</li>
|
||||
</capacities>
|
||||
<power>6</power>
|
||||
<cooldownTime>2.6</cooldownTime>
|
||||
<linkedBodyPartsGroup>HeadAttackTool</linkedBodyPartsGroup>
|
||||
<ensureLinkedBodyPartsGroupAlwaysUsable>true</ensureLinkedBodyPartsGroupAlwaysUsable>
|
||||
</li>
|
||||
</tools>
|
||||
</ThingDef>
|
||||
<ToolCapacityDef>
|
||||
<defName>ARA_AcidCut</defName>
|
||||
<label>酸性撕咬</label>
|
||||
</ToolCapacityDef>
|
||||
<ManeuverDef>
|
||||
<defName>ARA_AcidCut</defName>
|
||||
<requiredCapacity>ARA_AcidCut</requiredCapacity>
|
||||
<verb>
|
||||
<verbClass>Verb_MeleeAttackDamage</verbClass>
|
||||
<meleeDamageDef>ARA_AcidCut_Damage</meleeDamageDef>
|
||||
</verb>
|
||||
<logEntryDef>MeleeAttack</logEntryDef>
|
||||
<combatLogRulesHit>Maneuver_Slash_MeleeHit</combatLogRulesHit>
|
||||
<combatLogRulesDeflect>Maneuver_Slash_MeleeDeflect</combatLogRulesDeflect>
|
||||
<combatLogRulesMiss>Maneuver_Slash_MeleeMiss</combatLogRulesMiss>
|
||||
<combatLogRulesDodge>Maneuver_Slash_MeleeDodge</combatLogRulesDodge>
|
||||
</ManeuverDef>
|
||||
</Defs>
|
||||
@@ -18,6 +18,9 @@
|
||||
<humanRecipeImport>false</humanRecipeImport>
|
||||
<!-- 睡觉定义 -->
|
||||
<canLayDown>true</canLayDown>
|
||||
<validBeds>
|
||||
<li>ARA_NodeNest</li>
|
||||
</validBeds>
|
||||
<!-- 各种零件定义 -->
|
||||
<alienPartGenerator Inherit="False">
|
||||
<!-- 允许的头部 -->
|
||||
@@ -71,28 +74,114 @@
|
||||
</colorChannels>
|
||||
<!-- 额外身体部件 -->
|
||||
<bodyAddons>
|
||||
<li>
|
||||
<name>ArachnaeNode Hair</name>
|
||||
<userCustomizable>true</userCustomizable>
|
||||
<path>ArachnaeSwarm/Hair/ARA_Scattered_Hair_Long</path>
|
||||
<inFrontOfBody>true</inFrontOfBody>
|
||||
<layerInvert>false</layerInvert>
|
||||
<colorChannel>hair</colorChannel>
|
||||
<defaultOffset>Center</defaultOffset>
|
||||
<drawSize>1</drawSize>
|
||||
<alignWithHead>true</alignWithHead>
|
||||
<scaleWithPawnDrawsize>true</scaleWithPawnDrawsize>
|
||||
<useSkipFlags>
|
||||
<li></li>
|
||||
</useSkipFlags>
|
||||
<conditions>
|
||||
<BodyPart>
|
||||
<bodyPart>Head</bodyPart>
|
||||
</BodyPart>
|
||||
<Posture>
|
||||
<drawnStanding>true</drawnStanding>
|
||||
<drawnInBed>true</drawnInBed>
|
||||
<drawnLaying>true</drawnLaying>
|
||||
</Posture>
|
||||
<RotStage>Fresh,Rotting</RotStage>
|
||||
</conditions>
|
||||
<offsets>
|
||||
<west>
|
||||
<layerOffset>-0.274</layerOffset>
|
||||
</west>
|
||||
<south>
|
||||
<layerOffset>-0.274</layerOffset>
|
||||
</south>
|
||||
<north>
|
||||
<layerOffset>-0.274</layerOffset>
|
||||
</north>
|
||||
<east>
|
||||
<layerOffset>-0.274</layerOffset>
|
||||
</east>
|
||||
</offsets>
|
||||
</li>
|
||||
<!--<li>
|
||||
<name>ArachnaeNode Hair BG</name>
|
||||
<userCustomizable>true</userCustomizable>
|
||||
<path></path>
|
||||
<inFrontOfBody>false</inFrontOfBody>
|
||||
<layerInvert>false</layerInvert>
|
||||
<colorChannel>hair</colorChannel>
|
||||
<defaultOffset>Center</defaultOffset>
|
||||
<drawSize>1</drawSize>
|
||||
<alignWithHead>true</alignWithHead>
|
||||
<scaleWithPawnDrawsize>true</scaleWithPawnDrawsize>
|
||||
<linkVariantIndexWithPrevious>true</linkVariantIndexWithPrevious>
|
||||
<useSkipFlags>
|
||||
<li></li>
|
||||
</useSkipFlags>
|
||||
<conditions>
|
||||
<BodyPart>
|
||||
<bodyPart>Head</bodyPart>
|
||||
</BodyPart>
|
||||
<Posture>
|
||||
<drawnStanding>true</drawnStanding>
|
||||
<drawnInBed>false</drawnInBed>
|
||||
<drawnLaying>true</drawnLaying>
|
||||
</Posture>
|
||||
<RotStage>Fresh,Rotting</RotStage>
|
||||
</conditions>
|
||||
<offsets>
|
||||
<west>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</west>
|
||||
<south>
|
||||
<layerOffset>-0.299</layerOffset>
|
||||
</south>
|
||||
<north>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</north>
|
||||
<east>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</east>
|
||||
</offsets>
|
||||
</li>-->
|
||||
<li>
|
||||
<path>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_Base</path>
|
||||
<inFrontOfBody>true</inFrontOfBody>
|
||||
<offsets>
|
||||
<south>
|
||||
<offset>(0,0.32)</offset>
|
||||
<layerOffset>-0.273</layerOffset>
|
||||
</south>
|
||||
<north>
|
||||
<offset>(0,0.32)</offset>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</north>
|
||||
<east>
|
||||
<offset>(-0.1,0.39)</offset>
|
||||
<layerOffset>-0.273</layerOffset>
|
||||
</east>
|
||||
<west>
|
||||
<offset>(-0.1,0.39)</offset>
|
||||
<layerOffset>-0.273</layerOffset>
|
||||
</west>
|
||||
</offsets>
|
||||
<inFrontOfBody>true</inFrontOfBody>
|
||||
<!-- <conditions>
|
||||
<conditions>
|
||||
<BodyPart>
|
||||
<bodyPart>WULA_Addons_Antenna_Bodypart</bodyPart>
|
||||
<bodyPart>Head</bodyPart>
|
||||
<drawWithoutPart>false</drawWithoutPart>
|
||||
</BodyPart>
|
||||
</conditions> -->
|
||||
</conditions>
|
||||
</li>
|
||||
</bodyAddons>
|
||||
<!-- 图像放大 -->
|
||||
@@ -273,9 +362,17 @@
|
||||
</whiteXenotypeList>
|
||||
<onlyUseRaceRestrictedXenotypes>false</onlyUseRaceRestrictedXenotypes>
|
||||
<!-- 食物列表 -->
|
||||
<foodList>
|
||||
</foodList>
|
||||
<onlyEatRaceRestrictedFood>false</onlyEatRaceRestrictedFood>
|
||||
<whiteFoodList>
|
||||
<li>ARA_InsectJelly</li>
|
||||
</whiteFoodList>
|
||||
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
|
||||
<!-- 武器列表 -->
|
||||
<weaponList>
|
||||
<li>ARA_RW_Basic_Acid_Bladder_Gun</li>
|
||||
<li>ARA_RW_Basic_Fist_Needle_Gun</li>
|
||||
<li>ARA_MW_Bone_Sword</li>
|
||||
</weaponList>
|
||||
<onlyUseRaceRestrictedWeapons>true</onlyUseRaceRestrictedWeapons>
|
||||
<!-- 可以穿戴的衣服 -->
|
||||
<apparelList>
|
||||
</apparelList>
|
||||
@@ -460,8 +557,8 @@
|
||||
|
||||
<!-- 在野外采集的营养 -->
|
||||
<ForagedNutritionPerDay>0</ForagedNutritionPerDay>
|
||||
<ComfyTemperatureMin>-80</ComfyTemperatureMin>
|
||||
<ComfyTemperatureMax>32</ComfyTemperatureMax>
|
||||
<ComfyTemperatureMin>-3000</ComfyTemperatureMin>
|
||||
<ComfyTemperatureMax>3000</ComfyTemperatureMax>
|
||||
</statBases>
|
||||
|
||||
<race>
|
||||
@@ -475,8 +572,8 @@
|
||||
<!-- 基础血量,很高 -->
|
||||
<baseHealthScale>1.5</baseHealthScale>
|
||||
<!-- 解剖产物 -->
|
||||
<leatherDef>ARA_Carapace</leatherDef>
|
||||
<specificMeatDef>Meat_Megaspider</specificMeatDef>
|
||||
<leatherDef>ARA_Carapace</leatherDef>
|
||||
<specificMeatDef>Meat_Megaspider</specificMeatDef>
|
||||
<!-- 身体类型 -->
|
||||
<body>Human</body>
|
||||
<!-- 年龄阶段,较短 -->
|
||||
@@ -521,7 +618,7 @@
|
||||
</race>
|
||||
|
||||
<!-- 工具设置(攻击方式) -->
|
||||
<tools>
|
||||
<tools Inherit="False">
|
||||
<li>
|
||||
<label>头颚</label>
|
||||
<capacities>
|
||||
@@ -563,6 +660,13 @@
|
||||
<li MayRequire="Nals.FacialAnimation">
|
||||
<compClass>FacialAnimation.FacialAnimationControllerComp</compClass>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_HiveMindDrone</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
<allowDuplicates>false</allowDuplicates>
|
||||
</li>
|
||||
<!--<li>
|
||||
<compClass>FacialAnimation.EmotionControllerComp</compClass>
|
||||
</li>
|
||||
@@ -574,7 +678,7 @@
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_Myrmecocystus</defName>
|
||||
<label>阿拉克涅蜜罐种</label>
|
||||
<description>阿拉克涅督虫之一,拥有非常广泛的食谱,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。这种督虫非常脆弱,并且没有可以接入武装器官的副肢。\n\n作为督虫,她可以繁育并监管若干阿拉克涅食腐种辅虫,以协助巢穴播种和收割作物。</description>
|
||||
<description>阿拉克涅督虫之一,拥有非常广泛的食谱,可以吞下许多未经处理的生物并将其分解为阿拉克涅虫蜜,以滋养虫群。这种督虫非常脆弱,并且没有可以接入武装器官的副肢,除了生产虫蜜外能执行烹饪工作。\n\n作为督虫,她可以繁育并监管若干阿拉克涅苦役种辅虫,以协助巢穴进行搬运工作。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
@@ -584,21 +688,29 @@
|
||||
<li>
|
||||
<path>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Myrmecocystus_Addons_Stomach</path>
|
||||
<inFrontOfBody>false</inFrontOfBody>
|
||||
<!-- <conditions>
|
||||
<BodyPart>
|
||||
<bodyPart>WULA_Addons_Antenna_Bodypart</bodyPart>
|
||||
</BodyPart>
|
||||
</conditions> -->
|
||||
<conditions>
|
||||
</conditions>
|
||||
</li>
|
||||
</bodyAddons>
|
||||
</alienPartGenerator>
|
||||
</generalSettings>
|
||||
<!-- 种族的允许和禁止特化设置 -->
|
||||
<raceRestriction>
|
||||
<!-- 食物列表 -->
|
||||
<whiteFoodList Inherit="False"/>
|
||||
<blackFoodList>
|
||||
<li>ARA_InsectJelly</li>
|
||||
</blackFoodList>
|
||||
<onlyEatRaceRestrictedFood>false</onlyEatRaceRestrictedFood>
|
||||
<!-- 武器列表 -->
|
||||
<weaponList Inherit="False"/>
|
||||
</raceRestriction>
|
||||
</alienRace>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_MilkableArachnae">
|
||||
<milkDef>ARA_InsectJelly</milkDef>
|
||||
<milkIntervalDays>3</milkIntervalDays>
|
||||
<milkAmount>4</milkAmount>
|
||||
<milkDef>ARA_InsectJelly</milkDef>
|
||||
<milkIntervalDays>3</milkIntervalDays>
|
||||
<milkAmount>4</milkAmount>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AutoMechCarrier">
|
||||
<freeProduction>true</freeProduction>
|
||||
@@ -610,8 +722,8 @@
|
||||
<cooldownTicks>9999</cooldownTicks>
|
||||
<productionQueue>
|
||||
<li>
|
||||
<pawnKind>ArachnaeBase_Race_Scavenger</pawnKind>
|
||||
<count>2</count>
|
||||
<pawnKind>ArachnaeBase_Race_Slavey</pawnKind>
|
||||
<count>4</count>
|
||||
<cooldownTicks>1000</cooldownTicks>
|
||||
</li>
|
||||
</productionQueue>
|
||||
@@ -668,7 +780,7 @@
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_ShieldHead</defName>
|
||||
<label>阿拉克涅盾头种</label>
|
||||
<description>阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,防御力超群的同时还可以定时剥落甲壳素供虫巢使用。尽管她笨重缓慢,但是仍不失为一个坚韧的战士。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。</description>
|
||||
<description>阿拉克涅督虫之一,拥有过度生长而覆盖头部和腿部的甲壳,防御力超群的同时还可以定时剥落甲壳素供虫巢使用。坚韧的鳌刺挥舞起来非常缓慢但是可以破开岩壁,以完成虫群的采矿工作。\n\n作为督虫,她可以繁育并监管若干阿拉克涅坚颚种辅虫,以协助巢穴开采矿脉。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
@@ -695,38 +807,35 @@
|
||||
</li>
|
||||
<li>
|
||||
<path>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_ShieldBody</path>
|
||||
<inFrontOfBody>true</inFrontOfBody>
|
||||
<offsets>
|
||||
<south>
|
||||
<!-- <layerOffset>0.25</layerOffset> -->
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</south>
|
||||
<north>
|
||||
<layerOffset>-0.6</layerOffset>
|
||||
</north>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</north>
|
||||
<east>
|
||||
<!-- same structure repeated -->
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</east>
|
||||
<west>
|
||||
<!-- optional, mirrors east if omitted -->
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</west>
|
||||
</offsets>
|
||||
<inFrontOfBody>true</inFrontOfBody>
|
||||
<layerInvert>false</layerInvert>
|
||||
</li>
|
||||
</bodyAddons>
|
||||
</alienPartGenerator>
|
||||
</generalSettings>
|
||||
<raceRestriction>
|
||||
<!-- 食物列表 -->
|
||||
<foodList>
|
||||
<li>ARA_InsectJelly</li>
|
||||
</foodList>
|
||||
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
|
||||
</raceRestriction>
|
||||
</alienRace>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_MilkableArachnae">
|
||||
<milkDef>ARA_Carapace</milkDef>
|
||||
<milkIntervalDays>3</milkIntervalDays>
|
||||
<milkAmount>25</milkAmount>
|
||||
<milkDef>ARA_Carapace</milkDef>
|
||||
<milkIntervalDays>3</milkIntervalDays>
|
||||
<milkAmount>25</milkAmount>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AutoMechCarrier">
|
||||
<freeProduction>true</freeProduction>
|
||||
@@ -739,7 +848,7 @@
|
||||
<productionQueue>
|
||||
<li>
|
||||
<pawnKind>ArachnaeBase_Race_HardJaw</pawnKind>
|
||||
<count>5</count>
|
||||
<count>2</count>
|
||||
<cooldownTicks>1000</cooldownTicks>
|
||||
</li>
|
||||
</productionQueue>
|
||||
@@ -792,4 +901,233 @@
|
||||
</lifeStageAges>
|
||||
</race>
|
||||
</AlienRace.ThingDef_AlienRace>
|
||||
<AlienRace.ThingDef_AlienRace ParentName="ARA_NodeBase">
|
||||
<defName>ArachnaeNode_Race_WeaponSmith</defName>
|
||||
<label>阿拉克涅工艺种</label>
|
||||
<description>阿拉克涅督虫之一,是少数拥有结茧能力的非女皇种阿拉克涅虫族——她们可以排出一枚器官茧,这枚茧将按照其信息素所标定的方向定向演化出一个武装器官,以供虫群使用。除此之外,她们的辅肢比普通的虫族更加复杂灵活,这使得她们不仅可以执行手工、建造、艺术等复杂的工作,也可以操作武装器官——虽然她们本身极度脆弱。\n\n作为督虫,她可以繁育并监管若干阿拉克涅家政种辅虫,以协助巢穴进行清洁工作。</description>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
<alienPartGenerator>
|
||||
<!-- 额外身体部件 -->
|
||||
<bodyAddons>
|
||||
<li>
|
||||
<path>ArachnaeSwarm/Things/ARA_HiveNode/Addons/ArachnaeNode_Race_Addons_WeaponSmith</path>
|
||||
<inFrontOfBody>false</inFrontOfBody>
|
||||
<offsets>
|
||||
<north>
|
||||
<layerOffset>-0.275</layerOffset>
|
||||
</north>
|
||||
</offsets>
|
||||
</li>
|
||||
</bodyAddons>
|
||||
</alienPartGenerator>
|
||||
</generalSettings>
|
||||
<raceRestriction>
|
||||
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
|
||||
</raceRestriction>
|
||||
</alienRace>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AutoMechCarrier">
|
||||
<freeProduction>true</freeProduction>
|
||||
<disableHediff>WULA_MechCarrierSwitchHediff</disableHediff>
|
||||
<fixedIngredient>ARA_InsectJelly</fixedIngredient>
|
||||
<maxIngredientCount>500</maxIngredientCount>
|
||||
<startingIngredientCount>500</startingIngredientCount>
|
||||
<costPerPawn>999</costPerPawn>
|
||||
<cooldownTicks>9999</cooldownTicks>
|
||||
<productionQueue>
|
||||
<li>
|
||||
<!-- <pawnKind>ArachnaeBase_Race_Slavey</pawnKind> -->
|
||||
<pawnKind>ArachnaeBase_Race_Maid</pawnKind>
|
||||
<count>3</count>
|
||||
<cooldownTicks>1000</cooldownTicks>
|
||||
</li>
|
||||
</productionQueue>
|
||||
<spawnEffecter>CocoonDestroyed</spawnEffecter>
|
||||
</li>
|
||||
</comps>
|
||||
|
||||
<!-- 基础属性设置 -->
|
||||
<statBases>
|
||||
<!-- 移动速度 -->
|
||||
<MoveSpeed>3.5</MoveSpeed>
|
||||
|
||||
<!-- <RestRateMultiplier>1</RestRateMultiplier> -->
|
||||
<!-- <HungerRateMultiplier>1</HungerRateMultiplier> -->
|
||||
<!-- <EatingSpeed>5</EatingSpeed> -->
|
||||
<MaxNutrition>2</MaxNutrition>
|
||||
|
||||
<CarryingCapacity>100</CarryingCapacity>
|
||||
<MeatAmount>40</MeatAmount>
|
||||
<LeatherAmount>10</LeatherAmount>
|
||||
|
||||
<MeleeDodgeChance>0.75</MeleeDodgeChance>
|
||||
<!-- <MeleeHitChance>1</MeleeHitChance> -->
|
||||
|
||||
<!-- <NegotiationAbility>1</NegotiationAbility> -->
|
||||
<!-- <SellPriceFactor>1</SellPriceFactor> -->
|
||||
<!-- <SocialImpact>1</SocialImpact> -->
|
||||
<!-- <TradePriceImprovement>0.5</TradePriceImprovement> -->
|
||||
|
||||
<!-- 自带的甲壳可以防御外部攻击 -->
|
||||
<ArmorRating_Blunt>0.1</ArmorRating_Blunt>
|
||||
<ArmorRating_Sharp>0.1</ArmorRating_Sharp>
|
||||
<ArmorRating_Heat>0.05</ArmorRating_Heat>
|
||||
</statBases>
|
||||
|
||||
<race>
|
||||
<!-- 身体类型 -->
|
||||
<body>ArachnaeWeaponSmith_Body</body>
|
||||
<baseBodySize>0.8</baseBodySize>
|
||||
<baseHealthScale>0.75</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>
|
||||
<alienRace>
|
||||
<generalSettings>
|
||||
<!-- 各种零件定义 -->
|
||||
<alienPartGenerator>
|
||||
<!-- 额外身体部件 -->
|
||||
<bodyAddons>
|
||||
</bodyAddons>
|
||||
</alienPartGenerator>
|
||||
</generalSettings>
|
||||
<!-- 图形,留空 -->
|
||||
<graphicPaths Inherit="False">
|
||||
<!-- 皮肤颜色 -->
|
||||
<skinColor>(1,1,1,1)</skinColor>
|
||||
<!-- 皮肤着色器 -->
|
||||
<skinShader>Cutout</skinShader>
|
||||
<body>ArachnaeSwarm/Things/ARA_Facehugger/Bodies/</body>
|
||||
<head>
|
||||
<path>ArachnaeSwarm/Things/ARA_HiveNode/Heads/</path>
|
||||
</head>
|
||||
<skeleton>Things/Pawn/Humanlike/Bodies/Dessicated/Dessicated_Thin</skeleton>
|
||||
<stump>ArachnaeSwarm/Things/ARA_Facehugger/Bodies/Naked_Thin</stump>
|
||||
</graphicPaths>
|
||||
<!-- 种族的允许和禁止特化设置 -->
|
||||
<raceRestriction>
|
||||
<!-- 武器列表 -->
|
||||
<weaponList Inherit="False"/>
|
||||
</raceRestriction>
|
||||
</alienRace>
|
||||
|
||||
<statBases>
|
||||
<MoveSpeed>5</MoveSpeed>
|
||||
<EatingSpeed>5</EatingSpeed>
|
||||
<MaxNutrition>1</MaxNutrition>
|
||||
<CarryingCapacity>100</CarryingCapacity>
|
||||
<MeatAmount>20</MeatAmount>
|
||||
<LeatherAmount>5</LeatherAmount>
|
||||
<MeleeDodgeChance>1.5</MeleeDodgeChance>
|
||||
</statBases>
|
||||
|
||||
<race>
|
||||
<body>ArachnaeMyrmecocystus_Body</body>
|
||||
<baseBodySize>0.5</baseBodySize>
|
||||
<baseHealthScale>0.25</baseHealthScale>
|
||||
<lifeExpectancy>30</lifeExpectancy>
|
||||
<lifeStageAges Inherit="False">
|
||||
<li>
|
||||
<def>ArachnaeNode_Myrmecocystus_Adult</def>
|
||||
<minAge>0</minAge>
|
||||
</li>
|
||||
</lifeStageAges>
|
||||
</race>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_Facehugger_LowOperation</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
<allowDuplicates>false</allowDuplicates>
|
||||
</li>
|
||||
</comps>
|
||||
</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>
|
||||
|
||||
<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>
|
||||
</Defs>
|
||||
@@ -4,8 +4,8 @@
|
||||
<statBases>
|
||||
<MarketValue>1750</MarketValue>
|
||||
<MoveSpeed>4.6</MoveSpeed>
|
||||
<ComfyTemperatureMin>-80</ComfyTemperatureMin>
|
||||
<ComfyTemperatureMax>32</ComfyTemperatureMax>
|
||||
<ComfyTemperatureMin>-3000</ComfyTemperatureMin>
|
||||
<ComfyTemperatureMax>3000</ComfyTemperatureMax>
|
||||
<RoyalFavorValue>3</RoyalFavorValue>
|
||||
</statBases>
|
||||
<tools>
|
||||
@@ -217,6 +217,13 @@
|
||||
<minMonolithLevelForStudy>1</minMonolithLevelForStudy>
|
||||
<requiresImprisonment>true</requiresImprisonment>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_TemperatureRegulation</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
<allowDuplicates>false</allowDuplicates>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<AlienRace.ThingDef_AlienRace Name="ARA_QueenBase" ParentName="ARA_PawnBase">
|
||||
@@ -394,7 +401,10 @@
|
||||
<li>
|
||||
<key>HairDef</key>
|
||||
<value>
|
||||
<hasStyle>false</hasStyle>
|
||||
<hasStyle>true</hasStyle>
|
||||
<styleTagsOverride>
|
||||
<li>Bald</li>
|
||||
</styleTagsOverride>
|
||||
</value>
|
||||
</li>
|
||||
<!-- 纹身 -->
|
||||
@@ -456,10 +466,17 @@
|
||||
</xenotypeList>
|
||||
<onlyUseRaceRestrictedXenotypes>true</onlyUseRaceRestrictedXenotypes>
|
||||
<!-- 食物列表 -->
|
||||
<foodList>
|
||||
<whiteFoodList>
|
||||
<li>ARA_InsectJelly</li>
|
||||
</foodList>
|
||||
</whiteFoodList>
|
||||
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
|
||||
<!-- 可以驯服的宠物,主要是防止小虫由别人驯服 -->
|
||||
<petList>
|
||||
<li>ArachnaeBase_Race_Slavey</li>
|
||||
<li>ArachnaeBase_Race_Scavenger</li>
|
||||
<li>ArachnaeBase_Race_HardJaw</li>
|
||||
</petList>
|
||||
<onlyTameRaceRestrictedPets>false</onlyTameRaceRestrictedPets>
|
||||
<!-- 可以穿戴的衣服 -->
|
||||
<apparelList>
|
||||
</apparelList>
|
||||
@@ -732,22 +749,12 @@
|
||||
</recipes>
|
||||
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_AutoMechCarrier">
|
||||
<freeProduction>true</freeProduction>
|
||||
<disableHediff>WULA_MechCarrierSwitchHediff</disableHediff>
|
||||
<fixedIngredient>ARA_InsectJelly</fixedIngredient>
|
||||
<maxIngredientCount>500</maxIngredientCount>
|
||||
<startingIngredientCount>500</startingIngredientCount>
|
||||
<costPerPawn>999</costPerPawn>
|
||||
<cooldownTicks>9999</cooldownTicks>
|
||||
<productionQueue>
|
||||
<li>
|
||||
<pawnKind>ArachnaeBase_Race_Slavey</pawnKind>
|
||||
<count>5</count>
|
||||
<cooldownTicks>1000</cooldownTicks>
|
||||
</li>
|
||||
</productionQueue>
|
||||
<spawnEffecter>CocoonDestroyed</spawnEffecter>
|
||||
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
|
||||
<hediffs>
|
||||
<li>ARA_HiveMindMaster</li>
|
||||
</hediffs>
|
||||
<addChance>1.0</addChance>
|
||||
<allowDuplicates>false</allowDuplicates>
|
||||
</li>
|
||||
</comps>
|
||||
</AlienRace.ThingDef_AlienRace>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<ThingDef ParentName="OrganicProductBase">
|
||||
<defName>ARA_InsectJelly</defName>
|
||||
<label>阿拉克涅虫蜜</label>
|
||||
<description>由阿拉克涅虫族储存和用作食物的果冻。它顺滑、浓郁、永不腐烂,能满足食用者的娱乐需求。由于其独特的生物特性,非阿拉克涅虫族也可以食用这种食物,并且不会引起食物中毒。</description>
|
||||
<description>由阿拉克涅虫族储存和用作食物的果冻,是大部分阿拉克涅虫族的唯一食物。它顺滑、浓郁、永不腐烂,能满足食用者的娱乐需求。由于其独特的生物特性,非阿拉克涅虫族也可以食用这种食物,并且不会引起食物中毒。</description>
|
||||
<possessionCount>20</possessionCount>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Item/ARA_InsectJelly</texPath>
|
||||
|
||||
250
1.6/1.6/Defs/Thing_Misc/Weapons/WULA_Weapon.xml
Normal file
@@ -0,0 +1,250 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<ThingDef ParentName="BaseMeleeWeapon_Sharp_Quality">
|
||||
<defName>ARA_MW_Bone_Sword</defName>
|
||||
<label>武装器官"骨刃"</label>
|
||||
<description>阿拉克涅虫群督虫使用基础近战武装器官,通过多根外露神经束与督虫的辅肢相连。尽管它只是一块坚硬的剑形骨片,但是丝毫不影响那些拥有无穷蛮力的阿拉克涅虫群督虫使用它将侵犯虫巢之敌一一斩首。</description>
|
||||
<weaponTags>
|
||||
<li>ARA_Armed_Organ</li>
|
||||
<li>ARA_Armed_Organ_Melee</li>
|
||||
<li>ARA_Armed_Organ_T1</li>
|
||||
</weaponTags>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Weapon/ARA_MW_Bone_Sword</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<shaderType>CutoutComplex</shaderType>
|
||||
<drawSize>1</drawSize>
|
||||
</graphicData>
|
||||
<uiIconScale>1</uiIconScale>
|
||||
<!-- <equippedAngleOffset>-65</equippedAngleOffset> -->
|
||||
<techLevel>Animal</techLevel>
|
||||
<!-- <equippedAngleOffset>-25</equippedAngleOffset> -->
|
||||
<costStuffCount>0</costStuffCount>
|
||||
<stuffCategories Inherit="False"/>
|
||||
<costList Inherit="False">
|
||||
<ARA_Carapace>50</ARA_Carapace>
|
||||
</costList>
|
||||
<statBases>
|
||||
<WorkToMake>1000</WorkToMake>
|
||||
<Mass>5</Mass>
|
||||
</statBases>
|
||||
<tools Inherit="False">
|
||||
<li>
|
||||
<label>横扫</label>
|
||||
<capacities>
|
||||
<li>Cut</li>
|
||||
</capacities>
|
||||
<power>15</power>
|
||||
<cooldownTime>1.3</cooldownTime>
|
||||
<armorPenetration>0.50</armorPenetration>
|
||||
</li>
|
||||
<li>
|
||||
<label>下砸</label>
|
||||
<capacities>
|
||||
<li>Poke</li>
|
||||
</capacities>
|
||||
<power>12</power>
|
||||
<armorPenetration>0.20</armorPenetration>
|
||||
<cooldownTime>1.5</cooldownTime>
|
||||
<extraMeleeDamages>
|
||||
<li>
|
||||
<def>Stun</def>
|
||||
<amount>15</amount>
|
||||
</li>
|
||||
</extraMeleeDamages>
|
||||
</li>
|
||||
</tools>
|
||||
<recipeMaker>
|
||||
<recipeUsers Inherit="False" />
|
||||
<researchPrerequisite Inherit="False" />
|
||||
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
||||
</recipeMaker>
|
||||
<thingSetMakerTags>
|
||||
<li>RewardStandardQualitySuper</li>
|
||||
</thingSetMakerTags>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="BaseHumanMakeableGun">
|
||||
<defName>ARA_RW_Basic_Fist_Needle_Gun</defName>
|
||||
<label>武装器官"拳针枪"</label>
|
||||
<description>阿拉克涅虫群督虫使用基础远程武装器官,外表就像一只拳套,可以通过神经束缠绕接在阿拉克涅督虫的辅肢上。这种武器小巧轻盈,虽然射程很短,但是面对敌人时能喷出一整排的带毒尖刺,把对手扎个透心凉。</description>
|
||||
<tickerType>Normal</tickerType>
|
||||
<techLevel>Animal</techLevel>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Weapon/ARA_RW_Basic_Fist_Needle_Gun</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<drawSize>0.75</drawSize>
|
||||
</graphicData>
|
||||
<uiIconScale>1.3</uiIconScale>
|
||||
<soundInteract>SpitterSpawn</soundInteract>
|
||||
<recipeMaker>
|
||||
<recipeUsers Inherit="False" />
|
||||
<researchPrerequisite Inherit="False" />
|
||||
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
||||
</recipeMaker>
|
||||
<statBases>
|
||||
<WorkToMake>1300</WorkToMake>
|
||||
<!-- <MarketValue>370</MarketValue> -->
|
||||
<Mass>0.5</Mass>
|
||||
<AccuracyTouch>0.85</AccuracyTouch>
|
||||
<AccuracyShort>0.6</AccuracyShort>
|
||||
<AccuracyMedium>0.45</AccuracyMedium>
|
||||
<AccuracyLong>0.3</AccuracyLong>
|
||||
<RangedWeapon_Cooldown>1.25</RangedWeapon_Cooldown>
|
||||
</statBases>
|
||||
<verbs>
|
||||
<li>
|
||||
<verbClass>Verb_Shoot</verbClass>
|
||||
<hasStandardCommand>true</hasStandardCommand>
|
||||
<forceNormalTimeSpeed>false</forceNormalTimeSpeed>
|
||||
<warmupTime>0.25</warmupTime>
|
||||
<defaultProjectile>Bullet_ARA_RW_Basic_Fist_Needle_Gun</defaultProjectile>
|
||||
<range>14</range>
|
||||
<burstShotCount>6</burstShotCount>
|
||||
<ticksBetweenBurstShots>1</ticksBetweenBurstShots>
|
||||
<soundCast>SpitterSpit</soundCast>
|
||||
<targetParams>
|
||||
<canTargetLocations>true</canTargetLocations>
|
||||
</targetParams>
|
||||
</li>
|
||||
</verbs>
|
||||
<costList Inherit="False">
|
||||
<ARA_Carapace>25</ARA_Carapace>
|
||||
</costList>
|
||||
<weaponTags>
|
||||
<li>ARA_Armed_Organ</li>
|
||||
<li>ARA_Armed_Organ_Ranged</li>
|
||||
<li>ARA_Armed_Organ_T1</li>
|
||||
</weaponTags>
|
||||
<thingSetMakerTags>
|
||||
<li>RewardStandardQualitySuper</li>
|
||||
</thingSetMakerTags>
|
||||
<tools Inherit="False">
|
||||
<li>
|
||||
<label>拳针枪拳击</label>
|
||||
<capacities>
|
||||
<li>Poke</li>
|
||||
</capacities>
|
||||
<power>10</power>
|
||||
<armorPenetration>0.25</armorPenetration>
|
||||
<cooldownTime>1.25</cooldownTime>
|
||||
<extraMeleeDamages>
|
||||
<li>
|
||||
<def>Stun</def>
|
||||
<amount>12</amount>
|
||||
</li>
|
||||
</extraMeleeDamages>
|
||||
</li>
|
||||
</tools>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BaseBullet">
|
||||
<defName>Bullet_ARA_RW_Basic_Fist_Needle_Gun</defName>
|
||||
<label>毒针</label>
|
||||
<graphicData>
|
||||
<texPath>Things/Projectile/Bullet_Small</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<color>(117, 204, 49, 180)</color>
|
||||
</graphicData>
|
||||
<projectile>
|
||||
<damageDef>ARA_Fist_Needle</damageDef>
|
||||
<damageAmountBase>2</damageAmountBase>
|
||||
<speed>40</speed>
|
||||
</projectile>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="BaseHumanMakeableGun">
|
||||
<defName>ARA_RW_Basic_Acid_Bladder_Gun</defName>
|
||||
<label>武装器官"酸液枪"</label>
|
||||
<description>阿拉克涅虫群督虫使用基础远程武装器官,可以通过肌肉的瞬间加压喷出一团包含阿拉克涅酸液的液体团。这种酸液团的飞行速度很慢,但是能在目标地点炸开,并灼烧所有粘上酸液的敌人。</description>
|
||||
<tickerType>Normal</tickerType>
|
||||
<techLevel>Animal</techLevel>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Weapon/ARA_RW_Basic_Acid_Bladder_Gun</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<drawSize>1.2</drawSize>
|
||||
</graphicData>
|
||||
<soundInteract>SpitterSpawn</soundInteract>
|
||||
<recipeMaker>
|
||||
<recipeUsers Inherit="False" />
|
||||
<researchPrerequisite Inherit="False" />
|
||||
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
||||
</recipeMaker>
|
||||
<statBases>
|
||||
<WorkToMake>1300</WorkToMake>
|
||||
<!-- <MarketValue>370</MarketValue> -->
|
||||
<Mass>3.5</Mass>
|
||||
<AccuracyTouch>0.5</AccuracyTouch>
|
||||
<AccuracyShort>0.6</AccuracyShort>
|
||||
<AccuracyMedium>0.45</AccuracyMedium>
|
||||
<AccuracyLong>0.3</AccuracyLong>
|
||||
<RangedWeapon_Cooldown>2.5</RangedWeapon_Cooldown>
|
||||
</statBases>
|
||||
<verbs>
|
||||
<li>
|
||||
<verbClass>Verb_Shoot</verbClass>
|
||||
<hasStandardCommand>true</hasStandardCommand>
|
||||
<forceNormalTimeSpeed>false</forceNormalTimeSpeed>
|
||||
<warmupTime>1.0</warmupTime>
|
||||
<forcedMissRadius>1</forcedMissRadius>
|
||||
<defaultProjectile>Bullet_ARA_RW_Basic_Acid_Bladder_Gun</defaultProjectile>
|
||||
<isMortar>true</isMortar>
|
||||
<requireLineOfSight>false</requireLineOfSight>
|
||||
<minRange>3</minRange>
|
||||
<range>28</range>
|
||||
<burstShotCount>1</burstShotCount>
|
||||
<soundCast>SpitterSpit</soundCast>
|
||||
<targetParams>
|
||||
<canTargetLocations>true</canTargetLocations>
|
||||
</targetParams>
|
||||
</li>
|
||||
</verbs>
|
||||
<costList Inherit="False">
|
||||
<ARA_Carapace>50</ARA_Carapace>
|
||||
</costList>
|
||||
<weaponTags>
|
||||
<li>ARA_Armed_Organ</li>
|
||||
<li>ARA_Armed_Organ_Ranged</li>
|
||||
<li>ARA_Armed_Organ_T1</li>
|
||||
</weaponTags>
|
||||
<thingSetMakerTags>
|
||||
<li>RewardStandardQualitySuper</li>
|
||||
</thingSetMakerTags>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BaseBullet">
|
||||
<defName>Bullet_ARA_RW_Basic_Acid_Bladder_Gun</defName>
|
||||
<label>酸液团</label>
|
||||
<graphicData>
|
||||
<graphicClass>Graphic_Single_AgeSecs</graphicClass>
|
||||
<texPath>Things/Projectile/FleshmassSpitterProjectileSheet</texPath>
|
||||
<drawSize>(.5, .5)</drawSize>
|
||||
<shaderType>MoteGlow</shaderType>
|
||||
</graphicData>
|
||||
<uiIconScale>0.8</uiIconScale>
|
||||
<thingClass>Projectile_Explosive</thingClass>
|
||||
<projectile>
|
||||
<useGraphicClass>True</useGraphicClass>
|
||||
<shadowSize>1</shadowSize>
|
||||
<damageDef>ARA_AcidBurn</damageDef>
|
||||
<spinRate>20</spinRate>
|
||||
<damageAmountBase>20</damageAmountBase>
|
||||
<speed>15</speed>
|
||||
<arcHeightFactor>1</arcHeightFactor>
|
||||
<explosionRadius>1.75</explosionRadius>
|
||||
<flyOverhead>true</flyOverhead>
|
||||
<soundExplode>SpitterSpitLands</soundExplode>
|
||||
<filth>Filth_SpentAcid</filth>
|
||||
<filthCount>1</filthCount>
|
||||
<explosionEffect>Shell_AcidSpitImpact</explosionEffect>
|
||||
<explosionEffectLifetimeTicks>60</explosionEffectLifetimeTicks>
|
||||
<doExplosionVFX>false</doExplosionVFX>
|
||||
</projectile>
|
||||
<comps>
|
||||
<li Class="CompProperties_ProjectileEffecter">
|
||||
<effecterDef>Shell_AcidSpitStream</effecterDef>
|
||||
</li>
|
||||
<li Class="CompProperties_ProjectileEffecter">
|
||||
<effecterDef>Shell_AcidSpitLaunched</effecterDef>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
</Defs>
|
||||
@@ -3,7 +3,7 @@
|
||||
<TerrainDef ParentName="FloorBase">
|
||||
<defName>ARA_InsectCreep</defName>
|
||||
<label>阿拉克涅菌毯</label>
|
||||
<description>由阿拉克涅虫族所铺设的由真菌、甲壳素分泌物混合得到的地面,会自动在各种拉克涅虫族建筑附近蔓延。这种奇特的结构质地紧密且暗藏大量营养输送组织,可以支撑重型建筑、种植特殊作物,但是除了虫族以外没人想踩在这坨软乎乎的活体结构上。</description>
|
||||
<description>由阿拉克涅虫族所铺设的由真菌、甲壳素分泌物混合得到的地面,会自动在各种拉克涅虫族建筑附近蔓延。这种奇特的结构质地紧密且暗藏大量营养输送组织,可以支撑重型建筑、种植作物、加速其上的阿拉克涅虫族移动速度,但是除了虫族以外没人想踩在这坨软乎乎的活体结构上。</description>
|
||||
<designationCategory>ARA_Buildings</designationCategory>
|
||||
<texturePath>Terrain/Surfaces/InsectSludge</texturePath>
|
||||
<color>(203, 163, 68)</color>
|
||||
@@ -13,8 +13,11 @@
|
||||
<edgeType>FadeRough</edgeType>
|
||||
<resourcesFractionWhenDeconstructed>0</resourcesFractionWhenDeconstructed>
|
||||
<renderPrecedence>330</renderPrecedence>
|
||||
<pathCost>0</pathCost>
|
||||
<pathCost>2</pathCost>
|
||||
<generatedFilth>Filth_Slime</generatedFilth>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</researchPrerequisites>
|
||||
<filthAcceptanceMask>
|
||||
<li>Unnatural</li>
|
||||
</filthAcceptanceMask>
|
||||
@@ -78,7 +81,12 @@
|
||||
<artificialForMeditationPurposes>false</artificialForMeditationPurposes>
|
||||
</building>
|
||||
<useStuffTerrainAffordance>false</useStuffTerrainAffordance>
|
||||
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
|
||||
<terrainAffordanceNeeded>Heavy</terrainAffordanceNeeded>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</researchPrerequisites>
|
||||
<!-- <terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded> -->
|
||||
<!-- <tickerType>Normal</tickerType> -->
|
||||
<repairEffect>EatVegetarian</repairEffect>
|
||||
<costStuffCount>0</costStuffCount>
|
||||
<stuffCategories Inherit="False"/>
|
||||
@@ -132,23 +140,21 @@
|
||||
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
|
||||
<selectable>true</selectable>
|
||||
<tickerType>Normal</tickerType>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</researchPrerequisites>
|
||||
<!-- <rotatable>false</rotatable> -->
|
||||
<!--<soundImpactDefault>BulletImpact_Metal</soundImpactDefault>-->
|
||||
<useStuffTerrainAffordance>false</useStuffTerrainAffordance>
|
||||
<stuffCategories Inherit="False"></stuffCategories>
|
||||
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
|
||||
<terrainAffordanceNeeded>Heavy</terrainAffordanceNeeded>
|
||||
<!-- <terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded> -->
|
||||
<designationCategory>ARA_Buildings</designationCategory>
|
||||
<holdsRoof>true</holdsRoof>
|
||||
<staticSunShadowHeight>1.0</staticSunShadowHeight>
|
||||
<blockLight>true</blockLight>
|
||||
<drawerType>RealtimeOnly</drawerType>
|
||||
<repairEffect>EatVegetarian</repairEffect>
|
||||
<comps>
|
||||
<li Class="CompProperties_Breakdownable"/>
|
||||
<li Class="CompProperties_Forbiddable">
|
||||
<allowNonPlayer>true</allowNonPlayer>
|
||||
</li>
|
||||
</comps>
|
||||
<damageMultipliers Inherit="False">
|
||||
<li>
|
||||
<damageDef>Bomb</damageDef>
|
||||
@@ -189,6 +195,17 @@
|
||||
<uiIconPath>ArachnaeSwarm/Building/Door/ARA_InsectDoor_Icon</uiIconPath>
|
||||
<designationHotKey>Misc2</designationHotKey>
|
||||
<constructionSkillPrerequisite>6</constructionSkillPrerequisite>
|
||||
<comps>
|
||||
<li Class="CompProperties_Breakdownable"/>
|
||||
<li Class="CompProperties_Forbiddable">
|
||||
<allowNonPlayer>true</allowNonPlayer>
|
||||
</li>
|
||||
<li Class="CompProperties_Power">
|
||||
<compClass>CompPowerTrader</compClass>
|
||||
<basePowerConsumption>0</basePowerConsumption>
|
||||
<transmitsPower>true</transmitsPower>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="BuildingNaturalBase">
|
||||
@@ -206,6 +223,11 @@
|
||||
<tickerType>Normal</tickerType>
|
||||
<designationCategory>ARA_Buildings</designationCategory>
|
||||
<repairEffect>EatVegetarian</repairEffect>
|
||||
<filthLeaving>Filth_Slime</filthLeaving>
|
||||
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</researchPrerequisites>
|
||||
<!-- <thingCategories>
|
||||
<li>BuildingsSpecial</li>
|
||||
</thingCategories> -->
|
||||
@@ -218,20 +240,6 @@
|
||||
<costList>
|
||||
<ARA_InsectJelly>3</ARA_InsectJelly>
|
||||
</costList>
|
||||
<comps>
|
||||
<li Class="CompProperties_Glower">
|
||||
<glowRadius>6</glowRadius>
|
||||
<glowColor>(220,210,171,0)</glowColor>
|
||||
</li>
|
||||
<!-- <li Class="CompProperties_Lifespan">
|
||||
<lifespanTicks>1200000</lifespanTicks>
|
||||
</li> -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_DelayedTerrainSpawn">
|
||||
<delayTicks>60</delayTicks> <!-- 60 ticks = 1 second -->
|
||||
<terrainToSpawn>ARA_InsectCreep</terrainToSpawn>
|
||||
<spawnRadius>6</spawnRadius>
|
||||
</li>
|
||||
</comps>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_Tumor</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
@@ -246,5 +254,178 @@
|
||||
<placeWorkers>
|
||||
<li>PlaceWorker_GlowRadius</li>
|
||||
</placeWorkers>
|
||||
<comps>
|
||||
<li Class="CompProperties_Glower">
|
||||
<glowRadius>6</glowRadius>
|
||||
<glowColor>(220,210,171,0)</glowColor>
|
||||
</li>
|
||||
<li Class="CompProperties_Lifespan">
|
||||
<lifespanTicks>1200000</lifespanTicks>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_DelayedTerrainSpawn">
|
||||
<terrainToSpawn>ARA_InsectCreep</terrainToSpawn>
|
||||
<spawnRadius>6</spawnRadius>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BuildingNaturalBase">
|
||||
<defName>ARA_Tumor_SunLamp</defName>
|
||||
<label>阿拉克涅光瘤</label>
|
||||
<description>一个比普通菌瘤更大的菌瘤,内部的发光器官亮的难以想象,可以支持作物的光照条件,但是其寿命比普通菌瘤要短得多,并且不会蔓延菌毯。</description>
|
||||
<thingClass>Building_SunLamp</thingClass>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_Tumor_SunLamp</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<drawSize>(3, 3)</drawSize>
|
||||
<shadowData>
|
||||
<volume>(1.3, 1.6, 1)</volume>
|
||||
<offset>(-0.5,0,-0.1)</offset>
|
||||
</shadowData>
|
||||
</graphicData>
|
||||
<size>(3,3)</size>
|
||||
<blockWind>true</blockWind>
|
||||
<tickerType>Rare</tickerType>
|
||||
<statBases>
|
||||
<WorkToBuild>600</WorkToBuild>
|
||||
<Mass>4.5</Mass>
|
||||
</statBases>
|
||||
<designationCategory>ARA_Buildings</designationCategory>
|
||||
<costList>
|
||||
<ARA_InsectJelly>10</ARA_InsectJelly>
|
||||
</costList>
|
||||
<uiOrder>2995</uiOrder>
|
||||
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Technology_5SHL</li>
|
||||
</researchPrerequisites>
|
||||
<comps>
|
||||
<li Class="CompProperties_Glower">
|
||||
<overlightRadius>7.0</overlightRadius>
|
||||
<glowRadius>14</glowRadius>
|
||||
<glowColor>(220,210,171,0)</glowColor>
|
||||
<colorPickerEnabled>true</colorPickerEnabled>
|
||||
</li>
|
||||
<li Class="CompProperties_Lifespan">
|
||||
<lifespanTicks>600000</lifespanTicks>
|
||||
</li>
|
||||
<!-- <li Class="CompProperties_Schedule">
|
||||
<startTime>0.25</startTime>
|
||||
<endTime>0.8</endTime>
|
||||
<offMessage>Off for plant resting period</offMessage>
|
||||
</li> -->
|
||||
<!-- <li Class="CompProperties_HeatPusher">
|
||||
<compClass>CompHeatPusherPowered</compClass>
|
||||
<heatPerSecond>3</heatPerSecond>
|
||||
</li> -->
|
||||
</comps>
|
||||
<!-- Determined by trial and error
|
||||
This value isn't perfect because these radii use different algorithms
|
||||
but it matches in this case-->
|
||||
<specialDisplayRadius>5.8</specialDisplayRadius>
|
||||
</ThingDef>
|
||||
|
||||
<ThingDef ParentName="BenchBase">
|
||||
<defName>ARA_ResearchBench</defName>
|
||||
<label>阿拉克涅研究台</label>
|
||||
<description>一个供阿拉克涅女皇种和智囊种进行研究的活体结构,可以让虫群尽情地探索变异和进化方向。</description>
|
||||
<thingClass>Building_ResearchBench</thingClass>
|
||||
<size>(3,3)</size>
|
||||
<stuffCategories Inherit="False"/>
|
||||
<costStuffCount>0</costStuffCount>
|
||||
<costList>
|
||||
<ARA_Carapace>50</ARA_Carapace>
|
||||
</costList>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_ResearchBench</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<shaderType>CutoutComplex</shaderType>
|
||||
<drawSize>(3,4.5)</drawSize>
|
||||
</graphicData>
|
||||
<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 Inherit="False">
|
||||
<li Class="CompProperties_ReportWorkSpeed">
|
||||
<workSpeedStat>ResearchSpeedFactor</workSpeedStat>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_DelayedTerrainSpawn">
|
||||
<terrainToSpawn>ARA_InsectCreep</terrainToSpawn>
|
||||
<spawnRadius>4</spawnRadius>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="BasicBedBase">
|
||||
<defName>ARA_NodeNest</defName>
|
||||
<thingClass>Building_Bed</thingClass>
|
||||
<label>阿拉克涅督虫巢穴</label>
|
||||
<description>供阿拉克涅督虫栖息的巢穴,由几丁质甲壳、肌肉和结缔组织形成的“被窝”对督虫来说是非常好的补充精力的场地。</description>
|
||||
<tickerType>Normal</tickerType>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_NodeNest</texPath>
|
||||
<graphicClass>Graphic_Multi</graphicClass>
|
||||
<shaderType>CutoutComplex</shaderType>
|
||||
<drawSize>(2,2)</drawSize>
|
||||
</graphicData>
|
||||
<staticSunShadowHeight Inherit="False" IsNull="True" />
|
||||
<castEdgeShadows>False</castEdgeShadows>
|
||||
<statBases>
|
||||
<Comfort>0.75</Comfort>
|
||||
<MaxHitPoints>140</MaxHitPoints>
|
||||
<Beauty>1</Beauty>
|
||||
<WorkToBuild>800</WorkToBuild>
|
||||
<Mass>30</Mass>
|
||||
<Flammability>1.0</Flammability>
|
||||
<BedRestEffectiveness>1.2</BedRestEffectiveness>
|
||||
<Comfort>0.80</Comfort>
|
||||
<ImmunityGainSpeedFactor>1.1</ImmunityGainSpeedFactor>
|
||||
<MedicalTendQualityOffset>0.10</MedicalTendQualityOffset>
|
||||
<SurgerySuccessChanceFactor>1.1</SurgerySuccessChanceFactor>
|
||||
</statBases>
|
||||
<terrainAffordanceNeeded>ARA_Creep</terrainAffordanceNeeded>
|
||||
<size>(1,2)</size>
|
||||
<costList>
|
||||
<ARA_InsectJelly>3</ARA_InsectJelly>
|
||||
<ARA_Carapace>15</ARA_Carapace>
|
||||
</costList>
|
||||
<uiOrder>2010</uiOrder>
|
||||
<fillPercent>0.5</fillPercent>
|
||||
<designationCategory>ARA_Buildings</designationCategory>
|
||||
<researchPrerequisites Inherit="False">
|
||||
<li>ARA_Base_Technology</li>
|
||||
</researchPrerequisites>
|
||||
<stuffCategories Inherit="False" IsNull="True" />
|
||||
<building>
|
||||
<paintable>false</paintable>
|
||||
<bed_showSleeperBody>true</bed_showSleeperBody>
|
||||
<bed_healPerDay>10</bed_healPerDay>
|
||||
<bed_defaultMedical>false</bed_defaultMedical>
|
||||
</building>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.CompProperties_DelayedTerrainSpawn">
|
||||
<terrainToSpawn>ARA_InsectCreep</terrainToSpawn>
|
||||
<spawnRadius>3</spawnRadius>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
</Defs>
|
||||
@@ -1,24 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<ThingDef Name="ARA_InteractiveEggSac" ParentName="BuildingNaturalBase">
|
||||
<defName>ARA_InteractiveEggSac</defName>
|
||||
<label>阿拉克涅虫卵囊-休眠中</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程——参阅虫卵的具体信息,了解各个督虫的特点。</description>
|
||||
<ThingDef Name="ARA_InteractiveEggSac_Base" ParentName="BuildingNaturalBase" Abstract="True">
|
||||
<thingClass>Building</thingClass>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ArachnaeNode_Race_Myrmecocystus</ThingDef>
|
||||
<ThingDef>ArachnaeNode_Race_ShieldHead</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<category>Building</category>
|
||||
<size>(1,1)</size>
|
||||
<minifiedDef>MinifiedThing</minifiedDef>
|
||||
<thingCategories>
|
||||
<!-- <minifiedDef>MinifiedThing</minifiedDef> -->
|
||||
<!-- <thingCategories>
|
||||
<li>BuildingsMisc</li>
|
||||
</thingCategories>
|
||||
</thingCategories> -->
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_EggSac</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<drawSize>(1.5,1.5)</drawSize>
|
||||
<drawSize>(1.2,1.2)</drawSize>
|
||||
<shadowData>
|
||||
<volume>(0.8, 0.8, 0.3)</volume>
|
||||
</shadowData>
|
||||
</graphicData>
|
||||
<altitudeLayer>Building</altitudeLayer>
|
||||
<passability>PassThroughOnly</passability>
|
||||
@@ -47,10 +43,81 @@
|
||||
<glowRadius>6</glowRadius>
|
||||
<glowColor>(113,141,117,0)</glowColor>
|
||||
</li>
|
||||
<li Class="CompProperties_SpawnEffecterOnDestroy">
|
||||
<effect>CocoonDestroyed</effect>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_DelayedTerrainSpawn">
|
||||
<terrainToSpawn>ARA_InsectCreep</terrainToSpawn>
|
||||
<spawnRadius>4.6</spawnRadius>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_InteractiveEggSac_Base">
|
||||
<defName>ARA_InteractiveEggSac</defName>
|
||||
<label>阿拉克涅虫卵囊</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程——参阅虫卵的超链接,了解各个督虫的特点。\n\n卵囊对温度极度敏感(该类型的卵适温为-25~30°C),需要小心保护!</description>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ArachnaeNode_Race_Myrmecocystus</ThingDef>
|
||||
<ThingDef>ArachnaeNode_Race_ShieldHead</ThingDef>
|
||||
<ThingDef>ArachnaeNode_Race_WeaponSmith</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
<researchPrerequisites>
|
||||
<li>ARA_Base_Technology</li>
|
||||
</researchPrerequisites>
|
||||
|
||||
<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>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_Myrmecocystus</pawnKind>
|
||||
<delay>180000</delay>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_ShieldHead</pawnKind>
|
||||
<delay>180000</delay>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_WeaponSmith</pawnKind>
|
||||
<delay>180000</delay>
|
||||
</li>
|
||||
</pawnKindDelays>
|
||||
<destroyOnSpawn>true</destroyOnSpawn>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>-25</minSafeTemperature>
|
||||
<maxSafeTemperature>30</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="ARA_InteractiveEggSac_Base">
|
||||
<defName>ARA_InteractiveEggSac_Start</defName>
|
||||
<label>初诞阿拉克涅虫卵囊</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种初到此地所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程。\n\n初诞卵囊可以抵御极端天气并且拥有极快的孵化速度,但是它们只能支持少数几种虫族的孵化。</description>
|
||||
<minifiedDef Inherit="False" />
|
||||
<thingCategories Inherit="False" />
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ArachnaeNode_Race_Myrmecocystus</ThingDef>
|
||||
<ThingDef>ArachnaeNode_Race_ShieldHead</ThingDef>
|
||||
<ThingDef>ArachnaeNode_Race_WeaponSmith</ThingDef>
|
||||
</descriptionHyperlinks>
|
||||
|
||||
<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>
|
||||
@@ -64,36 +131,56 @@
|
||||
<pawnKind>ArachnaeNode_Race_ShieldHead</pawnKind>
|
||||
<delay>300</delay>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_WeaponSmith</pawnKind>
|
||||
<delay>300</delay>
|
||||
</li>
|
||||
</pawnKindDelays>
|
||||
<destroyOnSpawn>true</destroyOnSpawn>
|
||||
</li>
|
||||
<li Class="CompProperties_Maintainable">
|
||||
<ticksHealthy>60000</ticksHealthy>
|
||||
<ticksNeedsMaintenance>60000</ticksNeedsMaintenance>
|
||||
<damagePerTickRare>10</damagePerTickRare>
|
||||
</li>
|
||||
<li Class="CompProperties_SpawnEffecterOnDestroy">
|
||||
<effect>CocoonDestroyed</effect>
|
||||
</li>
|
||||
<li Class="CompProperties_SpawnerFilth">
|
||||
<filthDef>Filth_Slime</filthDef>
|
||||
<spawnCountOnSpawn>10</spawnCountOnSpawn>
|
||||
<spawnMtbHours>4</spawnMtbHours>
|
||||
<spawnRadius>5</spawnRadius>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.CompProperties_DelayedTerrainSpawn">
|
||||
<delayTicks>60</delayTicks> <!-- 60 ticks = 1 second -->
|
||||
<terrainToSpawn>ARA_InsectCreep</terrainToSpawn>
|
||||
<spawnRadius>4.6</spawnRadius>
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>-300</minSafeTemperature>
|
||||
<maxSafeTemperature>100</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.005</damagePerTick>
|
||||
<recoveryRate>0.001</recoveryRate>
|
||||
</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>
|
||||
|
||||
<ThingDef ParentName="ARA_InteractiveEggSac">
|
||||
<defName>ARA_InteractiveEggSac_Start</defName>
|
||||
<label>初诞阿拉克涅虫卵囊-休眠中</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种初到此地所诞之卵,内含哺育一只新督虫所需的营养和遗传物质,可以通过阿拉克涅女皇种的交互完成激活进程——参阅虫卵的具体信息,了解各个督虫的特点。</description>
|
||||
<minifiedDef Inherit="False" />
|
||||
<thingCategories Inherit="False" />
|
||||
<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>
|
||||
@@ -1,15 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<ThingDef ParentName="BuildingBase">
|
||||
<defName>ARA_BioforgeIncubator</defName>
|
||||
<label>阿拉克涅孵化茧</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含哺育阿拉克涅武器种虫族所需的营养和遗传物质,可以通过阿拉克涅工艺种的交互完成激活进程。</description>
|
||||
<ThingDef Name="ARA_BioforgeIncubator_Base" ParentName="BuildingBase" Abstract="True">
|
||||
<thingClass>Building</thingClass>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_EggSac</texPath>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_BioforgeIncubator</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<drawSize>(1.5,1.5)</drawSize>
|
||||
<drawSize>(1.1,1.1)</drawSize>
|
||||
</graphicData>
|
||||
<size>(1,1)</size>
|
||||
<altitudeLayer>Building</altitudeLayer>
|
||||
@@ -27,42 +23,60 @@
|
||||
</building>
|
||||
|
||||
<comps>
|
||||
<li Class="CompProperties_Flickable"/>
|
||||
<li Class="CompProperties_SpawnEffecterOnDestroy">
|
||||
<effect>CocoonDestroyed</effect>
|
||||
</li>
|
||||
<li Class="CompProperties_SpawnerFilth">
|
||||
<filthDef>Filth_Slime</filthDef>
|
||||
<spawnCountOnSpawn>10</spawnCountOnSpawn>
|
||||
<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>Biomass</fuelLabel>
|
||||
<fuelLabel>营养</fuelLabel>
|
||||
<fuelFilter>
|
||||
<categories>
|
||||
<li>Foods</li>
|
||||
</categories>
|
||||
</fuelFilter>
|
||||
<fuelConsumptionRate>0</fuelConsumptionRate> <!-- IMPORTANT: Disable base class consumption -->
|
||||
<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>Gun_ChainShotgun</thingDef>
|
||||
<productionTicks>60000</productionTicks>
|
||||
<totalNutritionNeeded>20</totalNutritionNeeded>
|
||||
</li>
|
||||
<li>
|
||||
<thingDef>Gun_AssaultRifle</thingDef>
|
||||
<productionTicks>60000</productionTicks>
|
||||
<totalNutritionNeeded>15</totalNutritionNeeded>
|
||||
<thingDef>ARA_RW_Basic_Acid_Bladder_Gun</thingDef>
|
||||
<productionTicks>80000</productionTicks>
|
||||
<totalNutritionNeeded>30</totalNutritionNeeded>
|
||||
</li>
|
||||
</processes>
|
||||
|
||||
<whitelist>
|
||||
<li>ARA_ArachnaeQueen</li>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
</whitelist>
|
||||
<spawnCount>1</spawnCount>
|
||||
<destroyOnSpawn>True</destroyOnSpawn>
|
||||
<minSafeTemperature>18</minSafeTemperature>
|
||||
<maxSafeTemperature>23</maxSafeTemperature>
|
||||
<minSafeTemperature>10</minSafeTemperature>
|
||||
<maxSafeTemperature>28</maxSafeTemperature>
|
||||
<penaltyPerDegreePerTick>0.00001</penaltyPerDegreePerTick>
|
||||
<damagePerTickWhenUnfueled>0.2</damagePerTickWhenUnfueled>
|
||||
<minNutritionToStart>1.0</minNutritionToStart>
|
||||
@@ -94,7 +108,6 @@
|
||||
</li>
|
||||
</qualityThresholds>
|
||||
<!--
|
||||
<![CDATA[
|
||||
当一个生产流程完成时,系统会通过以下三个步骤来确定最终的物品品质:
|
||||
|
||||
第 1 步: 计算“基础品质分” (Base Quality Score)
|
||||
@@ -153,19 +166,181 @@
|
||||
仅仅保持燃料充足或温度适宜是不够的,必须两者兼顾才能提高“基础品质分”。
|
||||
同时,必须极力避免温度超出安全范围,因为“温度惩罚分”是纯粹的惩罚,它只会单方面地拉低最终品质,且无法挽回。
|
||||
这种设计为玩家提供了一个清晰的目标和富有挑战性的过程管理,而不是一个简单的“放置-等待”式生产。
|
||||
]]>
|
||||
-->
|
||||
-->
|
||||
</li>
|
||||
|
||||
<li Class="ArachnaeSwarm.CompProperties_TemperatureRuinableDamage">
|
||||
<minSafeTemperature>13</minSafeTemperature>
|
||||
<minSafeTemperature>10</minSafeTemperature>
|
||||
<maxSafeTemperature>28</maxSafeTemperature>
|
||||
<progressPerDegreePerTick>0.00005</progressPerDegreePerTick>
|
||||
<damagePerTick>0.001</damagePerTick>
|
||||
<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>
|
||||
|
||||
</Defs>
|
||||
<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>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
</Defs>
|
||||
@@ -332,6 +332,13 @@
|
||||
<li Class="ArachnaeSwarm.JobGiver_Grower" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- OUR CUSTOM LOGIC INJECTION FOR CLEANING -->
|
||||
<li Class="ArachnaeSwarm.ThinkNode_ConditionalAnimalShouldDoCleaningWork">
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.JobGiver_Cleaner" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
|
||||
22
1.6/1.6/Defs/TrainableDefs/ARA_Cleaning.xml
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<TrainableDef>
|
||||
<defName>ARA_Cleaning</defName>
|
||||
<label>清洁</label>
|
||||
<description>允许该生物执行清洁任务。</description>
|
||||
<!-- 标记为特殊训练,这样它就会被 PawnColumnWorker_Trainable_Special 统一管理 -->
|
||||
<specialTrainable>true</specialTrainable>
|
||||
|
||||
<!-- 训练难度和所需智力 -->
|
||||
<difficulty>5</difficulty>
|
||||
<requiredTrainability>Advanced</requiredTrainability>
|
||||
|
||||
<!-- 训练所需步骤 -->
|
||||
<steps>3</steps>
|
||||
|
||||
<!-- 在UI中的排序 -->
|
||||
<listPriority>100</listPriority>
|
||||
</TrainableDef>
|
||||
|
||||
</Defs>
|
||||
@@ -4,4 +4,22 @@
|
||||
<ARA_Incubate>孵化 {0}</ARA_Incubate>
|
||||
<ARA_NeedsInteraction>未孵化,需要阿拉克涅女皇种交互</ARA_NeedsInteraction>
|
||||
|
||||
<!-- CompAbilityEffect_BindDrone -->
|
||||
<ARA_BindDrone_Success>{0} 已成功绑定到 {1} 的蜂巢思维。</ARA_BindDrone_Success>
|
||||
<ARA_BindDrone_Failure>无法将 {0} 绑定到 {1} 的蜂巢思维。</ARA_BindDrone_Failure>
|
||||
<ARA_BindDrone_NoDroneHediff>目标 {0} 没有“ARA_HiveMindDrone”的 hediff。</ARA_BindDrone_NoDroneHediff>
|
||||
<ARA_BindDrone_AlreadyBound>目标 {0} 已绑定到 {1}。</ARA_BindDrone_AlreadyBound>
|
||||
<ARA_BindDrone_NoMasterHediff>施法者 {0} 没有“ARA_HiveMindMaster”的 hediff。</ARA_BindDrone_NoMasterHediff>
|
||||
|
||||
<!-- Possession Ability Keys -->
|
||||
<ARA_MustBeHumanlike>目标必须是类人生物。</ARA_MustBeHumanlike>
|
||||
<ARA_AlreadyPossessed>{0} 已被寄生。</ARA_AlreadyPossessed>
|
||||
<ARA_CannotPossessRace>无法寄生 {0} 种族。</ARA_CannotPossessRace>
|
||||
|
||||
<!-- Hive Mind Tooltips -->
|
||||
<ARA_TipString_LinkedTo>链接至: {0}</ARA_TipString_LinkedTo>
|
||||
<ARA_TipString_NotLinked>未链接至任何女皇种。</ARA_TipString_NotLinked>
|
||||
<ARA_TipString_ControlledDrones>控制的虫族:</ARA_TipString_ControlledDrones>
|
||||
<ARA_TipString_NoDronesBound>尚未绑定任何虫族。</ARA_TipString_NoDronesBound>
|
||||
|
||||
</LanguageData>
|
||||
@@ -14,7 +14,7 @@
|
||||
<Producing>正在生产 {0}</Producing>
|
||||
<TimeLeft>剩余时间</TimeLeft>
|
||||
<ProjectedQuality>预计品质</ProjectedQuality>
|
||||
<TemperaturePenalty>温度惩罚</TemperaturePenalty>
|
||||
<NotProducing>未在生产</NotProducing>
|
||||
<ARA_NeedArachnaeToStartIncubation>未孵化,需要阿拉克涅工艺种交互</ARA_NeedArachnaeToStartIncubation>
|
||||
|
||||
</LanguageData>
|
||||
|
After Width: | Height: | Size: 24 KiB |
BIN
Content/Textures/ArachnaeSwarm/Building/ARA_NodeNest_east.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
Content/Textures/ArachnaeSwarm/Building/ARA_NodeNest_north.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
Content/Textures/ArachnaeSwarm/Building/ARA_NodeNest_south.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
Content/Textures/ArachnaeSwarm/Building/ARA_ResearchBench.png
Normal file
|
After Width: | Height: | Size: 196 KiB |
BIN
Content/Textures/ArachnaeSwarm/Building/ARA_Tumor_SunLamp.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
BIN
Content/Textures/ArachnaeSwarm/UI/Abilities/ARA_BindDrone.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
Content/Textures/ArachnaeSwarm/Weapon/ARA_MW_Bone_Sword.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 37 KiB |
@@ -1,7 +1,16 @@
|
||||
{
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
||||
"Documents": [],
|
||||
"WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\ara_buildingterrainspawn\\compproperties_delayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:ara_buildingterrainspawn\\compproperties_delayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
{
|
||||
"Orientation": 0,
|
||||
@@ -9,8 +18,34 @@
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": -1,
|
||||
"SelectedChildIndex": 0,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "CompDelayedTerrainSpawn.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs",
|
||||
"RelativeDocumentMoniker": "ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs",
|
||||
"RelativeToolTip": "ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAADwvxcAAAAfAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-09-05T11:17:51.595Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "CompProperties_DelayedTerrainSpawn.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_BuildingTerrainSpawn\\CompProperties_DelayedTerrainSpawn.cs",
|
||||
"RelativeDocumentMoniker": "ARA_BuildingTerrainSpawn\\CompProperties_DelayedTerrainSpawn.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_BuildingTerrainSpawn\\CompProperties_DelayedTerrainSpawn.cs",
|
||||
"RelativeToolTip": "ARA_BuildingTerrainSpawn\\CompProperties_DelayedTerrainSpawn.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-09-05T11:17:48.391Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
|
||||
|
||||
@@ -3,55 +3,55 @@ using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
/// <summary>
|
||||
/// Spawns terrain around the parent thing instantly upon spawning.
|
||||
/// Despite the class name, this component does NOT use any delay or Tick-based updates.
|
||||
/// The logic runs only ONCE during the PostSpawnSetup phase for maximum performance.
|
||||
/// There is no background counting or any process that continues after the spawn.
|
||||
/// </summary>
|
||||
public class CompDelayedTerrainSpawn : ThingComp
|
||||
{
|
||||
private CompProperties_DelayedTerrainSpawn Props => (CompProperties_DelayedTerrainSpawn)props;
|
||||
|
||||
private int ticksToSpawn;
|
||||
private bool started;
|
||||
|
||||
/// <summary>
|
||||
/// This is the ONLY time this component's logic runs. It is called by the game when the object is created on the map.
|
||||
/// </summary>
|
||||
/// <param name="respawningAfterLoad">True if loading from a save, which we will ignore.</param>
|
||||
public override void PostSpawnSetup(bool respawningAfterLoad)
|
||||
{
|
||||
base.PostSpawnSetup(respawningAfterLoad);
|
||||
StartDelayedSpawn();
|
||||
}
|
||||
|
||||
public override void CompTick()
|
||||
{
|
||||
base.CompTick();
|
||||
if (started)
|
||||
// We only run this logic for brand new objects, not for objects loaded from a save file.
|
||||
if (!respawningAfterLoad)
|
||||
{
|
||||
ticksToSpawn--;
|
||||
if (ticksToSpawn <= 0)
|
||||
{
|
||||
DoTerrainSpawn();
|
||||
}
|
||||
DoTerrainSpawn();
|
||||
}
|
||||
}
|
||||
|
||||
private void StartDelayedSpawn()
|
||||
{
|
||||
started = true;
|
||||
ticksToSpawn = Props.delayTicks;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method performs the one-time action of spawning terrain.
|
||||
/// It includes strong safety checks to prevent errors if the object is not fully initialized.
|
||||
/// </summary>
|
||||
private void DoTerrainSpawn()
|
||||
{
|
||||
if (parent.Destroyed)
|
||||
// Safety Check: We ensure the object and its map exist before trying to do anything.
|
||||
// If these conditions are not met, the method does nothing and simply stops.
|
||||
if (parent == null || parent.Destroyed || parent.Map == null || Props.terrainToSpawn == null)
|
||||
{
|
||||
return;
|
||||
return; // Stop execution if anything is not ready.
|
||||
}
|
||||
|
||||
if (Props.terrainToSpawn != null)
|
||||
// The core logic: iterate through nearby cells and change their terrain.
|
||||
foreach (IntVec3 current in GenRadial.RadialCellsAround(parent.Position, Props.spawnRadius, true))
|
||||
{
|
||||
foreach (IntVec3 current in GenRadial.RadialCellsAround(parent.Position, Props.spawnRadius, true))
|
||||
if (current.InBounds(parent.Map) && current.Walkable(parent.Map))
|
||||
{
|
||||
if (current.InBounds(parent.Map) && current.Walkable(parent.Map))
|
||||
{
|
||||
parent.Map.terrainGrid.SetTerrain(current, Props.terrainToSpawn);
|
||||
}
|
||||
parent.Map.terrainGrid.SetTerrain(current, Props.terrainToSpawn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// NOTICE: There is NO CompTick() method here. This component does not perform any updates after it has spawned.
|
||||
// NOTICE: There is NO ExposeData() method for timers because there are NO timers to save.
|
||||
}
|
||||
}
|
||||
@@ -2,14 +2,18 @@ using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
/// <summary>
|
||||
/// Properties for the CompDelayedTerrainSpawn component.
|
||||
/// The logic has been optimized to run instantly on spawn, so the 'delayTicks' field is no longer used.
|
||||
/// </summary>
|
||||
public class CompProperties_DelayedTerrainSpawn : CompProperties
|
||||
{
|
||||
public int delayTicks = 0;
|
||||
public TerrainDef terrainToSpawn;
|
||||
public float spawnRadius = 0f;
|
||||
|
||||
public CompProperties_DelayedTerrainSpawn()
|
||||
{
|
||||
// The component logic now runs instantly, but the class name is kept for compatibility.
|
||||
compClass = typeof(CompDelayedTerrainSpawn);
|
||||
}
|
||||
}
|
||||
|
||||
45
Source/ArachnaeSwarm/ARA_CompHediffGiver/CompHediffGiver.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class CompHediffGiver : ThingComp
|
||||
{
|
||||
public CompProperties_HediffGiver Props => (CompProperties_HediffGiver)this.props;
|
||||
|
||||
public override void PostSpawnSetup(bool respawningAfterLoad)
|
||||
{
|
||||
base.PostSpawnSetup(respawningAfterLoad);
|
||||
|
||||
// 只有当thing是pawn时才添加hediff
|
||||
if (this.parent is Pawn pawn)
|
||||
{
|
||||
AddHediffsToPawn(pawn);
|
||||
}
|
||||
}
|
||||
|
||||
private void AddHediffsToPawn(Pawn pawn)
|
||||
{
|
||||
// 检查是否有hediff列表
|
||||
if (Props.hediffs == null || Props.hediffs.Count == 0)
|
||||
return;
|
||||
|
||||
// 检查概率
|
||||
if (Props.addChance < 1.0f && Rand.Value > Props.addChance)
|
||||
return;
|
||||
|
||||
// 为每个hediff添加到pawn
|
||||
foreach (HediffDef hediffDef in Props.hediffs)
|
||||
{
|
||||
// 检查是否允许重复添加
|
||||
if (!Props.allowDuplicates && pawn.health.hediffSet.HasHediff(hediffDef))
|
||||
continue;
|
||||
|
||||
// 添加hediff
|
||||
pawn.health.AddHediff(hediffDef);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class CompProperties_HediffGiver : CompProperties
|
||||
{
|
||||
// 要添加的hediff列表
|
||||
public List<HediffDef> hediffs;
|
||||
|
||||
// 添加hediff的概率(0-1之间)
|
||||
public float addChance = 1.0f;
|
||||
|
||||
// 是否允许重复添加相同的hediff
|
||||
public bool allowDuplicates = false;
|
||||
|
||||
public CompProperties_HediffGiver()
|
||||
{
|
||||
this.compClass = typeof(CompHediffGiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -226,6 +226,10 @@ namespace ArachnaeSwarm
|
||||
|
||||
return sb.ToString().TrimEnd();
|
||||
}
|
||||
if (!InProduction)
|
||||
{
|
||||
return "ARA_NeedArachnaeToStartIncubation".Translate();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -20,11 +20,11 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
if (masterHediff.TryBindDrone(dronePawn))
|
||||
{
|
||||
Messages.Message($"Successfully bound {dronePawn.LabelShort} to {masterPawn.LabelShort}'s hive mind.", MessageTypeDefOf.PositiveEvent, historical: false);
|
||||
Messages.Message("ARA_BindDrone_Success".Translate(dronePawn.LabelShort, masterPawn.LabelShort), MessageTypeDefOf.PositiveEvent, historical: false);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messages.Message($"Failed to bind {dronePawn.LabelShort} to {masterPawn.LabelShort}'s hive mind. Check logs for details.", MessageTypeDefOf.NegativeEvent, historical: false);
|
||||
Messages.Message("ARA_BindDrone_Failure".Translate(dronePawn.LabelShort, masterPawn.LabelShort), MessageTypeDefOf.NegativeEvent, historical: false);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -70,7 +70,7 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
if (throwMessages)
|
||||
{
|
||||
Messages.Message($"Target {dronePawn.LabelShort} does not have the 'ARA_HiveMindDrone' hediff.", MessageTypeDefOf.RejectInput, historical: false);
|
||||
Messages.Message("ARA_BindDrone_NoDroneHediff".Translate(dronePawn.LabelShort), MessageTypeDefOf.RejectInput, historical: false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -80,7 +80,7 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
if (throwMessages)
|
||||
{
|
||||
Messages.Message($"Target {dronePawn.LabelShort} is already bound to {droneHediff.target.LabelShort}.", MessageTypeDefOf.RejectInput, historical: false);
|
||||
Messages.Message("ARA_BindDrone_AlreadyBound".Translate(dronePawn.LabelShort, droneHediff.target.LabelShort), MessageTypeDefOf.RejectInput, historical: false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -91,7 +91,7 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
if (throwMessages)
|
||||
{
|
||||
Messages.Message($"Caster {masterPawn.LabelShort} does not have the 'ARA_HiveMindMaster' hediff.", MessageTypeDefOf.RejectInput, historical: false);
|
||||
Messages.Message("ARA_BindDrone_NoMasterHediff".Translate(masterPawn.LabelShort), MessageTypeDefOf.RejectInput, historical: false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class HediffCompProperties_HiveMindMaster : HediffCompProperties
|
||||
{
|
||||
public int scanIntervalTicks = 60; // Default to 1 second
|
||||
|
||||
public HediffCompProperties_HiveMindMaster()
|
||||
{
|
||||
this.compClass = typeof(HediffComp_HiveMindMaster);
|
||||
}
|
||||
}
|
||||
|
||||
public class HediffComp_HiveMindMaster : HediffComp
|
||||
{
|
||||
private Hediff_HiveMindMaster parentHediff;
|
||||
|
||||
private HediffCompProperties_HiveMindMaster Props => (HediffCompProperties_HiveMindMaster)this.props;
|
||||
|
||||
public override void CompPostMake()
|
||||
{
|
||||
base.CompPostMake();
|
||||
parentHediff = (Hediff_HiveMindMaster)this.parent;
|
||||
// Immediately try to bind drones when the hediff is first applied.
|
||||
parentHediff.TryBindAllAvailableDrones();
|
||||
}
|
||||
|
||||
public override void CompPostTick(ref float severityAdjustment)
|
||||
{
|
||||
base.CompPostTick(ref severityAdjustment);
|
||||
|
||||
// Periodically check for new unbound drones based on XML value.
|
||||
if (Find.TickManager.TicksGame % Props.scanIntervalTicks == 0)
|
||||
{
|
||||
if (parentHediff == null)
|
||||
{
|
||||
parentHediff = (Hediff_HiveMindMaster)this.parent;
|
||||
}
|
||||
parentHediff.TryBindAllAvailableDrones();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42,18 +42,7 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
get
|
||||
{
|
||||
// Only remove if base ShouldRemove is true, OR if pawn is dead
|
||||
// We do NOT want to remove it just because target is invalid, as the Comp will handle delayed death
|
||||
if (base.ShouldRemove && pawn.Dead)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// Also remove if pawn is no longer spawned or on a map
|
||||
if (!pawn.Spawned || pawn.Map == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false; // Let the Comp handle the unlinked death
|
||||
return this.pawn.Dead;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,13 +50,23 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
base.PostRemoved();
|
||||
// Deregister from the master when this hediff is removed
|
||||
// Ensure target is a Pawn and not dead before attempting to deregister
|
||||
if (this.target is Pawn master && master != null && !master.Destroyed && !master.Dead)
|
||||
if (this.target is Pawn master && master != null && !master.Destroyed)
|
||||
{
|
||||
var masterHediff = master.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_HiveMindMaster")) as Hediff_HiveMindMaster;
|
||||
masterHediff?.DeregisterDrone(this.pawn);
|
||||
}
|
||||
}
|
||||
public override string TipStringExtra
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.target is Pawn master && master != null)
|
||||
{
|
||||
return "ARA_TipString_LinkedTo".Translate(master.LabelShortCap);
|
||||
}
|
||||
return "ARA_TipString_NotLinked".Translate();
|
||||
}
|
||||
}
|
||||
// PostTick logic moved to HediffComp_HiveMindDrone
|
||||
}
|
||||
}
|
||||
@@ -5,12 +5,38 @@ using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class Hediff_HiveMindMaster : Hediff
|
||||
public class Hediff_HiveMindMaster : HediffWithComps
|
||||
{
|
||||
private List<Pawn> drones = new List<Pawn>();
|
||||
|
||||
public override string LabelInBrackets => drones.Count.ToString();
|
||||
|
||||
public override bool ShouldRemove => false;
|
||||
|
||||
public override string TipStringExtra
|
||||
{
|
||||
get
|
||||
{
|
||||
if (drones.NullOrEmpty())
|
||||
{
|
||||
return "\n" + "ARA_TipString_NoDronesBound".Translate().Colorize(ColoredText.SubtleGrayColor);
|
||||
}
|
||||
|
||||
System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
|
||||
stringBuilder.AppendLine("\n" + "ARA_TipString_ControlledDrones".Translate().Colorize(ColoredText.TipSectionTitleColor));
|
||||
foreach (var drone in drones)
|
||||
{
|
||||
string backstoryInfo = "";
|
||||
if (drone.story?.TitleShort is string adulthoodTitle && !adulthoodTitle.NullOrEmpty())
|
||||
{
|
||||
backstoryInfo = $" ({adulthoodTitle.Colorize(ColoredText.SubtleGrayColor)})";
|
||||
}
|
||||
stringBuilder.AppendLine($" - {drone.LabelShortCap}{backstoryInfo}");
|
||||
}
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
@@ -55,6 +81,41 @@ namespace ArachnaeSwarm
|
||||
return true;
|
||||
}
|
||||
|
||||
public void TryBindAllAvailableDrones()
|
||||
{
|
||||
if (this.pawn?.Map == null) return;
|
||||
|
||||
// First, clean up any dead, despawned, or destroyed drones from the list.
|
||||
int removedCount = drones.RemoveAll(drone => drone == null || drone.Dead || drone.Destroyed);
|
||||
|
||||
// Find all pawns on the map that could be potential drones
|
||||
List<Pawn> potentialDrones = this.pawn.Map.mapPawns.AllPawnsSpawned
|
||||
.Where(p => p.health.hediffSet.HasHediff(HediffDef.Named("ARA_HiveMindDrone")))
|
||||
.ToList();
|
||||
|
||||
int boundCount = 0;
|
||||
|
||||
foreach (var drone in potentialDrones)
|
||||
{
|
||||
Hediff_HiveMindDrone droneHediff = drone.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_HiveMindDrone")) as Hediff_HiveMindDrone;
|
||||
|
||||
// Check if the drone is unlinked (target is null) and not already in our list
|
||||
if (droneHediff != null && droneHediff.target == null && !drones.Contains(drone))
|
||||
{
|
||||
droneHediff.target = this.pawn; // Set the drone's target to this master
|
||||
drones.Add(drone);
|
||||
Log.Message($"[ArachnaeSwarm] Master {this.pawn.LabelShort} automatically bound drone {drone.LabelShort}.");
|
||||
boundCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Update severity if anything changed (drones were added or removed)
|
||||
if (boundCount > 0 || removedCount > 0)
|
||||
{
|
||||
UpdateSeverity();
|
||||
}
|
||||
}
|
||||
|
||||
public void DeregisterDrone(Pawn drone)
|
||||
{
|
||||
if (drones.Contains(drone))
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
using RimWorld;
|
||||
using RimWorld.Planet;
|
||||
using Verse;
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class CompAbilityEffect_Possess : CompAbilityEffect, ICompAbilityEffectOnJumpCompleted
|
||||
{
|
||||
public new CompProperties_AbilityPossess Props => (CompProperties_AbilityPossess)props;
|
||||
|
||||
public override bool Valid(LocalTargetInfo target, bool throwMessages = false)
|
||||
{
|
||||
Pawn targetPawn = target.Pawn;
|
||||
if (targetPawn == null) return false;
|
||||
|
||||
if (!targetPawn.RaceProps.Humanlike)
|
||||
{
|
||||
if (throwMessages) Messages.Message("ARA_MustBeHumanlike".Translate(), targetPawn, MessageTypeDefOf.RejectInput, false);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (targetPawn.health.hediffSet.HasHediff(HediffDef.Named("ARA_Possession")))
|
||||
{
|
||||
if (throwMessages) Messages.Message("ARA_AlreadyPossessed".Translate(targetPawn.LabelShort), targetPawn, MessageTypeDefOf.RejectInput, false);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Props.raceBlacklist.Contains(targetPawn.def))
|
||||
{
|
||||
if (throwMessages) Messages.Message("ARA_CannotPossessRace".Translate(targetPawn.def.label), targetPawn, MessageTypeDefOf.RejectInput, false);
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.Valid(target, throwMessages);
|
||||
}
|
||||
|
||||
public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
|
||||
{
|
||||
base.Apply(target, dest);
|
||||
DoPossession(this.parent.pawn, target.Pawn);
|
||||
}
|
||||
|
||||
private void DoPossession(Pawn caster, Pawn targetPawn)
|
||||
{
|
||||
if (targetPawn == null || caster == null) return;
|
||||
|
||||
Log.Message($"[夺舍] 开始执行。施法者: {caster.LabelShort}, 目标: {targetPawn.LabelShort}");
|
||||
|
||||
// 1. 捕获原宿主的完整数据,用于死亡后恢复尸体
|
||||
OriginalPawnData originalHostData = new OriginalPawnData();
|
||||
originalHostData.CaptureData(targetPawn);
|
||||
Log.Message($"[夺舍] 已捕获原始宿主 {targetPawn.LabelShort} 的完整数据。");
|
||||
|
||||
// 2. 备份原宿主的技能,用于后续合并
|
||||
var originalTargetSkills = new Dictionary<SkillDef, (int level, Passion passion)>();
|
||||
if (targetPawn.skills != null)
|
||||
{
|
||||
foreach (var skill in targetPawn.skills.skills)
|
||||
{
|
||||
originalTargetSkills[skill.def] = (skill.levelInt, skill.passion);
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 准备抱脸虫和Hediff
|
||||
Pawn originalCaster = PawnGenerator.GeneratePawn(caster.kindDef, caster.Faction);
|
||||
PawnDataUtility.TransferSoul(caster, originalCaster); // 确保克隆体有完全一致的数据
|
||||
Hediff_Possession hediff = (Hediff_Possession)HediffMaker.MakeHediff(HediffDef.Named("ARA_Possession"), targetPawn);
|
||||
hediff.originalHostData = originalHostData; // 将宿主数据存入Hediff
|
||||
|
||||
// 4. 将抱脸虫存入Hediff
|
||||
if (hediff.casterContainer.TryAdd(originalCaster, true))
|
||||
{
|
||||
Log.Message($"[夺舍] 成功将 {caster.LabelShort} 的原始副本存入Hediff。");
|
||||
|
||||
// 5. 灵魂转移,此时 targetPawn 的技能被 caster 的技能覆盖
|
||||
PawnDataUtility.TransferSoul(caster, targetPawn);
|
||||
|
||||
// 夺舍成功后,原始的抱脸虫应该消失
|
||||
if (!caster.Destroyed)
|
||||
{
|
||||
caster.Destroy(DestroyMode.Vanish);
|
||||
}
|
||||
|
||||
// 6. 技能合并:在灵魂转移后,直接在最终的身体 (targetPawn) 上进行合并
|
||||
if (targetPawn.skills != null)
|
||||
{
|
||||
Log.Message("[夺舍] 开始合并技能...");
|
||||
foreach (var skillRecord in targetPawn.skills.skills)
|
||||
{
|
||||
if (originalTargetSkills.TryGetValue(skillRecord.def, out var originalSkill))
|
||||
{
|
||||
// 比较等级
|
||||
if (originalSkill.level > skillRecord.levelInt)
|
||||
{
|
||||
skillRecord.levelInt = originalSkill.level;
|
||||
}
|
||||
// 比较热情
|
||||
if (originalSkill.passion > skillRecord.passion)
|
||||
{
|
||||
skillRecord.passion = originalSkill.passion;
|
||||
}
|
||||
}
|
||||
}
|
||||
Log.Message("[夺舍] 技能合并完成。");
|
||||
}
|
||||
|
||||
// 7. 将Hediff添加到最终身体上
|
||||
targetPawn.health.AddHediff(hediff);
|
||||
|
||||
if (Props.hediffToApplyOnSuccess != null)
|
||||
{
|
||||
targetPawn.health.AddHediff(Props.hediffToApplyOnSuccess, null, null);
|
||||
Log.Message($"[夺舍] 成功为 {targetPawn.LabelShort} 添加额外Hediff: {Props.hediffToApplyOnSuccess.defName}");
|
||||
}
|
||||
Log.Message($"[夺舍] {targetPawn.LabelShort} (原 {caster.LabelShort}) 夺舍完成。");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error($"[夺舍] 无法将 {caster.LabelShort} 的副本存入Hediff。中止操作。");
|
||||
if(originalCaster != null && !originalCaster.Destroyed) originalCaster.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnJumpCompleted(IntVec3 JUMPINPOS_UNUSED, LocalTargetInfo landingTarget)
|
||||
{
|
||||
Pawn caster = this.parent.pawn;
|
||||
if (caster == null || !(landingTarget.Thing is Pawn targetPawn)) return;
|
||||
|
||||
Verb bestMeleeVerb = caster.meleeVerbs.TryGetMeleeVerb(targetPawn);
|
||||
if (bestMeleeVerb == null)
|
||||
{
|
||||
Log.Warning($"[Possess] Caster {caster.LabelShort} has no melee verb.");
|
||||
return;
|
||||
}
|
||||
|
||||
float damageAmount = bestMeleeVerb.verbProps.AdjustedMeleeDamageAmount(bestMeleeVerb, caster);
|
||||
float armorPenetration = bestMeleeVerb.verbProps.AdjustedArmorPenetration(bestMeleeVerb, caster);
|
||||
DamageDef damageDef = bestMeleeVerb.verbProps.meleeDamageDef;
|
||||
|
||||
var dinfo = new DamageInfo(damageDef, damageAmount, armorPenetration, -1, caster);
|
||||
DamageWorker.DamageResult damageResult = targetPawn.TakeDamage(dinfo);
|
||||
Log.Message($"[Possess] Dealt {damageResult.totalDamageDealt} damage to {targetPawn.LabelShort} using {damageDef.defName}.");
|
||||
|
||||
if (damageResult.totalDamageDealt > 0)
|
||||
{
|
||||
float baseChance = Props.successChance.RandomInRange;
|
||||
float bonusFromDamage = damageResult.totalDamageDealt * Props.successChanceBonusPerDamage;
|
||||
float finalChance = Mathf.Clamp01(baseChance + bonusFromDamage);
|
||||
Log.Message($"[Possess] Base chance: {baseChance}, Bonus: {bonusFromDamage}, Final chance: {finalChance}");
|
||||
|
||||
if (Rand.Chance(finalChance))
|
||||
{
|
||||
Log.Message($"[Possess] Success! Applying possession effect.");
|
||||
DoPossession(caster, targetPawn);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Message($"[Possess] Failed possession check.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class CompProperties_AbilityPossess : CompProperties_AbilityEffect
|
||||
{
|
||||
public FloatRange successChance = new FloatRange(0.6f, 1.0f);
|
||||
public float successChanceBonusPerDamage = 0.01f;
|
||||
public List<ThingDef> raceBlacklist = new List<ThingDef>();
|
||||
|
||||
// Optional: A hediff to apply to the victim upon successful possession.
|
||||
public HediffDef hediffToApplyOnSuccess;
|
||||
|
||||
public CompProperties_AbilityPossess()
|
||||
{
|
||||
this.compClass = typeof(CompAbilityEffect_Possess);
|
||||
}
|
||||
}
|
||||
}
|
||||
99
Source/ArachnaeSwarm/ARA_HuggingFace/Hediff_Possession.cs
Normal file
@@ -0,0 +1,99 @@
|
||||
using System.Collections.Generic;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class Hediff_Possession : HediffWithComps, IThingHolder
|
||||
{
|
||||
public ThingOwner casterContainer;
|
||||
public OriginalPawnData originalHostData;
|
||||
|
||||
public Hediff_Possession()
|
||||
{
|
||||
this.casterContainer = new ThingOwner<Thing>(this, false, LookMode.Deep);
|
||||
}
|
||||
|
||||
public Pawn StoredCasterPawn => casterContainer.Count > 0 ? casterContainer[0] as Pawn : null;
|
||||
|
||||
public IThingHolder ParentHolder => this.pawn;
|
||||
|
||||
public void GetChildHolders(List<IThingHolder> outChildren)
|
||||
{
|
||||
ThingOwnerUtility.AppendThingHoldersFromThings(outChildren, this.GetDirectlyHeldThings());
|
||||
}
|
||||
|
||||
public ThingOwner GetDirectlyHeldThings()
|
||||
{
|
||||
return casterContainer;
|
||||
}
|
||||
|
||||
// PostAdd现在只在游戏加载时起作用,我们不需要在这里做任何特殊操作。
|
||||
// 所有的夺舍逻辑都在CompAbilityEffect_Possess中处理了。
|
||||
|
||||
public override void Notify_PawnDied(DamageInfo? dinfo, Hediff culprit = null)
|
||||
{
|
||||
base.Notify_PawnDied(dinfo, culprit);
|
||||
|
||||
Pawn deadBody = this.pawn;
|
||||
Pawn storedCaster = this.StoredCasterPawn;
|
||||
|
||||
if (originalHostData != null)
|
||||
{
|
||||
Log.Message($"[夺舍结束] 正在将 {deadBody.LabelShort}'s 的灵魂恢复为原始宿主数据。");
|
||||
originalHostData.RestoreData(deadBody);
|
||||
|
||||
// 恢复数据后,移除可能存在的无人机Hediff
|
||||
Hediff droneHediff = deadBody.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("ARA_HiveMindDrone"));
|
||||
if (droneHediff != null)
|
||||
{
|
||||
deadBody.health.RemoveHediff(droneHediff);
|
||||
Log.Message($"[夺舍结束] 已从 {deadBody.LabelShort} 的尸体上移除 ARA_HiveMindDrone Hediff。");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error("Possessed pawn died, but no original host data was found to restore.");
|
||||
}
|
||||
|
||||
if (storedCaster != null)
|
||||
{
|
||||
EjectCaster();
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error("Possessed pawn died, but no caster soul was found inside.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void EjectCaster()
|
||||
{
|
||||
if (StoredCasterPawn == null) return;
|
||||
|
||||
// 采用更稳健的方式获取地图和位置,防止因宿主死亡导致Map为null
|
||||
Map map = this.pawn.MapHeld ?? Find.AnyPlayerHomeMap;
|
||||
if (map == null)
|
||||
{
|
||||
Log.Error("[夺舍] 无法找到一个有效的地图来重生抱脸虫。");
|
||||
return;
|
||||
}
|
||||
|
||||
IntVec3 cell = this.pawn.PositionHeld;
|
||||
if (!cell.IsValid)
|
||||
{
|
||||
cell = map.Center;
|
||||
}
|
||||
|
||||
Log.Message($"[夺舍] 准备在地图 {map.ToString()} 的位置 {cell.ToString()} 处重生 {StoredCasterPawn.LabelShort}。");
|
||||
this.casterContainer.TryDropAll(cell, map, ThingPlaceMode.Near);
|
||||
}
|
||||
|
||||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
Scribe_Deep.Look(ref casterContainer, "casterContainer", this);
|
||||
Scribe_Deep.Look(ref originalHostData, "originalHostData");
|
||||
}
|
||||
}
|
||||
}
|
||||
180
Source/ArachnaeSwarm/ARA_HuggingFace/OriginalPawnData.cs
Normal file
@@ -0,0 +1,180 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using RimWorld.Planet;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
// A container for all essential data of a pawn that needs to be restored.
|
||||
public class OriginalPawnData : IExposable
|
||||
{
|
||||
// Core Identity
|
||||
public Name name;
|
||||
public BackstoryDef childhood;
|
||||
public BackstoryDef adulthood;
|
||||
public List<Trait> traits = new List<Trait>();
|
||||
public Faction faction;
|
||||
|
||||
// Growth & Experience
|
||||
public List<SkillRecordData> skills = new List<SkillRecordData>();
|
||||
|
||||
// Mind & Settings
|
||||
public List<Thought_Memory> memories = new List<Thought_Memory>();
|
||||
public Dictionary<WorkTypeDef, int> workSettings = new Dictionary<WorkTypeDef, int>();
|
||||
public List<TimeAssignmentDef> timetable;
|
||||
public HostilityResponseMode hostilityResponse;
|
||||
public MedicalCareCategory medCare;
|
||||
public bool selfTend;
|
||||
public ApparelPolicy apparelPolicy;
|
||||
public DrugPolicy drugPolicy;
|
||||
public FoodPolicy foodPolicy;
|
||||
|
||||
// DLC & Social
|
||||
public Ideo ideo;
|
||||
public List<RoyalTitleData> royalTitles = new List<RoyalTitleData>();
|
||||
|
||||
public void ExposeData()
|
||||
{
|
||||
Scribe_Deep.Look(ref name, "name");
|
||||
Scribe_Defs.Look(ref childhood, "childhood");
|
||||
Scribe_Defs.Look(ref adulthood, "adulthood");
|
||||
Scribe_Collections.Look(ref traits, "traits", LookMode.Deep);
|
||||
Scribe_References.Look(ref faction, "faction");
|
||||
Scribe_Collections.Look(ref skills, "skills", LookMode.Deep);
|
||||
Scribe_Collections.Look(ref memories, "memories", LookMode.Deep);
|
||||
Scribe_Collections.Look(ref workSettings, "workSettings", LookMode.Def, LookMode.Value);
|
||||
Scribe_Collections.Look(ref timetable, "timetable", LookMode.Def);
|
||||
Scribe_Values.Look(ref hostilityResponse, "hostilityResponse");
|
||||
Scribe_Values.Look(ref medCare, "medCare");
|
||||
Scribe_Values.Look(ref selfTend, "selfTend");
|
||||
Scribe_References.Look(ref apparelPolicy, "apparelPolicy");
|
||||
Scribe_References.Look(ref drugPolicy, "drugPolicy");
|
||||
Scribe_References.Look(ref foodPolicy, "foodPolicy");
|
||||
|
||||
if (ModsConfig.IdeologyActive) Scribe_References.Look(ref ideo, "ideo");
|
||||
if (ModsConfig.RoyaltyActive)
|
||||
{
|
||||
Scribe_Collections.Look(ref royalTitles, "royalTitles", LookMode.Deep);
|
||||
}
|
||||
}
|
||||
|
||||
// Populates this object with data from a living pawn.
|
||||
public void CaptureData(Pawn pawn)
|
||||
{
|
||||
this.name = pawn.Name;
|
||||
this.childhood = pawn.story.Childhood;
|
||||
this.adulthood = pawn.story.Adulthood;
|
||||
this.traits = new List<Trait>(pawn.story.traits.allTraits);
|
||||
this.faction = pawn.Faction;
|
||||
|
||||
this.skills = pawn.skills.skills.Select(s => new SkillRecordData
|
||||
{
|
||||
def = s.def,
|
||||
level = s.levelInt,
|
||||
xpSinceLastLevel = s.xpSinceLastLevel,
|
||||
passion = s.passion
|
||||
}).ToList();
|
||||
|
||||
if (pawn.needs?.mood?.thoughts?.memories != null) this.memories = new List<Thought_Memory>(pawn.needs.mood.thoughts.memories.Memories);
|
||||
if (pawn.workSettings != null) this.workSettings = DefDatabase<WorkTypeDef>.AllDefs.ToDictionary(def => def, def => pawn.workSettings.GetPriority(def));
|
||||
if (pawn.timetable != null) this.timetable = new List<TimeAssignmentDef>(pawn.timetable.times);
|
||||
if (pawn.playerSettings != null)
|
||||
{
|
||||
this.hostilityResponse = pawn.playerSettings.hostilityResponse;
|
||||
this.medCare = pawn.playerSettings.medCare;
|
||||
this.selfTend = pawn.playerSettings.selfTend;
|
||||
}
|
||||
if (pawn.outfits != null) this.apparelPolicy = pawn.outfits.CurrentApparelPolicy;
|
||||
if (pawn.drugs != null) this.drugPolicy = pawn.drugs.CurrentPolicy;
|
||||
if (pawn.foodRestriction != null) this.foodPolicy = pawn.foodRestriction.CurrentFoodPolicy;
|
||||
|
||||
if (ModsConfig.IdeologyActive && pawn.ideo != null) this.ideo = pawn.ideo.Ideo;
|
||||
if (ModsConfig.RoyaltyActive && pawn.royalty != null)
|
||||
{
|
||||
this.royalTitles = pawn.royalty.AllTitlesForReading.Select(t => new RoyalTitleData { defName = t.def.defName, faction = t.faction }).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
// Applies the stored data back to a living pawn.
|
||||
public void RestoreData(Pawn pawn)
|
||||
{
|
||||
pawn.Name = this.name;
|
||||
pawn.story.Childhood = this.childhood;
|
||||
pawn.story.Adulthood = this.adulthood;
|
||||
pawn.story.traits.allTraits.Clear();
|
||||
this.traits.ForEach(t => pawn.story.traits.GainTrait(t));
|
||||
if (pawn.Faction != this.faction) pawn.SetFaction(this.faction);
|
||||
|
||||
pawn.skills.skills.Clear();
|
||||
this.skills.ForEach(s => pawn.skills.skills.Add(new SkillRecord(pawn, s.def) { levelInt = s.level, xpSinceLastLevel = s.xpSinceLastLevel, passion = s.passion }));
|
||||
|
||||
if (pawn.needs?.mood?.thoughts?.memories != null)
|
||||
{
|
||||
pawn.needs.mood.thoughts.memories.Memories.Clear();
|
||||
this.memories.ForEach(m => pawn.needs.mood.thoughts.memories.TryGainMemory(m));
|
||||
}
|
||||
if (pawn.workSettings != null)
|
||||
{
|
||||
pawn.workSettings.EnableAndInitialize();
|
||||
foreach(var ws in this.workSettings) pawn.workSettings.SetPriority(ws.Key, ws.Value);
|
||||
}
|
||||
if (pawn.timetable != null) pawn.timetable.times = new List<TimeAssignmentDef>(this.timetable);
|
||||
if (pawn.playerSettings != null)
|
||||
{
|
||||
pawn.playerSettings.hostilityResponse = this.hostilityResponse;
|
||||
pawn.playerSettings.medCare = this.medCare;
|
||||
pawn.playerSettings.selfTend = this.selfTend;
|
||||
}
|
||||
if (pawn.outfits != null) pawn.outfits.CurrentApparelPolicy = this.apparelPolicy;
|
||||
if (pawn.drugs != null) pawn.drugs.CurrentPolicy = this.drugPolicy;
|
||||
if (pawn.foodRestriction != null) pawn.foodRestriction.CurrentFoodPolicy = this.foodPolicy;
|
||||
|
||||
if (ModsConfig.IdeologyActive && pawn.ideo != null && this.ideo != null) pawn.ideo.SetIdeo(this.ideo);
|
||||
if (ModsConfig.RoyaltyActive && pawn.royalty != null)
|
||||
{
|
||||
pawn.royalty.AllTitlesForReading.Clear();
|
||||
pawn.royalty.AllFactionPermits.Clear(); // Clear existing permits on the body
|
||||
this.royalTitles.ForEach(t => {
|
||||
RoyalTitleDef titleDef = DefDatabase<RoyalTitleDef>.GetNamed(t.defName, false);
|
||||
if (titleDef != null)
|
||||
{
|
||||
pawn.royalty.SetTitle(t.faction, titleDef, true, false, false);
|
||||
}
|
||||
});
|
||||
pawn.royalty.UpdateAvailableAbilities();
|
||||
}
|
||||
|
||||
pawn.Drawer.renderer.SetAllGraphicsDirty();
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillRecordData : IExposable
|
||||
{
|
||||
public SkillDef def;
|
||||
public int level;
|
||||
public float xpSinceLastLevel;
|
||||
public Passion passion;
|
||||
|
||||
public void ExposeData()
|
||||
{
|
||||
Scribe_Defs.Look(ref def, "def");
|
||||
Scribe_Values.Look(ref level, "level");
|
||||
Scribe_Values.Look(ref xpSinceLastLevel, "xpSinceLastLevel");
|
||||
Scribe_Values.Look(ref passion, "passion");
|
||||
}
|
||||
}
|
||||
|
||||
public class RoyalTitleData : IExposable
|
||||
{
|
||||
public Faction faction;
|
||||
public string defName;
|
||||
|
||||
public void ExposeData()
|
||||
{
|
||||
Scribe_References.Look(ref faction, "faction");
|
||||
Scribe_Values.Look(ref defName, "defName");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
166
Source/ArachnaeSwarm/ARA_HuggingFace/PawnDataUtility.cs
Normal file
@@ -0,0 +1,166 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public static class PawnDataUtility
|
||||
{
|
||||
public static void TransferSoul(Pawn soulSource, Pawn bodyTarget)
|
||||
{
|
||||
if (soulSource == null || bodyTarget == null)
|
||||
{
|
||||
Log.Error("Cannot transfer soul: source or target is null.");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Message($"Beginning soul transfer from {soulSource.LabelShort} to {bodyTarget.LabelShort}.");
|
||||
|
||||
bool isPossessing = soulSource.def.defName == "ARA_HuggingFace";
|
||||
Log.Message(isPossessing ? "[夺舍] 模式:抱脸虫 -> 宿主" : "[回归] 模式:宿主 -> 抱脸虫");
|
||||
|
||||
// --- 1. Core Identity ---
|
||||
bodyTarget.Name = soulSource.Name;
|
||||
bodyTarget.story.Childhood = soulSource.story.Childhood;
|
||||
bodyTarget.story.Adulthood = soulSource.story.Adulthood;
|
||||
|
||||
if (bodyTarget.story.traits != null) bodyTarget.story.traits.allTraits.Clear();
|
||||
if (soulSource.story.traits != null)
|
||||
{
|
||||
foreach (Trait trait in soulSource.story.traits.allTraits)
|
||||
{
|
||||
bodyTarget.story.traits.GainTrait(trait);
|
||||
}
|
||||
}
|
||||
|
||||
if (bodyTarget.Faction != soulSource.Faction)
|
||||
{
|
||||
bodyTarget.SetFaction(soulSource.Faction, soulSource);
|
||||
}
|
||||
|
||||
// --- 2. Growth & Experience ---
|
||||
// 技能合并逻辑已移出,这里只做纯粹的数据覆盖
|
||||
if (bodyTarget.skills != null) bodyTarget.skills.skills.Clear();
|
||||
if (soulSource.skills != null)
|
||||
{
|
||||
foreach (SkillRecord skill in soulSource.skills.skills)
|
||||
{
|
||||
SkillRecord newSkill = new SkillRecord(bodyTarget, skill.def)
|
||||
{
|
||||
levelInt = skill.levelInt,
|
||||
xpSinceLastLevel = skill.xpSinceLastLevel,
|
||||
passion = skill.passion
|
||||
};
|
||||
bodyTarget.skills.skills.Add(newSkill);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (bodyTarget.records != null && soulSource.records != null)
|
||||
{
|
||||
foreach (RecordDef recordDef in DefDatabase<RecordDef>.AllDefs)
|
||||
{
|
||||
// 根据您的指示,我们不再处理时间类型的记录,以避免警告
|
||||
if (recordDef.type == RecordType.Time)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
float sourceValue = soulSource.records.GetValue(recordDef);
|
||||
bodyTarget.records.AddTo(recordDef, sourceValue - bodyTarget.records.GetValue(recordDef));
|
||||
}
|
||||
}
|
||||
|
||||
// --- 3. Mind & Settings ---
|
||||
if (bodyTarget.needs?.mood?.thoughts?.memories != null)
|
||||
{
|
||||
bodyTarget.needs.mood.thoughts.memories.Memories.Clear();
|
||||
}
|
||||
if (soulSource.needs?.mood?.thoughts?.memories != null)
|
||||
{
|
||||
foreach (Thought_Memory memory in soulSource.needs.mood.thoughts.memories.Memories)
|
||||
{
|
||||
bodyTarget.needs.mood.thoughts.memories.TryGainMemory(memory);
|
||||
}
|
||||
}
|
||||
|
||||
if (soulSource.workSettings != null && bodyTarget.workSettings != null)
|
||||
{
|
||||
bodyTarget.workSettings.EnableAndInitialize();
|
||||
foreach (WorkTypeDef workDef in DefDatabase<WorkTypeDef>.AllDefs)
|
||||
{
|
||||
// 在设置优先级之前,检查目标Pawn是否禁用了该工作类型
|
||||
if (!bodyTarget.WorkTypeIsDisabled(workDef))
|
||||
{
|
||||
bodyTarget.workSettings.SetPriority(workDef, soulSource.workSettings.GetPriority(workDef));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (soulSource.timetable != null && bodyTarget.timetable != null)
|
||||
{
|
||||
bodyTarget.timetable.times = new List<TimeAssignmentDef>(soulSource.timetable.times);
|
||||
}
|
||||
|
||||
if (soulSource.playerSettings != null && bodyTarget.playerSettings != null)
|
||||
{
|
||||
bodyTarget.playerSettings.hostilityResponse = soulSource.playerSettings.hostilityResponse;
|
||||
bodyTarget.playerSettings.medCare = soulSource.playerSettings.medCare;
|
||||
bodyTarget.playerSettings.selfTend = soulSource.playerSettings.selfTend;
|
||||
}
|
||||
|
||||
if (soulSource.outfits != null && bodyTarget.outfits != null) bodyTarget.outfits.CurrentApparelPolicy = soulSource.outfits.CurrentApparelPolicy;
|
||||
if (soulSource.drugs != null && bodyTarget.drugs != null) bodyTarget.drugs.CurrentPolicy = soulSource.drugs.CurrentPolicy;
|
||||
if (soulSource.foodRestriction != null && bodyTarget.foodRestriction != null) bodyTarget.foodRestriction.CurrentFoodPolicy = soulSource.foodRestriction.CurrentFoodPolicy;
|
||||
// Ownership is claimed on the Building, not the pawn. We can't directly transfer this.
|
||||
// if (soulSource.ownership != null && bodyTarget.ownership != null)
|
||||
// {
|
||||
// // This requires finding the bed and calling bed.SetOwner(pawn)
|
||||
// }
|
||||
|
||||
|
||||
// --- 4. DLC & Social ---
|
||||
if (ModsConfig.IdeologyActive && soulSource.ideo != null && bodyTarget.ideo != null)
|
||||
{
|
||||
bodyTarget.ideo.SetIdeo(soulSource.ideo.Ideo);
|
||||
// Can't set certainty directly, but setting the ideo resets it.
|
||||
}
|
||||
|
||||
if (ModsConfig.RoyaltyActive && soulSource.royalty != null && bodyTarget.royalty != null)
|
||||
{
|
||||
// Clear existing royalty status from the target body
|
||||
bodyTarget.royalty.AllTitlesForReading.Clear();
|
||||
|
||||
// Transfer titles
|
||||
foreach(var title in soulSource.royalty.AllTitlesForReading)
|
||||
{
|
||||
bodyTarget.royalty.SetTitle(title.faction, title.def, true, false, false);
|
||||
}
|
||||
// Transfer permits
|
||||
if(soulSource.royalty.AllFactionPermits != null)
|
||||
{
|
||||
foreach (var permit in soulSource.royalty.AllFactionPermits)
|
||||
{
|
||||
bodyTarget.royalty.AddPermit(permit.Permit, permit.Faction);
|
||||
}
|
||||
}
|
||||
// Abilities are handled by the titles and should update automatically.
|
||||
bodyTarget.royalty.UpdateAvailableAbilities();
|
||||
}
|
||||
|
||||
if (soulSource.relations != null && bodyTarget.relations != null)
|
||||
{
|
||||
bodyTarget.relations.ClearAllRelations();
|
||||
foreach (DirectPawnRelation relation in soulSource.relations.DirectRelations.Where(r => !r.def.familyByBloodRelation).ToList())
|
||||
{
|
||||
bodyTarget.relations.AddDirectRelation(relation.def, relation.otherPawn);
|
||||
}
|
||||
}
|
||||
|
||||
// --- 5. Finalization ---
|
||||
bodyTarget.Drawer.renderer.SetAllGraphicsDirty();
|
||||
|
||||
Log.Message("Soul transfer complete.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
using RimWorld;
|
||||
using RimWorld.Utility;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class Verb_JumpAndCastOnLanding : Verb_CastAbility
|
||||
{
|
||||
// 1. A private field to store our specific target, separate from what the base class does.
|
||||
private LocalTargetInfo capturedTarget;
|
||||
|
||||
// 2. Capture the reliable target information early.
|
||||
public override bool TryStartCastOn(LocalTargetInfo castTarg, LocalTargetInfo destTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false)
|
||||
{
|
||||
Log.Message($"[Verb_JumpAndCastOnLanding] TryStartCastOn: Capturing our dedicated target: {castTarg.Thing?.LabelShort ?? "null"}.");
|
||||
this.capturedTarget = castTarg;
|
||||
return base.TryStartCastOn(castTarg, destTarg, surpriseAttack, canHitNonTargetPawns, preventFriendlyFire, nonInterruptingSelfCast);
|
||||
}
|
||||
|
||||
// --- Copied and adapted methods from Verb_CastAbilityJump ---
|
||||
public virtual ThingDef JumpFlyerDef => ThingDefOf.PawnFlyer;
|
||||
public override float EffectiveRange => this.verbProps.range;
|
||||
|
||||
public override void DrawHighlight(LocalTargetInfo target)
|
||||
{
|
||||
if (target.IsValid && JumpUtility.ValidJumpTarget(CasterPawn, caster.Map, target.Cell))
|
||||
{
|
||||
GenDraw.DrawTargetHighlightWithLayer(target.CenterVector3, AltitudeLayer.MetaOverlays);
|
||||
}
|
||||
GenDraw.DrawRadiusRing(caster.Position, EffectiveRange, Color.white, (IntVec3 c) => GenSight.LineOfSight(caster.Position, c, caster.Map) && JumpUtility.ValidJumpTarget(caster, caster.Map, c));
|
||||
}
|
||||
|
||||
public override bool ValidateTarget(LocalTargetInfo target, bool showMessages = true)
|
||||
{
|
||||
if (!base.ValidateTarget(target, showMessages)) return false;
|
||||
if (!JumpUtility.ValidJumpTarget(CasterPawn, caster.Map, target.Cell)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// --- Our custom implementation of TryCastShot ---
|
||||
protected override bool TryCastShot()
|
||||
{
|
||||
// The physical destination for the jump. This might be adjusted by the game. We let it be.
|
||||
LocalTargetInfo physicalTarget = this.currentTarget;
|
||||
|
||||
// Our dedicated logical target, captured earlier and guaranteed to be the Pawn.
|
||||
LocalTargetInfo logicalTargetForUs = this.capturedTarget;
|
||||
|
||||
if (logicalTargetForUs == null || !logicalTargetForUs.HasThing)
|
||||
{
|
||||
Log.Error($"[Verb_JumpAndCastOnLanding] TryCastShot: Our captured target is invalid!");
|
||||
return false;
|
||||
}
|
||||
|
||||
Log.Message($"[Verb_JumpAndCastOnLanding] TryCastShot: Using our captured target '{logicalTargetForUs.Thing.LabelShort}' for logic, and letting game use '{physicalTarget.Cell}' for jump physics.");
|
||||
|
||||
bool jumpStarted = JumpUtility.DoJump(
|
||||
CasterPawn,
|
||||
physicalTarget, // For the jump itself
|
||||
this.ReloadableCompSource,
|
||||
verbProps,
|
||||
this.ability,
|
||||
logicalTargetForUs, // For our logic on landing
|
||||
this.JumpFlyerDef
|
||||
);
|
||||
|
||||
return jumpStarted;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class CompProperties_AbilityResearchPrereq : CompProperties_AbilityEffect
|
||||
{
|
||||
public ResearchProjectDef requiredResearch;
|
||||
public string failMessage = "Research not completed.";
|
||||
|
||||
public CompProperties_AbilityResearchPrereq()
|
||||
{
|
||||
compClass = typeof(CompAbilityEffect_ResearchPrereq);
|
||||
}
|
||||
}
|
||||
|
||||
public class CompAbilityEffect_ResearchPrereq : CompAbilityEffect
|
||||
{
|
||||
public new CompProperties_AbilityResearchPrereq Props => (CompProperties_AbilityResearchPrereq)props;
|
||||
|
||||
public override bool GizmoDisabled(out string reason)
|
||||
{
|
||||
if (Props.requiredResearch != null && !Props.requiredResearch.IsFinished)
|
||||
{
|
||||
reason = Props.failMessage;
|
||||
return true;
|
||||
}
|
||||
|
||||
reason = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,13 +7,13 @@ namespace ArachnaeSwarm
|
||||
public class CompProperties_AdvancedTraining : CompProperties
|
||||
{
|
||||
// 1. 用于设置固定技能等级
|
||||
public List<SkillLevelEntry> skillLevels = new List<SkillLevelEntry>();
|
||||
|
||||
// 2. 用于指定生成时立即完成的训练
|
||||
public List<TrainableDef> instantTrainables = new List<TrainableDef>();
|
||||
public List<SkillLevelEntry> skillLevels = new List<SkillLevelEntry>();
|
||||
|
||||
// 2. 用于配置训练项目
|
||||
public List<TrainableEntry> trainables = new List<TrainableEntry>();
|
||||
|
||||
// 3. 全局开关:是否阻止所有技能衰减
|
||||
public bool disableAllSkillDecay = false;
|
||||
public bool disableAllSkillDecay = false;
|
||||
|
||||
public CompProperties_AdvancedTraining()
|
||||
{
|
||||
@@ -25,10 +25,15 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
public SkillDef skill;
|
||||
public int level = 0;
|
||||
// 这里的 disableDecay 字段现在是冗余的,因为我们有全局的 disableAllSkillDecay
|
||||
// 但为了兼容性或未来可能的需求,可以保留。
|
||||
// 在当前方案中,它的值将被忽略。
|
||||
public bool disableDecay = true;
|
||||
public bool disableDecay = true;
|
||||
}
|
||||
|
||||
// 新增:用于定义训练项目的条目
|
||||
public class TrainableEntry
|
||||
{
|
||||
public TrainableDef trainable;
|
||||
public bool trainInstantly = false; // 是否立即完成训练
|
||||
public bool setWanted = false; // 是否默认启用
|
||||
}
|
||||
|
||||
public class CompAdvancedTraining : ThingComp
|
||||
@@ -53,22 +58,28 @@ namespace ArachnaeSwarm
|
||||
if (skillRecord != null)
|
||||
{
|
||||
skillRecord.Level = entry.level;
|
||||
// 注意: 激情 (passion) 影响学习速度,不直接阻止衰减。
|
||||
// 实际的衰减阻止逻辑在 TrainingSystem_Patcher.cs 中处理。
|
||||
// 默认情况下,我们不改变 passion,除非有特殊需求。
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- 2. 执行瞬间训练 (只在初次生成时) ---
|
||||
if (!respawningAfterLoad && pawn.training != null && !Props.instantTrainables.NullOrEmpty())
|
||||
// --- 2. 处理训练项目 (只在初次生成时) ---
|
||||
if (!respawningAfterLoad && pawn.training != null && !Props.trainables.NullOrEmpty())
|
||||
{
|
||||
foreach (var trainable in Props.instantTrainables)
|
||||
foreach (var entry in Props.trainables)
|
||||
{
|
||||
if (trainable != null && !pawn.training.HasLearned(trainable))
|
||||
if (entry.trainable == null) continue;
|
||||
|
||||
// 2a. 立即完成训练
|
||||
if (entry.trainInstantly && !pawn.training.HasLearned(entry.trainable))
|
||||
{
|
||||
pawn.training.Train(trainable, null, complete: true);
|
||||
pawn.training.Train(entry.trainable, null, complete: true);
|
||||
}
|
||||
|
||||
// 2b. 设置为默认启用
|
||||
if (entry.setWanted)
|
||||
{
|
||||
pawn.training.SetWantedRecursive(entry.trainable, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
[DefOf]
|
||||
public static class ARA_TrainableDefOf_Cleaning
|
||||
{
|
||||
public static TrainableDef ARA_Cleaning;
|
||||
|
||||
static ARA_TrainableDefOf_Cleaning()
|
||||
{
|
||||
DefOfHelper.EnsureInitializedInCtor(typeof(ARA_TrainableDefOf_Cleaning));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
using RimWorld;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class JobGiver_Cleaner : ThinkNode_JobGiver
|
||||
{
|
||||
private WorkGiver_ArachnaeClean _workGiver;
|
||||
|
||||
public override void ResolveReferences()
|
||||
{
|
||||
base.ResolveReferences();
|
||||
// We instantiate our custom WorkGiver here.
|
||||
// It doesn't need a Def because it's not a standard game WorkGiver.
|
||||
_workGiver = new WorkGiver_ArachnaeClean();
|
||||
}
|
||||
|
||||
protected override Job TryGiveJob(Pawn pawn)
|
||||
{
|
||||
if (_workGiver == null)
|
||||
{
|
||||
Log.ErrorOnce("JobGiver_Cleaner's WorkGiver is null. ResolveReferences was not called.", 91354);
|
||||
return null;
|
||||
}
|
||||
|
||||
// The WorkGiver will handle both filth and snow.
|
||||
// We just need to find the closest potential job.
|
||||
// The logic is simplified here; the real work is in the WorkGiver.
|
||||
|
||||
// Find the closest filth to clean
|
||||
Thing closestFilth = _workGiver.FindClosestFilth(pawn);
|
||||
if (closestFilth != null)
|
||||
{
|
||||
Job filthJob = _workGiver.JobOnThing(pawn, closestFilth);
|
||||
if (filthJob != null) return filthJob;
|
||||
}
|
||||
|
||||
// If no filth, check if there's any snow to clear at all before searching
|
||||
if (pawn.Map.areaManager.SnowOrSandClear.TrueCount > 0)
|
||||
{
|
||||
IntVec3 closestSnowCell = _workGiver.FindClosestSnow(pawn);
|
||||
if (closestSnowCell.IsValid)
|
||||
{
|
||||
Job snowJob = _workGiver.JobOnCell(pawn, closestSnowCell);
|
||||
if (snowJob != null) return snowJob;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
using RimWorld;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class ThinkNode_ConditionalAnimalShouldDoCleaningWork : ThinkNode_Conditional
|
||||
{
|
||||
protected override bool Satisfied(Pawn pawn)
|
||||
{
|
||||
if (pawn.training == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if the animal has learned and is set to perform "Cleaning"
|
||||
return pawn.training.HasLearned(ARA_TrainableDefOf_Cleaning.ARA_Cleaning) &&
|
||||
pawn.training.GetWanted(ARA_TrainableDefOf_Cleaning.ARA_Cleaning);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
using RimWorld;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class WorkGiver_ArachnaeClean : WorkGiver_Scanner
|
||||
{
|
||||
private const int MinTicksSinceThickened = 600;
|
||||
|
||||
public override PathEndMode PathEndMode => PathEndMode.Touch;
|
||||
|
||||
// --- Filth Cleaning Logic ---
|
||||
|
||||
public Thing FindClosestFilth(Pawn pawn)
|
||||
{
|
||||
return GenClosest.ClosestThing_Global(
|
||||
pawn.Position,
|
||||
pawn.Map.listerFilthInHomeArea.FilthInHomeArea,
|
||||
maxDistance: 9999f,
|
||||
validator: t => HasJobOnThing(pawn, t)
|
||||
);
|
||||
}
|
||||
|
||||
public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
|
||||
{
|
||||
if (!(t is Filth filth)) return false;
|
||||
if (!filth.Map.areaManager.Home[filth.Position]) return false;
|
||||
if (filth.Fogged() || !pawn.CanReserve(t, 1, -1, null, forced)) return false;
|
||||
if (filth.TicksSinceThickened < MinTicksSinceThickened) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
|
||||
{
|
||||
Job job = JobMaker.MakeJob(JobDefOf.Clean);
|
||||
job.AddQueuedTarget(TargetIndex.A, t);
|
||||
|
||||
// Simplified multi-clean logic from original WorkGiver_CleanFilth
|
||||
int num = 15;
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
IntVec3 c = t.Position + GenRadial.RadialPattern[i];
|
||||
if (c.InBounds(pawn.Map))
|
||||
{
|
||||
List<Thing> thingList = c.GetThingList(pawn.Map);
|
||||
foreach(var thing in thingList)
|
||||
{
|
||||
if (thing != t && HasJobOnThing(pawn, thing, forced))
|
||||
{
|
||||
job.AddQueuedTarget(TargetIndex.A, thing);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (job.GetTargetQueue(TargetIndex.A).Count >= num) break;
|
||||
}
|
||||
return job;
|
||||
}
|
||||
|
||||
// --- Snow Clearing Logic ---
|
||||
|
||||
public IntVec3 FindClosestSnow(Pawn pawn)
|
||||
{
|
||||
IntVec3 bestCell = IntVec3.Invalid;
|
||||
float bestDistSq = float.MaxValue;
|
||||
|
||||
// Efficiently iterate through the designated snow clear area
|
||||
foreach (IntVec3 cell in pawn.Map.areaManager.SnowOrSandClear.ActiveCells)
|
||||
{
|
||||
// Check for a valid job on the cell first
|
||||
if (HasJobOnCell(pawn, cell))
|
||||
{
|
||||
float distSq = pawn.Position.DistanceToSquared(cell);
|
||||
if (distSq < bestDistSq && pawn.CanReach(cell, PathEndMode.Touch, Danger.Deadly))
|
||||
{
|
||||
bestDistSq = distSq;
|
||||
bestCell = cell;
|
||||
}
|
||||
}
|
||||
}
|
||||
return bestCell;
|
||||
}
|
||||
|
||||
public override bool HasJobOnCell(Pawn pawn, IntVec3 c, bool forced = false)
|
||||
{
|
||||
// The check for SnowOrSandClear area is implicitly handled by the caller (FindClosestSnow)
|
||||
// We only need to check the snow depth and reservation status.
|
||||
if (pawn.Map.snowGrid.GetDepth(c) < 0.2f) return false;
|
||||
if (!pawn.CanReserve(c, 1, -1, null, forced)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public override Job JobOnCell(Pawn pawn, IntVec3 c, bool forced = false)
|
||||
{
|
||||
return JobMaker.MakeJob(JobDefOf.ClearSnow, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class CompAbilityEffect_TrackingCharge : CompAbilityEffect
|
||||
{
|
||||
public new CompProperties_TrackingCharge Props => (CompProperties_TrackingCharge)this.props;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class CompProperties_TrackingCharge : CompProperties_AbilityEffect
|
||||
{
|
||||
public float homingSpeed = 1.0f;
|
||||
public float initialDamage = 10f;
|
||||
public float damagePerTile = 2f;
|
||||
public float inertiaDistance = 3f;
|
||||
public DamageDef collisionDamageDef;
|
||||
public ThingDef flyerDef;
|
||||
public float collisionRadius = 1.5f;
|
||||
public SoundDef impactSound;
|
||||
public bool damageHostileOnly = true;
|
||||
|
||||
public CompProperties_TrackingCharge()
|
||||
{
|
||||
this.compClass = typeof(CompAbilityEffect_TrackingCharge);
|
||||
}
|
||||
}
|
||||
}
|
||||
157
Source/ArachnaeSwarm/Abilities/PawnFlyer_TrackingCharge.cs
Normal file
@@ -0,0 +1,157 @@
|
||||
using RimWorld;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
using System.Reflection;
|
||||
using System.Linq;
|
||||
using Verse.AI;
|
||||
using System.Collections.Generic;
|
||||
using Verse.Sound;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class PawnFlyer_TrackingCharge : PawnFlyer
|
||||
{
|
||||
// --- Public fields to be set by the Verb ---
|
||||
public float homingSpeed;
|
||||
public float initialDamage;
|
||||
public float damagePerTile;
|
||||
public float inertiaDistance;
|
||||
public DamageDef collisionDamageDef;
|
||||
public LocalTargetInfo primaryTarget;
|
||||
public float collisionRadius;
|
||||
public SoundDef impactSound;
|
||||
public bool damageHostileOnly;
|
||||
public int maxFlightTicks;
|
||||
|
||||
// --- Internal state ---
|
||||
private bool homing = true;
|
||||
private bool hasHitPrimaryTarget = false;
|
||||
private Vector3 exactPosition;
|
||||
|
||||
// --- Reflection Fields ---
|
||||
private static FieldInfo TicksFlyingInfo;
|
||||
private static FieldInfo TicksFlightTimeInfo;
|
||||
private static FieldInfo StartVecInfo;
|
||||
private static FieldInfo DestCellInfo;
|
||||
private static FieldInfo PawnWasDraftedInfo;
|
||||
private static FieldInfo PawnCanFireAtWillInfo;
|
||||
private static FieldInfo JobQueueInfo;
|
||||
private static FieldInfo InnerContainerInfo;
|
||||
|
||||
static PawnFlyer_TrackingCharge()
|
||||
{
|
||||
TicksFlyingInfo = typeof(PawnFlyer).GetField("ticksFlying", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
TicksFlightTimeInfo = typeof(PawnFlyer).GetField("ticksFlightTime", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
StartVecInfo = typeof(PawnFlyer).GetField("startVec", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
DestCellInfo = typeof(PawnFlyer).GetField("destCell", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
PawnWasDraftedInfo = typeof(PawnFlyer).GetField("pawnWasDrafted", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
PawnCanFireAtWillInfo = typeof(PawnFlyer).GetField("pawnCanFireAtWill", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
JobQueueInfo = typeof(PawnFlyer).GetField("jobQueue", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
InnerContainerInfo = typeof(PawnFlyer).GetField("innerContainer", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
}
|
||||
|
||||
// Custom initializer called by the Verb
|
||||
public void StartFlight(Pawn pawn, IntVec3 finalDest)
|
||||
{
|
||||
var innerContainer = (ThingOwner)InnerContainerInfo.GetValue(this);
|
||||
|
||||
StartVecInfo.SetValue(this, pawn.TrueCenter());
|
||||
DestCellInfo.SetValue(this, finalDest);
|
||||
PawnWasDraftedInfo.SetValue(this, pawn.Drafted);
|
||||
if (pawn.drafter != null) PawnCanFireAtWillInfo.SetValue(this, pawn.drafter.FireAtWill);
|
||||
if (pawn.CurJob != null) pawn.jobs.SuspendCurrentJob(JobCondition.InterruptForced);
|
||||
JobQueueInfo.SetValue(this, pawn.jobs.CaptureAndClearJobQueue());
|
||||
|
||||
if (pawn.Spawned) pawn.DeSpawn(DestroyMode.WillReplace);
|
||||
if (!innerContainer.TryAdd(pawn))
|
||||
{
|
||||
Log.Error("Could not add pawn to tracking flyer.");
|
||||
pawn.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
public override void SpawnSetup(Map map, bool respawningAfterLoad)
|
||||
{
|
||||
base.SpawnSetup(map, respawningAfterLoad);
|
||||
if (!respawningAfterLoad)
|
||||
{
|
||||
this.exactPosition = base.DrawPos;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Tick()
|
||||
{
|
||||
// --- THE CORRECT APPROACH ---
|
||||
// Let the base class handle all flight mechanics (position, timing, etc.)
|
||||
// We only intervene to do two things:
|
||||
// 1. Continuously update the destination to "steer" the flyer.
|
||||
// 2. Perform our own collision checks (for primary target and AOE).
|
||||
|
||||
if (homing && primaryTarget.HasThing && primaryTarget.Thing.Spawned)
|
||||
{
|
||||
// Steer the flyer by constantly updating its destination cell.
|
||||
DestCellInfo.SetValue(this, primaryTarget.Thing.Position);
|
||||
}
|
||||
|
||||
// --- Primary Target Collision Check ---
|
||||
if (!hasHitPrimaryTarget && primaryTarget.HasThing && primaryTarget.Thing.Spawned)
|
||||
{
|
||||
if ((this.DrawPos - primaryTarget.Thing.DrawPos).sqrMagnitude < this.collisionRadius * this.collisionRadius)
|
||||
{
|
||||
// --- Impact! ---
|
||||
if (this.impactSound != null)
|
||||
{
|
||||
SoundStarter.PlayOneShot(this.impactSound, new TargetInfo(this.Position, this.Map));
|
||||
}
|
||||
|
||||
Vector3 startPosition = (Vector3)StartVecInfo.GetValue(this);
|
||||
float distance = (this.DrawPos - startPosition).magnitude;
|
||||
float calculatedDamage = this.initialDamage + (distance * this.damagePerTile);
|
||||
var dinfo = new DamageInfo(this.collisionDamageDef, calculatedDamage, 1f, -1, this.FlyingPawn);
|
||||
|
||||
primaryTarget.Thing.TakeDamage(dinfo);
|
||||
hasHitPrimaryTarget = true;
|
||||
|
||||
homing = false;
|
||||
|
||||
Vector3 direction = (this.DrawPos - startPosition).normalized;
|
||||
IntVec3 inertiaEndPos = (this.DrawPos + (direction * this.inertiaDistance)).ToIntVec3();
|
||||
DestCellInfo.SetValue(this, inertiaEndPos);
|
||||
}
|
||||
}
|
||||
|
||||
// --- AOE Damage Logic ---
|
||||
float distanceTravelled = ((Vector3)StartVecInfo.GetValue(this) - this.DrawPos).magnitude;
|
||||
float currentAOEDamage = this.initialDamage + (distanceTravelled * this.damagePerTile);
|
||||
|
||||
foreach (var thing in GenRadial.RadialDistinctThingsAround(this.Position, this.Map, this.collisionRadius, false))
|
||||
{
|
||||
if (thing != this.FlyingPawn && thing != this && thing != primaryTarget.Thing)
|
||||
{
|
||||
if (thing is Pawn pawn && !pawn.Downed)
|
||||
{
|
||||
if (!this.damageHostileOnly || pawn.HostileTo(this.FlyingPawn))
|
||||
{
|
||||
var aoeDinfo = new DamageInfo(this.collisionDamageDef, currentAOEDamage, 1f, -1, this.FlyingPawn);
|
||||
pawn.TakeDamage(aoeDinfo);
|
||||
}
|
||||
}
|
||||
else if (thing.def.destroyable && thing.def.building != null)
|
||||
{
|
||||
var aoeDinfo = new DamageInfo(this.collisionDamageDef, currentAOEDamage, 1f, -1, this.FlyingPawn);
|
||||
thing.TakeDamage(aoeDinfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Let the base class do its thing. This is crucial.
|
||||
base.Tick();
|
||||
}
|
||||
|
||||
protected override void RespawnPawn()
|
||||
{
|
||||
// This is the correct place to call the base method.
|
||||
base.RespawnPawn();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using System.Linq;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class Verb_CastAbilityTrackingCharge : Verb_CastAbility
|
||||
{
|
||||
protected override bool TryCastShot()
|
||||
{
|
||||
var props = this.ability.def.comps?.OfType<CompProperties_TrackingCharge>().FirstOrDefault();
|
||||
if (props == null)
|
||||
{
|
||||
Log.Error("Verb_CastAbilityTrackingCharge requires CompProperties_TrackingCharge on the ability def.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (props.flyerDef == null)
|
||||
{
|
||||
Log.Error("CompProperties_TrackingCharge requires a flyerDef.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// --- Best Practice: Cache Map and Position FIRST ---
|
||||
// Per MCP analysis, Caster.Map is the most reliable source.
|
||||
// Cache this before ANY other logic.
|
||||
Map map = this.Caster.Map;
|
||||
if (map == null)
|
||||
{
|
||||
Log.Error($"Verb_CastAbilityTrackingCharge: Caster {this.Caster.LabelCap} has a null map. Cannot cast.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.CasterPawn == null || !this.CasterPawn.Spawned)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// --- This is now a fully custom Thing, so we spawn it directly ---
|
||||
var trackingCharge = (PawnFlyer_TrackingCharge)ThingMaker.MakeThing(props.flyerDef);
|
||||
|
||||
// Inject properties
|
||||
trackingCharge.homingSpeed = props.homingSpeed;
|
||||
trackingCharge.initialDamage = props.initialDamage;
|
||||
trackingCharge.damagePerTile = props.damagePerTile;
|
||||
trackingCharge.inertiaDistance = props.inertiaDistance;
|
||||
trackingCharge.collisionDamageDef = props.collisionDamageDef;
|
||||
trackingCharge.primaryTarget = this.currentTarget;
|
||||
trackingCharge.collisionRadius = props.collisionRadius;
|
||||
trackingCharge.impactSound = props.impactSound;
|
||||
trackingCharge.damageHostileOnly = props.damageHostileOnly;
|
||||
|
||||
// Setup and spawn
|
||||
trackingCharge.StartFlight(this.CasterPawn, this.currentTarget.Cell);
|
||||
GenSpawn.Spawn(trackingCharge, this.CasterPawn.Position, map); // Use the cached map
|
||||
|
||||
// --- FIX for Comp Effects ---
|
||||
// --- The Standard Pattern to trigger Comps like EffecterOnCaster ---
|
||||
// After our custom verb logic (spawning the flyer) is done,
|
||||
// we call the ability's Activate method with invalid targets.
|
||||
// This triggers the standard Comp cycle without re-casting the verb.
|
||||
this.ability.Activate(LocalTargetInfo.Invalid, LocalTargetInfo.Invalid);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -73,27 +73,31 @@
|
||||
<Compile Include="ARA_SpawnPawnFromList\JobDriver_Incubate.cs" />
|
||||
<Compile Include="ARA_QueenAbility\CompProperties_AbilitySprayLiquidMulti.cs" />
|
||||
<Compile Include="ARA_QueenAbility\CompAbilityEffect_SprayLiquidMulti.cs" />
|
||||
<Compile Include="Hediffs\Hediff_CurseFlame.cs" />
|
||||
<Compile Include="DRM_HediffCurseFlame\Hediff_CurseFlame.cs" />
|
||||
<Compile Include="ARA_QueenAbility\CompAbilityEffect_NeedCost.cs" />
|
||||
<Compile Include="ARA_QueenAbility\CompAbilityEffect_BodyPartCheck.cs" />
|
||||
<Compile Include="ARA_QueenAbility\CompAbilityEffect_ResearchPrereq.cs" />
|
||||
<Compile Include="ARA_HiveMind\Hediff_HiveMindMaster.cs" />
|
||||
<Compile Include="ARA_HiveMind\Hediff_HiveMindDrone.cs" />
|
||||
<Compile Include="ARA_HiveMind\HediffCompProperties_HiveMindDrone.cs" />
|
||||
<Compile Include="ARA_HiveMind\HediffComp_HiveMindDrone.cs" />
|
||||
<Compile Include="ARA_HiveMind\HediffComp_HiveMindMaster.cs" />
|
||||
<Compile Include="ARA_HiveMind\CompAbilityEffect_BindDrone.cs" />
|
||||
<Compile Include="ARA_HiveMind\CompProperties_AbilityBindDrone.cs" />
|
||||
<Compile Include="JobGiver_MaintainBuildings.cs" />
|
||||
<Compile Include="ARA_SpawnPawnFromList\JobGiver_MaintainBuildings.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Work\CompMilkableArachnae.cs" />
|
||||
<Compile Include="Work\CompProperties_MilkableArachnae.cs" />
|
||||
<Compile Include="ARA_CompHediffGiver\CompHediffGiver.cs" />
|
||||
<Compile Include="ARA_CompHediffGiver\CompProperties_HediffGiver.cs" />
|
||||
<Compile Include="ARA_CompMilkableArachnae\CompMilkableArachnae.cs" />
|
||||
<Compile Include="ARA_CompMilkableArachnae\CompProperties_MilkableArachnae.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="MainHarmony.cs" />
|
||||
<Compile Include="ARA_TrainingWork\ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs" />
|
||||
<Compile Include="ARA_TrainingWork\JobPlant\ThinkNode_ConditionalAnimalShouldDoGrowingWork.cs" />
|
||||
<Compile Include="ARA_TrainingWork\CompAdvancedTraining.cs" />
|
||||
<Compile Include="ARA_TrainingWork\JobGiver_Grower.cs" />
|
||||
<Compile Include="ARA_TrainingWork\WorkGiver_ArachnaeSow.cs" />
|
||||
<Compile Include="ARA_TrainingWork\JobPlant\JobGiver_Grower.cs" />
|
||||
<Compile Include="ARA_TrainingWork\JobPlant\WorkGiver_ArachnaeSow.cs" />
|
||||
<Compile Include="ARA_TrainingWork\TrainingSystem_Patcher.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -106,11 +110,34 @@
|
||||
<Compile Include="WULA_AutoMechCarrier\PawnProductionEntry.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="CompInteractiveProducer.cs" />
|
||||
<Compile Include="JobDriver_StartProduction.cs" />
|
||||
<Compile Include="CompRefuelableNutrition.cs" />
|
||||
<Compile Include="DataContracts.cs" />
|
||||
<Compile Include="CompTemperatureRuinableDamage.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\CompInteractiveProducer.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\JobDriver_StartProduction.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\CompRefuelableNutrition.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\DataContracts.cs" />
|
||||
<Compile Include="ARA_CompInteractiveProducer\CompTemperatureRuinableDamage.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ARA_HuggingFace\Hediff_Possession.cs" />
|
||||
<Compile Include="ARA_HuggingFace\PawnDataUtility.cs" />
|
||||
<Compile Include="ARA_HuggingFace\CompAbilityEffect_Possess.cs" />
|
||||
<Compile Include="ARA_HuggingFace\CompProperties_AbilityPossess.cs" />
|
||||
<Compile Include="ARA_HuggingFace\Verb_JumpAndCastOnLanding.cs" />
|
||||
<Compile Include="ARA_HuggingFace\OriginalPawnData.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ARA_TrainingWork\JobClean\ARA_TrainableDefOf_Cleaning.cs" />
|
||||
<Compile Include="ARA_TrainingWork\JobClean\JobGiver_Cleaner.cs" />
|
||||
<Compile Include="ARA_TrainingWork\JobClean\ThinkNode_ConditionalAnimalShouldDoCleaningWork.cs" />
|
||||
<Compile Include="ARA_TrainingWork\JobClean\WorkGiver_ArachnaeClean.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="HediffComp_Temperature.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Abilities\CompAbilityEffect_TrackingCharge.cs" />
|
||||
<Compile Include="Abilities\CompProperties_TrackingCharge.cs" />
|
||||
<Compile Include="Abilities\PawnFlyer_TrackingCharge.cs" />
|
||||
<Compile Include="Abilities\Verb_CastAbilityTrackingCharge.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- 自定义清理任务,删除obj文件夹中的临时文件 -->
|
||||
|
||||