暂存
This commit is contained in:
Binary file not shown.
@@ -1,84 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_normal</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
<headShapeDef>normal</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>0</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_eyeMoving</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>15</duration>
|
||||
<eyeballOffset>(-0.005,0,0)</eyeballOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>1002</priority>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>500</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_eyeMoving2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>15</duration>
|
||||
<eyeballOffset>(0.005,0,0)</eyeballOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>1001</priority>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>500</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_eyeFlicker</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>1001</priority>
|
||||
<roopIntervalMin>10 </roopIntervalMin>
|
||||
<roopIntervalMax>30</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_blink</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,-0.005)</browOffset>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>12</duration>
|
||||
<browOffset>(0,0,-0.01)</browOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,-0.005)</browOffset>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>500</roopIntervalMax>
|
||||
<priority>1000</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
|
||||
</Defs>
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<!-- 裸体想法 -->
|
||||
<!-- <FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Thought_Naked</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<priority>200</priority>
|
||||
<targetThoughtDefs>
|
||||
<li>Naked</li>
|
||||
<li>GroinUncovered_Disapproved_Male</li>
|
||||
<li>GroinUncovered_Disapproved_Female</li>
|
||||
<li>GroinOrChestUncovered_Disapproved_Male</li>
|
||||
<li>GroinOrChestUncovered_Disapproved_Female</li>
|
||||
<li>GroinChestOrHairUncovered_Disapproved_Male</li>
|
||||
<li>GroinChestOrHairUncovered_Disapproved_Female</li>
|
||||
<li>GroinChestHairOrFaceUncovered_Disapproved_Male</li>
|
||||
<li>GroinChestHairOrFaceUncovered_Disapproved_Female</li>
|
||||
</targetThoughtDefs>
|
||||
</FacialAnimation.FaceAnimationDef> -->
|
||||
|
||||
</Defs>
|
||||
@@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_AttackMelee</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<browOffset>(0,0,-0.00875)</browOffset>
|
||||
<lidOffset>(0.0,0,-0.005)</lidOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>AttackMelee</li>
|
||||
</targetJobs>
|
||||
<priority>10200</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>AttackMelee2</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>AttackMelee</li>
|
||||
</targetJobs>
|
||||
<priority>10201</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_AttackStatic</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<browOffset>(0,0,-0.00875)</browOffset>
|
||||
<lidOffset>(0.0,0,-0.005)</lidOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>AttackStatic</li>
|
||||
</targetJobs>
|
||||
<priority>10200</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>AttackStatic2</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>AttackStatic</li>
|
||||
</targetJobs>
|
||||
<priority>10201</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,67 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_DoBill</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<lidOffset>(0,0,-0.00625)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,-0.0075)</eyeballOffset>
|
||||
<headOffset>(0,0,-0.0007)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<browOffset>(0,0,-0.00325)</browOffset>
|
||||
<mouthOffset>(0,0,-0.00125)</mouthOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>0</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>DoBill</li>
|
||||
</targetJobs>
|
||||
<priority>10000</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_DoBill2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<lidOffset>(0,0,-0.0035)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,-0.00375)</eyeballOffset>
|
||||
<headOffset>(0,0,-0.0035)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<browOffset>(0,0,-0.00025)</browOffset>
|
||||
<mouthOffset>(0,0,-0.000625)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>6</duration>
|
||||
<lidOffset>(0,0,-0.007)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,-0.00525)</eyeballOffset>
|
||||
<headOffset>(0,0,-0.0075)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<browOffset>(0,0,-0.00375)</browOffset>
|
||||
<mouthOffset>(0,0,-0.00125)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<lidOffset>(0,0,-0.0035)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,-0.00375)</eyeballOffset>
|
||||
<headOffset>(0,0,-0.0035)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<browOffset>(0,0,-0.00025)</browOffset>
|
||||
<mouthOffset>(0,0,-0.000625)</mouthOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>100</roopIntervalMin>
|
||||
<roopIntervalMax>200</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>DoBill</li>
|
||||
</targetJobs>
|
||||
<priority>10001</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Goto</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
<headOffset>(0.0,0,-0.0025)</headOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Goto</li>
|
||||
</targetJobs>
|
||||
<priority>10300</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,32 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Ingest</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<headOffset>(0.0,0,0.0025)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<headOffset>(0.0,0,0.005)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>6</duration>
|
||||
<headOffset>(0.0,0,0)</headOffset>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>30</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>Ingest</li>
|
||||
</targetJobs>
|
||||
<priority>10</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,76 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_laydown</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>0</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>LayDown</li>
|
||||
</targetJobs>
|
||||
<priority>10001</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_laydown2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>240</duration>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>100</roopIntervalMin>
|
||||
<roopIntervalMax>500</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>LayDown</li>
|
||||
</targetJobs>
|
||||
<priority>10002</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_laydown3</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>15</duration>
|
||||
<lidOffset>(0.0,0,0.0015)</lidOffset>
|
||||
<headOffset>(0,0,0.0035)</headOffset>
|
||||
<browOffset>(0,0,0.00025)</browOffset>
|
||||
<mouthOffset>(0,0,0.000625)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>60</duration>
|
||||
<lidOffset>(0.0,0,0.00275)</lidOffset>
|
||||
<headOffset>(0,0,0.0075)</headOffset>
|
||||
<browOffset>(0,0,0.00375)</browOffset>
|
||||
<mouthOffset>(0,0,0.00125)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0.0,0,0.0015)</lidOffset>
|
||||
<headOffset>(0,0,0.0035)</headOffset>
|
||||
<browOffset>(0,0,0.00025)</browOffset>
|
||||
<mouthOffset>(0,0,0.000625)</mouthOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>40</roopIntervalMin>
|
||||
<roopIntervalMax>200</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>LayDown</li>
|
||||
</targetJobs>
|
||||
<priority>10003</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,80 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Lovin</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>8</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<headOffset>(0.0,0,0.00125)</headOffset>
|
||||
<browOffset>(0.0,0,-0.005)</browOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0.0,0,-0.001)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,0.0075)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>8</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<headOffset>(0.0,0,-0.00375)</headOffset>
|
||||
<browOffset>(0.0,0,-0.0075)</browOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0.0,0,-0.0015)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,0.0075)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.002)</mouthOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>8</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<headOffset>(0.0,0,0.0075)</headOffset>
|
||||
<browOffset>(0.0,0,0.00125)</browOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0.0,0,0.001)</lidOffset>
|
||||
<eyeballOffset>(0.0,0,0.0075)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.001)</mouthOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<targetJobs>
|
||||
<li>Lovin</li>
|
||||
<li>MLI_Jobs_MassLoveIn</li>
|
||||
<li>MLI_Jobs_SingleLoveIn</li>
|
||||
</targetJobs>
|
||||
<priority>10400</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Lovin2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>240</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<headOffset>(0.0,0,0.01)</headOffset>
|
||||
<browOffset>(0.0,0,-0.00)</browOffset>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<lidOffset>(0.0,0,-0.001)</lidOffset>
|
||||
<mouthOffset>(0,0,-0.001)</mouthOffset>
|
||||
<eyeballOffset>(0.0,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>240</roopIntervalMin>
|
||||
<roopIntervalMax>240</roopIntervalMax>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<targetJobs>
|
||||
<li>Lovin</li>
|
||||
<li>MLI_Jobs_MassLoveIn</li>
|
||||
<li>MLI_Jobs_SingleLoveIn</li>
|
||||
</targetJobs>
|
||||
<priority>10500</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,33 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Mine</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.005)</lidOffset>
|
||||
<headOffset>(0,0,0)</headOffset>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>5</duration>
|
||||
<lidOffset>(0,0,0.01)</lidOffset>
|
||||
<headOffset>(0,0,-0.01)</headOffset>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthOffset>(0,0,-0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>0</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>Mine</li>
|
||||
</targetJobs>
|
||||
<priority>10000</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,78 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_RemoveApparel</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(-0.005,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0.005,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>RemoveApparel</li>
|
||||
</targetJobs>
|
||||
<priority>105</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_RemoveApparel2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<eyeballOffset>(0.0,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>RemoveApparel</li>
|
||||
</targetJobs>
|
||||
<priority>104</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_RemoveApparel3</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>120</duration>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<headOffset>(0.0,0,0.005)</headOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>RemoveApparel</li>
|
||||
</targetJobs>
|
||||
<priority>110</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,100 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Research</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<headOffset>(0,0,-0.01)</headOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.00375)</mouthOffset>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Research</li>
|
||||
</targetJobs>
|
||||
<priority>10001</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Research2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<browOffset>(0,0,0.00325)</browOffset>
|
||||
<lidOffset>(0,0,0.00625)</lidOffset>
|
||||
<headOffset>(0,0,0.005)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>40</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>20</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>40</duration>
|
||||
<browOffset>(0,0,0.00625)</browOffset>
|
||||
<lidOffset>(0,0,0.00875)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>8</duration>
|
||||
<browOffset>(0,0,0.00325)</browOffset>
|
||||
<lidOffset>(0,0,0.00625)</lidOffset>
|
||||
<headOffset>(0,0,0.005)</headOffset>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>900</roopIntervalMin>
|
||||
<roopIntervalMax>1200</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>Research</li>
|
||||
</targetJobs>
|
||||
<priority>10002</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_SocialRelax</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>SocialRelax</li>
|
||||
</targetJobs>
|
||||
<priority>10200</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,35 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_StandAndBeSociallyActive</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<headOffset>(0.0,0,-0.0025)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<headOffset>(0.0,0,-0.005)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
<headOffset>(0.0,0,0)</headOffset>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>100</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>StandAndBeSociallyActive</li>
|
||||
</targetJobs>
|
||||
<priority>10</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,53 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Strip</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(-0.005,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0.005,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Strip</li>
|
||||
</targetJobs>
|
||||
<priority>105</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>Strip2</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Strip</li>
|
||||
</targetJobs>
|
||||
<priority>106</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,84 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_WaitCombat</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>angled</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wait_Combat</li>
|
||||
</targetJobs>
|
||||
<priority>10200</priority>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Wait_Combat_Rare</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>15</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<browOffset>(0,0,-0.00375)</browOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0,0,-0.0025)</lidOffset>
|
||||
<headOffset>(0,0,-0.00625)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>45</duration>
|
||||
<browOffset>(0,0,-0.01)</browOffset>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<headOffset>(0,0,-0.0175)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.005)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>30</duration>
|
||||
<browOffset>(0,0,-0.01)</browOffset>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0,0,-0.005)</lidOffset>
|
||||
<headOffset>(0,0,-0.015)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<mouthOffset>(0,0,-0.005)</mouthOffset>
|
||||
</li>
|
||||
<li>
|
||||
<duration>7</duration>
|
||||
<browOffset>(0,0,-0.00375)</browOffset>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<lidOffset>(0,0,-0.0025)</lidOffset>
|
||||
<headOffset>(0,0,-0.0085)</headOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>4</duration>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>30</duration>
|
||||
<browShapeDef>normal</browShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wait_Combat</li>
|
||||
</targetJobs>
|
||||
<priority>10301</priority>
|
||||
<roopIntervalMin>1000</roopIntervalMin>
|
||||
<roopIntervalMax>2000</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Wait_Downed</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>30</duration>
|
||||
<browOffset>(0,0,0.015)</browOffset>
|
||||
<lidOffset>(0,0,0.01)</lidOffset>
|
||||
<headOffset>(0,0,0.01)</headOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<mouthOffset>(0,0,0.0025)</mouthOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<browOffset>(0,0,0.0075)</browOffset>
|
||||
<lidOffset>(0,0,0.005)</lidOffset>
|
||||
<headOffset>(0,0,0.005)</headOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<mouthShapeDef>normal</mouthShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<roopIntervalMin>0</roopIntervalMin>
|
||||
<roopIntervalMax>100</roopIntervalMax>
|
||||
<targetJobs>
|
||||
<li>Wait_Downed</li>
|
||||
</targetJobs>
|
||||
<priority>10000</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>Wait_Downed2</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>3</duration>
|
||||
<lidOffset>(0,0,0.005)</lidOffset>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wait_Downed</li>
|
||||
</targetJobs>
|
||||
<priority>10001</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
@@ -1,77 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Wear</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(-0.005,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0.005,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
<li>
|
||||
<duration>10</duration>
|
||||
<lidOffset>(0,0,0.0)</lidOffset>
|
||||
<eyeballOffset>(0,0,0.005)</eyeballOffset>
|
||||
<mouthShapeDef>open</mouthShapeDef>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wear</li>
|
||||
</targetJobs>
|
||||
<priority>105</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>ArachnaeNode_Wear2</defName>
|
||||
<raceName>ArachnaeNode_Race_Myrmecocystus</raceName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>1</duration>
|
||||
<browShapeDef>s-shaped</browShapeDef>
|
||||
<lidShapeDef>normal</lidShapeDef>
|
||||
<eyeballOffset>(0.0,0,0.005)</eyeballOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wear</li>
|
||||
</targetJobs>
|
||||
<priority>104</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
|
||||
<FacialAnimation.FaceAnimationDef MayRequire="Nals.FacialAnimation">
|
||||
<defName>Wear3</defName>
|
||||
<animationFrames>
|
||||
<li>
|
||||
<duration>120</duration>
|
||||
<browShapeDef>flat</browShapeDef>
|
||||
<lidShapeDef>close</lidShapeDef>
|
||||
<headOffset>(0.0,0,0.005)</headOffset>
|
||||
<headShapeDef>blush</headShapeDef>
|
||||
</li>
|
||||
</animationFrames>
|
||||
<targetJobs>
|
||||
<li>Wear</li>
|
||||
</targetJobs>
|
||||
<priority>110</priority>
|
||||
<applyWhenStandingOnly>true</applyWhenStandingOnly>
|
||||
<roopIntervalMin>30 </roopIntervalMin>
|
||||
<roopIntervalMax>300</roopIntervalMax>
|
||||
</FacialAnimation.FaceAnimationDef>
|
||||
</Defs>
|
||||
58
1.6/1.6/Defs/AnimationDefs/WULA_Mech_Flyer_Anim.xml
Normal file
58
1.6/1.6/Defs/AnimationDefs/WULA_Mech_Flyer_Anim.xml
Normal file
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<!-- North-facing Animation -->
|
||||
<AnimationDef>
|
||||
<defName>WULA_Mech_Flyer_North</defName>
|
||||
<durationTicks>4</durationTicks>
|
||||
<startOnRandomTick>true</startOnRandomTick>
|
||||
<keyframeParts>
|
||||
<li>
|
||||
<key>ARA_Flight_Attachment</key>
|
||||
<value>
|
||||
<keyframes>
|
||||
<li><graphicState>WULA_Mech_Flyer_Flying_north_0_gs</graphicState><tick>0</tick></li>
|
||||
<li><graphicState>WULA_Mech_Flyer_Flying_north_1_gs</graphicState><tick>2</tick></li>
|
||||
</keyframes>
|
||||
</value>
|
||||
</li>
|
||||
</keyframeParts>
|
||||
</AnimationDef>
|
||||
|
||||
<!-- East-facing Animation -->
|
||||
<AnimationDef>
|
||||
<defName>WULA_Mech_Flyer_East</defName>
|
||||
<durationTicks>4</durationTicks>
|
||||
<startOnRandomTick>true</startOnRandomTick>
|
||||
<keyframeParts>
|
||||
<li>
|
||||
<key>ARA_Flight_Attachment</key>
|
||||
<value>
|
||||
<keyframes>
|
||||
<li><graphicState>WULA_Mech_Flyer_Flying_east_0_gs</graphicState><tick>0</tick></li>
|
||||
<li><graphicState>WULA_Mech_Flyer_Flying_east_1_gs</graphicState><tick>2</tick></li>
|
||||
</keyframes>
|
||||
</value>
|
||||
</li>
|
||||
</keyframeParts>
|
||||
</AnimationDef>
|
||||
|
||||
<!-- South-facing Animation -->
|
||||
<AnimationDef>
|
||||
<defName>WULA_Mech_Flyer_South</defName>
|
||||
<durationTicks>4</durationTicks>
|
||||
<startOnRandomTick>true</startOnRandomTick>
|
||||
<keyframeParts>
|
||||
<li>
|
||||
<key>ARA_Flight_Attachment</key>
|
||||
<value>
|
||||
<keyframes>
|
||||
<li><graphicState>WULA_Mech_Flyer_Flying_south_0_gs</graphicState><tick>0</tick></li>
|
||||
<li><graphicState>WULA_Mech_Flyer_Flying_south_1_gs</graphicState><tick>2</tick></li>
|
||||
</keyframes>
|
||||
</value>
|
||||
</li>
|
||||
</keyframeParts>
|
||||
</AnimationDef>
|
||||
|
||||
</Defs>
|
||||
52
1.6/1.6/Defs/GraphicStateDefs/WULA_Mech_Flyer_Graphics.xml
Normal file
52
1.6/1.6/Defs/GraphicStateDefs/WULA_Mech_Flyer_Graphics.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<!-- North Frames -->
|
||||
<GraphicStateDef>
|
||||
<defName>WULA_Mech_Flyer_Flying_north_0_gs</defName>
|
||||
<defaultGraphicData>
|
||||
<texPath>Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_north_0</texPath>
|
||||
<drawSize>1.35</drawSize>
|
||||
</defaultGraphicData>
|
||||
</GraphicStateDef>
|
||||
<GraphicStateDef>
|
||||
<defName>WULA_Mech_Flyer_Flying_north_1_gs</defName>
|
||||
<defaultGraphicData>
|
||||
<texPath>Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_north_1</texPath>
|
||||
<drawSize>1.35</drawSize>
|
||||
</defaultGraphicData>
|
||||
</GraphicStateDef>
|
||||
|
||||
<!-- East Frames -->
|
||||
<GraphicStateDef>
|
||||
<defName>WULA_Mech_Flyer_Flying_east_0_gs</defName>
|
||||
<defaultGraphicData>
|
||||
<texPath>Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_east_0</texPath>
|
||||
<drawSize>1.35</drawSize>
|
||||
</defaultGraphicData>
|
||||
</GraphicStateDef>
|
||||
<GraphicStateDef>
|
||||
<defName>WULA_Mech_Flyer_Flying_east_1_gs</defName>
|
||||
<defaultGraphicData>
|
||||
<texPath>Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_east_1</texPath>
|
||||
<drawSize>1.35</drawSize>
|
||||
</defaultGraphicData>
|
||||
</GraphicStateDef>
|
||||
|
||||
<!-- South Frames -->
|
||||
<GraphicStateDef>
|
||||
<defName>WULA_Mech_Flyer_Flying_south_0_gs</defName>
|
||||
<defaultGraphicData>
|
||||
<texPath>Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_south_0</texPath>
|
||||
<drawSize>1.35</drawSize>
|
||||
</defaultGraphicData>
|
||||
</GraphicStateDef>
|
||||
<GraphicStateDef>
|
||||
<defName>WULA_Mech_Flyer_Flying_south_1_gs</defName>
|
||||
<defaultGraphicData>
|
||||
<texPath>Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_south_1</texPath>
|
||||
<drawSize>1.35</drawSize>
|
||||
</defaultGraphicData>
|
||||
</GraphicStateDef>
|
||||
|
||||
</Defs>
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
<HeadTypeDef ParentName="ARA_FemaleHeadtypeBase">
|
||||
<defName>ARA_QUEEN_Female_AverageNormalA</defName>
|
||||
<graphicPath>Textures/Pawns/General/Invisible/Inv</graphicPath>
|
||||
<graphicPath>ArachnaeSwarm/Things/General/Invisible/Inv</graphicPath>
|
||||
</HeadTypeDef>
|
||||
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
</apparelTags>
|
||||
<apparelMoney>0</apparelMoney>
|
||||
</PawnKindDef>
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<PawnKindDef ParentName="ArachnaeNodeABasePawnKind">
|
||||
<defName>ArachnaeNode_Race_Facehugger</defName>
|
||||
<label>阿拉克涅原虫种</label>
|
||||
<race>ArachnaeNode_Race_Facehugger</race>
|
||||
@@ -219,6 +219,11 @@
|
||||
<race>ArachnaeNode_Race_Skyraider</race>
|
||||
<defaultFactionType>PlayerColony</defaultFactionType>
|
||||
<invNutrition>0</invNutrition>
|
||||
<flyingAnimationFramePathPrefix>Things/Pawn/Animal/Goose/Goose_Flying_</flyingAnimationFramePathPrefix>
|
||||
<flyingAnimationDrawSize>1.35</flyingAnimationDrawSize>
|
||||
<flyingAnimationFrameCount>2</flyingAnimationFrameCount>
|
||||
<flyingAnimationTicksPerFrame>2</flyingAnimationTicksPerFrame>
|
||||
<flyingAnimationInheritColors>false</flyingAnimationInheritColors>
|
||||
<backstoryFiltersOverride>
|
||||
<li>
|
||||
<categories>
|
||||
|
||||
6
1.6/1.6/Defs/PawnRenderNodeTagDefs/ARA_NodeTagDefs.xml
Normal file
6
1.6/1.6/Defs/PawnRenderNodeTagDefs/ARA_NodeTagDefs.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<PawnRenderNodeTagDef>
|
||||
<defName>ARA_Flight_Attachment</defName>
|
||||
</PawnRenderNodeTagDef>
|
||||
</Defs>
|
||||
153
1.6/1.6/Defs/PawnRenderTreeDefs/ARA_RenderTree.xml
Normal file
153
1.6/1.6/Defs/PawnRenderTreeDefs/ARA_RenderTree.xml
Normal file
@@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<PawnRenderTreeDef>
|
||||
<defName>ARA_ArachnaeRenderTree</defName>
|
||||
<root Class="PawnRenderNodeProperties_Parent">
|
||||
<debugLabel>Root</debugLabel>
|
||||
<tagDef>Root</tagDef>
|
||||
<children>
|
||||
<li>
|
||||
<debugLabel>Body</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Body</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Body</workerClass>
|
||||
<tagDef>Body</tagDef>
|
||||
<skipFlag>Body</skipFlag>
|
||||
<colorType>Skin</colorType>
|
||||
<useRottenColor>true</useRottenColor>
|
||||
<useSkinShader>true</useSkinShader>
|
||||
<children>
|
||||
<li Class="PawnRenderNodeProperties_Tattoo" MayRequire="Ludeon.RimWorld.Ideology">
|
||||
<debugLabel>Body tattoo</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Tattoo_Body</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Body_Tattoo</workerClass>
|
||||
<colorType>Skin</colorType>
|
||||
<useRottenColor>true</useRottenColor>
|
||||
<baseLayer>2</baseLayer>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Wounds - pre apparel</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayWounds</workerClass>
|
||||
<overlayLayer>Body</overlayLayer>
|
||||
<baseLayer>8</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Swaddle" MayRequire="Ludeon.RimWorld.Biotech">
|
||||
<debugLabel>Baby swaddle</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Swaddle</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Swaddle</workerClass>
|
||||
<texPath>Things/Pawn/Humanlike/Apparel/SwaddledBaby/Swaddled_Child</texPath>
|
||||
<swaddleColorOffset>0.1</swaddleColorOffset>
|
||||
<brightnessRange>0.6~0.89</brightnessRange>
|
||||
<baseLayer>10</baseLayer>
|
||||
</li>
|
||||
|
||||
<!-- ===== OUR CUSTOM NODE INSERTION START ===== -->
|
||||
<li>
|
||||
<debugLabel>Arachnae Flight Attachment</debugLabel>
|
||||
<tagDef>ARA_Flight_Attachment</tagDef>
|
||||
<texPath>ArachnaeSwarm/Things/General/Invisible/Inv</texPath>
|
||||
<baseLayer>-10</baseLayer> <!-- Place it before apparel -->
|
||||
</li>
|
||||
<!-- ===== OUR CUSTOM NODE INSERTION END ===== -->
|
||||
|
||||
<li Class="PawnRenderNodeProperties_Parent">
|
||||
<debugLabel>Apparel root</debugLabel>
|
||||
<tagDef>ApparelBody</tagDef>
|
||||
<baseLayer>20</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Wounds - post apparel</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayWounds</workerClass>
|
||||
<overlayOverApparel>true</overlayOverApparel>
|
||||
<overlayLayer>Body</overlayLayer>
|
||||
<baseLayer>30</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Firefoam</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayFirefoam</workerClass>
|
||||
<overlayLayer>Body</overlayLayer>
|
||||
<baseLayer>40</baseLayer>
|
||||
</li>
|
||||
</children>
|
||||
</li>
|
||||
<li>
|
||||
<debugLabel>Head stump</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Stump</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Stump</workerClass>
|
||||
<texPath>Things/Pawn/Humanlike/Heads/None_Average_Stump</texPath>
|
||||
<baseLayer>50</baseLayer>
|
||||
<colorType>Skin</colorType>
|
||||
<skipFlag>Head</skipFlag>
|
||||
<useSkinShader>true</useSkinShader>
|
||||
<useRottenColor>true</useRottenColor>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
</li>
|
||||
<li>
|
||||
<debugLabel>Head</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Head</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Head</workerClass>
|
||||
<tagDef>Head</tagDef>
|
||||
<skipFlag>Head</skipFlag>
|
||||
<baseLayer>50</baseLayer>
|
||||
<colorType>Skin</colorType>
|
||||
<useRottenColor>true</useRottenColor>
|
||||
<useSkinShader>true</useSkinShader>
|
||||
<children>
|
||||
<li Class="PawnRenderNodeProperties_Tattoo" MayRequire="Ludeon.RimWorld.Ideology">
|
||||
<debugLabel>Head tattoo</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Tattoo_Head</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Tattoo_Head</workerClass>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
<colorType>Skin</colorType>
|
||||
<baseLayer>52</baseLayer>
|
||||
</li>
|
||||
<li>
|
||||
<debugLabel>Beard</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Beard</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_Beard</workerClass>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
<colorType>Hair</colorType>
|
||||
<skipFlag>Beard</skipFlag>
|
||||
<baseLayer>60</baseLayer>
|
||||
</li>
|
||||
<li>
|
||||
<debugLabel>Hair</debugLabel>
|
||||
<nodeClass>PawnRenderNode_Hair</nodeClass>
|
||||
<workerClass>PawnRenderNodeWorker_FlipWhenCrawling</workerClass>
|
||||
<rotDrawMode>Fresh, Rotting</rotDrawMode>
|
||||
<colorType>Hair</colorType>
|
||||
<skipFlag>Hair</skipFlag>
|
||||
<baseLayer>62</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Head wounds</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayWounds</workerClass>
|
||||
<overlayLayer>Head</overlayLayer>
|
||||
<baseLayer>65</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Parent">
|
||||
<debugLabel>Apparel root</debugLabel>
|
||||
<tagDef>ApparelHead</tagDef>
|
||||
<baseLayer>70</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Firefoam</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayFirefoam</workerClass>
|
||||
<overlayLayer>Head</overlayLayer>
|
||||
<baseLayer>85</baseLayer>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Overlay">
|
||||
<debugLabel>Status overlay</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_OverlayStatus</workerClass>
|
||||
<baseLayer>100</baseLayer>
|
||||
</li>
|
||||
</children>
|
||||
</li>
|
||||
<li Class="PawnRenderNodeProperties_Carried">
|
||||
<debugLabel>Weapon/carried thing</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_Carried</workerClass>
|
||||
</li>
|
||||
</children>
|
||||
</root>
|
||||
</PawnRenderTreeDef>
|
||||
</Defs>
|
||||
@@ -1169,85 +1169,20 @@
|
||||
<onlyEatRaceRestrictedFood>true</onlyEatRaceRestrictedFood>
|
||||
</raceRestriction>
|
||||
</alienRace>
|
||||
|
||||
<comps>
|
||||
<!-- Add our new flight component here -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_PawnFlight">
|
||||
<!-- ==================== -->
|
||||
<!-- 动画帧 (必需) -->
|
||||
<!-- ==================== -->
|
||||
<li Class="ArachnaeSwarm.CompProperties_PawnFlight"> <!-- 2. 添加我们的飞行组件 -->
|
||||
|
||||
<!-- 动画帧的基础贴图路径和文件名前缀。 -->
|
||||
<flyingAnimationFramePathPrefix>Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_</flyingAnimationFramePathPrefix>
|
||||
<!-- 飞行触发条件:仅在征召时飞行 -->
|
||||
<flightCondition>Drafted</flightCondition>
|
||||
|
||||
<!-- 动画的总帧数。 -->
|
||||
<flyingAnimationFrameCount>2</flyingAnimationFrameCount>
|
||||
|
||||
<!-- 动画中每一帧持续的游戏刻(ticks)数。数值越小,动画越快。 -->
|
||||
<ticksPerFrame>2</ticksPerFrame>
|
||||
|
||||
<!-- ==================== -->
|
||||
<!-- 渲染节点属性 -->
|
||||
<!-- ==================== -->
|
||||
|
||||
<!-- 附加动画的绘制尺寸。 -->
|
||||
<drawSize>1.35</drawSize>
|
||||
|
||||
<!-- 附加动画相对于其父节点的绘制偏移量 (X, Y, Z)。Y值控制渲染深度。 -->
|
||||
<offset>(0, 0.1, -0.2)</offset>
|
||||
|
||||
<!-- (可选) 附加动画是否继承 Pawn 的肤色。 -->
|
||||
<inheritColors>false</inheritColors>
|
||||
|
||||
<!-- (可选, 默认: Body) 附加动画要“贴”在哪个身体部分上。 -->
|
||||
<parentTagDef>Body</parentTagDef>
|
||||
|
||||
<!-- (可选, 默认: 85) 附加动画的基础渲染层级,用于精细深度控制。 -->
|
||||
<baseLayer>90</baseLayer>
|
||||
|
||||
<!-- ==================== -->
|
||||
<!-- 飞行力学 -->
|
||||
<!-- ==================== -->
|
||||
|
||||
<!-- (可选, 默认: 50) 起飞过程的持续时间(ticks)。 -->
|
||||
<takeoffDurationTicks>40</takeoffDurationTicks>
|
||||
|
||||
<!-- (可选, 默认: 50) 降落过程的持续时间(ticks)。 -->
|
||||
<landingDurationTicks>40</landingDurationTicks>
|
||||
|
||||
<!-- (可选, 默认: 5.0) 一次飞行的最大持续时间(秒)。 -->
|
||||
<maxFlightTimeSeconds>15</maxFlightTimeSeconds>
|
||||
|
||||
<!-- (可选, 默认: 2.0) 降落后的冷却时间(秒)。 -->
|
||||
<flightCooldownSeconds>10</flightCooldownSeconds>
|
||||
|
||||
<!-- (可选, 默认: 0.5) 当接到允许飞行的工作时,实际开始飞行的几率(0.0 到 1.0)。 -->
|
||||
<flightStartChanceOnJobStart>1.0</flightStartChanceOnJobStart>
|
||||
|
||||
<!-- ==================== -->
|
||||
<!-- 飞行视觉效果 (可选) -->
|
||||
<!-- ==================== -->
|
||||
|
||||
<!-- (可选) 自定义起飞时的“bobbing”(上下浮动)曲线。 -->
|
||||
<takeoffCurve>
|
||||
<points>
|
||||
<li>(0, 0)</li>
|
||||
<li>(0.5, 0.6)</li>
|
||||
<li>(1, 1)</li>
|
||||
</points>
|
||||
</takeoffCurve>
|
||||
|
||||
<!-- (可选) 自定义降落时的“bobbing”曲线。 -->
|
||||
<landingCurve>
|
||||
<points>
|
||||
<li>(0, 1)</li>
|
||||
<li>(0.5, 0.4)</li>
|
||||
<li>(1, 0)</li>
|
||||
</points>
|
||||
</landingCurve>
|
||||
<!-- 链接到我们刚刚创建的 AnimationDef -->
|
||||
<flyingAnimationNorth>WULA_Mech_Flyer_North</flyingAnimationNorth>
|
||||
<flyingAnimationEast>WULA_Mech_Flyer_East</flyingAnimationEast>
|
||||
<flyingAnimationSouth>WULA_Mech_Flyer_South</flyingAnimationSouth>
|
||||
|
||||
</li>
|
||||
|
||||
<!-- ... other components ... -->
|
||||
</comps>
|
||||
|
||||
<!-- 基础属性设置 -->
|
||||
@@ -1255,6 +1190,9 @@
|
||||
<!-- 移动速度 -->
|
||||
<MoveSpeed>4.5</MoveSpeed>
|
||||
|
||||
<MaxFlightTime>9999</MaxFlightTime>
|
||||
<FlightCooldown>0</FlightCooldown>
|
||||
|
||||
<!-- <RestRateMultiplier>1</RestRateMultiplier> -->
|
||||
<!-- <HungerRateMultiplier>1</HungerRateMultiplier> -->
|
||||
<!-- <EatingSpeed>5</EatingSpeed> -->
|
||||
@@ -1295,6 +1233,8 @@
|
||||
<race>
|
||||
<!-- 身体类型 -->
|
||||
<body>ArachnaeFighter_Body</body>
|
||||
<renderTree>ARA_ArachnaeRenderTree</renderTree>
|
||||
<flightStartChanceOnJobStart>1.0</flightStartChanceOnJobStart>
|
||||
<baseBodySize>0.85</baseBodySize>
|
||||
<baseHealthScale>2</baseHealthScale>
|
||||
<lifeExpectancy>5</lifeExpectancy>
|
||||
|
||||
@@ -141,8 +141,6 @@
|
||||
<Compile Include="CompPawnFlight.cs" />
|
||||
<Compile Include="CompProperties_PawnFlight.cs" />
|
||||
<Compile Include="HarmonyPatches.cs" />
|
||||
<Compile Include="PawnRenderNode_AnimatedAttachment.cs" />
|
||||
<Compile Include="DynamicPawnRenderNodeSetup_FlightWings.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Abilities\CompAbilityEffect_TrackingCharge.cs" />
|
||||
|
||||
@@ -1,132 +1,14 @@
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
using Verse.AI;
|
||||
using RimWorld;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
/// <summary>
|
||||
/// A marker component that holds custom flight properties.
|
||||
/// The actual flight logic is handled by Harmony patches that check for this component
|
||||
/// and use its properties to override or trigger vanilla flight behavior.
|
||||
/// </summary>
|
||||
public class CompPawnFlight : ThingComp
|
||||
{
|
||||
private enum FlightState { Grounded, TakingOff, Flying, Landing }
|
||||
|
||||
private FlightState flightState;
|
||||
private int flightTicks = -1;
|
||||
private int flightCooldownTicks;
|
||||
private int lerpTick;
|
||||
|
||||
private Dictionary<Rot4, List<Graphic>> cachedGraphics = new Dictionary<Rot4, List<Graphic>>();
|
||||
private PawnRenderNode_AnimatedAttachment activeWingNode;
|
||||
|
||||
private Pawn Pawn => (Pawn)parent;
|
||||
public CompProperties_PawnFlight Props => (CompProperties_PawnFlight)props;
|
||||
|
||||
public bool Flying => flightState != FlightState.Grounded;
|
||||
public bool ShouldShowWings => flightState != FlightState.Grounded;
|
||||
|
||||
// Hardcoded curves, similar to vanilla Pawn_FlightTracker
|
||||
private static readonly SimpleCurve TakeoffCurve = new SimpleCurve { new CurvePoint(0f, 0f), new CurvePoint(0.5f, 0.6f), new CurvePoint(1f, 1f) };
|
||||
private static readonly SimpleCurve LandingCurve = new SimpleCurve { new CurvePoint(0f, 1f), new CurvePoint(0.5f, 0.4f), new CurvePoint(1f, 0f) };
|
||||
|
||||
|
||||
public override void CompTick()
|
||||
{
|
||||
base.CompTick();
|
||||
if (!parent.Spawned) return;
|
||||
|
||||
FlightState oldState = flightState;
|
||||
|
||||
switch (flightState)
|
||||
{
|
||||
case FlightState.TakingOff:
|
||||
lerpTick++;
|
||||
if (lerpTick >= Props.takeoffDurationTicks) { flightState = FlightState.Flying; lerpTick = 0; }
|
||||
break;
|
||||
case FlightState.Landing:
|
||||
lerpTick++;
|
||||
if (lerpTick >= Props.landingDurationTicks) { flightState = FlightState.Grounded; lerpTick = 0; flightCooldownTicks = (int)(Props.flightCooldownSeconds * 60f); }
|
||||
break;
|
||||
case FlightState.Flying:
|
||||
flightTicks++;
|
||||
if (flightTicks >= Props.maxFlightTimeSeconds * 60f) { flightState = FlightState.Landing; }
|
||||
break;
|
||||
case FlightState.Grounded:
|
||||
if (flightCooldownTicks > 0) { flightCooldownTicks--; }
|
||||
break;
|
||||
}
|
||||
|
||||
if (oldState != flightState)
|
||||
{
|
||||
StateChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void StateChanged()
|
||||
{
|
||||
Pawn.Drawer.renderer.SetAllGraphicsDirty();
|
||||
}
|
||||
|
||||
public void Notify_JobStarted(Job job)
|
||||
{
|
||||
bool isFlyingOrTakingOff = flightState == FlightState.Flying || flightState == FlightState.TakingOff;
|
||||
bool wantsToFly = (job.def.tryStartFlying || (job.def.ifFlyingKeepFlying && isFlyingOrTakingOff));
|
||||
if (wantsToFly && flightState == FlightState.Grounded && flightCooldownTicks <= 0 && Rand.Chance(Props.flightStartChanceOnJobStart))
|
||||
{
|
||||
flightState = FlightState.TakingOff;
|
||||
flightTicks = 0;
|
||||
lerpTick = 0;
|
||||
StateChanged();
|
||||
}
|
||||
else if (!wantsToFly && isFlyingOrTakingOff)
|
||||
{
|
||||
flightState = FlightState.Landing;
|
||||
lerpTick = 0;
|
||||
StateChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public void LinkToRenderNode(PawnRenderNode_AnimatedAttachment node)
|
||||
{
|
||||
activeWingNode = node;
|
||||
}
|
||||
|
||||
public int GetCurrentFrame(int totalFrames)
|
||||
{
|
||||
if (totalFrames == 0) return 0;
|
||||
int currentTickInAnim = (flightState == FlightState.Flying) ? flightTicks : lerpTick;
|
||||
return (currentTickInAnim / Props.ticksPerFrame) % totalFrames;
|
||||
}
|
||||
|
||||
public List<Graphic> GetGraphicsForRotation(Rot4 rot)
|
||||
{
|
||||
if (cachedGraphics.TryGetValue(rot, out var graphics)) return graphics;
|
||||
|
||||
var newGraphics = new List<Graphic>();
|
||||
bool isFemale = Pawn.gender == Gender.Female && !string.IsNullOrEmpty(Props.flyingAnimationFramePathPrefixFemale);
|
||||
string prefix = isFemale ? Props.flyingAnimationFramePathPrefixFemale : Props.flyingAnimationFramePathPrefix;
|
||||
string suffix = (rot == Rot4.North) ? "_north" : (rot == Rot4.South) ? "_south" : "_east";
|
||||
|
||||
if (rot == Rot4.West) suffix = "_east";
|
||||
|
||||
for (int i = 1; i <= Props.flyingAnimationFrameCount; i++)
|
||||
{
|
||||
string path = prefix + i + suffix;
|
||||
Color color = Props.inheritColors ? Pawn.story.SkinColor : Color.white;
|
||||
var graphic = GraphicDatabase.Get<Graphic_Single>(path, ShaderDatabase.Transparent, Vector2.one * Props.drawSize, color);
|
||||
newGraphics.Add(graphic);
|
||||
}
|
||||
|
||||
cachedGraphics[rot] = newGraphics;
|
||||
return newGraphics;
|
||||
}
|
||||
|
||||
public override void PostExposeData()
|
||||
{
|
||||
base.PostExposeData();
|
||||
Scribe_Values.Look(ref flightTicks, "flightTicks", -1);
|
||||
Scribe_Values.Look(ref flightCooldownTicks, "flightCooldownTicks", 0);
|
||||
Scribe_Values.Look(ref lerpTick, "lerpTick", 0);
|
||||
Scribe_Values.Look(ref flightState, "flightState", FlightState.Grounded);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,33 +1,45 @@
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public enum FlightCondition
|
||||
{
|
||||
Drafted
|
||||
}
|
||||
|
||||
public class CompProperties_PawnFlight : CompProperties
|
||||
{
|
||||
// --- Animation ---
|
||||
// --- Custom Flight Logic ---
|
||||
public FlightCondition flightCondition = FlightCondition.Drafted;
|
||||
|
||||
// --- Vanilla PawnKindDef Flight Parameters ---
|
||||
[NoTranslate]
|
||||
public string flyingAnimationFramePathPrefix;
|
||||
|
||||
[NoTranslate]
|
||||
public string flyingAnimationFramePathPrefixFemale;
|
||||
public int flyingAnimationFrameCount = 1;
|
||||
public int ticksPerFrame = 2;
|
||||
|
||||
// --- Render Node Properties (Defined directly here) ---
|
||||
public Vector3 offset = Vector3.zero;
|
||||
public float drawSize = 1f;
|
||||
public bool inheritColors = false;
|
||||
public PawnRenderNodeTagDef parentTagDef; // e.g., "Body"
|
||||
public float baseLayer = 85f;
|
||||
|
||||
// --- Flight Mechanics ---
|
||||
public int takeoffDurationTicks = 50;
|
||||
public int landingDurationTicks = 50;
|
||||
public float maxFlightTimeSeconds = 5f;
|
||||
public float flightCooldownSeconds = 2f;
|
||||
public float flightStartChanceOnJobStart = 0.5f;
|
||||
public int flyingAnimationFrameCount;
|
||||
|
||||
public int flyingAnimationTicksPerFrame = -1;
|
||||
|
||||
public float flyingAnimationDrawSize = 1f;
|
||||
|
||||
public bool flyingAnimationDrawSizeIsMultiplier;
|
||||
|
||||
public bool flyingAnimationInheritColors;
|
||||
|
||||
// --- Vanilla PawnKindLifeStage Flight Parameters ---
|
||||
// Note: These are normally defined per lifestage, we define them once here for simplicity.
|
||||
// The harmony patch will need to inject these into the correct lifestage at runtime.
|
||||
public AnimationDef flyingAnimationEast;
|
||||
public AnimationDef flyingAnimationNorth;
|
||||
public AnimationDef flyingAnimationSouth;
|
||||
public AnimationDef flyingAnimationEastFemale;
|
||||
public AnimationDef flyingAnimationNorthFemale;
|
||||
public AnimationDef flyingAnimationSouthFemale;
|
||||
|
||||
// takeoffCurve and landingCurve are removed as they cannot be loaded directly from XML.
|
||||
// They will be hardcoded in the CompPawnFlight class.
|
||||
|
||||
public CompProperties_PawnFlight()
|
||||
{
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
using HarmonyLib; // Required for AccessTools
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class DynamicPawnRenderNodeSetup_FlightWings : DynamicPawnRenderNodeSetup
|
||||
{
|
||||
public override bool HumanlikeOnly => false;
|
||||
|
||||
public override IEnumerable<(PawnRenderNode node, PawnRenderNode parent)> GetDynamicNodes(Pawn pawn, PawnRenderTree tree)
|
||||
{
|
||||
CompPawnFlight flightComp = pawn.GetComp<CompPawnFlight>();
|
||||
if (flightComp != null && flightComp.ShouldShowWings)
|
||||
{
|
||||
// Create properties directly from CompProperties
|
||||
var nodeProps = new PawnRenderNodeProperties
|
||||
{
|
||||
nodeClass = typeof(PawnRenderNode_AnimatedAttachment),
|
||||
workerClass = AccessTools.TypeByName("Verse.PawnRenderNodeWorker_Flip"),
|
||||
parentTagDef = flightComp.Props.parentTagDef ?? PawnRenderNodeTagDefOf.Body,
|
||||
baseLayer = flightComp.Props.baseLayer
|
||||
};
|
||||
|
||||
// Create a new DrawData struct and set its offset, then assign it.
|
||||
DrawData drawData = new DrawData();
|
||||
typeof(DrawData).GetField("offset").SetValueDirect(__makeref(drawData), flightComp.Props.offset);
|
||||
nodeProps.drawData = drawData;
|
||||
|
||||
if (tree.ShouldAddNodeToTree(nodeProps))
|
||||
{
|
||||
var newNode = (PawnRenderNode_AnimatedAttachment)Activator.CreateInstance(
|
||||
nodeProps.nodeClass, pawn, nodeProps, tree
|
||||
);
|
||||
|
||||
flightComp.LinkToRenderNode(newNode);
|
||||
yield return (node: newNode, parent: null);
|
||||
}
|
||||
}
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,70 +1,100 @@
|
||||
using HarmonyLib;
|
||||
using Verse;
|
||||
using System.Reflection;
|
||||
using RimWorld;
|
||||
using Verse.AI;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
[StaticConstructorOnStartup]
|
||||
public static class HarmonyPatches
|
||||
// Note: We are no longer patching PawnGenerator.
|
||||
// We will inject/override flight logic at more precise points.
|
||||
[HarmonyPatch]
|
||||
public static class FlightHarmonyPatches
|
||||
{
|
||||
private static readonly FieldInfo flightField = AccessTools.Field(typeof(Pawn), "flight");
|
||||
|
||||
static HarmonyPatches()
|
||||
// Patch 1: Override the animation selection
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(Pawn_FlightTracker), "GetBestFlyAnimation")]
|
||||
public static bool GetBestFlyAnimation_Prefix(Pawn_FlightTracker __instance, Pawn ___pawn, Rot4? facingOverride, ref AnimationDef __result)
|
||||
{
|
||||
var harmony = new Harmony("com.arachnaeswarm.flightcomp");
|
||||
|
||||
harmony.Patch(AccessTools.Method(typeof(PawnComponentsUtility), nameof(PawnComponentsUtility.AddComponentsForSpawn)),
|
||||
postfix: new HarmonyMethod(typeof(HarmonyPatches), nameof(DisableVanillaFlightTracker)));
|
||||
|
||||
harmony.Patch(AccessTools.PropertyGetter(typeof(Pawn), nameof(Pawn.Flying)),
|
||||
postfix: new HarmonyMethod(typeof(HarmonyPatches), nameof(OverrideFlyingProperty)));
|
||||
|
||||
harmony.Patch(AccessTools.Method(typeof(Pawn), nameof(Pawn.ExposeData)),
|
||||
prefix: new HarmonyMethod(typeof(HarmonyPatches), nameof(PreventVanillaFlightTrackerSave_Prefix)),
|
||||
postfix: new HarmonyMethod(typeof(HarmonyPatches), nameof(PreventVanillaFlightTrackerSave_Postfix)));
|
||||
}
|
||||
|
||||
public static void DisableVanillaFlightTracker(Pawn pawn)
|
||||
{
|
||||
if (pawn.TryGetComp<CompPawnFlight>() != null)
|
||||
var flightComp = ___pawn.TryGetComp<CompPawnFlight>();
|
||||
if (flightComp == null)
|
||||
{
|
||||
flightField?.SetValue(pawn, null);
|
||||
return true; // Let original method run for non-comped pawns
|
||||
}
|
||||
}
|
||||
|
||||
public static void OverrideFlyingProperty(Pawn __instance, ref bool __result)
|
||||
{
|
||||
var comp = __instance.TryGetComp<CompPawnFlight>();
|
||||
if (comp != null)
|
||||
var compProps = flightComp.Props;
|
||||
bool isFemale = ___pawn.gender == Gender.Female;
|
||||
|
||||
// Determine which animation to use based on rotation and gender
|
||||
AnimationDef selectedAnim = null;
|
||||
switch ((facingOverride ?? ___pawn.Rotation).AsInt)
|
||||
{
|
||||
__result = comp.Flying;
|
||||
case 0: // North
|
||||
selectedAnim = isFemale ? compProps.flyingAnimationNorthFemale : compProps.flyingAnimationNorth;
|
||||
break;
|
||||
case 1: // East
|
||||
selectedAnim = isFemale ? compProps.flyingAnimationEastFemale : compProps.flyingAnimationEast;
|
||||
break;
|
||||
case 2: // South
|
||||
selectedAnim = isFemale ? compProps.flyingAnimationSouthFemale : compProps.flyingAnimationSouth;
|
||||
break;
|
||||
case 3: // West - Use East animation as fallback if West is not defined
|
||||
selectedAnim = isFemale ? (compProps.flyingAnimationEastFemale ?? compProps.flyingAnimationEast) : compProps.flyingAnimationEast;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Correct fix: Use 'object' to store the instance, avoiding direct type reference at compile time.
|
||||
private static object tempFlightTracker;
|
||||
|
||||
public static void PreventVanillaFlightTrackerSave_Prefix(Pawn __instance)
|
||||
{
|
||||
if (__instance.TryGetComp<CompPawnFlight>() != null)
|
||||
// If we have a valid animation from our comp, use it and stop the original method.
|
||||
if (selectedAnim != null)
|
||||
{
|
||||
object flightTrackerInstance = flightField?.GetValue(__instance);
|
||||
if (flightTrackerInstance != null)
|
||||
__result = selectedAnim;
|
||||
return false; // Stop original method
|
||||
}
|
||||
|
||||
return true; // Fallback to original if no animation is found in comp
|
||||
}
|
||||
|
||||
|
||||
// Patch 2: Decide whether to fly when a new job starts
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(Pawn_FlightTracker), "Notify_JobStarted")]
|
||||
public static bool Notify_JobStarted_Prefix(Job job, Pawn_FlightTracker __instance, Pawn ___pawn)
|
||||
{
|
||||
var flightComp = ___pawn.TryGetComp<CompPawnFlight>();
|
||||
if (flightComp == null || !__instance.CanEverFly || ___pawn.Dead)
|
||||
{
|
||||
return true; // Let original method run
|
||||
}
|
||||
|
||||
var compProps = flightComp.Props;
|
||||
bool shouldBeFlying = false;
|
||||
|
||||
// Check our custom condition
|
||||
if (compProps.flightCondition == FlightCondition.Drafted)
|
||||
{
|
||||
if (___pawn.Drafted)
|
||||
{
|
||||
tempFlightTracker = flightTrackerInstance;
|
||||
flightField.SetValue(__instance, null);
|
||||
shouldBeFlying = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void PreventVanillaFlightTrackerSave_Postfix(Pawn __instance)
|
||||
{
|
||||
if (tempFlightTracker != null)
|
||||
// Apply the decision
|
||||
if (shouldBeFlying)
|
||||
{
|
||||
flightField?.SetValue(__instance, tempFlightTracker);
|
||||
tempFlightTracker = null;
|
||||
if (!__instance.Flying)
|
||||
{
|
||||
__instance.StartFlying();
|
||||
}
|
||||
job.flying = true; // Mark the job as a flying job
|
||||
}
|
||||
else
|
||||
{
|
||||
if (__instance.Flying)
|
||||
{
|
||||
__instance.ForceLand();
|
||||
}
|
||||
job.flying = false;
|
||||
}
|
||||
|
||||
return false; // We have handled the logic, stop the original method.
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class PawnRenderNode_AnimatedAttachment : PawnRenderNode
|
||||
{
|
||||
private CompPawnFlight flightComp;
|
||||
private List<Graphic> cachedGraphics;
|
||||
|
||||
public PawnRenderNode_AnimatedAttachment(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree)
|
||||
{
|
||||
flightComp = pawn.GetComp<CompPawnFlight>();
|
||||
}
|
||||
|
||||
public override Graphic GraphicFor(Pawn pawn)
|
||||
{
|
||||
if (flightComp == null) return null;
|
||||
|
||||
if (cachedGraphics == null)
|
||||
{
|
||||
cachedGraphics = flightComp.GetGraphicsForRotation(pawn.Rotation);
|
||||
}
|
||||
|
||||
if (cachedGraphics.NullOrEmpty()) return null;
|
||||
|
||||
int frame = flightComp.GetCurrentFrame(cachedGraphics.Count);
|
||||
return cachedGraphics[frame];
|
||||
}
|
||||
|
||||
// We might need to override this if west-facing graphics need to be flipped.
|
||||
// public override Mesh GetMesh(PawnDrawParms parms)
|
||||
// {
|
||||
// return base.GetMesh(parms);
|
||||
// }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user