1
This commit is contained in:
Binary file not shown.
@@ -1209,93 +1209,6 @@
|
||||
</li>
|
||||
</comps>
|
||||
</AbilityDef>
|
||||
<HediffDef>
|
||||
<defName>ARA_Praetorian_Commander_Hediff</defName>
|
||||
<label>指挥节点</label>
|
||||
<description>阿拉克涅禁卫种正在指挥附近的虫族部队,因为需要分神搭建次级蜂巢思维网络,其战斗力被削弱了。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<maxSeverity>1.0</maxSeverity>
|
||||
<stages>
|
||||
<li>
|
||||
<minSeverity>0</minSeverity>
|
||||
<capMods>
|
||||
<li>
|
||||
<capacity>Consciousness</capacity>
|
||||
<setMax>0.9</setMax>
|
||||
</li>
|
||||
</capMods>
|
||||
</li>
|
||||
</stages>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_GiveHediffsInRangeToRace">
|
||||
<range>24</range>
|
||||
<hediff>ARA_Praetorian_Command_Hediff</hediff>
|
||||
<!-- <mote>Mote_ARA_CreepyCrawly_HediffLinkLine</mote> -->
|
||||
|
||||
<!-- 定义可以被影响的种族列表 -->
|
||||
<targetRaces>
|
||||
<li>ArachnaeNode_Race_ShieldHead</li>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
<li>ArachnaeNode_Race_Fighter</li>
|
||||
<li>ArachnaeNode_Race_Facehugger</li>
|
||||
<li>ArachnaeNode_Race_Myrmecocystus</li>
|
||||
<li>ArachnaeNode_Race_Smokepop</li>
|
||||
<li>ArachnaeNode_Race_NeuroSwarm</li>
|
||||
<li>ArachnaeNode_Race_Skyraider</li>
|
||||
<li>ArachnaeNode_Race_Praetorian</li>
|
||||
<li>ArachnaeBase_Race_Acidcut</li>
|
||||
<li>ArachnaeBase_Race_Acidling</li>
|
||||
<li>ArachnaeBase_Race_Skyhive</li>
|
||||
<li>ArachnaeNode_Race_MimicNematode</li>
|
||||
</targetRaces>
|
||||
|
||||
<!-- 其他参数和原版一样 -->
|
||||
<targetingParameters>
|
||||
<canTargetBuildings>false</canTargetBuildings>
|
||||
<canTargetAnimals>true</canTargetAnimals>
|
||||
<canTargetMechs>false</canTargetMechs>
|
||||
<canTargetSelf>true</canTargetSelf>
|
||||
<onlyTargetColonists>false</onlyTargetColonists>
|
||||
</targetingParameters>
|
||||
<onlyPawnsInSameFaction>true</onlyPawnsInSameFaction>
|
||||
<hideMoteWhenNotDrafted>true</hideMoteWhenNotDrafted>
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<HediffDef>
|
||||
<defName>ARA_Praetorian_Command_Hediff</defName>
|
||||
<label>蜂巢指挥</label>
|
||||
<description>一只阿拉克涅禁卫种在附近承担战场指挥官的职责,受到指挥的阿拉克涅虫族通过一个次级蜂巢思维网络进行链接,加强了其整体战斗力。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<isBad>false</isBad>
|
||||
<defaultLabelColor>(0.6, 0.6, 0.6)</defaultLabelColor>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<stages>
|
||||
<li>
|
||||
<statFactors>
|
||||
<MeleeHitChance>1.5</MeleeHitChance>
|
||||
<MeleeDodgeChance>2</MeleeDodgeChance>
|
||||
<MeleeCooldownFactor>0.75</MeleeCooldownFactor>
|
||||
<ShootingAccuracyPawn>2</ShootingAccuracyPawn>
|
||||
<StaggerDurationFactor>0</StaggerDurationFactor>
|
||||
</statFactors>
|
||||
</li>
|
||||
</stages>
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_Disappears">
|
||||
<showRemainingTime>false</showRemainingTime>
|
||||
</li>
|
||||
<li Class="HediffCompProperties_DisappearsOnDeath"/>
|
||||
<li Class="HediffCompProperties_Link">
|
||||
<requireLinkOnOtherPawn>false</requireLinkOnOtherPawn>
|
||||
<maxDistance>24</maxDistance>
|
||||
<!-- <customMote>Mote_ARA_CreepyCrawly_HediffLinkLine</customMote> -->
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
|
||||
<AbilityDef>
|
||||
<defName>ARA_Pouch_Hatching_Acidling</defName>
|
||||
|
||||
@@ -24,4 +24,112 @@
|
||||
<solidTime>0</solidTime>
|
||||
<fadeOutTime>0.2</fadeOutTime>
|
||||
</FleckDef>
|
||||
<FleckDef ParentName="FleckBase">
|
||||
<defName>ARA_GunTail_Frost</defName>
|
||||
<altitudeLayer>Projectile</altitudeLayer>
|
||||
<solidTime>0.05</solidTime>
|
||||
<fadeOutTime>0.1</fadeOutTime>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Mote/ARA_GunTail_Plasma</texPath>
|
||||
<shaderType>MoteGlow</shaderType>
|
||||
<drawSize>1.25</drawSize>
|
||||
<color>(9,211,255,155)</color>
|
||||
</graphicData>
|
||||
</FleckDef>
|
||||
|
||||
<ThingDef ParentName="MoteBase">
|
||||
<defName>ARA_Mote_halo</defName>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Mote/halo</texPath>
|
||||
<shaderType>MoteGlow</shaderType>
|
||||
</graphicData>
|
||||
<altitudeLayer>MoteOverhead</altitudeLayer>
|
||||
<mote>
|
||||
<fadeInTime>0</fadeInTime>
|
||||
<solidTime>0</solidTime>
|
||||
<fadeOutTime>0.1</fadeOutTime>
|
||||
<growthRate>40</growthRate>
|
||||
<rotateTowardsMoveDirection>true</rotateTowardsMoveDirection>
|
||||
</mote>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="MoteBase">
|
||||
<defName>ARA_Mote_fire</defName>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Mote/fire</texPath>
|
||||
<shaderType>MoteGlow</shaderType>
|
||||
</graphicData>
|
||||
<altitudeLayer>MoteOverhead</altitudeLayer>
|
||||
<mote>
|
||||
<fadeInTime>0</fadeInTime>
|
||||
<solidTime>0</solidTime>
|
||||
<fadeOutTime>0.2</fadeOutTime>
|
||||
<growthRate>8</growthRate>
|
||||
<rotateTowardsMoveDirection>true</rotateTowardsMoveDirection>
|
||||
</mote>
|
||||
</ThingDef>
|
||||
<ThingDef ParentName="MoteBase">
|
||||
<defName>ARA_Mote_ChargeLanceShot</defName>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Mote/ARA_Spike_Shell</texPath>
|
||||
<drawSize>(0.75,1.5)</drawSize>
|
||||
<shaderType>MoteGlow</shaderType>
|
||||
<color>(255,255,255)</color>
|
||||
</graphicData>
|
||||
<altitudeLayer>Projectile</altitudeLayer>
|
||||
<mote>
|
||||
<fadeInTime>0.2</fadeInTime>
|
||||
<solidTime>0.4</solidTime>
|
||||
<fadeOutTime>0.2</fadeOutTime>
|
||||
<growthRate>-0.8</growthRate>
|
||||
<rotateTowardsMoveDirection>true</rotateTowardsMoveDirection>
|
||||
</mote>
|
||||
</ThingDef>
|
||||
<EffecterDef>
|
||||
<defName>ARA_RW_Lighting_Cannon_Hit</defName>
|
||||
<children>
|
||||
<li>
|
||||
<subEffecterClass>SubEffecter_SprayerTriggered</subEffecterClass>
|
||||
<positionRadius>0.1</positionRadius>
|
||||
<moteDef>ARA_Mote_halo</moteDef>
|
||||
<burstCount>1~1</burstCount>
|
||||
<speed>0.4~0.8</speed>
|
||||
<scale>0.05~0.05</scale>
|
||||
<spawnLocType>OnSource</spawnLocType>
|
||||
<color>(255,255,255)</color>
|
||||
</li>
|
||||
<li>
|
||||
<subEffecterClass>SubEffecter_SprayerTriggered</subEffecterClass>
|
||||
<positionRadius>0.02</positionRadius>
|
||||
<moteDef>ARA_Mote_fire</moteDef>
|
||||
<burstCount>1~1</burstCount>
|
||||
<speed>0.3~0.4</speed>
|
||||
<rotationRate>5~10</rotationRate>
|
||||
<scale>0.1~0.2</scale>
|
||||
<spawnLocType>OnSource</spawnLocType>
|
||||
<color>(255,255,255)</color>
|
||||
</li>
|
||||
<li>
|
||||
<subEffecterClass>SubEffecter_SprayerTriggered</subEffecterClass>
|
||||
<moteDef>ARA_Mote_ChargeLanceShot</moteDef>
|
||||
<burstCount>1~4</burstCount>
|
||||
<scale>0.4~0.8</scale>
|
||||
<speed>20~40</speed>
|
||||
<angle>135~225</angle>
|
||||
<positionRadius>0.01</positionRadius>
|
||||
<spawnLocType>OnSource</spawnLocType>
|
||||
</li>
|
||||
<li>
|
||||
<subEffecterClass>SubEffecter_SprayerTriggered</subEffecterClass>
|
||||
<moteDef>ARA_Mote_ChargeLanceShot</moteDef>
|
||||
<burstCount>2~3</burstCount>
|
||||
<scale>0.4~0.8</scale>
|
||||
<speed>10~20</speed>
|
||||
<angle>135~225</angle>
|
||||
<positionRadius>0.01</positionRadius>
|
||||
<spawnLocType>OnSource</spawnLocType>
|
||||
</li>
|
||||
</children>
|
||||
<offsetTowardsTarget>0.25~0.25</offsetTowardsTarget>
|
||||
<positionRadius>0.1</positionRadius>
|
||||
</EffecterDef>
|
||||
</Defs>
|
||||
@@ -91,7 +91,6 @@
|
||||
<li>
|
||||
<statFactors>
|
||||
<IncomingDamageFactor>0.75</IncomingDamageFactor>
|
||||
<PsychicSensitivity>0</PsychicSensitivity>
|
||||
</statFactors>
|
||||
</li>
|
||||
</stages>
|
||||
@@ -112,4 +111,92 @@
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
|
||||
<HediffDef>
|
||||
<defName>ARA_Praetorian_Commander_Hediff</defName>
|
||||
<label>指挥节点</label>
|
||||
<description>阿拉克涅禁卫种正在指挥附近的虫族部队,因为需要分神搭建次级蜂巢思维网络,其战斗力被削弱了。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<isBad>false</isBad>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<maxSeverity>1.0</maxSeverity>
|
||||
<stages>
|
||||
<li>
|
||||
<minSeverity>0</minSeverity>
|
||||
<capMods>
|
||||
<li>
|
||||
<capacity>Consciousness</capacity>
|
||||
<setMax>0.9</setMax>
|
||||
</li>
|
||||
</capMods>
|
||||
</li>
|
||||
</stages>
|
||||
<comps>
|
||||
<li Class="ArachnaeSwarm.HediffCompProperties_GiveHediffsInRangeToRace">
|
||||
<range>24</range>
|
||||
<hediff>ARA_Praetorian_Command_Hediff</hediff>
|
||||
<!-- <mote>Mote_ARA_CreepyCrawly_HediffLinkLine</mote> -->
|
||||
|
||||
<!-- 定义可以被影响的种族列表 -->
|
||||
<targetRaces>
|
||||
<li>ArachnaeNode_Race_ShieldHead</li>
|
||||
<li>ArachnaeNode_Race_WeaponSmith</li>
|
||||
<li>ArachnaeNode_Race_Fighter</li>
|
||||
<li>ArachnaeNode_Race_Facehugger</li>
|
||||
<li>ArachnaeNode_Race_Myrmecocystus</li>
|
||||
<li>ArachnaeNode_Race_Smokepop</li>
|
||||
<li>ArachnaeNode_Race_NeuroSwarm</li>
|
||||
<li>ArachnaeNode_Race_Skyraider</li>
|
||||
<li>ArachnaeNode_Race_Praetorian</li>
|
||||
<li>ArachnaeBase_Race_Acidcut</li>
|
||||
<li>ArachnaeBase_Race_Acidling</li>
|
||||
<li>ArachnaeBase_Race_Skyhive</li>
|
||||
<li>ArachnaeNode_Race_MimicNematode</li>
|
||||
</targetRaces>
|
||||
|
||||
<!-- 其他参数和原版一样 -->
|
||||
<targetingParameters>
|
||||
<canTargetBuildings>false</canTargetBuildings>
|
||||
<canTargetAnimals>true</canTargetAnimals>
|
||||
<canTargetMechs>false</canTargetMechs>
|
||||
<canTargetSelf>true</canTargetSelf>
|
||||
<onlyTargetColonists>false</onlyTargetColonists>
|
||||
</targetingParameters>
|
||||
<onlyPawnsInSameFaction>true</onlyPawnsInSameFaction>
|
||||
<hideMoteWhenNotDrafted>true</hideMoteWhenNotDrafted>
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
<HediffDef>
|
||||
<defName>ARA_Praetorian_Command_Hediff</defName>
|
||||
<label>蜂巢指挥</label>
|
||||
<description>一只阿拉克涅禁卫种在附近承担战场指挥官的职责,受到指挥的阿拉克涅虫族通过一个次级蜂巢思维网络进行链接,加强了其整体战斗力。</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<isBad>false</isBad>
|
||||
<defaultLabelColor>(0.6, 0.6, 0.6)</defaultLabelColor>
|
||||
<scenarioCanAdd>false</scenarioCanAdd>
|
||||
<stages>
|
||||
<li>
|
||||
<statFactors>
|
||||
<MeleeHitChance>1.5</MeleeHitChance>
|
||||
<MeleeDodgeChance>2</MeleeDodgeChance>
|
||||
<MeleeCooldownFactor>0.75</MeleeCooldownFactor>
|
||||
<ShootingAccuracyPawn>2</ShootingAccuracyPawn>
|
||||
<StaggerDurationFactor>0</StaggerDurationFactor>
|
||||
</statFactors>
|
||||
</li>
|
||||
</stages>
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_Disappears">
|
||||
<showRemainingTime>false</showRemainingTime>
|
||||
</li>
|
||||
<li Class="HediffCompProperties_DisappearsOnDeath"/>
|
||||
<li Class="HediffCompProperties_Link">
|
||||
<requireLinkOnOtherPawn>false</requireLinkOnOtherPawn>
|
||||
<maxDistance>24</maxDistance>
|
||||
<!-- <customMote>Mote_ARA_CreepyCrawly_HediffLinkLine</customMote> -->
|
||||
</li>
|
||||
</comps>
|
||||
</HediffDef>
|
||||
</Defs>
|
||||
@@ -1,10 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
|
||||
<HediffDef>
|
||||
<defName>ARA_PowerArmor_NoFuel</defName>
|
||||
<label>外骨骼营养不良</label>
|
||||
<description>生物外骨骼因缺少养分而营养不良,这会对宿主造成不良影响.</description>
|
||||
<label>共生肌群营养不良</label>
|
||||
<description>共生肌群因缺少养分而营养不良,这会对宿主造成不良影响.</description>
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.6, 0.6)</defaultLabelColor>
|
||||
<isBad>true</isBad>
|
||||
@@ -21,4 +20,77 @@
|
||||
</stages>
|
||||
</HediffDef>
|
||||
|
||||
<HediffDef>
|
||||
<defName>ARA_SpiderOne_PowerArmor_MainHediff</defName>
|
||||
<label>共生肌群</label>
|
||||
<description>阿拉克涅虫群的特殊活体结构,本身虽然拥有生物的大部分器官,但是没有任何智能,可以与督虫的神经系统进行融合,成为类似动力装甲一样的装备。共生肌群会为宿主提供额外的重型武器,并且身上也装备了大量的微型武装器官,使得阿拉克涅虫族可以驾驭比肩人类战车的力量。</description>
|
||||
<!--<tendable>false</tendable> Must be removed via surgery -->
|
||||
<!--<displayWound>true</displayWound>-->
|
||||
<hediffClass>HediffWithComps</hediffClass>
|
||||
<defaultLabelColor>(0.6, 0.4, 0.8)</defaultLabelColor>
|
||||
<comps>
|
||||
<li Class="HediffCompProperties_RemoveIfApparelDropped" />
|
||||
<li Class="HediffCompProperties_VerbGiver">
|
||||
<tools>
|
||||
<li>
|
||||
<label>前肢穿刺</label>
|
||||
<capacities>
|
||||
<li>Blunt</li>
|
||||
</capacities>
|
||||
<power>25</power>
|
||||
<cooldownTime>2.2</cooldownTime>
|
||||
<alwaysTreatAsWeapon>true</alwaysTreatAsWeapon>
|
||||
<surpriseAttack>
|
||||
<extraMeleeDamages>
|
||||
<li>
|
||||
<def>Stun</def>
|
||||
<amount>12</amount>
|
||||
</li>
|
||||
</extraMeleeDamages>
|
||||
</surpriseAttack>
|
||||
<!-- <soundMeleeHit>Pawn_Melee_PowerClaw_Hit</soundMeleeHit>
|
||||
<soundMeleeMiss>Pawn_Melee_PowerClaw_Miss</soundMeleeMiss> -->
|
||||
</li>
|
||||
</tools>
|
||||
</li>
|
||||
</comps>
|
||||
<stages>
|
||||
<li>
|
||||
<statFactors>
|
||||
<MeleeHitChance>2</MeleeHitChance>
|
||||
<IncomingDamageFactor>0.5</IncomingDamageFactor>
|
||||
<StaggerDurationFactor>0</StaggerDurationFactor>
|
||||
</statFactors>
|
||||
</li>
|
||||
</stages>
|
||||
<renderNodeProperties>
|
||||
<li>
|
||||
<debugLabel>ARA_SpiderOne_PowerArmor_MainHediff</debugLabel>
|
||||
<workerClass>PawnRenderNodeWorker_AttachmentBody</workerClass>
|
||||
<texPaths>
|
||||
<li>ArachnaeSwarm/Apparel/ARA_SpiderOne_PowerArmor_Thin_south_Top</li>
|
||||
</texPaths>
|
||||
<texSeed>1</texSeed>
|
||||
<visibleFacing>
|
||||
<li>South</li>
|
||||
</visibleFacing>
|
||||
<drawData>
|
||||
<scale>2.1</scale>
|
||||
<dataEast>
|
||||
<layer>-99999</layer>
|
||||
</dataEast>
|
||||
<dataWest>
|
||||
<layer>-99999</layer>
|
||||
</dataWest>
|
||||
<dataNorth>
|
||||
<layer>-99999</layer>
|
||||
</dataNorth>
|
||||
<dataSouth>
|
||||
<layer>50</layer>
|
||||
<offset>(0, 0, -0.5)</offset>
|
||||
</dataSouth>
|
||||
</drawData>
|
||||
</li>
|
||||
</renderNodeProperties>
|
||||
</HediffDef>
|
||||
</Defs>
|
||||
@@ -15,4 +15,25 @@
|
||||
</li>
|
||||
</subSounds>
|
||||
</SoundDef>
|
||||
<SoundDef>
|
||||
<defName>ARA_RW_Lighting_Cannon_Shootingsound</defName>
|
||||
<sustain>true</sustain>
|
||||
<context>MapOnly</context>
|
||||
<maxSimultaneous>1</maxSimultaneous>
|
||||
<priorityMode>PrioritizeNearest</priorityMode>
|
||||
<!-- <sustainStopSound>BeamGraser_Shooting_Resolve</sustainStopSound> -->
|
||||
<subSounds>
|
||||
<li>
|
||||
<!-- <tempoAffectedByGameSpeed>true</tempoAffectedByGameSpeed> -->
|
||||
<grains>
|
||||
<li Class="AudioGrain_Clip">
|
||||
<clipPath>ArachnaeSwarm/ARA_RW_Lighting_Cannon_Shootingsound</clipPath>
|
||||
</li>
|
||||
</grains>
|
||||
<pitchRange>0.99~1.01</pitchRange>
|
||||
<volumeRange>50</volumeRange>
|
||||
<!-- <sustainRelease>0.02</sustainRelease> -->
|
||||
</li>
|
||||
</subSounds>
|
||||
</SoundDef>
|
||||
</Defs>
|
||||
@@ -625,6 +625,7 @@
|
||||
|
||||
<recipes Inherit="False">
|
||||
<li>RemovePorcupineQuill</li>
|
||||
<li>SurgicalInspection</li>
|
||||
<li>ARA_Surgery_Install_Plasteel</li>
|
||||
<li>ARA_Surgery_Install_Carapace_Shell</li>
|
||||
<li>ARA_Surgery_Install_Huge_Stomach</li>
|
||||
@@ -1863,11 +1864,6 @@
|
||||
<drawnLaying>true</drawnLaying>
|
||||
</Posture>
|
||||
<RotStage>Fresh,Rotting</RotStage>
|
||||
<Apparel>
|
||||
<hiddenUnderApparelTag>
|
||||
<li>ARA_PowerArmor</li>
|
||||
</hiddenUnderApparelTag>
|
||||
</Apparel>
|
||||
</conditions>
|
||||
<offsets>
|
||||
<west>
|
||||
@@ -1910,11 +1906,6 @@
|
||||
<bodyPart>Head</bodyPart>
|
||||
<drawWithoutPart>false</drawWithoutPart>
|
||||
</BodyPart>
|
||||
<Apparel>
|
||||
<hiddenUnderApparelTag>
|
||||
<li>ARA_PowerArmor</li>
|
||||
</hiddenUnderApparelTag>
|
||||
</Apparel>
|
||||
</conditions>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
@@ -102,6 +102,7 @@
|
||||
<label>Frost cloud</label>
|
||||
<graphicData>
|
||||
<texPath>Things/Gas/Puff</texPath>
|
||||
<shaderType>MoteGlow</shaderType>
|
||||
<drawSize>2.6</drawSize>
|
||||
<color>(0.52, 1, 0.95,0.5)</color>
|
||||
</graphicData>
|
||||
|
||||
@@ -540,8 +540,8 @@
|
||||
</ThingDef>
|
||||
|
||||
<ApparelLayerDef>
|
||||
<defName>Shield</defName>
|
||||
<label>盾牌</label>
|
||||
<defName>ARA_Shield</defName>
|
||||
<label>盾牌和共生肌群</label>
|
||||
<drawOrder>275</drawOrder>
|
||||
</ApparelLayerDef>
|
||||
</Defs>
|
||||
@@ -7,8 +7,8 @@
|
||||
<description>阿拉克涅虫群的特殊活体结构,本身虽然拥有生物的大部分器官,但是没有任何智能,可以与督虫的神经系统进行融合,成为类似动力装甲一样的装备。共生肌群会为宿主提供额外的重型武器,并且身上也装备了大量的微型武装器官,使得阿拉克涅虫族可以驾驭比肩人类战车的力量。</description>
|
||||
<graphicData>
|
||||
<graphicClass>Graphic_Multi</graphicClass>
|
||||
<drawSize>(1,1)</drawSize>
|
||||
<texPath>ArachnaeSwarm/Apparel/ARA_Building_SpiderOne</texPath>
|
||||
<drawSize>(3,3)</drawSize>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_Building_SpiderOne</texPath>
|
||||
</graphicData>
|
||||
<descriptionHyperlinks>
|
||||
<ThingDef>ARA_SpiderOne_PowerArmor</ThingDef>
|
||||
@@ -79,11 +79,12 @@
|
||||
</li>
|
||||
<li>
|
||||
<label>高能武装</label>
|
||||
<description>使用拥有极致对单伤害的高能系武器,以快速点杀对方高价值目标。</description>
|
||||
<description>使用拥有极致对单输出的高能系武器,以快速点杀对方高价值目标。</description>
|
||||
<weapon>ARA_RW_Lighting_Cannon</weapon> <!-- 这里使用实际的武器定义 -->
|
||||
<hediffsToAdd>
|
||||
<!-- <li>ARA_CombatStim</li> -->
|
||||
</hediffsToAdd>
|
||||
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_RW_Lighting_Cannon_Switch</iconPath>
|
||||
</li>
|
||||
</weaponSets>
|
||||
</li>
|
||||
@@ -97,7 +98,7 @@
|
||||
<ARA_Carapace>25</ARA_Carapace>
|
||||
</costList>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Apparel/ARA_Bunny_Girl_Uniform</texPath>
|
||||
<texPath>ArachnaeSwarm/Building/ARA_Building_SpiderOne_south</texPath>
|
||||
</graphicData>
|
||||
<apparel>
|
||||
<tags>
|
||||
@@ -111,15 +112,27 @@
|
||||
</bodyPartGroups>
|
||||
<layers>
|
||||
<!-- <li>OnSkin</li> -->
|
||||
<li>Middle</li>
|
||||
<li>ARA_Shield</li>
|
||||
</layers>
|
||||
<wornGraphicPath>ArachnaeSwarm/Apparel/ARA_SpiderOne_PowerArmor</wornGraphicPath>
|
||||
<drawData>
|
||||
<scale>2.1</scale>
|
||||
<dataEast>
|
||||
<layer>350</layer>
|
||||
<offset>(0, 0, -0.4)</offset>
|
||||
<layer>50</layer>
|
||||
<offset>(0, 0, -0.5)</offset>
|
||||
</dataEast>
|
||||
<dataWest>
|
||||
<layer>50</layer>
|
||||
<offset>(0, 0, -0.5)</offset>
|
||||
</dataWest>
|
||||
<dataNorth>
|
||||
<layer>350</layer>
|
||||
<offset>(0, 0, -0.5)</offset>
|
||||
</dataNorth>
|
||||
<dataSouth>
|
||||
<layer>-150</layer>
|
||||
<offset>(0, 0, -0.4)</offset>
|
||||
</dataSouth>
|
||||
</drawData>
|
||||
</apparel>
|
||||
<statBases>
|
||||
@@ -131,7 +144,7 @@
|
||||
<costStuffCount>0</costStuffCount>
|
||||
<comps>
|
||||
<li Class="CompProperties_CauseHediff_Apparel">
|
||||
<hediff>ARA_TerrainMoveSpeedHediff</hediff>
|
||||
<hediff>ARA_SpiderOne_PowerArmor_MainHediff</hediff>
|
||||
</li>
|
||||
<!-- <li Class="ArachnaeSwarm.CompProperties_ExtraIncubationInfo">
|
||||
<cocoonDefs>
|
||||
|
||||
@@ -573,6 +573,17 @@
|
||||
<ThingDef ParentName="BaseBullet">
|
||||
<defName>ARA_Bullet_SniperCannon</defName>
|
||||
<label>阿拉克涅棘刺</label>
|
||||
<thingClass>ArachnaeSwarm.Projectile_WulaLineAttack</thingClass>
|
||||
<modExtensions>
|
||||
<li Class="ArachnaeSwarm.Wula_PathPierce_Extension">
|
||||
<maxHits>0</maxHits> <!-- 无限穿透 -->
|
||||
<damageFalloff>0</damageFalloff> <!-- 无伤害衰减 -->
|
||||
<preventFriendlyFire>true</preventFriendlyFire> <!-- 是否阻止友方火力 -->
|
||||
|
||||
<!-- 击中特效属性 -->
|
||||
<impactEffecter>ARA_RW_Lighting_Cannon_Hit</impactEffecter>
|
||||
</li>
|
||||
</modExtensions>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Mote/ARA_Spike_Shell</texPath>
|
||||
<graphicClass>Graphic_Single_AgeSecs</graphicClass>
|
||||
@@ -685,7 +696,10 @@
|
||||
<li Class="ArachnaeSwarm.Wula_PathPierce_Extension">
|
||||
<maxHits>-1</maxHits> <!-- 无限穿透 -->
|
||||
<damageFalloff>0</damageFalloff> <!-- 无伤害衰减 -->
|
||||
<preventFriendlyFire>false</preventFriendlyFire> <!-- 是否阻止友方火力 -->
|
||||
<preventFriendlyFire>true</preventFriendlyFire> <!-- 是否阻止友方火力 -->
|
||||
|
||||
<!-- 击中特效属性 -->
|
||||
<impactEffecter>ARA_RW_Lighting_Cannon_Hit</impactEffecter>
|
||||
</li>
|
||||
</modExtensions>
|
||||
<graphicData>
|
||||
@@ -2019,6 +2033,7 @@
|
||||
<minRange>5</minRange>
|
||||
<range>49</range>
|
||||
<burstShotCount>12</burstShotCount>
|
||||
<ticksBetweenBurstShots>1</ticksBetweenBurstShots>
|
||||
<soundCast>SpitterSpit</soundCast>
|
||||
<targetParams>
|
||||
<canTargetLocations>true</canTargetLocations>
|
||||
@@ -2067,15 +2082,20 @@
|
||||
<color>(63,223,222,180)</color>
|
||||
</graphicData>
|
||||
<uiIconScale>0.8</uiIconScale>
|
||||
<thingClass>Projectile_Explosive</thingClass>
|
||||
<thingClass>ArachnaeSwarm.Projectile_ExplosiveWithTrail</thingClass>
|
||||
<modExtensions>
|
||||
<li Class="ArachnaeSwarm.TrackingBulletDef">
|
||||
<tailFleckDef>ARA_GunTail_Frost</tailFleckDef>
|
||||
<fleckMakeFleckTickMax>3</fleckMakeFleckTickMax>
|
||||
</li>
|
||||
</modExtensions>
|
||||
<projectile>
|
||||
<useGraphicClass>True</useGraphicClass>
|
||||
<shadowSize>1</shadowSize>
|
||||
<damageDef>ARA_Damage_Freeze_ex</damageDef>
|
||||
<damageAmountBase>25</damageAmountBase>
|
||||
<armorPenetrationBase>1</armorPenetrationBase>
|
||||
<damageAmountBase>5</damageAmountBase>
|
||||
<speed>75</speed>
|
||||
<arcHeightFactor>1</arcHeightFactor>
|
||||
<arcHeightFactor>0</arcHeightFactor>
|
||||
<explosionRadius>3.5</explosionRadius>
|
||||
<flyOverhead>true</flyOverhead>
|
||||
<postExplosionSpawnThingDef>ARA_FrostGasCloud_Ex</postExplosionSpawnThingDef>
|
||||
@@ -2097,10 +2117,11 @@
|
||||
<tradeability>None</tradeability>
|
||||
<destroyOnDrop>true</destroyOnDrop>
|
||||
<graphicData>
|
||||
<texPath>ArachnaeSwarm/Weapon/ARA_RW_Acid_Mortar</texPath>
|
||||
<texPath>ArachnaeSwarm/Weapon/ARA_RW_Lighting_Cannon</texPath>
|
||||
<graphicClass>Graphic_Single</graphicClass>
|
||||
<drawSize>1.5</drawSize>
|
||||
<drawSize>1.2</drawSize>
|
||||
</graphicData>
|
||||
<uiIconScale>0.8</uiIconScale>
|
||||
<statBases>
|
||||
<Mass>2.6</Mass>
|
||||
<AccuracyTouch>0.60</AccuracyTouch>
|
||||
@@ -2132,7 +2153,7 @@
|
||||
|
||||
<!-- 视觉和音效 -->
|
||||
<muzzleFlashScale>0</muzzleFlashScale>
|
||||
<soundCastBeam>BeamGraser_Shooting</soundCastBeam>
|
||||
<soundCastBeam>ARA_RW_Lighting_Cannon_Shootingsound</soundCastBeam>
|
||||
<beamGroundFleckDef>Fleck_IncineratorBeamBurn</beamGroundFleckDef>
|
||||
<beamFleckChancePerTick>0.32</beamFleckChancePerTick>
|
||||
<beamMoteDef>Mote_ARA_RW_Lighting_Cannon_Beam</beamMoteDef>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 111 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 131 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 34 KiB |
Binary file not shown.
@@ -3,44 +3,8 @@
|
||||
"WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\powerarmor\\ara_powerarmor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:powerarmor\\ara_powerarmor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\powerarmor\\jobdriver_enterpowerarmor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:powerarmor\\jobdriver_enterpowerarmor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\powerarmor\\comppowerarmorstation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:powerarmor\\comppowerarmorstation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\powerarmor\\gizmo_structurepanel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:powerarmor\\gizmo_structurepanel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\abilities\\ara_huggingface\\compabilityeffect_possess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_huggingface\\compabilityeffect_possess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_nutrientvat\\building_nutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_nutrientvat\\building_nutrientvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_building_refuelingvat\\building_refuelingvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_building_refuelingvat\\building_refuelingvat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_compinteractiveproducer\\compinteractiveproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_compinteractiveproducer\\compinteractiveproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\compnutritiontofuelconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\compnutritiontofuelconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_compinteractiveproducer\\compresearchproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_compinteractiveproducer\\compresearchproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\verbs\\verb_shootarc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:verbs\\verb_shootarc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
@@ -50,134 +14,24 @@
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 4,
|
||||
"SelectedChildIndex": 1,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "CompPowerArmorStation.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PowerArmor\\CompPowerArmorStation.cs",
|
||||
"RelativeDocumentMoniker": "PowerArmor\\CompPowerArmorStation.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PowerArmor\\CompPowerArmorStation.cs",
|
||||
"RelativeToolTip": "PowerArmor\\CompPowerArmorStation.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAmAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-18T16:40:43.953Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "JobDriver_EnterPowerArmor.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PowerArmor\\JobDriver_EnterPowerArmor.cs",
|
||||
"RelativeDocumentMoniker": "PowerArmor\\JobDriver_EnterPowerArmor.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PowerArmor\\JobDriver_EnterPowerArmor.cs",
|
||||
"RelativeToolTip": "PowerArmor\\JobDriver_EnterPowerArmor.cs",
|
||||
"ViewState": "AgIAAGUAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-18T16:33:18.657Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "Gizmo_StructurePanel.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PowerArmor\\Gizmo_StructurePanel.cs",
|
||||
"RelativeDocumentMoniker": "PowerArmor\\Gizmo_StructurePanel.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PowerArmor\\Gizmo_StructurePanel.cs",
|
||||
"RelativeToolTip": "PowerArmor\\Gizmo_StructurePanel.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-18T16:32:53.277Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "ARA_PowerArmor.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PowerArmor\\ARA_PowerArmor.cs",
|
||||
"RelativeDocumentMoniker": "PowerArmor\\ARA_PowerArmor.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PowerArmor\\ARA_PowerArmor.cs",
|
||||
"RelativeToolTip": "PowerArmor\\ARA_PowerArmor.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAA==",
|
||||
"Title": "Verb_ShootArc.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Verb_ShootArc.cs",
|
||||
"RelativeDocumentMoniker": "Verbs\\Verb_ShootArc.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Verbs\\Verb_ShootArc.cs",
|
||||
"RelativeToolTip": "Verbs\\Verb_ShootArc.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-18T16:30:55.497Z",
|
||||
"WhenOpened": "2025-10-19T13:10:19.942Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 4,
|
||||
"Title": "CompAbilityEffect_Possess.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs",
|
||||
"RelativeDocumentMoniker": "Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs",
|
||||
"RelativeToolTip": "Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs",
|
||||
"ViewState": "AgIAACwAAAAAAAAAAAAkwDsAAAAtAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-18T13:31:46.288Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"Title": "Building_NutrientVat.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
|
||||
"RelativeDocumentMoniker": "Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
|
||||
"RelativeToolTip": "Building_Comps\\ARA_NutrientVat\\Building_NutrientVat.cs",
|
||||
"ViewState": "AgIAAAgAAAAAAAAAAAAQwBAAAAAIAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-18T11:56:31.022Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 6,
|
||||
"Title": "Building_RefuelingVat.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs",
|
||||
"RelativeDocumentMoniker": "Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs",
|
||||
"RelativeToolTip": "Building_Comps\\ARA_Building_RefuelingVat\\Building_RefuelingVat.cs",
|
||||
"ViewState": "AgIAAGcAAAAAAAAAAAAAAI4AAAAgAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-18T11:56:12.333Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 8,
|
||||
"Title": "CompNutritionToFuelConverter.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\CompNutritionToFuelConverter.cs",
|
||||
"RelativeDocumentMoniker": "Building_Comps\\CompNutritionToFuelConverter.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\CompNutritionToFuelConverter.cs",
|
||||
"RelativeToolTip": "Building_Comps\\CompNutritionToFuelConverter.cs",
|
||||
"ViewState": "AgIAAGEAAAAAAAAAAAAQwHYAAAAJAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-17T11:32:00.484Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 9,
|
||||
"Title": "CompResearchProducer.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
|
||||
"RelativeDocumentMoniker": "Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
|
||||
"RelativeToolTip": "Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
|
||||
"ViewState": "AgIAADoBAAAAAAAAAAAkwFIBAAAmAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-17T09:09:18.518Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 7,
|
||||
"Title": "CompInteractiveProducer.cs",
|
||||
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
|
||||
"RelativeDocumentMoniker": "Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
|
||||
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
|
||||
"RelativeToolTip": "Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
|
||||
"ViewState": "AgIAAAwAAAAAAAAAAAAgwGYAAABWAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-10-17T09:00:51.526Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,197 +5,181 @@ using Verse;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
// Final, robust extension class for configuring path-based penetration.
|
||||
public class Wula_PathPierce_Extension : DefModExtension
|
||||
// 在 Wula_PathPierce_Extension 类中添加粒子特效相关的属性
|
||||
public class Wula_PathPierce_Extension : DefModExtension
|
||||
{
|
||||
// 原有的穿透属性
|
||||
public int maxHits = 3;
|
||||
public float damageFalloff = 0.25f;
|
||||
public bool preventFriendlyFire = false;
|
||||
public FleckDef tailFleckDef;
|
||||
public int fleckDelayTicks = 10;
|
||||
|
||||
// 新增的击中特效属性(来自 Projectile_BulletWithEffect_Extension)
|
||||
public EffecterDef impactEffecter; // 击中时的特效
|
||||
}
|
||||
public class Projectile_WulaLineAttack : Bullet
|
||||
{
|
||||
private int hitCounter = 0;
|
||||
private List<Thing> alreadyDamaged = new List<Thing>();
|
||||
private Vector3 lastTickPosition;
|
||||
private int Fleck_MakeFleckTick;
|
||||
public int Fleck_MakeFleckTickMax = 1;
|
||||
public IntRange Fleck_MakeFleckNum = new IntRange(1, 1);
|
||||
public FloatRange Fleck_Angle = new FloatRange(-180f, 180f);
|
||||
public FloatRange Fleck_Scale = new FloatRange(1f, 1f);
|
||||
public FloatRange Fleck_Speed = new FloatRange(0f, 0f);
|
||||
public FloatRange Fleck_Rotation = new FloatRange(-180f, 180f);
|
||||
private Wula_PathPierce_Extension Props => def.GetModExtension<Wula_PathPierce_Extension>();
|
||||
public override void ExposeData()
|
||||
{
|
||||
// Set to a positive number for limited hits, or -1 for infinite penetration.
|
||||
public int maxHits = 3;
|
||||
// The percentage of damage lost per hit. 0.25 means 25% damage loss per hit.
|
||||
public float damageFalloff = 0.25f;
|
||||
// If true, this projectile will never cause friendly fire, regardless of game settings.
|
||||
public bool preventFriendlyFire = false;
|
||||
public FleckDef tailFleckDef; // 用于配置拖尾特效的 FleckDef
|
||||
public int fleckDelayTicks = 10; // 拖尾特效延迟生成时间(tick)
|
||||
base.ExposeData();
|
||||
Scribe_Values.Look(ref hitCounter, "hitCounter", 0);
|
||||
Scribe_Collections.Look(ref alreadyDamaged, "alreadyDamaged", LookMode.Reference);
|
||||
Scribe_Values.Look(ref lastTickPosition, "lastTickPosition");
|
||||
if (alreadyDamaged == null)
|
||||
{
|
||||
alreadyDamaged = new List<Thing>();
|
||||
}
|
||||
}
|
||||
public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null)
|
||||
{
|
||||
base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef);
|
||||
this.lastTickPosition = origin;
|
||||
this.alreadyDamaged.Clear();
|
||||
this.hitCounter = 0;
|
||||
this.preventFriendlyFire = preventFriendlyFire || (Props?.preventFriendlyFire ?? false);
|
||||
}
|
||||
protected override void Tick()
|
||||
{
|
||||
Vector3 startPos = this.lastTickPosition;
|
||||
base.Tick();
|
||||
|
||||
if (this.Destroyed) return;
|
||||
this.Fleck_MakeFleckTick++;
|
||||
if (this.Fleck_MakeFleckTick >= Props.fleckDelayTicks)
|
||||
{
|
||||
if (this.Fleck_MakeFleckTick >= (Props.fleckDelayTicks + this.Fleck_MakeFleckTickMax))
|
||||
{
|
||||
this.Fleck_MakeFleckTick = Props.fleckDelayTicks;
|
||||
}
|
||||
Map map = base.Map;
|
||||
int randomInRange = this.Fleck_MakeFleckNum.RandomInRange;
|
||||
Vector3 currentPosition = this.ExactPosition;
|
||||
for (int i = 0; i < randomInRange; i++)
|
||||
{
|
||||
float currentBulletAngle = ExactRotation.eulerAngles.y;
|
||||
float fleckRotationAngle = currentBulletAngle;
|
||||
float velocityAngle = this.Fleck_Angle.RandomInRange + currentBulletAngle;
|
||||
float randomInRange2 = this.Fleck_Scale.RandomInRange;
|
||||
float randomInRange3 = this.Fleck_Speed.RandomInRange;
|
||||
|
||||
if (Props?.tailFleckDef != null)
|
||||
{
|
||||
FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, Props.tailFleckDef, randomInRange2);
|
||||
dataStatic.rotation = fleckRotationAngle;
|
||||
dataStatic.rotationRate = this.Fleck_Rotation.RandomInRange;
|
||||
dataStatic.velocityAngle = velocityAngle;
|
||||
dataStatic.velocitySpeed = randomInRange3;
|
||||
map.flecks.CreateFleck(dataStatic);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.Destroyed) return;
|
||||
Vector3 endPos = this.ExactPosition;
|
||||
|
||||
CheckPathForDamage(startPos, endPos);
|
||||
this.lastTickPosition = endPos;
|
||||
}
|
||||
|
||||
public class Projectile_WulaLineAttack : Bullet
|
||||
protected override void Impact(Thing hitThing, bool blockedByShield = false)
|
||||
{
|
||||
private int hitCounter = 0;
|
||||
private List<Thing> alreadyDamaged = new List<Thing>();
|
||||
private Vector3 lastTickPosition;
|
||||
private int Fleck_MakeFleckTick; // 拖尾特效的计时器
|
||||
public int Fleck_MakeFleckTickMax = 1; // 拖尾特效的生成频率
|
||||
public IntRange Fleck_MakeFleckNum = new IntRange(1, 1); // 每次生成的粒子数量
|
||||
public FloatRange Fleck_Angle = new FloatRange(-180f, 180f); // 粒子角度
|
||||
public FloatRange Fleck_Scale = new FloatRange(1f, 1f); // 粒子大小
|
||||
public FloatRange Fleck_Speed = new FloatRange(0f, 0f); // 粒子速度
|
||||
public FloatRange Fleck_Rotation = new FloatRange(-180f, 180f); // 粒子旋转
|
||||
// 原有的穿透检测
|
||||
CheckPathForDamage(lastTickPosition, this.ExactPosition);
|
||||
|
||||
private Wula_PathPierce_Extension Props => def.GetModExtension<Wula_PathPierce_Extension>();
|
||||
if (hitThing != null && alreadyDamaged.Contains(hitThing))
|
||||
{
|
||||
base.Impact(null, blockedByShield);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.Impact(hitThing, blockedByShield);
|
||||
}
|
||||
|
||||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
Scribe_Values.Look(ref hitCounter, "hitCounter", 0);
|
||||
Scribe_Collections.Look(ref alreadyDamaged, "alreadyDamaged", LookMode.Reference);
|
||||
Scribe_Values.Look(ref lastTickPosition, "lastTickPosition");
|
||||
if (alreadyDamaged == null)
|
||||
{
|
||||
alreadyDamaged = new List<Thing>();
|
||||
}
|
||||
}
|
||||
// 新增:触发击中特效(来自 Projectile_BulletWithEffect 的功能)
|
||||
if (Props?.impactEffecter != null)
|
||||
{
|
||||
// 创建一个新的 Effecter 实例并触发
|
||||
Effecter effecter = Props.impactEffecter.Spawn();
|
||||
effecter.Trigger(new TargetInfo(this.ExactPosition.ToIntVec3(), this.launcher.Map, false), this.launcher);
|
||||
|
||||
public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null)
|
||||
{
|
||||
base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef);
|
||||
this.lastTickPosition = origin;
|
||||
this.alreadyDamaged.Clear();
|
||||
this.hitCounter = 0;
|
||||
// Friendly fire is prevented if EITHER the game setting is true OR the XML extension is true.
|
||||
this.preventFriendlyFire = preventFriendlyFire || (Props?.preventFriendlyFire ?? false);
|
||||
}
|
||||
|
||||
protected override void Tick()
|
||||
{
|
||||
Vector3 startPos = this.lastTickPosition;
|
||||
base.Tick();
|
||||
|
||||
if (this.Destroyed) return;
|
||||
|
||||
this.Fleck_MakeFleckTick++;
|
||||
// 只有当达到延迟时间后才开始生成Fleck
|
||||
if (this.Fleck_MakeFleckTick >= Props.fleckDelayTicks)
|
||||
{
|
||||
if (this.Fleck_MakeFleckTick >= (Props.fleckDelayTicks + this.Fleck_MakeFleckTickMax))
|
||||
{
|
||||
this.Fleck_MakeFleckTick = Props.fleckDelayTicks; // 重置计时器,从延迟时间开始循环
|
||||
}
|
||||
|
||||
Map map = base.Map;
|
||||
int randomInRange = this.Fleck_MakeFleckNum.RandomInRange;
|
||||
Vector3 currentPosition = this.ExactPosition; // Current position of the bullet
|
||||
Vector3 previousPosition = this.lastTickPosition; // Previous position of the bullet
|
||||
|
||||
for (int i = 0; i < randomInRange; i++)
|
||||
{
|
||||
float currentBulletAngle = ExactRotation.eulerAngles.y; // 使用子弹当前的水平旋转角度
|
||||
float fleckRotationAngle = currentBulletAngle; // Fleck 的旋转角度与子弹方向一致
|
||||
float velocityAngle = this.Fleck_Angle.RandomInRange + currentBulletAngle; // Fleck 的速度角度基于子弹方向加上随机偏移
|
||||
float randomInRange2 = this.Fleck_Scale.RandomInRange;
|
||||
float randomInRange3 = this.Fleck_Speed.RandomInRange;
|
||||
|
||||
if (Props?.tailFleckDef != null)
|
||||
{
|
||||
FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, Props.tailFleckDef, randomInRange2);
|
||||
dataStatic.rotation = fleckRotationAngle;
|
||||
dataStatic.rotationRate = this.Fleck_Rotation.RandomInRange;
|
||||
dataStatic.velocityAngle = velocityAngle;
|
||||
dataStatic.velocitySpeed = randomInRange3;
|
||||
map.flecks.CreateFleck(dataStatic);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.Destroyed) return;
|
||||
|
||||
Vector3 endPos = this.ExactPosition;
|
||||
|
||||
CheckPathForDamage(startPos, endPos);
|
||||
|
||||
this.lastTickPosition = endPos;
|
||||
}
|
||||
|
||||
protected override void Impact(Thing hitThing, bool blockedByShield = false)
|
||||
{
|
||||
CheckPathForDamage(lastTickPosition, this.ExactPosition);
|
||||
|
||||
if (hitThing != null && alreadyDamaged.Contains(hitThing))
|
||||
{
|
||||
base.Impact(null, blockedByShield);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.Impact(hitThing, blockedByShield);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckPathForDamage(Vector3 startPos, Vector3 endPos)
|
||||
{
|
||||
if (startPos == endPos) return;
|
||||
|
||||
int maxHits = Props?.maxHits ?? 1;
|
||||
bool infinitePenetration = maxHits < 0;
|
||||
|
||||
if (!infinitePenetration && hitCounter >= maxHits) return;
|
||||
|
||||
Map map = this.Map;
|
||||
float distance = Vector3.Distance(startPos, endPos);
|
||||
Vector3 direction = (endPos - startPos).normalized;
|
||||
|
||||
for (float i = 0; i < distance; i += 0.8f)
|
||||
{
|
||||
if (!infinitePenetration && hitCounter >= maxHits) break;
|
||||
|
||||
Vector3 checkPos = startPos + direction * i;
|
||||
var thingsInCell = new HashSet<Thing>(map.thingGrid.ThingsListAt(checkPos.ToIntVec3()));
|
||||
|
||||
foreach (Thing thing in thingsInCell)
|
||||
{
|
||||
if (thing is Pawn pawn && pawn != this.launcher && !alreadyDamaged.Contains(pawn))
|
||||
{
|
||||
bool shouldDamage = false;
|
||||
|
||||
// Case 1: Always damage the intended target if it's a pawn. This allows hunting.
|
||||
if (this.intendedTarget.Thing == pawn)
|
||||
{
|
||||
shouldDamage = true;
|
||||
}
|
||||
// Case 2: Always damage hostile pawns in the path.
|
||||
else if (pawn.HostileTo(this.launcher))
|
||||
{
|
||||
shouldDamage = true;
|
||||
}
|
||||
// Case 3: Damage non-hostiles (friendlies, neutrals) if the shot itself isn't marked to prevent friendly fire.
|
||||
else if (!this.preventFriendlyFire)
|
||||
{
|
||||
shouldDamage = true;
|
||||
}
|
||||
|
||||
if (shouldDamage)
|
||||
{
|
||||
ApplyPathDamage(pawn);
|
||||
if (!infinitePenetration && hitCounter >= maxHits) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyPathDamage(Pawn pawn)
|
||||
{
|
||||
Wula_PathPierce_Extension props = Props;
|
||||
float falloff = props?.damageFalloff ?? 0.25f;
|
||||
|
||||
// Damage falloff now applies universally, even for infinite penetration.
|
||||
float damageMultiplier = Mathf.Pow(1f - falloff, hitCounter);
|
||||
|
||||
int damageAmount = (int)(this.DamageAmount * damageMultiplier);
|
||||
if (damageAmount <= 0) return;
|
||||
|
||||
var dinfo = new DamageInfo(
|
||||
this.def.projectile.damageDef,
|
||||
damageAmount,
|
||||
this.ArmorPenetration * damageMultiplier,
|
||||
this.ExactRotation.eulerAngles.y,
|
||||
this.launcher,
|
||||
null,
|
||||
this.equipmentDef,
|
||||
DamageInfo.SourceCategory.ThingOrUnknown,
|
||||
this.intendedTarget.Thing);
|
||||
|
||||
pawn.TakeDamage(dinfo);
|
||||
alreadyDamaged.Add(pawn);
|
||||
hitCounter++;
|
||||
}
|
||||
// 可选:在一段时间后清理 Effecter
|
||||
// 这里我们使用一个临时的 Effecter,所以不需要手动清理
|
||||
}
|
||||
}
|
||||
private void CheckPathForDamage(Vector3 startPos, Vector3 endPos)
|
||||
{
|
||||
if (startPos == endPos) return;
|
||||
int maxHits = Props?.maxHits ?? 1;
|
||||
bool infinitePenetration = maxHits < 0;
|
||||
if (!infinitePenetration && hitCounter >= maxHits) return;
|
||||
Map map = this.Map;
|
||||
float distance = Vector3.Distance(startPos, endPos);
|
||||
Vector3 direction = (endPos - startPos).normalized;
|
||||
for (float i = 0; i < distance; i += 0.8f)
|
||||
{
|
||||
if (!infinitePenetration && hitCounter >= maxHits) break;
|
||||
Vector3 checkPos = startPos + direction * i;
|
||||
var thingsInCell = new HashSet<Thing>(map.thingGrid.ThingsListAt(checkPos.ToIntVec3()));
|
||||
foreach (Thing thing in thingsInCell)
|
||||
{
|
||||
if (thing is Pawn pawn && pawn != this.launcher && !alreadyDamaged.Contains(pawn))
|
||||
{
|
||||
bool shouldDamage = false;
|
||||
if (this.intendedTarget.Thing == pawn)
|
||||
{
|
||||
shouldDamage = true;
|
||||
}
|
||||
else if (pawn.HostileTo(this.launcher))
|
||||
{
|
||||
shouldDamage = true;
|
||||
}
|
||||
else if (!this.preventFriendlyFire)
|
||||
{
|
||||
shouldDamage = true;
|
||||
}
|
||||
if (shouldDamage)
|
||||
{
|
||||
ApplyPathDamage(pawn);
|
||||
if (!infinitePenetration && hitCounter >= maxHits) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void ApplyPathDamage(Pawn pawn)
|
||||
{
|
||||
Wula_PathPierce_Extension props = Props;
|
||||
float falloff = props?.damageFalloff ?? 0.25f;
|
||||
|
||||
float damageMultiplier = Mathf.Pow(1f - falloff, hitCounter);
|
||||
|
||||
int damageAmount = (int)(this.DamageAmount * damageMultiplier);
|
||||
if (damageAmount <= 0) return;
|
||||
var dinfo = new DamageInfo(
|
||||
this.def.projectile.damageDef,
|
||||
damageAmount,
|
||||
this.ArmorPenetration * damageMultiplier,
|
||||
this.ExactRotation.eulerAngles.y,
|
||||
this.launcher,
|
||||
null,
|
||||
this.equipmentDef,
|
||||
DamageInfo.SourceCategory.ThingOrUnknown,
|
||||
this.intendedTarget.Thing);
|
||||
|
||||
pawn.TakeDamage(dinfo);
|
||||
alreadyDamaged.Add(pawn);
|
||||
hitCounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Reference in New Issue
Block a user