1
This commit is contained in:
Binary file not shown.
@@ -587,6 +587,535 @@
|
||||
</parts>
|
||||
</corePart>
|
||||
</BodyDef>
|
||||
<BodyDef>
|
||||
<defName>ArachnaeQueen_Neurotyrant_Body</defName>
|
||||
<label>阿拉克涅灵吸种</label>
|
||||
<corePart>
|
||||
<def>Torso</def>
|
||||
<height>Middle</height>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<!-- 背部组织,仅包含骨骼和甲片 -->
|
||||
<li>
|
||||
<def>ARA_Dorsum</def>
|
||||
<coverage>0.14</coverage>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<!-- 甲片,防御作用 -->
|
||||
<li>
|
||||
<def>ARA_Chitin_Shell</def>
|
||||
<customLabel>背部甲片</customLabel>
|
||||
<coverage>0.02</coverage>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<!-- 背部外骨骼,承担托举四肢和代替脊椎 -->
|
||||
<li>
|
||||
<def>ARA_Exoskeleton_Dorsum</def>
|
||||
<coverage>0.016</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<!-- 胸部组织,包含骨骼和各类重点维生器官 -->
|
||||
<li>
|
||||
<def>ARA_Sternum</def>
|
||||
<coverage>0.15</coverage>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<!-- 胸部外骨骼,代替肋骨,因为没有甲片所以是外露的 -->
|
||||
<li>
|
||||
<def>ARA_Exoskeleton_Sternum</def>
|
||||
<coverage>0.015</coverage>
|
||||
<depth>Outside</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>Stomach</def>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<!-- 肺,4个 -->
|
||||
<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>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>
|
||||
<!-- 肾脏,2个 -->
|
||||
<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>
|
||||
<!-- 肝脏,2个 -->
|
||||
<li>
|
||||
<def>Liver</def>
|
||||
<coverage>0.025</coverage>
|
||||
<customLabel>肝脏(其一)</customLabel>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Liver</def>
|
||||
<customLabel>肝脏(其二)</customLabel>
|
||||
<coverage>0.025</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<!-- 尾部组织群 -->
|
||||
<li>
|
||||
<def>ARA_Tail</def>
|
||||
<height>Bottom</height>
|
||||
<depth>Inside</depth>
|
||||
<coverage>0.15</coverage>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
<li>Legs</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<!-- 甲片,防御作用 -->
|
||||
<li>
|
||||
<def>ARA_Chitin_Shell</def>
|
||||
<customLabel>尾部甲片</customLabel>
|
||||
<coverage>0.01</coverage>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>Torso</li>
|
||||
</groups>
|
||||
</li>
|
||||
<!-- 性腺 -->
|
||||
<li>
|
||||
<def>ARA_Gonad</def>
|
||||
<coverage>0.005</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Genitalias</li>
|
||||
</groups>
|
||||
</li>
|
||||
<!-- 卵巢 -->
|
||||
<li>
|
||||
<def>ARA_Ovary</def>
|
||||
<coverage>0.01</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Genitalias</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</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>ARA_Chitin_Shell</def>
|
||||
<customLabel>头部甲片</customLabel>
|
||||
<coverage>0.02</coverage>
|
||||
<depth>Outside</depth>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
<!-- 神经束群 -->
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第一神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第二神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第三神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第四神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第四神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第五神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第六四神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第七神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>ARA_Psy_Nerve_Tract</def>
|
||||
<customLabel>第八神经束</customLabel>
|
||||
<coverage>0.05</coverage>
|
||||
<depth>Inside</depth>
|
||||
<groups>
|
||||
<li>ARA_Psy_Nerve_Tracts</li>
|
||||
</groups>
|
||||
</li>
|
||||
|
||||
<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>left ear</customLabel>
|
||||
<coverage>0.07</coverage>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>UpperHead</li>
|
||||
<li>FullHead</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Ear</def>
|
||||
<customLabel>right ear</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>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Shoulders</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Clavicle</def>
|
||||
<customLabel>左副肢外骨骼</customLabel>
|
||||
<coverage>0.09</coverage>
|
||||
<height>Top</height>
|
||||
<depth>Outside</depth>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Shoulders</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Arm</def>
|
||||
<customLabel>左副肢</customLabel>
|
||||
<coverage>0.77</coverage>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Arms</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Hand</def>
|
||||
<customLabel>左鳌钳</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Hands</li>
|
||||
<li>HeadClaw</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Finger</def>
|
||||
<customLabel>右鳌钳口</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<groups>
|
||||
<li>Hands</li>
|
||||
<li>LeftHand</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<li>
|
||||
<def>Shoulder</def>
|
||||
<customLabel>右副肢关节</customLabel>
|
||||
<coverage>0.12</coverage>
|
||||
<woundAnchorTag>LeftShoulder</woundAnchorTag>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Shoulders</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Clavicle</def>
|
||||
<customLabel>右副肢外骨骼</customLabel>
|
||||
<coverage>0.09</coverage>
|
||||
<height>Top</height>
|
||||
<depth>Outside</depth>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Shoulders</li>
|
||||
</groups>
|
||||
</li>
|
||||
<li>
|
||||
<def>Arm</def>
|
||||
<customLabel>右副肢</customLabel>
|
||||
<coverage>0.77</coverage>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Arms</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Hand</def>
|
||||
<customLabel>右鳌钳</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<height>Bottom</height>
|
||||
<flipGraphic>true</flipGraphic>
|
||||
<groups>
|
||||
<li>Hands</li>
|
||||
<li>HeadClaw</li>
|
||||
</groups>
|
||||
<parts>
|
||||
<li>
|
||||
<def>Finger</def>
|
||||
<customLabel>右鳌钳口</customLabel>
|
||||
<coverage>0.14</coverage>
|
||||
<groups>
|
||||
<li>Hands</li>
|
||||
<li>RightHand</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
</parts>
|
||||
</li>
|
||||
<!-- 腰尾链接 -->
|
||||
<li>
|
||||
<def>Waist</def>
|
||||
<customLabel>体节分界</customLabel>
|
||||
<coverage>0</coverage>
|
||||
<height>Bottom</height>
|
||||
<groups>
|
||||
<li>Waist</li>
|
||||
</groups>
|
||||
</li>
|
||||
</parts>
|
||||
</corePart>
|
||||
</BodyDef>
|
||||
<BodyPartDef>
|
||||
<defName>ARA_Dorsum</defName>
|
||||
<label>背部组织群</label>
|
||||
@@ -709,6 +1238,9 @@
|
||||
<skinCovered>true</skinCovered>
|
||||
<solid>false</solid>
|
||||
<bleedRate>0</bleedRate>
|
||||
<tags>
|
||||
<li>ARA_Psy_Source</li>
|
||||
</tags>
|
||||
</BodyPartDef>
|
||||
<BodyPartDef>
|
||||
<defName>ARA_Pouch</defName>
|
||||
|
||||
9
1.6/1.6/Defs/PawnCapacityDefs/ARA_PawnCapacity.xml
Normal file
9
1.6/1.6/Defs/PawnCapacityDefs/ARA_PawnCapacity.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<PawnCapacityDef>
|
||||
<defName>ARA_PsychicStange</defName>
|
||||
<label>虫群灵能强度</label>
|
||||
<listOrder>60</listOrder>
|
||||
<workerClass>ArachnaeSwarm.PawnCapacityWorker_PsychicStange</workerClass>
|
||||
</PawnCapacityDef>
|
||||
</Defs>
|
||||
@@ -662,8 +662,8 @@
|
||||
<lifeStages>
|
||||
<li>
|
||||
<bodyGraphicData>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Baneling/BodiesEmp/Naked_Thin</texPath>
|
||||
<drawSize>1</drawSize>
|
||||
<texPath>ArachnaeSwarm/Things/ARA_Acidcut/Bodies/Naked_Thin</texPath>
|
||||
<drawSize>1.75</drawSize>
|
||||
<shadowData>
|
||||
<volume>(0.4, 0.5, 0.37)</volume>
|
||||
<offset>(0,0,-0.15)</offset>
|
||||
|
||||
@@ -877,7 +877,7 @@
|
||||
</statBases>
|
||||
|
||||
<race>
|
||||
<body>ArachnaeQueen_Body</body>
|
||||
<body>ArachnaeQueen_Neurotyrant_Body</body>
|
||||
<baseBodySize>5</baseBodySize>
|
||||
<baseHealthScale>4</baseHealthScale>
|
||||
<canFlyInVacuum>true</canFlyInVacuum>
|
||||
|
||||
Binary file not shown.
@@ -2,6 +2,10 @@
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawncapacityworker\\pawncapacityworker_psychicstange.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawncapacityworker\\pawncapacityworker_psychicstange.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_swarmspellholder\\gizmo_swarmspellstatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_swarmspellholder\\gizmo_swarmspellstatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
@@ -42,7 +46,7 @@
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 2,
|
||||
"SelectedChildIndex": 1,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
@@ -50,7 +54,20 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 4,
|
||||
"DocumentIndex": 0,
|
||||
"Title": "PawnCapacityWorker_PsychicStange.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PawnCapacityWorker\\PawnCapacityWorker_PsychicStange.cs",
|
||||
"RelativeDocumentMoniker": "PawnCapacityWorker\\PawnCapacityWorker_PsychicStange.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PawnCapacityWorker\\PawnCapacityWorker_PsychicStange.cs",
|
||||
"RelativeToolTip": "PawnCapacityWorker\\PawnCapacityWorker_PsychicStange.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-02-03T07:42:21.662Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"Title": "CompProperties_AbilityPsychicLoadCost.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_PsychicLoadCost\\CompProperties_AbilityPsychicLoadCost.cs",
|
||||
"RelativeDocumentMoniker": "Abilities\\ARA_PsychicLoadCost\\CompProperties_AbilityPsychicLoadCost.cs",
|
||||
@@ -62,20 +79,20 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"DocumentIndex": 1,
|
||||
"Title": "Gizmo_SwarmSpellStatus.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
||||
"RelativeToolTip": "Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
||||
"ViewState": "AgIAAGcAAAAAAAAAAAAMwHMAAABAAAAAAAAAAA==",
|
||||
"ViewState": "AgIAAGcAAAAAAAAAAAAMwHwAAAAgAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2026-01-30T08:20:07.463Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"DocumentIndex": 3,
|
||||
"Title": "CompAbilityEffect_PsychicLoadCost.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_PsychicLoadCost\\CompAbilityEffect_PsychicLoadCost.cs",
|
||||
"RelativeDocumentMoniker": "Abilities\\ARA_PsychicLoadCost\\CompAbilityEffect_PsychicLoadCost.cs",
|
||||
@@ -87,7 +104,7 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"DocumentIndex": 6,
|
||||
"Title": "CompAbilityEffect_PsychicBrainburn.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\PsychicBrainburn\\CompAbilityEffect_PsychicBrainburn.cs",
|
||||
"RelativeDocumentMoniker": "Abilities\\PsychicBrainburn\\CompAbilityEffect_PsychicBrainburn.cs",
|
||||
@@ -99,7 +116,7 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"DocumentIndex": 2,
|
||||
"Title": "ARA_DefOf.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_DefOf.cs",
|
||||
"RelativeDocumentMoniker": "ARA_DefOf.cs",
|
||||
@@ -111,7 +128,7 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"DocumentIndex": 4,
|
||||
"Title": "Comp_SwarmSpellHolder.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Comp_SwarmSpellHolder.cs",
|
||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\Comp_SwarmSpellHolder.cs",
|
||||
@@ -123,7 +140,7 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 6,
|
||||
"DocumentIndex": 7,
|
||||
"Title": "SwarmSpellUtility.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\SwarmSpellUtility.cs",
|
||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\SwarmSpellUtility.cs",
|
||||
@@ -135,7 +152,7 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 7,
|
||||
"DocumentIndex": 8,
|
||||
"Title": "CompAutoMechCarrier.cs",
|
||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_AutoMechCarrier\\CompAutoMechCarrier.cs",
|
||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_AutoMechCarrier\\CompAutoMechCarrier.cs",
|
||||
|
||||
@@ -332,6 +332,7 @@
|
||||
<Compile Include="MentalState\MentalState_HiveMindCascade.cs" />
|
||||
<Compile Include="Needs\Need_ChitinArmor.cs" />
|
||||
<Compile Include="Needs\Need_HoneyProduction.cs" />
|
||||
<Compile Include="PawnCapacityWorker\PawnCapacityWorker_PsychicStange.cs" />
|
||||
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompAutoMechCarrier.cs" />
|
||||
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompProducedByMechCarrier.cs" />
|
||||
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompProperties_AutoMechCarrier.cs" />
|
||||
|
||||
@@ -0,0 +1,354 @@
|
||||
using RimWorld;
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
/// <summary>
|
||||
/// 灵能稳定性(Psychic Stange)的能力计算器
|
||||
/// 基于ARA_Psy_Source标签的部件效率和意识水平
|
||||
/// </summary>
|
||||
public class PawnCapacityWorker_PsychicStange : PawnCapacityWorker
|
||||
{
|
||||
#region 字段
|
||||
// 定义我们需要的BodyPartTagDef
|
||||
private static BodyPartTagDef PsySourceTagDef = null;
|
||||
|
||||
// 用于缓存的Consciousness容量Def
|
||||
private static PawnCapacityDef ConsciousnessDef = null;
|
||||
#endregion
|
||||
|
||||
#region 初始化
|
||||
/// <summary>
|
||||
/// 确保标签Def已初始化
|
||||
/// </summary>
|
||||
private void EnsureTagDefsInitialized()
|
||||
{
|
||||
if (PsySourceTagDef == null)
|
||||
{
|
||||
// 尝试从DefDatabase获取标签定义
|
||||
PsySourceTagDef = DefDatabase<BodyPartTagDef>.GetNamedSilentFail("ARA_Psy_Source");
|
||||
|
||||
if (PsySourceTagDef == null)
|
||||
{
|
||||
Log.Warning("[虫群术法] 未找到ARA_Psy_Source的BodyPartTagDef定义");
|
||||
// 创建一个临时的标签定义以避免空引用
|
||||
PsySourceTagDef = new BodyPartTagDef
|
||||
{
|
||||
defName = "ARA_Psy_Source",
|
||||
label = "Psychic Source"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (ConsciousnessDef == null)
|
||||
{
|
||||
ConsciousnessDef = DefDatabase<PawnCapacityDef>.GetNamedSilentFail("Consciousness");
|
||||
if (ConsciousnessDef == null)
|
||||
{
|
||||
// 如果找不到Consciousness,使用默认的
|
||||
ConsciousnessDef = PawnCapacityDefOf.Consciousness;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 主要计算方法
|
||||
/// <summary>
|
||||
/// 计算灵能稳定性容量水平
|
||||
/// </summary>
|
||||
public override float CalculateCapacityLevel(HediffSet diffSet, List<PawnCapacityUtility.CapacityImpactor> impactors = null)
|
||||
{
|
||||
// 确保标签Def已初始化
|
||||
EnsureTagDefsInitialized();
|
||||
|
||||
// 如果没有意识能力,直接返回0
|
||||
if (!diffSet.pawn.health.capacities.CapableOf(ConsciousnessDef))
|
||||
{
|
||||
// 如果有传入impactors,记录影响因子
|
||||
if (impactors != null)
|
||||
{
|
||||
impactors.Add(new PawnCapacityUtility.CapacityImpactorCapacity
|
||||
{
|
||||
capacity = ConsciousnessDef
|
||||
});
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
// 获取意识水平
|
||||
float consciousnessLevel = diffSet.pawn.health.capacities.GetLevel(ConsciousnessDef);
|
||||
if (consciousnessLevel <= 0f)
|
||||
{
|
||||
if (impactors != null)
|
||||
{
|
||||
impactors.Add(new PawnCapacityUtility.CapacityImpactorCapacity
|
||||
{
|
||||
capacity = ConsciousnessDef
|
||||
});
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
// 计算ARA_Psy_Source标签部件的平均效率
|
||||
float psySourceEfficiency = CalculatePsySourceEfficiency(diffSet, impactors);
|
||||
|
||||
// 最终容量 = 灵能源效率 × 意识水平
|
||||
float finalCapacity = psySourceEfficiency * consciousnessLevel;
|
||||
|
||||
// 如果有传入impactors,记录最终影响
|
||||
if (impactors != null && finalCapacity < 1f)
|
||||
{
|
||||
// 如果灵能源效率不是100%,记录它
|
||||
if (psySourceEfficiency < 1f)
|
||||
{
|
||||
// 注意:这里我们需要使用自定义的CapacityImpactor来记录灵能源的影响
|
||||
// 由于PawnCapacityUtility.CalculateTagEfficiency不直接返回影响器列表,
|
||||
// 我们需要自己创建影响器
|
||||
RecordPsySourceImpactors(diffSet, impactors);
|
||||
}
|
||||
|
||||
// 如果意识水平不是100%,记录它
|
||||
if (consciousnessLevel < 1f)
|
||||
{
|
||||
impactors.Add(new PawnCapacityUtility.CapacityImpactorCapacity
|
||||
{
|
||||
capacity = ConsciousnessDef
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return finalCapacity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算灵能源标签部件的效率
|
||||
/// </summary>
|
||||
private float CalculatePsySourceEfficiency(HediffSet diffSet, List<PawnCapacityUtility.CapacityImpactor> impactors = null)
|
||||
{
|
||||
if (PsySourceTagDef == null)
|
||||
return 0f;
|
||||
|
||||
// 使用PawnCapacityUtility.CalculateTagEfficiency计算标签部件的平均效率
|
||||
// 这里我们使用默认的最大值和范围
|
||||
float efficiency = PawnCapacityUtility.CalculateTagEfficiency(
|
||||
diffSet,
|
||||
PsySourceTagDef,
|
||||
maximum: float.MaxValue,
|
||||
lerp: default(FloatRange),
|
||||
impactors: impactors
|
||||
);
|
||||
|
||||
return efficiency;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 记录灵能源部件的影响器
|
||||
/// </summary>
|
||||
private void RecordPsySourceImpactors(HediffSet diffSet, List<PawnCapacityUtility.CapacityImpactor> impactors)
|
||||
{
|
||||
if (diffSet == null || diffSet.pawn == null || diffSet.pawn.RaceProps?.body == null)
|
||||
return;
|
||||
|
||||
// 获取所有带有ARA_Psy_Source标签的部件
|
||||
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||
|
||||
foreach (var part in partsWithTag)
|
||||
{
|
||||
// 检查部件是否缺失或受损
|
||||
if (diffSet.PartIsMissing(part))
|
||||
{
|
||||
// 部件缺失
|
||||
impactors.Add(new PawnCapacityUtility.CapacityImpactorBodyPartHealth
|
||||
{
|
||||
bodyPart = part
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// 检查部件的健康百分比
|
||||
float partHealth = diffSet.GetPartHealth(part);
|
||||
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||
float healthPercent = partHealth / partMaxHealth;
|
||||
|
||||
if (healthPercent < 1f)
|
||||
{
|
||||
// 部件受损
|
||||
impactors.Add(new PawnCapacityUtility.CapacityImpactorBodyPartHealth
|
||||
{
|
||||
bodyPart = part
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 容量可用性检查
|
||||
/// <summary>
|
||||
/// 检查身体定义是否可以拥有此容量
|
||||
/// 只有当身体拥有ARA_Psy_Source标签的部件时才显示
|
||||
/// </summary>
|
||||
public override bool CanHaveCapacity(BodyDef body)
|
||||
{
|
||||
// 确保标签Def已初始化
|
||||
EnsureTagDefsInitialized();
|
||||
|
||||
if (PsySourceTagDef == null || body == null)
|
||||
return false;
|
||||
|
||||
// 检查身体是否拥有带有ARA_Psy_Source标签的部件
|
||||
return body.HasPartWithTag(PsySourceTagDef);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 工具方法
|
||||
/// <summary>
|
||||
/// 获取详细的能力影响描述
|
||||
/// </summary>
|
||||
public string GetDetailedCapacityInfo(HediffSet diffSet)
|
||||
{
|
||||
EnsureTagDefsInitialized();
|
||||
|
||||
if (!CanHaveCapacity(diffSet.pawn.RaceProps.body))
|
||||
{
|
||||
return "此单位没有灵能源部件,无法拥有灵能稳定性能力。";
|
||||
}
|
||||
|
||||
float consciousnessLevel = diffSet.pawn.health.capacities.GetLevel(ConsciousnessDef);
|
||||
float psySourceEfficiency = CalculatePsySourceEfficiency(diffSet, null);
|
||||
float finalCapacity = psySourceEfficiency * consciousnessLevel;
|
||||
|
||||
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||
int totalParts = 0;
|
||||
int functionalParts = 0;
|
||||
int missingParts = 0;
|
||||
int damagedParts = 0;
|
||||
|
||||
foreach (var part in partsWithTag)
|
||||
{
|
||||
totalParts++;
|
||||
|
||||
if (diffSet.PartIsMissing(part))
|
||||
{
|
||||
missingParts++;
|
||||
}
|
||||
else
|
||||
{
|
||||
float partHealth = diffSet.GetPartHealth(part);
|
||||
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||
|
||||
if (partHealth < partMaxHealth)
|
||||
{
|
||||
damagedParts++;
|
||||
}
|
||||
else
|
||||
{
|
||||
functionalParts++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string result = $"灵能稳定性: {finalCapacity:P0}\n";
|
||||
result += $" 意识水平: {consciousnessLevel:P0}\n";
|
||||
result += $" 灵能源效率: {psySourceEfficiency:P0}\n";
|
||||
result += $" 灵能源部件: {totalParts}个 (正常: {functionalParts}, 受损: {damagedParts}, 缺失: {missingParts})";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查是否所有灵能源部件都完整
|
||||
/// </summary>
|
||||
public bool AreAllPsySourcesIntact(HediffSet diffSet)
|
||||
{
|
||||
EnsureTagDefsInitialized();
|
||||
|
||||
if (PsySourceTagDef == null || diffSet.pawn.RaceProps?.body == null)
|
||||
return false;
|
||||
|
||||
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||
|
||||
foreach (var part in partsWithTag)
|
||||
{
|
||||
if (diffSet.PartIsMissing(part))
|
||||
return false;
|
||||
|
||||
float partHealth = diffSet.GetPartHealth(part);
|
||||
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||
|
||||
if (partHealth < partMaxHealth)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取灵能源部件的总健康百分比
|
||||
/// </summary>
|
||||
public float GetTotalPsySourceHealthPercent(HediffSet diffSet)
|
||||
{
|
||||
EnsureTagDefsInitialized();
|
||||
|
||||
if (PsySourceTagDef == null || diffSet.pawn.RaceProps?.body == null)
|
||||
return 0f;
|
||||
|
||||
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||
|
||||
if (partsWithTag.Count == 0)
|
||||
return 0f;
|
||||
|
||||
float totalHealth = 0f;
|
||||
float totalMaxHealth = 0f;
|
||||
|
||||
foreach (var part in partsWithTag)
|
||||
{
|
||||
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||
totalMaxHealth += partMaxHealth;
|
||||
|
||||
if (!diffSet.PartIsMissing(part))
|
||||
{
|
||||
float partHealth = diffSet.GetPartHealth(part);
|
||||
totalHealth += partHealth;
|
||||
}
|
||||
}
|
||||
|
||||
if (totalMaxHealth <= 0f)
|
||||
return 0f;
|
||||
|
||||
return totalHealth / totalMaxHealth;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取功能正常的灵能源部件数量
|
||||
/// </summary>
|
||||
public int GetFunctionalPsySourceCount(HediffSet diffSet)
|
||||
{
|
||||
EnsureTagDefsInitialized();
|
||||
|
||||
if (PsySourceTagDef == null || diffSet.pawn.RaceProps?.body == null)
|
||||
return 0;
|
||||
|
||||
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||
int functionalCount = 0;
|
||||
|
||||
foreach (var part in partsWithTag)
|
||||
{
|
||||
if (!diffSet.PartIsMissing(part))
|
||||
{
|
||||
float partHealth = diffSet.GetPartHealth(part);
|
||||
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||
|
||||
if (partHealth >= partMaxHealth)
|
||||
{
|
||||
functionalCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return functionalCount;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user