This commit is contained in:
Tourswen
2025-11-22 01:41:05 +08:00
parent 34c93bb18d
commit d0b06cbc72
30 changed files with 1083 additions and 427 deletions

View File

@@ -55,7 +55,7 @@
<writeCombatLog>True</writeCombatLog>
<showPsycastEffects>False</showPsycastEffects>
<aiCanUse>true</aiCanUse>
<cooldownTicksRange>600</cooldownTicksRange>
<cooldownTicksRange>300</cooldownTicksRange>
<warmupEffecter>HoraxianSpellLight_Warmup</warmupEffecter>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
@@ -84,9 +84,9 @@
<comps>
<li Class="WulaFallenEmpire.CompProperties_AbilityAreaDestruction">
<range>18</range>
<lineWidthEnd>18</lineWidthEnd>
<lineWidthEnd>36</lineWidthEnd>
<canHitFilledCells>true</canHitFilledCells>
<affectAllies>false</affectAllies>
<affectAllies>true</affectAllies>
<affectCaster>false</affectCaster>
<castEffecter>WULA_AreaDestruction_Shockwave</castEffecter>
<hitEffecter>WULA_AreaDestruction_Hit</hitEffecter>
@@ -251,20 +251,22 @@
<writeCombatLog>True</writeCombatLog>
<showPsycastEffects>False</showPsycastEffects>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<cooldownTicksRange>600</cooldownTicksRange>
<cooldownTicksRange>200</cooldownTicksRange>
<warmupEffecter>HoraxianSpellLight_Warmup</warmupEffecter>
<aiCanUse>true</aiCanUse>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<warmupTime>1</warmupTime>
<range>65</range>
<range>500</range>
<soundCast>WULA_Psi_Skip_Sound</soundCast>
<requireLineOfSight>false</requireLineOfSight>
<targetParams>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</verbProperties>
<comps>
<li Class="WulaFallenEmpire.CompProperties_AbilityTeleportSelf">
<range>65</range>
<range>500</range>
<stunTicks>
<min>10</min>
<max>15</max>
@@ -393,7 +395,7 @@
<AbilityDef>
<defName>WULA_Psi_Black_Hole</defName>
<label>乌拉帝国术式:虚境阴影</label>
<description>撕开虚境的裂口,在目标地点召唤一道虚境阴影,它泄露的庞大灵能会持续伤害范围内的敌方单位和建筑,即使是心灵失聪的目标也不能完全免疫这种超现实伤害——对于高心灵敏感度的单位这种伤害则更加致命。</description>
<description>撕开虚境的裂口,在目标地点召唤一道虚境阴影,它泄露的庞大灵能会持续伤害范围内的敌方单位和建筑,并让物品快速损坏,即使是心灵失聪的目标也不能完全免疫这种超现实伤害——对于高心灵敏感度的单位这种伤害则更加致命。</description>
<iconPath>UI/Abilities/FireSpew</iconPath>
<writeCombatLog>True</writeCombatLog>
<showPsycastEffects>False</showPsycastEffects>
@@ -431,16 +433,27 @@
<altitudeLayer>MoteOverheadLow</altitudeLayer>
<graphicData>
<graphicClass>Graphic_Single</graphicClass>
<texPath>Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red</texPath>
<texPath>Wula/Weapon/WULA_Weapon_Empty</texPath>
<shaderType>MoteGlow</shaderType>
<drawSize>5</drawSize>
<drawSize>(7,4)</drawSize>
<color>(255,255,255,150)</color>
</graphicData>
<comps>
<li Class="CompProperties_Lifespan">
<lifespanTicks>600</lifespanTicks>
</li>
<li Class="CompProperties_Effecter">
<effecterDef>WULA_Black_Hole_Entity_Attached</effecterDef>
</li>
<li Class="CompProperties_Glower">
<glowRadius>12</glowRadius>
<glowColor>(192,94,56,1)</glowColor>
</li>
<li Class="WulaFallenEmpire.CompProperties_AreaDamage">
<radius>8</radius>
<damageIntervalTicks>30</damageIntervalTicks>
<damageDef>Wula_Psi_Damage</damageDef>
<damageAmount>5</damageAmount>
<damageAmount>25</damageAmount>
<scaleWithPsychicSensitivity>true</scaleWithPsychicSensitivity>
<minDamageFactor>0.5</minDamageFactor>
<maxDamageFactor>5</maxDamageFactor>
@@ -449,4 +462,178 @@
</li>
</comps>
</ThingDef>
<EffecterDef>
<defName>WULA_Black_Hole_Entity_Attached</defName>
<children>
<li>
<subEffecterClass>SubEffecter_SprayerChance</subEffecterClass>
<burstCount>1</burstCount>
<chancePerTick>1</chancePerTick>
<chancePeriodTicks>20</chancePeriodTicks>
<positionOffset>(0, 0, 0)</positionOffset>
<fleckDef>WULA_Black_Hole_Entity_Attached_Inner</fleckDef>
<positionRadius>0</positionRadius>
<positionRadiusMin>0</positionRadiusMin>
<scale>3</scale>
<speed>0</speed>
<rotation>0</rotation>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerTriggered</subEffecterClass>
<burstCount>1</burstCount>
<positionOffset>(0, 0, 0)</positionOffset>
<moteDef>VoidNodeCore_DustA</moteDef>
<positionRadius>0</positionRadius>
<positionRadiusMin>0</positionRadiusMin>
<scale>.9</scale>
<speed>0</speed>
<rotation>60</rotation>
<rotationRate>200</rotationRate>
<angle>0~0</angle>
<spawnLocType>OnTarget</spawnLocType>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerTriggered</subEffecterClass>
<burstCount>1</burstCount>
<positionOffset>(0, 0, 0)</positionOffset>
<moteDef>VoidNodeCore_DustB</moteDef>
<positionRadius>0</positionRadius>
<positionRadiusMin>0</positionRadiusMin>
<scale>1.05</scale>
<speed>0</speed>
<rotation>0</rotation>
<rotationRate>100</rotationRate>
<angle>0~0</angle>
<spawnLocType>OnTarget</spawnLocType>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerContinuous</subEffecterClass>
<burstCount>1</burstCount>
<positionOffset>(0, 0, 0)</positionOffset>
<ticksBetweenMotes>30</ticksBetweenMotes>
<fleckDef>VoidNodeCore_DebrisBit</fleckDef>
<scale>.8~1.2</scale>
<positionRadius>5</positionRadius>
<positionRadiusMin>3</positionRadiusMin>
<speed>-10~10</speed>
<rotation>0</rotation>
<rotationRate>-2000~2000</rotationRate>
<angle>0~0</angle>
<orbitOrigin>true</orbitOrigin>
<orbitSpeed>-5~-1</orbitSpeed>
<orbitSnapStrength>.8</orbitSnapStrength>
<fleckUsesAngleForVelocity>true</fleckUsesAngleForVelocity>
<spawnLocType>OnTarget</spawnLocType>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerContinuous</subEffecterClass>
<burstCount>3</burstCount>
<ticksBetweenMotes>30</ticksBetweenMotes>
<positionOffset>(0, 0, 0)</positionOffset>
<fleckDef>VoidNodeCore_DebrisBit</fleckDef>
<scale>.8~1.2</scale>
<positionRadius>6</positionRadius>
<positionRadiusMin>5</positionRadiusMin>
<speed>-10~10</speed>
<rotation>0</rotation>
<rotationRate>-2000~2000</rotationRate>
<angle>0~0</angle>
<orbitOrigin>true</orbitOrigin>
<orbitSpeed>-6~-1</orbitSpeed>
<orbitSnapStrength>.8</orbitSnapStrength>
<fleckUsesAngleForVelocity>true</fleckUsesAngleForVelocity>
<spawnLocType>OnTarget</spawnLocType>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerChance</subEffecterClass>
<burstCount>1</burstCount>
<chancePerTick>.03</chancePerTick>
<positionOffset>(0, 0, 0)</positionOffset>
<fleckDef>EnergyCrackle</fleckDef>
<soundDef>Zap_Quiet</soundDef>
<positionRadius>2.7</positionRadius>
<positionRadiusMin>0</positionRadiusMin>
<scale>.35</scale>
<speed>.001</speed>
<rotation>0</rotation>
<rotateTowardsTargetCenter>true</rotateTowardsTargetCenter>
<rotationRate>0</rotationRate>
<angle>0~0</angle>
<spawnLocType>OnTarget</spawnLocType>
<orbitOrigin>true</orbitOrigin>
<orbitSnapStrength>1.0</orbitSnapStrength>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerChance</subEffecterClass>
<burstCount>1</burstCount>
<chancePerTick>.05</chancePerTick>
<chancePeriodTicks>20</chancePeriodTicks>
<positionOffset>(0, 0, 0)</positionOffset>
<fleckDef>VoidNodeLowLightningRing</fleckDef>
<positionRadius>0</positionRadius>
<positionRadiusMin>0</positionRadiusMin>
<scale>1</scale>
<speed>0</speed>
<rotation>0</rotation>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerChance</subEffecterClass>
<burstCount>1</burstCount>
<chancePerTick>.05</chancePerTick>
<chancePeriodTicks>100</chancePeriodTicks>
<positionOffset>(0, 0, 0)</positionOffset>
<fleckDef>VoidNodeHighLightningRing</fleckDef>
<positionRadius>0</positionRadius>
<positionRadiusMin>0</positionRadiusMin>
<scale>1</scale>
<rotation>0~360</rotation>
<speed>0</speed>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerTriggered</subEffecterClass>
<burstCount>1</burstCount>
<positionOffset>(0, 0, 0)</positionOffset>
<moteDef>VoidNodeDistortion</moteDef>
<positionRadius>0</positionRadius>
<positionRadiusMin>0</positionRadiusMin>
<scale>1</scale>
<rotation>0</rotation>
<speed>0</speed>
</li>
<li>
<subEffecterClass>SubEffecter_SprayerChance</subEffecterClass>
<burstCount>1</burstCount>
<chancePerTick>.01</chancePerTick>
<chancePeriodTicks>50</chancePeriodTicks>
<positionOffset>(0, 0, 0)</positionOffset>
<fleckDef>VoidNodeLowestGroundFlashes</fleckDef>
<positionRadius>0</positionRadius>
<positionRadiusMin>0</positionRadiusMin>
<scale>.5~1</scale>
<speed>0</speed>
<rotation>0~360</rotation>
</li>
</children>
</EffecterDef>
<FleckDef ParentName="FleckBase_Thrown">
<defName>WULA_Black_Hole_Entity_Attached_Inner</defName>
<altitudeLayer>MoteOverhead</altitudeLayer>
<solidTime>1</solidTime>
<graphicData>
<graphicClass>Graphic_FleckPulse</graphicClass>
<shaderType>MotePsychicSkipInner</shaderType>
<texPath>Things/Mote/SkipInnerDimension</texPath>
<shaderParameters>
<_innerRingSize>0.65</_innerRingSize>
</shaderParameters>
<drawSize>3.4</drawSize>
<shaderParameters>
<_inTime>0.0</_inTime>
<_solidTime>1</_solidTime>
<_outTime>0.0</_outTime>
</shaderParameters>
</graphicData>
</FleckDef>
</Defs>

View File

@@ -139,7 +139,7 @@
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_32</defName>
<defName>Wula_UI_Legion_32</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
@@ -160,7 +160,7 @@
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_33</defName>
<defName>Wula_UI_Legion_33</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
@@ -257,7 +257,7 @@
</options>
</WulaFallenEmpire.EventDef>
<WulaFallenEmpire.EventDef>
<defName>Wula_UI_Anisia_32</defName>
<defName>Wula_UI_Legion_32</defName>
<label>和P.I.A的通讯</label>
<portraitPath>Wula/Events/Portraits/WULA_Legion_2</portraitPath>
<characterName>「军团」,P.I.A</characterName>
@@ -325,7 +325,7 @@
</options>
</WulaFallenEmpire.EventDef>
<WulaFallenEmpire.EventDef>
<defName>Wula_UI_Anisia_33</defName>
<defName>Wula_UI_Legion_33</defName>
<label>和P.I.A的通讯</label>
<portraitPath>Wula/Events/Portraits/WULA_Legion_1</portraitPath>
<characterName>「军团」,P.I.A</characterName>
@@ -376,7 +376,6 @@
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<Wula_Psi_Titan>1000</Wula_Psi_Titan>
<Wula_PIA_Heavy_Unit>1</Wula_PIA_Heavy_Unit>
</options>
</li>
@@ -431,4 +430,105 @@
</li>
</options>
</WulaFallenEmpire.EventDef>
<WulaFallenEmpire.EventDef>
<defName>Wula_UI_Legion_Test1</defName>
<label>和P.I.A的通讯</label>
<portraitPath>Wula/Events/Portraits/WULA_Legion_1</portraitPath>
<characterName>「军团」,P.I.A</characterName>
<descriptions>
<li>这是一个测试选项,你可以吃到各种打</li>
</descriptions>
<options>
<li>
<label>来,陆行舰</label>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_TriggerRaid">
<points>6000</points>
<faction>Empire</faction>
<raidStrategy>ImmediateAttack</raidStrategy>
<raidArrivalMode>EdgeDropGroups</raidArrivalMode>
<groupKind>Combat</groupKind>
<pawnGroupMakers>
<li>
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<Wula_Mech_Mobile_Factory>1000</Wula_Mech_Mobile_Factory>
</options>
</li>
</pawnGroupMakers>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>来,灵能泰坦</label>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_TriggerRaid">
<points>6000</points>
<faction>Empire</faction>
<raidStrategy>ImmediateAttack</raidStrategy>
<raidArrivalMode>EdgeDropGroups</raidArrivalMode>
<groupKind>Combat</groupKind>
<pawnGroupMakers>
<li>
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<Wula_Psi_Titan>1000</Wula_Psi_Titan>
</options>
</li>
</pawnGroupMakers>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>来,战车群</label>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_TriggerRaid">
<points>3000</points>
<faction>Empire</faction>
<raidStrategy>ImmediateAttack</raidStrategy>
<raidArrivalMode>EdgeDropGroups</raidArrivalMode>
<groupKind>Combat</groupKind>
<pawnGroupMakers>
<li>
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<Wula_AI_Heavy_Panzer>1000</Wula_AI_Heavy_Panzer>
</options>
</li>
</pawnGroupMakers>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>还是算了</label>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
</Defs>

View File

@@ -126,7 +126,7 @@
<defName>Wula_AI_Heavy_Panzer</defName> <!-- 修改了defName以避免冲突 -->
<label>HAp-6"战车"</label>
<race>Wula_AI_Heavy_Panzer</race>
<combatPower>1000</combatPower>
<combatPower>500</combatPower>
<allowInMechClusters>false</allowInMechClusters>
<defaultFactionType>PlayerColony</defaultFactionType>
<canMeleeAttack>false</canMeleeAttack>
@@ -164,11 +164,14 @@
<defName>Wula_Mech_Mobile_Factory</defName> <!-- 修改了defName以避免冲突 -->
<label>MFm-2"陆行舰"</label>
<race>Wula_Mech_Mobile_Factory</race>
<combatPower>1000</combatPower>
<allowInMechClusters>false</allowInMechClusters>
<defaultFactionType>PlayerColony</defaultFactionType>
<canMeleeAttack>false</canMeleeAttack>
<isGoodBreacher>true</isGoodBreacher>
<combatPower>500</combatPower>
<isBoss>true</isBoss>
<maxPerGroup>1</maxPerGroup>
<flyingAnimationFramePathPrefix>Wula/Things/Wula_Mech_Mobile_Factory/Flying/Wula_Mech_Mobile_Factory_Flying_</flyingAnimationFramePathPrefix>
<flyingAnimationDrawSize>1</flyingAnimationDrawSize>
@@ -269,8 +272,8 @@
<controlGroupPortraitZoom>0.4</controlGroupPortraitZoom>
<abilities>
<li>WULA_PsiCrusher</li>
<li>WULA_Psi_Skip</li>
<li>WULA_PsiCrusher</li>
<li>WULA_Psi_Black_Hole</li>
</abilities>
</PawnKindDef>

View File

@@ -318,6 +318,17 @@
<li>WULA_Colony_License_LV2_Technology</li>
</prerequisites>
</ResearchProjectDef>
<ResearchProjectDef ParentName="WULAtechBase">
<defName>WULA_Turret_Base_Mortar_Technology</defName>
<researchViewX>10.00</researchViewX>
<researchViewY>0.90</researchViewY>
<label>自动迫击炮许可</label>
<description>允许殖民地申请空投自动迫击炮台,可以发射远距离的高爆迫击炮弹打击地图上出现的任何敌军。</description>
<baseCost>3500</baseCost>
<prerequisites>
<li>WULA_Synth_Armor_2_Technology</li>
</prerequisites>
</ResearchProjectDef>
<!-- 武器 -->
<ResearchProjectDef ParentName="WULAtechBase">

View File

@@ -4,7 +4,7 @@
<ThingDef ParentName="Wall">
<defName>WulaWall_Cleanzone</defName>
<label>乌拉帝国堡垒墙</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国用于建造堡垒的外壁相当厚实能够抵御大量伤害并且拥有气密性可以用在飞船外壳上。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n乌拉帝国用于建造堡垒的外壁相当厚实能够抵御大量伤害并且拥有气密性可以用在飞船外壳上。</description>
<uiIconPath>Wula/Building/Linked/WULA_Fortress_Wall_MenuIcon</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -34,6 +34,7 @@
<staticSunShadowHeight Inherit="False" IsNull="True" />
<fillPercent>0</fillPercent>
<canOverlapZones>false</canOverlapZones>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<MaxHitPoints>1</MaxHitPoints>
<WorkToBuild>1</WorkToBuild>
@@ -140,7 +141,7 @@
</recipeMaker>
<stuffCategories Inherit="False"/>
<useStuffTerrainAffordance>false</useStuffTerrainAffordance>
<terrainAffordanceNeeded>Heavy</terrainAffordanceNeeded>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<!-- <placeWorkers>
<li>PlaceWorker_OnSubstructure</li>
</placeWorkers> -->
@@ -175,7 +176,7 @@
<ThingDef ParentName="DoorBase">
<defName>WulaDoor_Cleanzone</defName>
<label>乌拉帝国大门</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国堡垒的大门不仅能够抵御大量爆炸和震荡伤害还拥有无需通电即可运转的伺服系统来增加大门通过速度。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n乌拉帝国堡垒的大门不仅能够抵御大量爆炸和震荡伤害还拥有无需通电即可运转的伺服系统来增加大门通过速度。</description>
<descriptionHyperlinks>
<ThingDef>WulaDoor</ThingDef>
</descriptionHyperlinks>
@@ -404,7 +405,7 @@
<ThingDef ParentName="BuildingBase">
<defName>WULA_MaintenancePod_Cleanzone</defName>
<label>合成人维护舱</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n合成人维护舱是为乌拉帝国合成人设计的设施机械乌拉需要定期进入其中进行身体机能的维护和校准否则他们的身体会逐渐衰弱。维护需要消耗零部件同时会修理所有的伤口。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n合成人维护舱是为乌拉帝国合成人设计的设施机械乌拉需要定期进入其中进行身体机能的维护和校准否则他们的身体会逐渐衰弱。维护需要消耗零部件同时会修理所有的伤口。</description>
<uiIconPath>Wula/Building/WULA_MaintenancePod</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -432,6 +433,7 @@
<rotatable>false</rotatable>
<interactionCellOffset>(0,0,-2)</interactionCellOffset>
<hasInteractionCell>true</hasInteractionCell>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<placeWorkers>
<li>PlaceWorker_PreventInteractionSpotOverlap</li>
</placeWorkers>
@@ -534,6 +536,7 @@
<interactionCellOffset>(0,0,-2)</interactionCellOffset>
<hasInteractionCell>true</hasInteractionCell>
<minifiedDef>MinifiedThing</minifiedDef>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<thingCategories Inherit="False">
<li>BuildingsMisc</li>
</thingCategories>
@@ -599,7 +602,7 @@
<ThingDef ParentName="BuildingBase">
<defName>WULA_WeaponArmor_Productor_Cleanzone</defName>
<label>乌拉帝国作业通讯台</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国作业通讯台是用于联络乌拉帝国母舰和工程舰并下达武器、装备订单的特殊通讯台。这些武器装备的生产不需要殖民地参与只需要使用乌拉帝国物资交换舱将材料发送给帝国舰队然后根据材料数量下单即可。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n乌拉帝国作业通讯台是用于联络乌拉帝国母舰和工程舰并下达武器、装备订单的特殊通讯台。这些武器装备的生产不需要殖民地参与只需要使用乌拉帝国物资交换舱将材料发送给帝国舰队然后根据材料数量下单即可。</description>
<uiIconPath>Wula/Building/WULA_WeaponArmor_Productor</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -628,6 +631,7 @@
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<!-- <interactionCellOffset>(0,0,-2)</interactionCellOffset> -->
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<researchPrerequisites Inherit="False">
<li>WULA_WeaponArmor_Productor_Technology</li>
</researchPrerequisites>
@@ -726,6 +730,7 @@
<castEdgeShadows>false</castEdgeShadows>
<fillPercent>0.5</fillPercent>
<useHitPoints>True</useHitPoints>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<Mass>5</Mass>
<WorkToBuild>2000</WorkToBuild>
@@ -785,7 +790,7 @@
<fillPercent>0.5</fillPercent>
<designationCategory>WULA_Buildings</designationCategory>
<uiOrder>2201</uiOrder> <!-- Slightly after the original -->
<terrainAffordanceNeeded>Medium</terrainAffordanceNeeded>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<MaxHitPoints>250</MaxHitPoints>
<WorkToBuild>1600</WorkToBuild>
@@ -830,7 +835,7 @@
<ThingDef ParentName="BuildingBase">
<defName>WULA_Machine_Recharger_Cleanzone</defName>
<label>乌拉帝国地下维护站</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国地下维护站是能够储存大量电量并允许所有大小类型的乌拉帝国机械体进行充电的充电站不支持合成人的充能。由于其根基埋于地下因此不会阻碍其他殖民者和机械体在其上面的移动。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n乌拉帝国地下维护站是能够储存大量电量并允许所有大小类型的乌拉帝国机械体进行充电的充电站不支持合成人的充能。由于其根基埋于地下因此不会阻碍其他殖民者和机械体在其上面的移动。</description>
<uiIconPath>Wula/Building/WULA_Machine_Recharger</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -856,6 +861,7 @@
<pathCost>0</pathCost>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<researchPrerequisites Inherit="False">
<li>WULA_Bunker_Drop_Technology</li>
</researchPrerequisites>
@@ -931,6 +937,7 @@
</graphicData>
<interactionCellOffset>(0,0,0)</interactionCellOffset>
<passability>Standable</passability>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<MaxHitPoints>250</MaxHitPoints>
<WorkToBuild>8000</WorkToBuild>
@@ -996,7 +1003,7 @@
<ThingDef ParentName="BuildingBase">
<defName>WULA_Charging_Station_Synth_Cleanzone</defName>
<label>合成人充电站</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n合成人充电站是一台供乌拉帝国合成人进行机体充能和改装的检修站当机械乌拉需要充电时会优先前往此处充电。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n合成人充电站是一台供乌拉帝国合成人进行机体充能和改装的检修站当机械乌拉需要充电时会优先前往此处充电。</description>
<uiIconPath>Wula/Building/WULA_Charging_Station_Synth_south</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -1022,6 +1029,7 @@
<pathCost>0</pathCost>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<researchPrerequisites Inherit="False">
<li>WULA_Synth_Maintain_Technology</li>
</researchPrerequisites>
@@ -1107,6 +1115,7 @@
<designationCategory Inherit="False" IsNull="True" />
<staticSunShadowHeight Inherit="False" IsNull="True" />
<castEdgeShadows>False</castEdgeShadows>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<Comfort>0.75</Comfort>
<MaxHitPoints>140</MaxHitPoints>
@@ -1156,7 +1165,7 @@
<ThingDef ParentName="BuildingBase">
<defName>WULA_Cube_Productor_Cleanzone</defName>
<label>乌拉帝国编织体</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉帝国编织体是一台简易的塑性构造体只能生产一些材料以本地加工的方式降低舰队的加工压力。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n乌拉帝国编织体是一台简易的塑性构造体只能生产一些材料以本地加工的方式降低舰队的加工压力。</description>
<uiIconPath>Wula/Building/WULA_Cube_Productor_south</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -1183,6 +1192,7 @@
<hasInteractionCell>true</hasInteractionCell>
<interactionCellOffset>(0,0,-1)</interactionCellOffset>
<rotatable>false</rotatable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<researchPrerequisites Inherit="False">
<li>WULA_Colony_License_LV1_Technology</li>
</researchPrerequisites>
@@ -1275,6 +1285,7 @@
<altitudeLayer>Building</altitudeLayer>
<fillPercent>0.5</fillPercent>
<useHitPoints>True</useHitPoints>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<WorkToBuild>2000</WorkToBuild>
<MaxHitPoints>180</MaxHitPoints>
@@ -1329,7 +1340,7 @@
<ThingDef ParentName="BuildingBase">
<defName>Wula_DarkEnergy_Generators_Cleanzone</defName>
<label>暗物质发电机</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n一台使用暗物质湮灭反应提供能量的乌拉帝国发电机需要消耗暗物质作为燃料且消耗速率很高但是拥有普通发电机望尘莫及的发电能力。为了在野战环境下随炮塔群一起空投这种发电机的装甲层设计的非常厚实。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n一台使用暗物质湮灭反应提供能量的乌拉帝国发电机需要消耗暗物质作为燃料且消耗速率很高但是拥有普通发电机望尘莫及的发电能力。为了在野战环境下随炮塔群一起空投这种发电机的装甲层设计的非常厚实。</description>
<uiIconPath>Wula/Building/Wula_DarkEnergy_Generators</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -1355,6 +1366,7 @@
<pathCost>0</pathCost>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<researchPrerequisites Inherit="False">
<li>WULA_DarkEnergy_Generators_Technology</li>
</researchPrerequisites>
@@ -1454,6 +1466,7 @@
<rotatable>false</rotatable>
<blockWind>true</blockWind>
<castEdgeShadows>false</castEdgeShadows>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<MaxHitPoints>3500</MaxHitPoints>
<WorkToBuild>2500</WorkToBuild>

View File

@@ -1,294 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Defs>
<!-- 迫击炮塔空投信标 -->
<ThingDef ParentName="BuildingBase">
<defName>Wula_Base_Mortar_Turret_Cleanzone</defName>
<label>MTt-8"深渊"迫击炮塔</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑。建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\nMTt-8"深渊"迫击炮塔是一种需要通电才能运转的中型防御炮塔,发射高爆迫击炮弹。这种炮台具有高伤害范围攻击能力,适合对付集群敌人和建筑。</description>
<uiIconPath>Wula/Building/Wula_Base_Mortar_Turret</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
<descriptionHyperlinks>
<ThingDef>Wula_Base_Mortar_Turret</ThingDef>
<ThingDef>Wula_Base_Mortar_Turret_Weapon</ThingDef>
</descriptionHyperlinks>
<thingCategories Inherit="False">
<li>BuildingsMisc</li>
</thingCategories>
<graphicData>
<texPath>Wula/Building/WULA_Dropping_Building_Cleanzone</texPath>
<graphicClass>Graphic_Multi</graphicClass>
<drawSize>(3,3)</drawSize>
<damageData>
<enabled>false</enabled>
</damageData>
</graphicData>
<altitudeLayer>Building</altitudeLayer>
<passability>PassThroughOnly</passability>
<pathCost>0</pathCost>
<castEdgeShadows>false</castEdgeShadows>
<fillPercent>0.5</fillPercent>
<canOverlapZones>false</canOverlapZones>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<researchPrerequisites Inherit="False">
<li>WULA_Turret_Base_Mortar_Technology</li>
</researchPrerequisites>
<statBases>
<MaxHitPoints>1</MaxHitPoints>
<WorkToBuild>1</WorkToBuild>
<Mass>1</Mass>
<Flammability>0</Flammability>
</statBases>
<size>(3,3)</size>
<constructionSkillPrerequisite>0</constructionSkillPrerequisite>
<resourcesFractionWhenDeconstructed>1</resourcesFractionWhenDeconstructed>
<costList Inherit="False">
<WULA_Alloy>100</WULA_Alloy>
<WULA_Charge_Cube>6</WULA_Charge_Cube>
</costList>
<building>
<destroySound>BuildingDestroyed_Metal_Small</destroySound>
</building>
<placeWorkers>
<li>WulaFallenEmpire.PlaceWorker_CustomRadius</li>
</placeWorkers>
<designationCategory>WULA_Buildings</designationCategory>
<comps>
<li Class="WulaFallenEmpire.CompProperties_CustomRadius">
<radius>75</radius> <!-- 半径大小 -->
<color>(1, 1, 1)</color> <!-- 白色圆圈 -->
<radiusOffset>0</radiusOffset> <!-- 半径偏移 -->
<showInGUI>true</showInGUI>
<label>射程</label>
<description>在该建筑空降到指定地点时,其炮台武器的最大射程。</description>
<defaultVisible>true</defaultVisible>
</li>
<li Class="WulaFallenEmpire.CompProperties_SkyfallerCaller">
<skyfallerDef>Wula_Base_Mortar_Turret_Incoming</skyfallerDef> <!-- 迫击炮塔空投类型 -->
<destroyBuilding>true</destroyBuilding>
<delayTicks>1</delayTicks>
<allowThinRoof>true</allowThinRoof>
<allowThickRoof>false</allowThickRoof>
</li>
</comps>
</ThingDef>
<!-- 迫击炮塔空投中 -->
<ThingDef ParentName="SkyfallerBase">
<defName>Wula_Base_Mortar_Turret_Incoming</defName>
<label>MTt-8"深渊"迫击炮塔(空投中)</label>
<size>(3,3)</size>
<graphicData>
<texPath>Wula/Building/Wula_Base_ATGun_Turret_Incoming</texPath>
<graphicClass>Graphic_Single</graphicClass>
<shaderType>CutoutFlying</shaderType>
<drawSize>(3,3.75)</drawSize>
</graphicData>
<skyfaller>
<movementType>Accelerate</movementType>
<shadow>Things/Skyfaller/SkyfallerShadowDropPod</shadow>
<shadowSize>(2, 2)</shadowSize>
<anticipationSound>DropPod_Fall</anticipationSound>
<anticipationSoundTicks>100</anticipationSoundTicks>
<impactSound>Explosion_Vaporize</impactSound>
<moteSpawnTime>0.05</moteSpawnTime>
<motesPerCell>1</motesPerCell>
<cameraShake>1</cameraShake>
<angleCurve>
<points>
<li>(0,0)</li>
<li>(1, 1)</li>
</points>
</angleCurve>
<spawnThing>Wula_Base_Mortar_Turret</spawnThing>
</skyfaller>
<comps>
<li Class="CompProperties_Effecter">
<effecterDef>Smoke_Joint</effecterDef>
</li>
</comps>
</ThingDef>
<!-- 迫击炮塔 -->
<ThingDef ParentName="BuildingBase">
<defName>Wula_Base_Mortar_Turret</defName>
<label>MTt-8"深渊"迫击炮塔</label>
<description>MTt-8"深渊"迫击炮塔是一种需要通电才能运转的中型防御炮塔,发射高爆迫击炮弹。这种炮台具有高伤害范围攻击能力,适合对付集群敌人和建筑。</description>
<thingClass>WulaFallenEmpire.Building_TurretGunHasSpeed</thingClass>
<drawerType>MapMeshAndRealTime</drawerType>
<modExtensions>
<li Class="WulaFallenEmpire.ModExt_HasSpeedTurret">
<speed>0.2</speed> <!-- 旋转速度 (度/Tick)。迫击炮旋转较慢。 -->
</li>
</modExtensions>
<graphicData>
<texPath>Wula/Building/WULA_Turret_Component</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(3,3)</drawSize>
<!-- <drawOffset>(0,0,-0.16)</drawOffset> -->
<damageData>
<rect>(0.3,0.3,1.4,1.4)</rect>
</damageData>
<shadowData>
<volume>(0.5,0.35,0.75)</volume>
<offset>(0,0,-0.05)</offset>
</shadowData>
</graphicData>
<receivesSignals>true</receivesSignals>
<uiIconPath>Wula/Building/Wula_Base_Mortar_Turret</uiIconPath>
<uiIconScale>1.0</uiIconScale>
<altitudeLayer>Building</altitudeLayer>
<stealable>false</stealable>
<rotatable>false</rotatable>
<size>(3,3)</size>
<statBases>
<MaxHitPoints>1500</MaxHitPoints>
<Flammability>0</Flammability>
<WorkToBuild>3200</WorkToBuild>
<Mass>80</Mass>
<Beauty>0</Beauty>
<ShootingAccuracyTurret>0.80</ShootingAccuracyTurret>
</statBases>
<costList Inherit="False">
<WULA_Alloy>100</WULA_Alloy>
<WULA_Charge_Cube>6</WULA_Charge_Cube>
</costList>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<tickerType>Normal</tickerType>
<passability>PassThroughOnly</passability>
<pathCost>50</pathCost>
<fillPercent>0.5</fillPercent>
<hasTooltip>true</hasTooltip>
<building>
<combatPower>450</combatPower>
<ai_combatDangerous>true</ai_combatDangerous>
<turretGunDef>Wula_Base_Mortar_Turret_Weapon</turretGunDef>
<turretBurstCooldownTime>4</turretBurstCooldownTime>
<turretTopOffset>(-0.04, 0)</turretTopOffset>
<turretTopDrawSize>5.0</turretTopDrawSize>
</building>
<placeWorkers>
<li>PlaceWorker_TurretTop</li>
<li>PlaceWorker_ShowTurretRadius</li>
</placeWorkers>
<comps>
<li Class="CompProperties_CanBeDormant" />
<li Class="CompProperties_Initiatable" />
<li Class="CompProperties_WakeUpDormant">
<wakeUpSound>MechanoidsWakeUp</wakeUpSound>
</li>
<li Class="CompProperties_Stunnable">
<affectedDamageDefs>
<li>EMP</li>
</affectedDamageDefs>
</li>
<li Class="CompProperties_AmbientSound">
<sound>MechTurretBig_Call</sound>
</li>
<li Class="WulaFallenEmpire.CompProperties_FactionSetter">
<!-- <factionDef>Mechanoid</factionDef> 不写默认玩家派系-->
<usePlayerFactionIfNull>true</usePlayerFactionIfNull>
<overrideExistingFaction>false</overrideExistingFaction>
</li>
<li Class="CompProperties_Power">
<compClass>CompPowerTrader</compClass>
<basePowerConsumption>200</basePowerConsumption> <!-- 电力消耗较低 -->
</li>
<li Class="CompProperties_Glower">
<glowRadius>6</glowRadius>
<glowColor>(252,240,120,0)</glowColor> <!-- 黄色光晕 -->
</li>
<li Class="WulaFallenEmpire.CompProperties_ForceTargetable" />
</comps>
</ThingDef>
<!-- 迫击炮塔武器 -->
<ThingDef ParentName="BaseWeaponTurret">
<defName>Wula_Base_Mortar_Turret_Weapon</defName>
<label>MTt-8"深渊"</label>
<description>迫击炮塔,可以从远距离上对敌方集群造成巨大伤害。</description>
<tradeability>None</tradeability>
<destroyOnDrop>true</destroyOnDrop>
<techLevel>Ultra</techLevel>
<graphicData>
<texPath>Wula/Building/Wula_Base_ATGun_Turret_Weapon</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>3</drawSize>
</graphicData>
<uiIconScale>0.33</uiIconScale>
<statBases>
<Mass>150</Mass>
<AccuracyTouch>0.3</AccuracyTouch>
<AccuracyShort>0.7</AccuracyShort>
<AccuracyMedium>0.85</AccuracyMedium>
<AccuracyLong>0.8</AccuracyLong>
</statBases>
<verbs>
<li>
<verbClass>Verb_Shoot</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<defaultProjectile>Bullet_WULA_WM_Mortar_Turret</defaultProjectile>
<warmupTime>2.5</warmupTime>
<defaultCooldownTime>5</defaultCooldownTime>
<minRange>10</minRange>
<range>75</range>
<burstShotCount>1</burstShotCount>
<forcedMissRadius>1.9</forcedMissRadius>
<soundCast>WULA_MW_Mass_Drivers_Shootingsound</soundCast>
<soundCastTail>GunTail_Heavy</soundCastTail>
<muzzleFlashScale>18</muzzleFlashScale>
<targetParams>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</li>
</verbs>
</ThingDef>
<!-- 迫击炮弹 -->
<ThingDef ParentName="BaseBullet">
<defName>Bullet_WULA_WM_Mortar_Turret</defName>
<label>深渊迫击炮弹</label>
<thingClass>WulaFallenEmpire.Projectile_NorthArcTrail</thingClass>
<tickerType>Normal</tickerType>
<neverMultiSelect>True</neverMultiSelect>
<graphicData>
<texPath>Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red</texPath>
<graphicClass>Graphic_Single</graphicClass>
<shaderType>TransparentPostLight</shaderType>
<drawSize>5</drawSize>
</graphicData>
<projectile>
<damageDef>Bomb</damageDef>
<damageAmountBase>220</damageAmountBase>
<speed>20</speed>
<armorPenetrationBase>0.8</armorPenetrationBase>
<explosionRadius>5.0</explosionRadius>
<soundHitThickRoof>Artillery_HitThickRoof</soundHitThickRoof>
<soundExplode>MortarBomb_Explode</soundExplode>
<soundImpactAnticipate>MortarRound_PreImpact</soundImpactAnticipate>
<soundAmbient>MortarRound_Ambient</soundAmbient>
<stoppingPower>5</stoppingPower>
<flyOverhead>true</flyOverhead>
<arcHeightFactor>2</arcHeightFactor>
</projectile>
<modExtensions>
<li Class="WulaFallenEmpire.NorthArcModExtension">
<northOffsetDistance>100</northOffsetDistance>
<curveSteepness>1.0</curveSteepness>
<useArcTrajectory>true</useArcTrajectory>
</li>
<li Class="WulaFallenEmpire.TrackingBulletDef">
<tailFleckDef>WULA_GunTail_Lighting</tailFleckDef>
<fleckMakeFleckTickMax>3</fleckMakeFleckTickMax>
<fleckDelayTicks>1</fleckDelayTicks>
<fleckMakeFleckNum>1~2</fleckMakeFleckNum>
<fleckScale>0.5~1.0</fleckScale>
<fleckSpeed>0.1~0.3</fleckSpeed>
<fleckAngle>-30~30</fleckAngle>
</li>
</modExtensions>
</ThingDef>
</Defs>

View File

@@ -4,7 +4,7 @@
<ThingDef ParentName="BuildingBase">
<defName>WULA_Cat_Bunker_Cleanzone</defName>
<label>乌拉猫猫地堡</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\n乌拉猫猫地堡是集生产和防御为一体的坚实建筑3只乌拉猫猫自律机械体会和地堡一起空降。地堡可供乌拉猫猫更换工作类型并允许乌拉猫猫进驻使用内部武器击败来犯敌军。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\n乌拉猫猫地堡是集生产和防御为一体的坚实建筑3只乌拉猫猫自律机械体会和地堡一起空降。地堡可供乌拉猫猫更换工作类型并允许乌拉猫猫进驻使用内部武器击败来犯敌军。</description>
<uiIconPath>Wula/Building/WULA_Cat_Bunker_south</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -33,6 +33,7 @@
<canOverlapZones>false</canOverlapZones>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<researchPrerequisites Inherit="False">
<li>WULA_Bunker_Drop_Technology</li>
</researchPrerequisites>
@@ -142,6 +143,7 @@
<hasInteractionCell>false</hasInteractionCell>
<!-- <interactionCellOffset>(0,0,-2)</interactionCellOffset> -->
<resourcesFractionWhenDeconstructed>0</resourcesFractionWhenDeconstructed>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<MaxHitPoints>500</MaxHitPoints>
<WorkToBuild>1</WorkToBuild>
@@ -250,7 +252,7 @@
<ThingDef ParentName="BuildingBase">
<defName>Wula_Base_ATGun_Turret_Cleanzone</defName>
<label>ATt-6"金红石"反战车炮塔</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\nATt-6"金红石"反战车炮塔是一种需要通电才能运转的中型防御炮塔,依靠澎湃的电磁动力发射高穿透性的炮弹。这种炮台的射速不是很高,但是穿甲能力很强,且会造成小范围溅射伤害。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\nATt-6"金红石"反战车炮塔是一种需要通电才能运转的中型防御炮塔,依靠澎湃的电磁动力发射高穿透性的炮弹。这种炮台的射速不是很高,但是穿甲能力很强,且会造成小范围溅射伤害。</description>
<uiIconPath>Wula/Building/Wula_Base_ATGun_Turret</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -277,6 +279,7 @@
<canOverlapZones>false</canOverlapZones>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<researchPrerequisites Inherit="False">
<li>WULA_Turret_Base_AT_Technology</li>
</researchPrerequisites>
@@ -402,6 +405,7 @@
<pathCost>50</pathCost>
<fillPercent>0.5</fillPercent>
<hasTooltip>true</hasTooltip>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<building>
<combatPower>640</combatPower>
<!--<buildingTags>
@@ -524,7 +528,7 @@
<ThingDef ParentName="BuildingBase">
<defName>Wula_Base_Laser_Turret_Cleanzone</defName>
<label>MLt-1"棱晶"激光炮塔</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国母舰可以向此处投放建筑建造好的信标可以收起或移至他处,但是必须要有母舰或者工程舰在上空才能投送建筑。\n\nMLt-1"棱晶"激光炮塔是一种需要通电才能运转的中型防御炮塔,能够以高能激光束持续照射一个目标将其气化。装载在炮塔上的激光武器不需要预热,因此对付多个目标的效果要优于手持光束武器。</description>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑建造好的信标可以收起或移至他处。\n\nMLt-1"棱晶"激光炮塔是一种需要通电才能运转的中型防御炮塔,能够以高能激光束持续照射一个目标将其气化。装载在炮塔上的激光武器不需要预热,因此对付多个目标的效果要优于手持光束武器。</description>
<uiIconPath>Wula/Building/Wula_Base_Laser_Turret</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
@@ -563,6 +567,7 @@
<size>(3,3)</size>
<constructionSkillPrerequisite>0</constructionSkillPrerequisite>
<resourcesFractionWhenDeconstructed>1</resourcesFractionWhenDeconstructed>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<costList Inherit="False">
<WULA_Alloy>100</WULA_Alloy>
<WULA_Charge_Cube>6</WULA_Charge_Cube>
@@ -658,6 +663,7 @@
<stealable>false</stealable>
<rotatable>false</rotatable>
<size>(3,3)</size>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
<MaxHitPoints>1500</MaxHitPoints>
<Flammability>0</Flammability>
@@ -805,4 +811,277 @@
</li>
</verbs>
</ThingDef>
<!-- 迫击炮塔 -->
<ThingDef ParentName="BuildingBase">
<defName>Wula_Base_Mortar_Turret_Cleanzone</defName>
<label>RTt-8"深渊"迫击炮塔</label>
<description>清理出一块场地并准备好资源,使得乌拉帝国可以向此处投放建筑,建造好的信标可以收起或移至他处。\n\nRTt-8"深渊"迫击炮塔是一种需要通电才能运转的中型防御炮塔,在远距离上连续发射高爆迫击炮弹。高爆迫击炮弹虽然弹速很慢但是可以跨越地形,适合对付仍在集结的敌群和阵地。</description>
<uiIconPath>Wula/Building/Wula_Base_Mortar_Turret</uiIconPath>
<minifiedDef>MinifiedThing</minifiedDef>
<tickerType>Normal</tickerType>
<descriptionHyperlinks>
<ThingDef>Wula_Base_Mortar_Turret</ThingDef>
<ThingDef>Wula_Base_Mortar_Turret_Weapon</ThingDef>
</descriptionHyperlinks>
<thingCategories Inherit="False">
<li>BuildingsMisc</li>
</thingCategories>
<graphicData>
<texPath>Wula/Building/WULA_Dropping_Building_Cleanzone</texPath>
<graphicClass>Graphic_Multi</graphicClass>
<drawSize>(3,3)</drawSize>
<damageData>
<enabled>false</enabled>
</damageData>
</graphicData>
<altitudeLayer>Building</altitudeLayer>
<passability>PassThroughOnly</passability>
<pathCost>0</pathCost>
<castEdgeShadows>false</castEdgeShadows>
<fillPercent>0.5</fillPercent>
<canOverlapZones>false</canOverlapZones>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<researchPrerequisites Inherit="False">
<li>WULA_Turret_Base_Mortar_Technology</li>
</researchPrerequisites>
<statBases>
<MaxHitPoints>1</MaxHitPoints>
<WorkToBuild>1</WorkToBuild>
<Mass>1</Mass>
<Flammability>0</Flammability>
</statBases>
<size>(3,3)</size>
<constructionSkillPrerequisite>0</constructionSkillPrerequisite>
<resourcesFractionWhenDeconstructed>1</resourcesFractionWhenDeconstructed>
<costList Inherit="False">
<WULA_Alloy>100</WULA_Alloy>
<WULA_Charge_Cube>6</WULA_Charge_Cube>
</costList>
<building>
<destroySound>BuildingDestroyed_Metal_Small</destroySound>
</building>
<placeWorkers>
<li>WulaFallenEmpire.PlaceWorker_CustomRadius</li>
</placeWorkers>
<designationCategory>WULA_Buildings</designationCategory>
<comps>
<li Class="WulaFallenEmpire.CompProperties_SkyfallerCaller">
<skyfallerDef>Wula_Base_Mortar_Turret_Incoming</skyfallerDef> <!-- 迫击炮塔空投类型 -->
<destroyBuilding>true</destroyBuilding>
<delayTicks>1</delayTicks>
<allowThinRoof>true</allowThinRoof>
<allowThickRoof>false</allowThickRoof>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="SkyfallerBase">
<defName>Wula_Base_Mortar_Turret_Incoming</defName>
<label>RTt-8"深渊"迫击炮塔(空投中)</label>
<size>(3,3)</size>
<graphicData>
<texPath>Wula/Building/Wula_Base_Mortar_Turret_Incoming</texPath>
<graphicClass>Graphic_Single</graphicClass>
<shaderType>CutoutFlying</shaderType>
<drawSize>(3,3.75)</drawSize>
</graphicData>
<skyfaller>
<movementType>Accelerate</movementType>
<shadow>Things/Skyfaller/SkyfallerShadowDropPod</shadow>
<shadowSize>(2, 2)</shadowSize>
<anticipationSound>DropPod_Fall</anticipationSound>
<anticipationSoundTicks>100</anticipationSoundTicks>
<impactSound>Explosion_Vaporize</impactSound>
<moteSpawnTime>0.05</moteSpawnTime>
<motesPerCell>1</motesPerCell>
<cameraShake>1</cameraShake>
<angleCurve>
<points>
<li>(0,0)</li>
<li>(1, 1)</li>
</points>
</angleCurve>
<spawnThing>Wula_Base_Mortar_Turret</spawnThing>
</skyfaller>
<comps>
<li Class="CompProperties_Effecter">
<effecterDef>Smoke_Joint</effecterDef>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="BuildingBase">
<defName>Wula_Base_Mortar_Turret</defName>
<label>RTt-8"深渊"迫击炮塔</label>
<description>RTt-8"深渊"迫击炮塔是一种需要通电才能运转的中型防御炮塔,在远距离上连续发射高爆迫击炮弹。高爆迫击炮弹虽然弹速很慢但是可以跨越地形,适合对付仍在集结的敌群和阵地。</description>
<thingClass>WulaFallenEmpire.Building_TurretGunHasSpeed</thingClass>
<drawerType>MapMeshAndRealTime</drawerType>
<modExtensions>
<li Class="WulaFallenEmpire.ModExt_HasSpeedTurret">
<speed>0.2</speed> <!-- 旋转速度 (度/Tick)。迫击炮旋转较慢。 -->
</li>
</modExtensions>
<graphicData>
<texPath>Wula/Building/WULA_Turret_Component</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(3,3)</drawSize>
<!-- <drawOffset>(0,0,-0.16)</drawOffset> -->
<damageData>
<rect>(0.3,0.3,1.4,1.4)</rect>
</damageData>
<shadowData>
<volume>(0.5,0.35,0.75)</volume>
<offset>(0,0,-0.05)</offset>
</shadowData>
</graphicData>
<receivesSignals>true</receivesSignals>
<uiIconPath>Wula/Building/Wula_Base_Mortar_Turret</uiIconPath>
<uiIconScale>1.0</uiIconScale>
<altitudeLayer>Building</altitudeLayer>
<stealable>false</stealable>
<rotatable>false</rotatable>
<size>(3,3)</size>
<statBases>
<MaxHitPoints>1500</MaxHitPoints>
<Flammability>0</Flammability>
<WorkToBuild>3200</WorkToBuild>
<Mass>80</Mass>
<Beauty>0</Beauty>
<ShootingAccuracyTurret>0.80</ShootingAccuracyTurret>
</statBases>
<costList Inherit="False">
<WULA_Alloy>150</WULA_Alloy>
<WULA_Charge_Cube>12</WULA_Charge_Cube>
</costList>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<tickerType>Normal</tickerType>
<passability>PassThroughOnly</passability>
<pathCost>50</pathCost>
<fillPercent>0.5</fillPercent>
<hasTooltip>true</hasTooltip>
<building>
<combatPower>450</combatPower>
<ai_combatDangerous>true</ai_combatDangerous>
<turretGunDef>Wula_Base_Mortar_Turret_Weapon</turretGunDef>
<turretBurstCooldownTime>4</turretBurstCooldownTime>
<turretTopOffset>(-0.04, 0)</turretTopOffset>
<turretTopDrawSize>5.0</turretTopDrawSize>
</building>
<placeWorkers>
<li>PlaceWorker_TurretTop</li>
<li>PlaceWorker_ShowTurretRadius</li>
</placeWorkers>
<comps>
<li Class="CompProperties_CanBeDormant" />
<li Class="CompProperties_Initiatable" />
<li Class="CompProperties_WakeUpDormant">
<wakeUpSound>MechanoidsWakeUp</wakeUpSound>
</li>
<li Class="CompProperties_Stunnable">
<affectedDamageDefs>
<li>EMP</li>
</affectedDamageDefs>
</li>
<li Class="CompProperties_AmbientSound">
<sound>MechTurretBig_Call</sound>
</li>
<li Class="WulaFallenEmpire.CompProperties_FactionSetter">
<!-- <factionDef>Mechanoid</factionDef> 不写默认玩家派系-->
<usePlayerFactionIfNull>true</usePlayerFactionIfNull>
<overrideExistingFaction>false</overrideExistingFaction>
</li>
<li Class="CompProperties_Power">
<compClass>CompPowerTrader</compClass>
<basePowerConsumption>200</basePowerConsumption> <!-- 电力消耗较低 -->
</li>
<li Class="CompProperties_Glower">
<glowRadius>6</glowRadius>
<glowColor>(252,240,120,0)</glowColor> <!-- 黄色光晕 -->
</li>
<li Class="WulaFallenEmpire.CompProperties_ForceTargetable" />
</comps>
</ThingDef>
<ThingDef ParentName="BaseWeaponTurret">
<defName>Wula_Base_Mortar_Turret_Weapon</defName>
<label>RTt-8"深渊"</label>
<description>迫击炮塔,可以从远距离上对敌方集群造成巨大伤害。</description>
<tradeability>None</tradeability>
<destroyOnDrop>true</destroyOnDrop>
<techLevel>Ultra</techLevel>
<graphicData>
<texPath>Wula/Building/Wula_Base_Mortar_Turret_Weapon</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>3</drawSize>
</graphicData>
<uiIconScale>0.33</uiIconScale>
<statBases>
<Mass>150</Mass>
<AccuracyTouch>0.3</AccuracyTouch>
<AccuracyShort>0.5</AccuracyShort>
<AccuracyMedium>0.4</AccuracyMedium>
<AccuracyLong>0.3</AccuracyLong>
</statBases>
<verbs>
<li>
<verbClass>Verb_Shoot</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<defaultProjectile>Bullet_WULA_WM_Mortar_Turret</defaultProjectile>
<minRange>10</minRange>
<range>500</range>
<requireLineOfSight>false</requireLineOfSight>
<warmupTime>2.5</warmupTime>
<isMortar>true</isMortar>
<defaultCooldownTime>5</defaultCooldownTime>
<burstShotCount>1</burstShotCount>
<forcedMissRadius>5</forcedMissRadius>
<soundCast>RocketswarmLauncher_Fire</soundCast>
<soundCastTail>GunTail_Heavy</soundCastTail>
<muzzleFlashScale>18</muzzleFlashScale>
<targetParams>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</li>
</verbs>
</ThingDef>
<ThingDef ParentName="BaseBullet">
<defName>Bullet_WULA_WM_Mortar_Turret</defName>
<label>深渊迫击炮弹</label>
<thingClass>WulaFallenEmpire.Projectile_NorthArcTrail</thingClass>
<tickerType>Normal</tickerType>
<neverMultiSelect>True</neverMultiSelect>
<graphicData>
<texPath>Wula/Projectile/WULA_Mortar_Shell</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(2.5,2)</drawSize>
</graphicData>
<projectile>
<damageDef>Bomb</damageDef>
<damageAmountBase>30</damageAmountBase>
<speed>40</speed>
<armorPenetrationBase>0.8</armorPenetrationBase>
<explosionRadius>5.0</explosionRadius>
<soundHitThickRoof>Artillery_HitThickRoof</soundHitThickRoof>
<soundExplode>MortarBomb_Explode</soundExplode>
<soundImpactAnticipate>MortarRound_PreImpact</soundImpactAnticipate>
<soundAmbient>MortarRound_Ambient</soundAmbient>
<stoppingPower>5</stoppingPower>
<flyOverhead>true</flyOverhead>
</projectile>
<modExtensions>
<li Class="WulaFallenEmpire.NorthArcModExtension">
<northOffsetDistance>18</northOffsetDistance>
<curveSteepness>1.0</curveSteepness>
<useArcTrajectory>true</useArcTrajectory>
</li>
<li Class="WulaFallenEmpire.TrackingBulletDef">
<tailFleckDef>WULA_Smoke_Tail</tailFleckDef>
<fleckMakeFleckTickMax>3</fleckMakeFleckTickMax>
<fleckDelayTicks>1</fleckDelayTicks>
<fleckMakeFleckNum>1~2</fleckMakeFleckNum>
<fleckScale>0.5~1.0</fleckScale>
<fleckSpeed>0.1~0.3</fleckSpeed>
<fleckAngle>-30~30</fleckAngle>
</li>
</modExtensions>
</ThingDef>
</Defs>

View File

@@ -240,12 +240,15 @@
<ThingDef ParentName="BaseBullet">
<defName>Bullet_Wula_LR_Mobile_Factory_Turret</defName>
<label>晶丛炮弹</label>
<thingClass>WulaFallenEmpire.Projectile_NorthArcTrail</thingClass>
<tickerType>Normal</tickerType>
<neverMultiSelect>True</neverMultiSelect>
<drawerType>RealtimeOnly</drawerType>
<graphicData>
<texPath>Wula/Projectile/WULA_Shrapnel</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(2,3)</drawSize>
</graphicData>
<thingClass>WulaFallenEmpire.Projectile_ExplosiveWithTrail</thingClass>
<projectile>
<damageDef>WULA_GiantBomb</damageDef>
<damageAmountBase>45</damageAmountBase>
@@ -260,9 +263,19 @@
<stoppingPower>10</stoppingPower>
</projectile>
<modExtensions>
<li Class="WulaFallenEmpire.NorthArcModExtension">
<northOffsetDistance>18</northOffsetDistance>
<curveSteepness>1.0</curveSteepness>
<useArcTrajectory>true</useArcTrajectory>
</li>
<li Class="WulaFallenEmpire.TrackingBulletDef">
<tailFleckDef>WULA_Smoke_Tail</tailFleckDef>
<fleckMakeFleckTickMax>1</fleckMakeFleckTickMax>
<fleckMakeFleckTickMax>5</fleckMakeFleckTickMax>
<fleckDelayTicks>1</fleckDelayTicks>
<fleckMakeFleckNum>1~2</fleckMakeFleckNum>
<fleckScale>0.5~1.0</fleckScale>
<fleckSpeed>0.1~0.3</fleckSpeed>
<fleckAngle>-30~30</fleckAngle>
</li>
</modExtensions>
</ThingDef>
@@ -466,12 +479,15 @@
<ThingDef ParentName="BaseBullet">
<defName>Bullet_Wula_AI_Heavy_Panzer_Main_Weapon</defName>
<label>月长石炮弹</label>
<drawerType>RealtimeOnly</drawerType>
<graphicData>
<texPath>Wula/Projectile/WULA_Shrapnel</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(2,2)</drawSize>
</graphicData>
<thingClass>WulaFallenEmpire.Projectile_ExplosiveWithTrail</thingClass>
<thingClass>WulaFallenEmpire.Projectile_NorthArcTrail</thingClass>
<tickerType>Normal</tickerType>
<neverMultiSelect>True</neverMultiSelect>
<projectile>
<damageDef>WULA_GiantBomb</damageDef>
<damageAmountBase>65</damageAmountBase>
@@ -486,9 +502,19 @@
<stoppingPower>10</stoppingPower>
</projectile>
<modExtensions>
<li Class="WulaFallenEmpire.NorthArcModExtension">
<northOffsetDistance>5</northOffsetDistance>
<curveSteepness>1.0</curveSteepness>
<useArcTrajectory>true</useArcTrajectory>
</li>
<li Class="WulaFallenEmpire.TrackingBulletDef">
<tailFleckDef>WULA_Smoke_Tail</tailFleckDef>
<fleckMakeFleckTickMax>1</fleckMakeFleckTickMax>
<fleckMakeFleckTickMax>5</fleckMakeFleckTickMax>
<fleckDelayTicks>1</fleckDelayTicks>
<fleckMakeFleckNum>1~2</fleckMakeFleckNum>
<fleckScale>0.5~1.0</fleckScale>
<fleckSpeed>0.1~0.3</fleckSpeed>
<fleckAngle>-30~30</fleckAngle>
</li>
</modExtensions>
</ThingDef>
@@ -496,7 +522,7 @@
<ThingDef ParentName="BaseHumanMakeableGun">
<defName>Wula_Psi_Titan_Beam</defName>
<label>KLb-15 "方解石"</label>
<description>灵能战争机械PAt-6"灵能泰坦"上装备的特殊熔融光束,威力不算特别大,但是不至于让其在失去所有武装后无计可施</description>
<description>灵能战争机械PAt-6"灵能泰坦"用于标记目标的武器,没有伤害敌人的能力</description>
<techLevel>Archotech</techLevel>
<tradeability>None</tradeability>
<graphicData>
@@ -512,7 +538,7 @@
<AccuracyShort>1</AccuracyShort>
<AccuracyMedium>1</AccuracyMedium>
<AccuracyLong>1</AccuracyLong>
<RangedWeapon_Cooldown>0</RangedWeapon_Cooldown>
<RangedWeapon_Cooldown>1</RangedWeapon_Cooldown>
</statBases>
<smeltable>false</smeltable>
<recipeMaker Inherit="False" IsNull="True" />
@@ -527,13 +553,15 @@
<verbClass>WulaFallenEmpire.Verb_ShootBeamExplosive</verbClass>
<!-- 基础射线参数 -->
<hasStandardCommand>true</hasStandardCommand>
<hasStandardCommand>false</hasStandardCommand>
<warmupTime>0</warmupTime>
<range>17</range>
<burstShotCount>32</burstShotCount>
<range>500</range>
<burstShotCount>0</burstShotCount>
<ticksBetweenBurstShots>1</ticksBetweenBurstShots>
<beamDamageDef>WULA_RW_Handle_Cannon_Burn</beamDamageDef>
<beamTotalDamage>1</beamTotalDamage>
<beamTotalDamage>0</beamTotalDamage>
<requireLineOfSight>false</requireLineOfSight>
<!-- 消除射线偏移的参数 -->
<beamFullWidthRange>1000</beamFullWidthRange>

View File

@@ -45,18 +45,15 @@
<ThingDef ParentName="BaseBullet">
<defName>Bullet_WULA_Heavy_Infantry_PowerArmor_Mortar</defName>
<label>铬铁迫击炮弹</label>
<thingClass>WulaFallenEmpire.Projectile_NorthArcTrail</thingClass>
<tickerType>Normal</tickerType>
<neverMultiSelect>True</neverMultiSelect>
<drawerType>RealtimeOnly</drawerType>
<graphicData>
<texPath>Wula/Projectile/WULA_Shrapnel</texPath>
<texPath>Wula/Projectile/WULA_Mortar_Shell</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(1.5,2)</drawSize>
<drawSize>(2,1.75)</drawSize>
</graphicData>
<modExtensions>
<li Class="WulaFallenEmpire.TrackingBulletDef">
<tailFleckDef>WULA_Smoke_Tail</tailFleckDef>
<fleckMakeFleckTickMax>1</fleckMakeFleckTickMax>
</li>
</modExtensions>
<thingClass>WulaFallenEmpire.Projectile_ExplosiveWithTrail</thingClass>
<projectile>
<damageDef>Bomb</damageDef>
<damageAmountBase>20</damageAmountBase>
@@ -69,6 +66,22 @@
<soundImpactAnticipate>MortarRound_PreImpact</soundImpactAnticipate>
<soundAmbient>MortarRound_Ambient</soundAmbient>
</projectile>
<modExtensions>
<li Class="WulaFallenEmpire.NorthArcModExtension">
<northOffsetDistance>10</northOffsetDistance>
<curveSteepness>1.0</curveSteepness>
<useArcTrajectory>true</useArcTrajectory>
</li>
<li Class="WulaFallenEmpire.TrackingBulletDef">
<tailFleckDef>WULA_Smoke_Tail</tailFleckDef>
<fleckMakeFleckTickMax>5</fleckMakeFleckTickMax>
<fleckDelayTicks>1</fleckDelayTicks>
<fleckMakeFleckNum>1~2</fleckMakeFleckNum>
<fleckScale>0.5~1.0</fleckScale>
<fleckSpeed>0.1~0.3</fleckSpeed>
<fleckAngle>-30~30</fleckAngle>
</li>
</modExtensions>
</ThingDef>
<!-- 狼蛛装备 -->

View File

@@ -1008,7 +1008,7 @@
<soundCall>Pawn_Mech_Warqueen_Call</soundCall>
</li>
</lifeStageAges>
<baseHealthScale>25</baseHealthScale>
<baseHealthScale>10</baseHealthScale>
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
@@ -1074,6 +1074,22 @@
<flyingAnimationEast>WULA_Hover_FlyEast</flyingAnimationEast>
<flyingAnimationSouth>WULA_Hover_FlySouth</flyingAnimationSouth>
</li>
<li Class="WulaFallenEmpire.CompProperties_AreaDamage">
<radius>1.5</radius>
<damageIntervalTicks>30</damageIntervalTicks>
<damageDef>Crush</damageDef>
<damageAmount>3</damageAmount>
<scaleWithPsychicSensitivity>false</scaleWithPsychicSensitivity>
<affectFriendly>false</affectFriendly>
<affectNeutral>false</affectNeutral>
<affectHostile>true</affectHostile>
<affectBuildings>false</affectBuildings>
<ignoreFactionRelations>false</ignoreFactionRelations>
<startEnabled>false</startEnabled>
<toggleLabel>碾压伤害</toggleLabel>
<toggleDescription>HAp-6"战车"可以将舰身稍微下沉一些并创造低压区,以碾压靠近的敌军——这同时会使得它伤害附近所有的散落物品。</toggleDescription>
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
</li>
</comps>
</ThingDef>
<ThingDef Name="Wula_Mech_Mobile_Factory" ParentName="WULA_BaseMechanoid">
@@ -1342,7 +1358,7 @@
<blocksRangedWeapons>false</blocksRangedWeapons>
</li>
<!-- 飞行组件 -->
<li Class="WulaFallenEmpire.CompProperties_PawnFlight">
<li Class="WulaFallenEmpire.CompProperties_PawnFlight">
<!-- 飞行触发条件:仅在征召时飞行 -->
<flightCondition>Drafted</flightCondition>
@@ -1361,7 +1377,12 @@
<affectFriendly>false</affectFriendly>
<affectNeutral>false</affectNeutral>
<affectHostile>true</affectHostile>
<ignoreFactionRelations>true</ignoreFactionRelations>
<affectBuildings>false</affectBuildings>
<ignoreFactionRelations>false</ignoreFactionRelations>
<startEnabled>false</startEnabled>
<toggleLabel>碾压伤害</toggleLabel>
<toggleDescription>MFm-2"陆行舰"可以将舰身稍微下沉一些并创造低压区,以碾压靠近的敌军——这同时会使得它伤害附近所有的散落物品。</toggleDescription>
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
</li>
</comps>
</ThingDef>
@@ -1459,7 +1480,7 @@
<ThingDef ParentName="WULA_BaseMechanoid">
<defName>Wula_Psi_Titan</defName>
<label>PAt-6"灵能泰坦"</label>
<description>由乌拉帝国国教所主持开发的重型灵能机械体,以短距离折跃优雅地穿梭于炮火间,并用灵能盾抵挡敌方射弹侵袭。该机体不仅镌刻了破坏力强大的星光追猎术式用以发起远距离跟踪打击,还拥有一系列改变战局的灵能能力。\n\n但是在近身搏斗中灵能泰坦是一个可笑的对手并且它的秘文纹路很容易遭到外力破坏它的本体无法吸收太多伤害</description>
<description>由乌拉帝国国教所主持开发的重型灵能机械体,以折跃优雅地穿梭于炮火间,并用强大的护盾抵挡敌方射弹侵袭。该机体的内部镌刻了无数的术式环路,这使其就像一个行走的灵能发射器,可以驱使各种强大的灵能能力。</description>
<uiIconPath>Wula/Things/Wula_Psi_Titan/Wula_Psi_Titan_Icon</uiIconPath>
<statBases>
<BandwidthCost>1</BandwidthCost>
@@ -1481,7 +1502,7 @@
<soundCall>Pawn_Mech_Warqueen_Call</soundCall>
</li>
</lifeStageAges>
<baseHealthScale>25</baseHealthScale>
<baseHealthScale>50</baseHealthScale>
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
@@ -1518,6 +1539,21 @@
<flyingAnimationEast>WULA_Hover_FlyEast</flyingAnimationEast>
<flyingAnimationSouth>WULA_Hover_FlySouth</flyingAnimationSouth>
</li>
<li Class="WulaFallenEmpire.CompProperties_AreaDamage">
<radius>4</radius>
<damageIntervalTicks>30</damageIntervalTicks>
<damageDef>Wula_Psi_Damage</damageDef>
<damageAmount>4</damageAmount>
<scaleWithPsychicSensitivity>false</scaleWithPsychicSensitivity>
<affectFriendly>false</affectFriendly>
<affectNeutral>false</affectNeutral>
<affectHostile>true</affectHostile>
<affectBuildings>false</affectBuildings>
<ignoreFactionRelations>false</ignoreFactionRelations>
<toggleLabel>灼烧区域</toggleLabel>
<toggleDescription>PAt-6"灵能泰坦"从灵能环路中释放的巨大的能量,靠近它的敌军会被辐射出来的灵能伤害并点燃——这同时会使得它伤害附近所有的散落物品。</toggleDescription>
<toggleIconPath>Wula/UI/Commands/Wula_Psi_Titan_AreaDamage</toggleIconPath>
</li>
</comps>
</ThingDef>

View File

@@ -115,7 +115,7 @@
<invert>true</invert>
<subNodes>
<li Class="JobGiver_AIFightEnemies">
<targetAcquireRadius>65</targetAcquireRadius>
<targetAcquireRadius>500</targetAcquireRadius>
<targetKeepRadius>72</targetKeepRadius>
</li>
<li Class="ThinkNode_Tagger">

View File

@@ -347,4 +347,9 @@
<!-- 区域护盾Gizmo文本 -->
<ShieldOfflineByMoving>未激活-移动中</ShieldOfflineByMoving>
<ToggleAreaDamage>切换区域伤害</ToggleAreaDamage>
<ToggleAreaDamageDesc>启用或禁用区域伤害效果</ToggleAreaDamageDesc>
<AreaDamageEnabled>区域伤害:已启用</AreaDamageEnabled>
<AreaDamageDisabled>区域伤害:已禁用</AreaDamageDisabled>
</LanguageData>

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -21,6 +21,9 @@ namespace WulaFallenEmpire
Map map = parent.pawn.MapHeld;
if (map == null) return;
// 新增:在施法前清除与施法者重合的物体
ClearOverlappingObjects(map);
// 获取扇形区域内的所有单元格
List<IntVec3> affectedCells = AffectedCells(target);
@@ -62,6 +65,80 @@ namespace WulaFallenEmpire
}
}
/// <summary>
/// 新增:清除与施法者重合的所有物体
/// </summary>
private void ClearOverlappingObjects(Map map)
{
try
{
IntVec3 casterPos = Pawn.Position;
// 获取施法者位置的所有物体
List<Thing> thingsAtCasterPos = casterPos.GetThingList(map);
foreach (Thing thing in thingsAtCasterPos)
{
// 跳过施法者自己(除非设置影响施法者)
if (thing == Pawn && !Props.affectCaster)
continue;
// 跳过已经销毁的物体
if (thing.Destroyed)
continue;
// 只处理建筑和Pawn
if (thing is Building || thing is Pawn)
{
// 检查是否应该影响这个物体
if (ShouldAffectThing(thing))
{
// 播放清除特效
PlayClearEffecter(thing, map);
// 处理目标
ProcessTarget(thing);
Log.Message($"[AreaDestruction] Cleared overlapping object: {thing.Label} at {casterPos}");
}
}
}
}
catch (System.Exception ex)
{
Log.Warning($"[AreaDestruction] Error clearing overlapping objects: {ex.Message}");
}
}
/// <summary>
/// 新增:播放清除重合物体的特效
/// </summary>
private void PlayClearEffecter(Thing target, Map map)
{
try
{
if (Props.clearEffecter == null) return;
if (target == null || target.Destroyed) return;
// 在目标位置播放清除特效
Effecter effecter = Props.clearEffecter.Spawn(target.Position, map);
if (Props.clearEffecterMaintainTicks > 0)
{
// 维持效果器
parent.AddEffecterToMaintain(effecter, target.Position, Props.clearEffecterMaintainTicks, map);
}
else
{
effecter.Cleanup();
}
}
catch (System.Exception ex)
{
Log.Warning($"[AreaDestruction] Error playing clear effecter: {ex.Message}");
}
}
private void PlayHitEffecter(Thing target, Map map)
{
try
@@ -94,9 +171,6 @@ namespace WulaFallenEmpire
{
effecter.Cleanup();
}
// 可选:记录日志用于调试
// Log.Message($"[AreaDestruction] Played hit effecter on {target.Label} at {target.Position}");
}
catch (System.Exception ex)
{
@@ -209,9 +283,6 @@ namespace WulaFallenEmpire
{
// 检查pawn是否还"活着"(没有核心部位缺失时可能还能存活)
CheckPawnViability(targetPawn);
// 可选:记录日志用于调试
// Log.Message($"[AreaDestruction] Destroyed {partsDestroyed} body parts on {pawnInfo}");
}
}
catch (System.Exception ex)

View File

@@ -12,6 +12,10 @@ namespace WulaFallenEmpire
public EffecterDef castEffecter;
public int castEffecterMaintainTicks = 60;
// 清除特效(用于清除重合物体)
public EffecterDef clearEffecter;
public int clearEffecterMaintainTicks = 30;
// 命中特效(在目标位置)
public EffecterDef hitEffecter;
public int hitEffecterMaintainTicks = 30;

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq; // 添加这个 using 指令
using RimWorld;
using UnityEngine;
using Verse;
@@ -21,83 +22,101 @@ namespace WulaFallenEmpire
Pawn caster = parent.pawn;
Map map = caster.Map;
// 新增:在施法前验证并调整目标位置
LocalTargetInfo adjustedTarget = AdjustTargetForBuildings(target, caster, map);
// 使用调整后的目标位置
IntVec3 finalTargetCell = adjustedTarget.Cell;
// 使用自定义或默认的入口特效
if (Props.customEntryFleck != null)
{
// 自定义入口粒子效果
FleckMaker.Static(caster.Position, map, Props.customEntryFleck);
}
else
{
// 默认入口粒子效果
FleckMaker.Static(caster.Position, map, FleckDefOf.PsycastSkipFlashEntry);
}
// 使用自定义或默认的出口特效
if (Props.customExitFleck != null)
{
// 自定义出口粒子效果
FleckMaker.Static(target.Cell, map, Props.customExitFleck);
// 如果需要更大的效果,可以创建多个粒子
FleckMaker.Static(finalTargetCell, map, Props.customExitFleck);
if (Props.effectScale > 1.5f)
{
for (int i = 0; i < Mathf.FloorToInt(Props.effectScale); i++)
{
Vector3 offset = new Vector3(Rand.Range(-0.5f, 0.5f), 0f, Rand.Range(-0.5f, 0.5f));
FleckMaker.Static(target.Cell.ToVector3Shifted() + offset, map, Props.customExitFleck);
FleckMaker.Static(finalTargetCell.ToVector3Shifted() + offset, map, Props.customExitFleck);
}
}
}
else
{
// 默认出口粒子效果
FleckMaker.Static(target.Cell, map, FleckDefOf.PsycastSkipInnerExit);
FleckMaker.Static(target.Cell, map, FleckDefOf.PsycastSkipOuterRingExit);
FleckMaker.Static(finalTargetCell, map, FleckDefOf.PsycastSkipInnerExit);
FleckMaker.Static(finalTargetCell, map, FleckDefOf.PsycastSkipOuterRingExit);
}
// 播放传送音效
SoundDefOf.Psycast_Skip_Entry.PlayOneShot(new TargetInfo(caster.Position, map));
SoundDefOf.Psycast_Skip_Exit.PlayOneShot(new TargetInfo(target.Cell, map));
SoundDefOf.Psycast_Skip_Exit.PlayOneShot(new TargetInfo(finalTargetCell, map));
// 存储调整后的目标位置供Apply方法使用
// 注意这里使用反射或其他方法来设置目标因为parent.ability可能不可直接访问
StoreAdjustedTarget(finalTargetCell);
},
ticksAwayFromCast = 5
};
}
// 新增:存储调整后的目标位置
private void StoreAdjustedTarget(IntVec3 targetCell)
{
// 这里可以使用一个字段来存储调整后的目标
// 由于RimWorld的Ability类结构我们可能需要使用其他方式
// 暂时使用一个字段来存储
this.adjustedTargetCell = targetCell;
}
private IntVec3 adjustedTargetCell = IntVec3.Invalid;
public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
{
base.Apply(target, dest);
if (!target.IsValid)
{
return;
}
Pawn caster = parent.pawn;
Map map = caster.Map;
// 新增:最终目标位置验证 - 优先使用调整后的目标
IntVec3 finalTargetCell = this.adjustedTargetCell.IsValid ? this.adjustedTargetCell : target.Cell;
finalTargetCell = ValidateAndAdjustTarget(finalTargetCell, caster, map);
// 重置调整目标
this.adjustedTargetCell = IntVec3.Invalid;
// 如果无法找到有效位置,取消传送
if (!CanTeleportTo(finalTargetCell, map))
{
Messages.Message("TeleportFailedNoValidLocation".Translate(), caster, MessageTypeDefOf.RejectInput);
return;
}
// 使用自定义或默认的入口效果器
EffecterDef entryEffecter = Props.customEntryEffecter ?? EffecterDefOf.Skip_Entry;
Effecter entryEffect = entryEffecter.Spawn(caster, map);
// 应用效果缩放
if (Props.effectScale != 1.0f && entryEffect is Effecter effect)
{
// 这里可以添加效果缩放的逻辑
// 注意Effecter类可能没有直接的缩放属性需要根据具体实现调整
}
parent.AddEffecterToMaintain(entryEffect, caster.Position, 60);
// 使用自定义或默认的出口效果器
EffecterDef exitEffecter = Props.customExitEffecter ?? EffecterDefOf.Skip_Exit;
Effecter exitEffect = exitEffecter.Spawn(target.Cell, map);
parent.AddEffecterToMaintain(exitEffect, target.Cell, 60);
Effecter exitEffect = exitEffecter.Spawn(finalTargetCell, map);
parent.AddEffecterToMaintain(exitEffect, finalTargetCell, 60);
// 唤醒可能休眠的组件
caster.TryGetComp<CompCanBeDormant>()?.WakeUp();
// 执行传送
caster.Position = target.Cell;
caster.Position = finalTargetCell;
caster.Notify_Teleported();
// 如果是玩家阵营,解除战争迷雾
@@ -115,10 +134,81 @@ namespace WulaFallenEmpire
// 播放到达时的喧嚣效果
if (Props.destClamorType != null)
{
// 根据效果缩放调整喧嚣半径
float adjustedRadius = Props.destClamorRadius * Props.effectScale;
GenClamor.DoClamor(caster, target.Cell, adjustedRadius, Props.destClamorType);
GenClamor.DoClamor(caster, finalTargetCell, adjustedRadius, Props.destClamorType);
}
// 记录传送调整信息(调试用)
if (finalTargetCell != target.Cell)
{
Log.Message($"[TeleportSelf] AI传送位置从 {target.Cell} 调整到 {finalTargetCell}");
}
}
/// <summary>
/// 新增:在施法前调整目标位置,防止传送到建筑上
/// </summary>
private LocalTargetInfo AdjustTargetForBuildings(LocalTargetInfo originalTarget, Pawn caster, Map map)
{
IntVec3 originalCell = originalTarget.Cell;
// 如果目标位置不可传送,寻找最近的可行位置
if (!CanTeleportTo(originalCell, map))
{
IntVec3 adjustedCell = FindNearestValidTeleportPosition(originalCell, caster, map);
if (adjustedCell.IsValid)
{
return new LocalTargetInfo(adjustedCell);
}
}
return originalTarget;
}
/// <summary>
/// 新增:最终目标位置验证
/// </summary>
private IntVec3 ValidateAndAdjustTarget(IntVec3 targetCell, Pawn caster, Map map)
{
// 如果目标位置不可传送,寻找替代位置
if (!CanTeleportTo(targetCell, map))
{
IntVec3 adjustedCell = FindNearestValidTeleportPosition(targetCell, caster, map);
if (adjustedCell.IsValid)
{
return adjustedCell;
}
}
return targetCell;
}
/// <summary>
/// 新增:寻找最近的可行传送位置
/// </summary>
private IntVec3 FindNearestValidTeleportPosition(IntVec3 center, Pawn caster, Map map, int maxRadius = 15)
{
// 首先检查中心点本身
if (CanTeleportTo(center, map))
return center;
// 在逐渐增大的半径内搜索
for (int radius = 1; radius <= maxRadius; radius++)
{
// 使用 GenRadial.RadialPattern 而不是 RadialCellsAround
int numCells = GenRadial.NumCellsInRadius(radius);
for (int i = 0; i < numCells; i++)
{
IntVec3 cell = center + GenRadial.RadialPattern[i];
if (cell.InBounds(map) && CanTeleportTo(cell, map))
{
return cell;
}
}
}
// 如果找不到有效位置,返回无效位置
return IntVec3.Invalid;
}
public override bool Valid(LocalTargetInfo target, bool showMessages = true)

View File

@@ -25,6 +25,10 @@ namespace WulaFallenEmpire
public FleckDef customExitFleck;
public float effectScale = 1.0f; // 效果缩放比例
// 新增:位置调整设置
public int maxPositionAdjustRadius = 15; // 最大位置调整半径
public bool allowPositionAdjustment = true; // 是否允许自动调整位置
public CompProperties_AbilityTeleportSelf()
{
compClass = typeof(CompAbilityEffect_TeleportSelf);

View File

@@ -8,10 +8,9 @@ namespace WulaFallenEmpire
public class Projectile_NorthArcTrail : Projectile_Explosive
{
// --- 弹道部分变量 ---
// 通过ModExtension配置的向北偏移高度
public float northOffsetDistance = 0f;
private Vector3 exactPositionInt; // 用于存储我们自己计算的位置
private Vector3 exactPositionInt;
private float curveSteepness = 1f;
private Vector3 originPos;
@@ -24,9 +23,12 @@ namespace WulaFallenEmpire
// --- 尾迹部分变量 ---
private TrackingBulletDef trackingDefInt;
private int Fleck_MakeFleckTick;
private Vector3 lastTickPosition; // 记录上一帧位置用于计算拖尾方向
private Vector3 lastTickPosition;
// 新增:绘制相关变量
private float currentArcHeight;
private const float DRAW_ALTITUDE_OFFSET = 15f; // 增加绘制高度偏移
// 获取 XML 中的扩展数据
public TrackingBulletDef TrackingDef
{
get
@@ -36,7 +38,6 @@ namespace WulaFallenEmpire
trackingDefInt = def.GetModExtension<TrackingBulletDef>();
if (trackingDefInt == null)
{
// 如果没配置,给一个空的默认值防止报错,或者只报错一次
trackingDefInt = new TrackingBulletDef();
}
}
@@ -44,13 +45,26 @@ namespace WulaFallenEmpire
}
}
public override Vector3 ExactPosition => exactPositionInt; // 重写属性,让游戏获取我们计算的位置
public override Quaternion ExactRotation => Quaternion.LookRotation(GetCurrentDirection()); // 弹头朝向当前移动方向
// 修改:重写绘制位置,确保在正确的高度
public override Vector3 ExactPosition
{
get
{
if (!initialized)
return base.ExactPosition;
// 返回计算的位置但保持Y轴为绘制高度
Vector3 pos = exactPositionInt;
pos.y = def.Altitude + currentArcHeight + DRAW_ALTITUDE_OFFSET;
return pos;
}
}
public override Quaternion ExactRotation => Quaternion.LookRotation(GetCurrentDirection());
public override void ExposeData()
{
base.ExposeData();
// 保存弹道数据
Scribe_Values.Look(ref originPos, "originPos");
Scribe_Values.Look(ref destinationPos, "destinationPos");
Scribe_Values.Look(ref bezierControlPoint, "bezierControlPoint");
@@ -60,8 +74,8 @@ namespace WulaFallenEmpire
Scribe_Values.Look(ref northOffsetDistance, "northOffsetDistance", 0f);
Scribe_Values.Look(ref exactPositionInt, "exactPositionInt", Vector3.zero);
Scribe_Values.Look(ref curveSteepness, "curveSteepness", 1f);
Scribe_Values.Look(ref currentArcHeight, "currentArcHeight", 0f);
// 保存尾迹数据
Scribe_Values.Look(ref Fleck_MakeFleckTick, "Fleck_MakeFleckTick", 0);
Scribe_Values.Look(ref lastTickPosition, "lastTickPosition", Vector3.zero);
}
@@ -79,8 +93,7 @@ namespace WulaFallenEmpire
}
else
{
// 如果没有配置,则使用默认值,或者从 projectile.arcHeightFactor 获取参考值
northOffsetDistance = def.projectile.arcHeightFactor * 3; // 将arcHeightFactor转换为北向偏移距离
northOffsetDistance = def.projectile.arcHeightFactor * 3;
}
// --- 初始化弹道 ---
@@ -90,36 +103,27 @@ namespace WulaFallenEmpire
float speed = def.projectile.speed;
if (speed <= 0) speed = 1f;
// 计算直线距离估算时间
float distance = (originPos - destinationPos).MagnitudeHorizontal();
totalTicks = Mathf.CeilToInt(distance / speed * 100f);
if (totalTicks < 1) totalTicks = 1;
ticksFlying = 0;
// 贝塞尔曲线计算
// 中点
// 贝塞尔曲线计算
Vector3 midPoint = (originPos + destinationPos) / 2f;
// 顶点 (中点向北偏移 X 格)
Vector3 apexPoint = midPoint + new Vector3(0, 0, northOffsetDistance);
// 控制点 P1 = 2 * 顶点 - 中点
bezierControlPoint = 2f * apexPoint - midPoint;
initialized = true;
// 初始化我们自己的位置
exactPositionInt = origin;
// --- 初始化尾迹 ---
lastTickPosition = origin;
currentArcHeight = 0f;
}
protected override void Tick()
{
// 首先调用base.Tick(),让它处理组件更新(比如拖尾特效)和ticksToImpact
base.Tick();
// 如果base.Tick()已经处理了撞击,我们就不再继续
if (this.Destroyed)
{
return;
@@ -133,61 +137,54 @@ namespace WulaFallenEmpire
ticksFlying++;
// 1. 计算当前帧的新位置 (贝塞尔曲线)
// 1. 计算当前帧的新位置
float t = (float)ticksFlying / (float)totalTicks;
if (t > 1f) t = 1f;
float u = 1 - t;
// 水平位移 (贝塞尔)
Vector3 nextPos = (u * u * originPos) + (2 * u * t * bezierControlPoint) + (t * t * destinationPos);
// 垂直高度 (抛物线)
float arcHeight = def.projectile.arcHeightFactor * GenMath.InverseParabola(t);
nextPos.y = arcHeight;
currentArcHeight = def.projectile.arcHeightFactor * GenMath.InverseParabola(t);
nextPos.y = 0f; // 水平位置不包含高度
// 检查边界
if (!nextPos.ToIntVec3().InBounds(base.Map))
{
this.Destroy();
return;
}
// 更新我们自己的位置
exactPositionInt = nextPos;
// 2. 处理拖尾特效
// 只有当这一帧移动了,且配置了 DefModExtension 时才生成
if (TrackingDef != null && TrackingDef.tailFleckDef != null)
{
Fleck_MakeFleckTick++;
// 检查生成间隔
if (Fleck_MakeFleckTick >= TrackingDef.fleckDelayTicks)
{
// 简单的循环计时重置逻辑
if (Fleck_MakeFleckTick >= (TrackingDef.fleckDelayTicks + TrackingDef.fleckMakeFleckTickMax))
{
Fleck_MakeFleckTick = TrackingDef.fleckDelayTicks;
}
Map map = base.Map;
// 只有当在地图内时才生成
if (map != null)
{
int count = TrackingDef.fleckMakeFleckNum.RandomInRange;
Vector3 currentPosition = this.ExactPosition;
Vector3 currentPosition = this.ExactPosition; // 使用重写后的ExactPosition
Vector3 previousPosition = lastTickPosition;
// 仅当有位移时才计算角度,防止原地鬼畜
if ((currentPosition - previousPosition).MagnitudeHorizontalSquared() > 0.0001f)
{
float moveAngle = (currentPosition - previousPosition).AngleFlat();
for (int i = 0; i < count; i++)
{
// 这里的逻辑完全照搬原来的 BulletWithTrail
float velocityAngle = TrackingDef.fleckAngle.RandomInRange + moveAngle;
FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, TrackingDef.tailFleckDef, TrackingDef.fleckScale.RandomInRange);
dataStatic.rotation = moveAngle; // 粒子朝向跟随移动方向
dataStatic.rotation = moveAngle;
dataStatic.rotationRate = TrackingDef.fleckRotation.RandomInRange;
dataStatic.velocityAngle = velocityAngle;
dataStatic.velocitySpeed = TrackingDef.fleckSpeed.RandomInRange;
@@ -198,10 +195,8 @@ namespace WulaFallenEmpire
}
}
// 3. 更新上一帧位置
lastTickPosition = nextPos;
lastTickPosition = ExactPosition; // 使用重写后的ExactPosition
// 4. 判定到达目标或倒计时爆炸
if (ticksFlying >= totalTicks)
{
Impact(null);
@@ -209,6 +204,58 @@ namespace WulaFallenEmpire
}
}
// 修改:重写绘制方法,确保正确绘制
protected override void DrawAt(Vector3 drawLoc, bool flip = false)
{
if (!initialized)
{
base.DrawAt(drawLoc, flip);
return;
}
// 使用我们计算的位置进行绘制
Vector3 finalDrawPos = ExactPosition;
// 绘制阴影
if (def.projectile.shadowSize > 0f)
{
DrawShadow(finalDrawPos, currentArcHeight);
}
Quaternion rotation = ExactRotation;
if (def.projectile.spinRate != 0f)
{
float spinAngle = 60f / def.projectile.spinRate;
rotation = Quaternion.AngleAxis((float)Find.TickManager.TicksGame % spinAngle / spinAngle * 360f, Vector3.up);
}
// 使用正确的绘制方法
if (def.projectile.useGraphicClass)
{
Graphic.Draw(finalDrawPos, base.Rotation, this, rotation.eulerAngles.y);
}
else
{
Graphics.DrawMesh(MeshPool.GridPlane(def.graphicData.drawSize), finalDrawPos, rotation, DrawMat, 0);
}
Comps_PostDraw();
}
// 修改:重写阴影绘制,使用正确的高度
private void DrawShadow(Vector3 drawLoc, float height)
{
Material shadowMat = MaterialPool.MatFrom("Things/Skyfaller/SkyfallerShadowCircle", ShaderDatabase.Transparent);
if (shadowMat == null) return;
float shadowSize = def.projectile.shadowSize * Mathf.Lerp(1f, 0.6f, height / (def.projectile.arcHeightFactor + 1f));
Vector3 scale = new Vector3(shadowSize, 1f, shadowSize);
Vector3 shadowOffset = new Vector3(0f, -0.01f, 0f);
Matrix4x4 matrix = Matrix4x4.TRS(drawLoc + shadowOffset, Quaternion.identity, scale);
Graphics.DrawMesh(MeshPool.plane10, matrix, shadowMat, 0);
}
// 计算当前位置的切线方向
private Vector3 GetCurrentDirection()
{
@@ -220,13 +267,9 @@ namespace WulaFallenEmpire
float t = (float)ticksFlying / (float)totalTicks;
if (t > 1f) t = 1f;
// 计算贝塞尔曲线的导数(切线向量)
// 对于二次贝塞尔曲线 B(t) = (1-t)²P₀ + 2(1-t)tP₁ + t²P₂
// 导数 B'(t) = 2(1-t)(P₁-P₀) + 2t(P₂-P₁)
float u = 1 - t;
Vector3 tangent = 2 * u * (bezierControlPoint - originPos) + 2 * t * (destinationPos - bezierControlPoint);
// 如果切线向量为零,则使用默认方向
if (tangent.MagnitudeHorizontalSquared() < 0.0001f)
{
return (destinationPos - originPos).normalized;
@@ -240,4 +283,4 @@ namespace WulaFallenEmpire
base.Impact(hitThing, blockedByShield);
}
}
}
}

View File

@@ -8,20 +8,23 @@ namespace WulaFallenEmpire
public class CompAreaDamage : ThingComp
{
private int ticksUntilNextDamage;
private bool enabled;
public CompProperties_AreaDamage Props => (CompProperties_AreaDamage)props;
public bool Enabled => enabled;
public override void Initialize(CompProperties props)
{
base.Initialize(props);
ticksUntilNextDamage = Props.damageIntervalTicks;
enabled = Props.startEnabled;
}
public override void CompTick()
{
base.CompTick();
if (!parent.Spawned)
if (!parent.Spawned || !enabled)
return;
ticksUntilNextDamage--;
@@ -32,6 +35,16 @@ namespace WulaFallenEmpire
}
}
public void Toggle()
{
enabled = !enabled;
}
public void SetEnabled(bool newState)
{
enabled = newState;
}
private void DoAreaDamage()
{
Map map = parent.Map;
@@ -227,6 +240,50 @@ namespace WulaFallenEmpire
{
base.PostExposeData();
Scribe_Values.Look(ref ticksUntilNextDamage, "ticksUntilNextDamage", Props.damageIntervalTicks);
Scribe_Values.Look(ref enabled, "enabled", Props.startEnabled);
}
public override IEnumerable<Gizmo> CompGetGizmosExtra()
{
// 只有拥有者可以操作开关
if (parent.Faction != null && parent.Faction != Faction.OfPlayer && !parent.Faction.IsPlayer)
yield break;
// 创建切换开关的 Gizmo
Command_Toggle toggleCommand = new Command_Toggle
{
defaultLabel = Props.toggleLabel.Translate(),
defaultDesc = Props.toggleDescription.Translate(),
icon = LoadToggleIcon(),
isActive = () => enabled,
toggleAction = () => Toggle()
};
yield return toggleCommand;
}
private Texture2D LoadToggleIcon()
{
if (!string.IsNullOrEmpty(Props.toggleIconPath))
{
return ContentFinder<Texture2D>.Get(Props.toggleIconPath, false);
}
// 默认图标
return TexCommand.DesirePower;
}
public override string CompInspectStringExtra()
{
string baseString = base.CompInspectStringExtra();
string statusText = enabled ?
"AreaDamageEnabled".Translate() :
"AreaDamageDisabled".Translate();
if (string.IsNullOrEmpty(baseString))
return statusText;
else
return baseString + "\n" + statusText;
}
}
}

View File

@@ -33,6 +33,12 @@ namespace WulaFallenEmpire
// 特殊效果
public bool showDamageNumbers = false; // 显示伤害数值(调试用)
// 新增:开关设置
public bool startEnabled = true; // 初始是否启用
public string toggleLabel = "Toggle Area Damage"; // 开关标签
public string toggleDescription = "Enable or disable the area damage effect"; // 开关描述
public string toggleIconPath; // 开关图标路径
public CompProperties_AreaDamage()
{
compClass = typeof(CompAreaDamage);