有一点自私的护盾
This commit is contained in:
Binary file not shown.
@@ -479,13 +479,31 @@
|
||||
</skillRequirements>
|
||||
</recipeMaker>
|
||||
<comps>
|
||||
<li Class="CompProperties_Shield">
|
||||
<startingTicksToReset>3600</startingTicksToReset><!-- 1 mins -->
|
||||
<minDrawSize>2.5</minDrawSize>
|
||||
<maxDrawSize>2.8</maxDrawSize>
|
||||
<energyLossPerDamage>0.01</energyLossPerDamage>
|
||||
<energyOnReset>4.0</energyOnReset>
|
||||
<blocksRangedWeapons>false</blocksRangedWeapons>
|
||||
<li Class="WulaFallenEmpire.CompProperties_ApparelInterceptor">
|
||||
|
||||
<!-- 基础功能 -->
|
||||
<radius>2.5</radius> <!-- 护盾半径,决定了拦截范围 -->
|
||||
<hitPoints>500</hitPoints> <!-- 护盾的生命值,每次拦截会消耗 -->
|
||||
<rechargeDelay>2800</rechargeDelay> <!-- 护盾破裂后的冷却时间 (ticks) -->
|
||||
|
||||
<!-- 拦截类型 -->
|
||||
<interceptGroundProjectiles>true</interceptGroundProjectiles> <!-- 是否拦截地面弹丸 (如子弹) -->
|
||||
<interceptAirProjectiles>false</interceptAirProjectiles> <!-- 是否拦截空中弹丸 (如炮弹) -->
|
||||
<interceptNonHostileProjectiles>true</interceptNonHostileProjectiles> <!-- 是否拦截非敌对弹丸 -->
|
||||
|
||||
<!-- 视觉与音效 -->
|
||||
<color>(0.9, 0.8, 0.2, 0.5)</color> <!-- 护盾气泡的颜色 (RGBA) -->
|
||||
<soundIntercept>Interceptor_BlockedProjectile</soundIntercept> <!-- 成功拦截时的音效 -->
|
||||
<soundBreak>Shield_Break</soundBreak> <!-- 护盾破裂时的音效 -->
|
||||
<reactivateEffect>BulletShieldGenerator_Reactivate</reactivateEffect> <!-- 护盾冷却结束后恢复的特效 -->
|
||||
|
||||
<!-- EMP 效果 -->
|
||||
<isImmuneToEMP>false</isImmuneToEMP> <!-- 是否免疫EMP伤害 -->
|
||||
<disarmedByEmpForTicks>600</disarmedByEmpForTicks> <!-- 被EMP击中后,额外的眩晕/瘫痪时间 (ticks) -->
|
||||
|
||||
<!-- 被动恢复 -->
|
||||
<rechargeHitPointsIntervalTicks>60</rechargeHitPointsIntervalTicks> <!-- 未破盾时,每隔多少ticks恢复1点生命值 -->
|
||||
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
@@ -533,13 +551,31 @@
|
||||
<li>RewardStandardHighFreq</li>
|
||||
</thingSetMakerTags>
|
||||
<comps>
|
||||
<li Class="CompProperties_Shield">
|
||||
<startingTicksToReset>3600</startingTicksToReset><!-- 1 mins -->
|
||||
<minDrawSize>2.5</minDrawSize>
|
||||
<maxDrawSize>2.8</maxDrawSize>
|
||||
<energyLossPerDamage>0.01</energyLossPerDamage>
|
||||
<energyOnReset>4.0</energyOnReset>
|
||||
<blocksRangedWeapons>false</blocksRangedWeapons>
|
||||
<li Class="WulaFallenEmpire.CompProperties_ApparelInterceptor">
|
||||
|
||||
<!-- 基础功能 -->
|
||||
<radius>2.5</radius> <!-- 护盾半径,决定了拦截范围 -->
|
||||
<hitPoints>500</hitPoints> <!-- 护盾的生命值,每次拦截会消耗 -->
|
||||
<rechargeDelay>2800</rechargeDelay> <!-- 护盾破裂后的冷却时间 (ticks) -->
|
||||
|
||||
<!-- 拦截类型 -->
|
||||
<interceptGroundProjectiles>true</interceptGroundProjectiles> <!-- 是否拦截地面弹丸 (如子弹) -->
|
||||
<interceptAirProjectiles>false</interceptAirProjectiles> <!-- 是否拦截空中弹丸 (如炮弹) -->
|
||||
<interceptNonHostileProjectiles>false</interceptNonHostileProjectiles> <!-- 是否拦截非敌对弹丸 -->
|
||||
|
||||
<!-- 视觉与音效 -->
|
||||
<color>(0.9, 0.8, 0.2, 0.5)</color> <!-- 护盾气泡的颜色 (RGBA) -->
|
||||
<soundIntercept>Interceptor_BlockedProjectile</soundIntercept> <!-- 成功拦截时的音效 -->
|
||||
<soundBreak>Shield_Break</soundBreak> <!-- 护盾破裂时的音效 -->
|
||||
<reactivateEffect>BulletShieldGenerator_Reactivate</reactivateEffect> <!-- 护盾冷却结束后恢复的特效 -->
|
||||
|
||||
<!-- EMP 效果 -->
|
||||
<isImmuneToEMP>false</isImmuneToEMP> <!-- 是否免疫EMP伤害 -->
|
||||
<disarmedByEmpForTicks>600</disarmedByEmpForTicks> <!-- 被EMP击中后,额外的眩晕/瘫痪时间 (ticks) -->
|
||||
|
||||
<!-- 被动恢复 -->
|
||||
<rechargeHitPointsIntervalTicks>60</rechargeHitPointsIntervalTicks> <!-- 未破盾时,每隔多少ticks恢复1点生命值 -->
|
||||
|
||||
</li>
|
||||
</comps>
|
||||
</ThingDef>
|
||||
@@ -904,13 +940,31 @@
|
||||
<chargeNoun>炮弹</chargeNoun>
|
||||
<displayGizmoWhileUndrafted>false</displayGizmoWhileUndrafted>
|
||||
</li>
|
||||
<li Class="CompProperties_Shield">
|
||||
<startingTicksToReset>3600</startingTicksToReset><!-- 1 mins -->
|
||||
<minDrawSize>2.5</minDrawSize>
|
||||
<maxDrawSize>2.8</maxDrawSize>
|
||||
<energyLossPerDamage>0.01</energyLossPerDamage>
|
||||
<energyOnReset>4.0</energyOnReset>
|
||||
<blocksRangedWeapons>false</blocksRangedWeapons>
|
||||
<li Class="WulaFallenEmpire.CompProperties_ApparelInterceptor">
|
||||
|
||||
<!-- 基础功能 -->
|
||||
<radius>2.5</radius> <!-- 护盾半径,决定了拦截范围 -->
|
||||
<hitPoints>500</hitPoints> <!-- 护盾的生命值,每次拦截会消耗 -->
|
||||
<rechargeDelay>2800</rechargeDelay> <!-- 护盾破裂后的冷却时间 (ticks) -->
|
||||
|
||||
<!-- 拦截类型 -->
|
||||
<interceptGroundProjectiles>true</interceptGroundProjectiles> <!-- 是否拦截地面弹丸 (如子弹) -->
|
||||
<interceptAirProjectiles>false</interceptAirProjectiles> <!-- 是否拦截空中弹丸 (如炮弹) -->
|
||||
<interceptNonHostileProjectiles>false</interceptNonHostileProjectiles> <!-- 是否拦截非敌对弹丸 -->
|
||||
|
||||
<!-- 视觉与音效 -->
|
||||
<color>(0.9, 0.8, 0.2, 0.5)</color> <!-- 护盾气泡的颜色 (RGBA) -->
|
||||
<soundIntercept>Interceptor_BlockedProjectile</soundIntercept> <!-- 成功拦截时的音效 -->
|
||||
<soundBreak>Shield_Break</soundBreak> <!-- 护盾破裂时的音效 -->
|
||||
<reactivateEffect>BulletShieldGenerator_Reactivate</reactivateEffect> <!-- 护盾冷却结束后恢复的特效 -->
|
||||
|
||||
<!-- EMP 效果 -->
|
||||
<isImmuneToEMP>false</isImmuneToEMP> <!-- 是否免疫EMP伤害 -->
|
||||
<disarmedByEmpForTicks>600</disarmedByEmpForTicks> <!-- 被EMP击中后,额外的眩晕/瘫痪时间 (ticks) -->
|
||||
|
||||
<!-- 被动恢复 -->
|
||||
<rechargeHitPointsIntervalTicks>60</rechargeHitPointsIntervalTicks> <!-- 未破盾时,每隔多少ticks恢复1点生命值 -->
|
||||
|
||||
</li>
|
||||
</comps>
|
||||
<verbs>
|
||||
@@ -1039,13 +1093,31 @@
|
||||
<chargeNoun>炮弹</chargeNoun>
|
||||
<displayGizmoWhileUndrafted>false</displayGizmoWhileUndrafted>
|
||||
</li>
|
||||
<li Class="CompProperties_Shield">
|
||||
<startingTicksToReset>3600</startingTicksToReset><!-- 1 mins -->
|
||||
<minDrawSize>2.5</minDrawSize>
|
||||
<maxDrawSize>2.8</maxDrawSize>
|
||||
<energyLossPerDamage>0.01</energyLossPerDamage>
|
||||
<energyOnReset>4.0</energyOnReset>
|
||||
<blocksRangedWeapons>false</blocksRangedWeapons>
|
||||
<li Class="WulaFallenEmpire.CompProperties_ApparelInterceptor">
|
||||
|
||||
<!-- 基础功能 -->
|
||||
<radius>2.5</radius> <!-- 护盾半径,决定了拦截范围 -->
|
||||
<hitPoints>500</hitPoints> <!-- 护盾的生命值,每次拦截会消耗 -->
|
||||
<rechargeDelay>2800</rechargeDelay> <!-- 护盾破裂后的冷却时间 (ticks) -->
|
||||
|
||||
<!-- 拦截类型 -->
|
||||
<interceptGroundProjectiles>true</interceptGroundProjectiles> <!-- 是否拦截地面弹丸 (如子弹) -->
|
||||
<interceptAirProjectiles>false</interceptAirProjectiles> <!-- 是否拦截空中弹丸 (如炮弹) -->
|
||||
<interceptNonHostileProjectiles>false</interceptNonHostileProjectiles> <!-- 是否拦截非敌对弹丸 -->
|
||||
|
||||
<!-- 视觉与音效 -->
|
||||
<color>(0.9, 0.8, 0.2, 0.5)</color> <!-- 护盾气泡的颜色 (RGBA) -->
|
||||
<soundIntercept>Interceptor_BlockedProjectile</soundIntercept> <!-- 成功拦截时的音效 -->
|
||||
<soundBreak>Shield_Break</soundBreak> <!-- 护盾破裂时的音效 -->
|
||||
<reactivateEffect>BulletShieldGenerator_Reactivate</reactivateEffect> <!-- 护盾冷却结束后恢复的特效 -->
|
||||
|
||||
<!-- EMP 效果 -->
|
||||
<isImmuneToEMP>false</isImmuneToEMP> <!-- 是否免疫EMP伤害 -->
|
||||
<disarmedByEmpForTicks>600</disarmedByEmpForTicks> <!-- 被EMP击中后,额外的眩晕/瘫痪时间 (ticks) -->
|
||||
|
||||
<!-- 被动恢复 -->
|
||||
<rechargeHitPointsIntervalTicks>60</rechargeHitPointsIntervalTicks> <!-- 未破盾时,每隔多少ticks恢复1点生命值 -->
|
||||
|
||||
</li>
|
||||
<li Class="CompProperties_CauseHediff_Apparel">
|
||||
<hediff>WULA_Heavy_Infantry_PowerArmor_PowerFist</hediff>
|
||||
@@ -1290,13 +1362,31 @@
|
||||
<chargeNoun>梭镖</chargeNoun>
|
||||
<displayGizmoWhileUndrafted>false</displayGizmoWhileUndrafted>
|
||||
</li>
|
||||
<li Class="CompProperties_Shield">
|
||||
<startingTicksToReset>3600</startingTicksToReset><!-- 1 mins -->
|
||||
<minDrawSize>2.5</minDrawSize>
|
||||
<maxDrawSize>2.8</maxDrawSize>
|
||||
<energyLossPerDamage>0.01</energyLossPerDamage>
|
||||
<energyOnReset>4.0</energyOnReset>
|
||||
<blocksRangedWeapons>false</blocksRangedWeapons>
|
||||
<li Class="WulaFallenEmpire.CompProperties_ApparelInterceptor">
|
||||
|
||||
<!-- 基础功能 -->
|
||||
<radius>2.5</radius> <!-- 护盾半径,决定了拦截范围 -->
|
||||
<hitPoints>500</hitPoints> <!-- 护盾的生命值,每次拦截会消耗 -->
|
||||
<rechargeDelay>2800</rechargeDelay> <!-- 护盾破裂后的冷却时间 (ticks) -->
|
||||
|
||||
<!-- 拦截类型 -->
|
||||
<interceptGroundProjectiles>true</interceptGroundProjectiles> <!-- 是否拦截地面弹丸 (如子弹) -->
|
||||
<interceptAirProjectiles>false</interceptAirProjectiles> <!-- 是否拦截空中弹丸 (如炮弹) -->
|
||||
<interceptNonHostileProjectiles>false</interceptNonHostileProjectiles> <!-- 是否拦截非敌对弹丸 -->
|
||||
|
||||
<!-- 视觉与音效 -->
|
||||
<color>(0.9, 0.8, 0.2, 0.5)</color> <!-- 护盾气泡的颜色 (RGBA) -->
|
||||
<soundIntercept>Interceptor_BlockedProjectile</soundIntercept> <!-- 成功拦截时的音效 -->
|
||||
<soundBreak>Shield_Break</soundBreak> <!-- 护盾破裂时的音效 -->
|
||||
<reactivateEffect>BulletShieldGenerator_Reactivate</reactivateEffect> <!-- 护盾冷却结束后恢复的特效 -->
|
||||
|
||||
<!-- EMP 效果 -->
|
||||
<isImmuneToEMP>false</isImmuneToEMP> <!-- 是否免疫EMP伤害 -->
|
||||
<disarmedByEmpForTicks>600</disarmedByEmpForTicks> <!-- 被EMP击中后,额外的眩晕/瘫痪时间 (ticks) -->
|
||||
|
||||
<!-- 被动恢复 -->
|
||||
<rechargeHitPointsIntervalTicks>60</rechargeHitPointsIntervalTicks> <!-- 未破盾时,每隔多少ticks恢复1点生命值 -->
|
||||
|
||||
</li>
|
||||
</comps>
|
||||
<verbs>
|
||||
@@ -1345,4 +1435,4 @@
|
||||
<label>盾牌</label>
|
||||
<drawOrder>275</drawOrder>
|
||||
</ApparelLayerDef>
|
||||
</Defs>
|
||||
</Defs>
|
||||
|
||||
Binary file not shown.
@@ -3,20 +3,28 @@
|
||||
"WorkspaceRootPath": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\ingestpatch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:ingestpatch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\compapparelinterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:compapparelinterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\hediffcomp_regeneratebackstory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:hediffcomp_regeneratebackstory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\harmonypatches\\projectile_launch_patch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:harmonypatches\\projectile_launch_patch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\compuseeffect_wulaskilltrainer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:compuseeffect_wulaskilltrainer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\ingestpatch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:ingestpatch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\building_wula_darkenergy_engine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:building_wula_darkenergy_engine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\compuseeffect_wulaskilltrainer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:compuseeffect_wulaskilltrainer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\hediffcomp_regeneratebackstory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:hediffcomp_regeneratebackstory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\wulafallenempiremod.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
@@ -34,15 +42,41 @@
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 1,
|
||||
"SelectedChildIndex": 2,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "Projectile_Launch_Patch.cs",
|
||||
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HarmonyPatches\\Projectile_Launch_Patch.cs",
|
||||
"RelativeDocumentMoniker": "HarmonyPatches\\Projectile_Launch_Patch.cs",
|
||||
"ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HarmonyPatches\\Projectile_Launch_Patch.cs",
|
||||
"RelativeToolTip": "HarmonyPatches\\Projectile_Launch_Patch.cs",
|
||||
"ViewState": "AQIAAAAAAAAAAAAAAAAAABwAAAAAAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-07-23T10:23:38.948Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "CompApparelInterceptor.cs",
|
||||
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompApparelInterceptor.cs",
|
||||
"RelativeDocumentMoniker": "CompApparelInterceptor.cs",
|
||||
"ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompApparelInterceptor.cs",
|
||||
"RelativeToolTip": "CompApparelInterceptor.cs",
|
||||
"ViewState": "AQIAABoAAAAAAAAAAADwv2UBAAABAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-07-23T10:03:31.989Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "IngestPatch.cs",
|
||||
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs",
|
||||
"RelativeDocumentMoniker": "IngestPatch.cs",
|
||||
@@ -55,7 +89,7 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"DocumentIndex": 2,
|
||||
"Title": "CompUseEffect_WulaSkillTrainer.cs",
|
||||
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompUseEffect_WulaSkillTrainer.cs",
|
||||
"RelativeDocumentMoniker": "CompUseEffect_WulaSkillTrainer.cs",
|
||||
@@ -63,11 +97,12 @@
|
||||
"RelativeToolTip": "CompUseEffect_WulaSkillTrainer.cs",
|
||||
"ViewState": "AQIAAEAAAAAAAAAAAAAUwFMAAAABAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-07-22T07:52:56.407Z"
|
||||
"WhenOpened": "2025-07-22T07:52:56.407Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"DocumentIndex": 4,
|
||||
"Title": "Building_Wula_DarkEnergy_Engine.cs",
|
||||
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Building_Wula_DarkEnergy_Engine.cs",
|
||||
"RelativeDocumentMoniker": "Building_Wula_DarkEnergy_Engine.cs",
|
||||
@@ -79,7 +114,7 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"DocumentIndex": 5,
|
||||
"Title": "HediffComp_RegenerateBackstory.cs",
|
||||
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HediffComp_RegenerateBackstory.cs",
|
||||
"RelativeDocumentMoniker": "HediffComp_RegenerateBackstory.cs",
|
||||
@@ -91,7 +126,7 @@
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 4,
|
||||
"DocumentIndex": 6,
|
||||
"Title": "WulaFallenEmpireMod.cs",
|
||||
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WulaFallenEmpireMod.cs",
|
||||
"RelativeDocumentMoniker": "WulaFallenEmpireMod.cs",
|
||||
@@ -101,13 +136,9 @@
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-07-18T10:23:17.898Z"
|
||||
},
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{269a02dc-6af8-11d3-bdc4-00c04f688e50}"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"DocumentIndex": 7,
|
||||
"Title": "MechanitorPatch.cs",
|
||||
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MechanitorPatch.cs",
|
||||
"RelativeDocumentMoniker": "MechanitorPatch.cs",
|
||||
@@ -116,6 +147,10 @@
|
||||
"ViewState": "AQIAAAAAAAAAAAAAAAAAACEAAAAJAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-07-18T10:20:31.368Z"
|
||||
},
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{269a02dc-6af8-11d3-bdc4-00c04f688e50}"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
358
Source/WulaFallenEmpire/CompApparelInterceptor.cs
Normal file
358
Source/WulaFallenEmpire/CompApparelInterceptor.cs
Normal file
@@ -0,0 +1,358 @@
|
||||
using HarmonyLib;
|
||||
using RimWorld;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
using Verse.Sound;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
public class CompProperties_ApparelInterceptor : CompProperties
|
||||
{
|
||||
public float radius = 3f;
|
||||
public int startupDelay = 0;
|
||||
public int rechargeDelay = 3200;
|
||||
public int hitPoints = 100;
|
||||
|
||||
public bool interceptGroundProjectiles = false;
|
||||
public bool interceptNonHostileProjectiles = false;
|
||||
public bool interceptAirProjectiles = true;
|
||||
|
||||
public SoundDef soundIntercept;
|
||||
public SoundDef soundBreak;
|
||||
public EffecterDef reactivateEffect;
|
||||
|
||||
public Color color = new Color(0.5f, 0.5f, 0.9f);
|
||||
public bool drawWithNoSelection = true;
|
||||
public bool isImmuneToEMP = false;
|
||||
|
||||
public int cooldownTicks = 0;
|
||||
public int chargeDurationTicks = 0;
|
||||
public int chargeIntervalTicks = 0;
|
||||
public bool startWithMaxHitPoints = true;
|
||||
public bool hitPointsRestoreInstantlyAfterCharge = true;
|
||||
public int rechargeHitPointsIntervalTicks = 60;
|
||||
public bool activated = false;
|
||||
public int activeDuration = 0;
|
||||
public SoundDef activeSound;
|
||||
public bool alwaysShowHitpointsGizmo = false;
|
||||
public float minAlpha = 0f;
|
||||
public float idlePulseSpeed = 0.02f;
|
||||
public float minIdleAlpha = 0.05f;
|
||||
public int disarmedByEmpForTicks = 0;
|
||||
|
||||
public CompProperties_ApparelInterceptor()
|
||||
{
|
||||
compClass = typeof(CompApparelInterceptor);
|
||||
}
|
||||
}
|
||||
|
||||
[StaticConstructorOnStartup]
|
||||
public class CompApparelInterceptor : ThingComp
|
||||
{
|
||||
// 状态变量
|
||||
private int lastInterceptTicks = -999999;
|
||||
private int startedChargingTick = -1;
|
||||
private bool shutDown;
|
||||
private StunHandler stunner;
|
||||
private Sustainer sustainer;
|
||||
public int currentHitPoints = -1;
|
||||
private int ticksToReset;
|
||||
private int activatedTick = -999999;
|
||||
|
||||
// 视觉效果变量
|
||||
private float lastInterceptAngle;
|
||||
private bool drawInterceptCone;
|
||||
|
||||
// 静态资源
|
||||
private static readonly Material ForceFieldMat = MaterialPool.MatFrom("Other/ForceField", ShaderDatabase.MoteGlow);
|
||||
private static readonly Material ForceFieldConeMat = MaterialPool.MatFrom("Other/ForceFieldCone", ShaderDatabase.MoteGlow);
|
||||
private static readonly MaterialPropertyBlock MatPropertyBlock = new MaterialPropertyBlock();
|
||||
private static readonly Color InactiveColor = new Color(0.2f, 0.2f, 0.2f);
|
||||
|
||||
// 属性
|
||||
public CompProperties_ApparelInterceptor Props => (CompProperties_ApparelInterceptor)props;
|
||||
private Pawn PawnOwner => (parent as Apparel)?.Wearer;
|
||||
|
||||
public bool Active
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PawnOwner == null || !PawnOwner.Spawned) return false;
|
||||
if (OnCooldown || Charging || stunner.Stunned || shutDown || currentHitPoints <= 0) return false;
|
||||
if (Props.activated && Find.TickManager.TicksGame > activatedTick + Props.activeDuration) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
protected bool ShouldDisplay
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PawnOwner == null || !PawnOwner.Spawned || PawnOwner.Dead || PawnOwner.Downed || !Active)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (PawnOwner.Drafted || PawnOwner.InAggroMentalState || (PawnOwner.Faction != null && PawnOwner.Faction.HostileTo(Faction.OfPlayer) && !PawnOwner.IsPrisoner))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (Find.Selector.IsSelected(PawnOwner))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool OnCooldown => ticksToReset > 0;
|
||||
public bool Charging => startedChargingTick >= 0 && Find.TickManager.TicksGame < startedChargingTick + Props.startupDelay;
|
||||
public int CooldownTicksLeft => ticksToReset;
|
||||
public int ChargingTicksLeft => (startedChargingTick < 0) ? 0 : Mathf.Max(startedChargingTick + Props.startupDelay - Find.TickManager.TicksGame, 0);
|
||||
public int HitPointsMax => Props.hitPoints;
|
||||
protected virtual int HitPointsPerInterval => 1;
|
||||
|
||||
public override void PostPostMake()
|
||||
{
|
||||
base.PostPostMake();
|
||||
stunner = new StunHandler(parent);
|
||||
if (Props.startupDelay > 0)
|
||||
{
|
||||
startedChargingTick = Find.TickManager.TicksGame;
|
||||
currentHitPoints = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentHitPoints = HitPointsMax;
|
||||
}
|
||||
}
|
||||
|
||||
public override void PostExposeData()
|
||||
{
|
||||
base.PostExposeData();
|
||||
Scribe_Values.Look(ref lastInterceptTicks, "lastInterceptTicks", -999999);
|
||||
Scribe_Values.Look(ref shutDown, "shutDown", defaultValue: false);
|
||||
Scribe_Values.Look(ref startedChargingTick, "startedChargingTick", -1);
|
||||
Scribe_Values.Look(ref currentHitPoints, "currentHitPoints", -1);
|
||||
Scribe_Values.Look(ref ticksToReset, "ticksToReset", 0);
|
||||
Scribe_Values.Look(ref activatedTick, "activatedTick", -999999);
|
||||
Scribe_Deep.Look(ref stunner, "stunner", parent);
|
||||
|
||||
if (Scribe.mode == LoadSaveMode.PostLoadInit)
|
||||
{
|
||||
if (stunner == null) stunner = new StunHandler(parent);
|
||||
if (currentHitPoints == -1) currentHitPoints = HitPointsMax;
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryIntercept(Projectile projectile, Vector3 lastExactPos, Vector3 newExactPos)
|
||||
{
|
||||
if (PawnOwner == null || !PawnOwner.Spawned || !Active)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!GenGeo.IntersectLineCircleOutline(PawnOwner.Position.ToVector2(), Props.radius, lastExactPos.ToVector2(), newExactPos.ToVector2()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InterceptsProjectile(Props, projectile))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isHostile = (projectile.Launcher != null && projectile.Launcher.HostileTo(PawnOwner)) || (projectile.Launcher == null && Props.interceptNonHostileProjectiles);
|
||||
if (!isHostile)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// --- Interception Success ---
|
||||
lastInterceptAngle = projectile.ExactPosition.AngleToFlat(PawnOwner.TrueCenter());
|
||||
lastInterceptTicks = Find.TickManager.TicksGame;
|
||||
drawInterceptCone = true;
|
||||
if (Props.soundIntercept != null) Props.soundIntercept.PlayOneShot(new TargetInfo(PawnOwner.Position, PawnOwner.Map));
|
||||
EffecterDefOf.Interceptor_BlockedProjectile.Spawn(PawnOwner.Position, PawnOwner.Map);
|
||||
|
||||
if (projectile.DamageDef == DamageDefOf.EMP && !Props.isImmuneToEMP)
|
||||
{
|
||||
BreakShieldEmp(new DamageInfo(projectile.DamageDef, projectile.DamageAmount, instigator: projectile.Launcher));
|
||||
}
|
||||
else if (HitPointsMax > 0)
|
||||
{
|
||||
currentHitPoints -= projectile.DamageAmount;
|
||||
if (currentHitPoints <= 0)
|
||||
{
|
||||
BreakShieldHitpoints(new DamageInfo(projectile.DamageDef, projectile.DamageAmount, instigator: projectile.Launcher));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void CompTick()
|
||||
{
|
||||
base.CompTick();
|
||||
if (PawnOwner == null || !PawnOwner.Spawned) return;
|
||||
|
||||
stunner.StunHandlerTick();
|
||||
|
||||
if (OnCooldown)
|
||||
{
|
||||
ticksToReset--;
|
||||
if (ticksToReset <= 0) Reset();
|
||||
}
|
||||
else if (Charging)
|
||||
{
|
||||
// Charging logic handled by property
|
||||
}
|
||||
else if (currentHitPoints < HitPointsMax && parent.IsHashIntervalTick(Props.rechargeHitPointsIntervalTicks))
|
||||
{
|
||||
currentHitPoints = Mathf.Clamp(currentHitPoints + HitPointsPerInterval, 0, HitPointsMax);
|
||||
}
|
||||
|
||||
if (Props.activeSound != null)
|
||||
{
|
||||
if (Active && (sustainer == null || sustainer.Ended)) sustainer = Props.activeSound.TrySpawnSustainer(SoundInfo.InMap(parent));
|
||||
sustainer?.Maintain();
|
||||
if (!Active && sustainer != null && !sustainer.Ended) sustainer.End();
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
if (PawnOwner.Spawned) Props.reactivateEffect?.Spawn(PawnOwner.Position, PawnOwner.Map).Cleanup();
|
||||
currentHitPoints = HitPointsMax;
|
||||
ticksToReset = 0;
|
||||
}
|
||||
|
||||
private void BreakShieldHitpoints(DamageInfo dinfo)
|
||||
{
|
||||
if (PawnOwner.Spawned)
|
||||
{
|
||||
if (Props.soundBreak != null) Props.soundBreak.PlayOneShot(new TargetInfo(PawnOwner.Position, PawnOwner.Map));
|
||||
EffecterDefOf.Shield_Break.SpawnAttached(PawnOwner, PawnOwner.MapHeld, Props.radius);
|
||||
}
|
||||
currentHitPoints = 0;
|
||||
ticksToReset = Props.rechargeDelay;
|
||||
}
|
||||
|
||||
private void BreakShieldEmp(DamageInfo dinfo)
|
||||
{
|
||||
BreakShieldHitpoints(dinfo);
|
||||
if (Props.disarmedByEmpForTicks > 0) stunner.Notify_DamageApplied(new DamageInfo(DamageDefOf.EMP, (float)Props.disarmedByEmpForTicks / 30f));
|
||||
}
|
||||
|
||||
public static bool InterceptsProjectile(CompProperties_ApparelInterceptor props, Projectile projectile)
|
||||
{
|
||||
if (projectile.def.projectile.flyOverhead) return props.interceptAirProjectiles;
|
||||
return props.interceptGroundProjectiles;
|
||||
}
|
||||
|
||||
// --- DRAWING LOGIC ---
|
||||
public override void CompDrawWornExtras()
|
||||
{
|
||||
base.CompDrawWornExtras();
|
||||
if (PawnOwner == null || !PawnOwner.Spawned || !ShouldDisplay) return;
|
||||
|
||||
Vector3 drawPos = PawnOwner.Drawer.DrawPos;
|
||||
drawPos.y = AltitudeLayer.MoteOverhead.AltitudeFor();
|
||||
|
||||
float alpha = GetCurrentAlpha();
|
||||
if (alpha > 0f)
|
||||
{
|
||||
Color color = Props.color;
|
||||
color.a *= alpha;
|
||||
MatPropertyBlock.SetColor(ShaderPropertyIDs.Color, color);
|
||||
Matrix4x4 matrix = default(Matrix4x4);
|
||||
matrix.SetTRS(drawPos, Quaternion.identity, new Vector3(Props.radius * 2f * 1.1601562f, 1f, Props.radius * 2f * 1.1601562f));
|
||||
Graphics.DrawMesh(MeshPool.plane10, matrix, ForceFieldMat, 0, null, 0, MatPropertyBlock);
|
||||
}
|
||||
|
||||
float coneAlpha = GetCurrentConeAlpha_RecentlyIntercepted();
|
||||
if (coneAlpha > 0f)
|
||||
{
|
||||
Color color = Props.color;
|
||||
color.a *= coneAlpha;
|
||||
MatPropertyBlock.SetColor(ShaderPropertyIDs.Color, color);
|
||||
Matrix4x4 matrix = default(Matrix4x4);
|
||||
matrix.SetTRS(drawPos, Quaternion.Euler(0f, lastInterceptAngle - 90f, 0f), new Vector3(Props.radius * 2f, 1f, Props.radius * 2f));
|
||||
Graphics.DrawMesh(MeshPool.plane10, matrix, ForceFieldConeMat, 0, null, 0, MatPropertyBlock);
|
||||
}
|
||||
}
|
||||
|
||||
private float GetCurrentAlpha()
|
||||
{
|
||||
float idleAlpha = Mathf.Lerp(0.3f, 0.6f, (Mathf.Sin((float)Gen.HashCombineInt(parent.thingIDNumber, 35990913) + Time.realtimeSinceStartup * 2f) + 1f) / 2f);
|
||||
float interceptAlpha = Mathf.Clamp01(1f - (float)(Find.TickManager.TicksGame - lastInterceptTicks) / 40f);
|
||||
return Mathf.Max(idleAlpha, interceptAlpha);
|
||||
}
|
||||
|
||||
private float GetCurrentConeAlpha_RecentlyIntercepted()
|
||||
{
|
||||
if (!drawInterceptCone) return 0f;
|
||||
return Mathf.Clamp01(1f - (float)(Find.TickManager.TicksGame - lastInterceptTicks) / 40f) * 0.82f;
|
||||
}
|
||||
|
||||
// --- GIZMO ---
|
||||
public override IEnumerable<Gizmo> CompGetWornGizmosExtra()
|
||||
{
|
||||
if (PawnOwner != null && Find.Selector.SingleSelectedThing == PawnOwner)
|
||||
{
|
||||
yield return new Gizmo_EnergyShieldStatus { shield = this };
|
||||
}
|
||||
}
|
||||
|
||||
public override string CompInspectStringExtra()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (OnCooldown)
|
||||
{
|
||||
sb.Append("Cooldown: " + CooldownTicksLeft.ToStringTicksToPeriod());
|
||||
}
|
||||
else if (stunner.Stunned)
|
||||
{
|
||||
sb.Append("EMP Shutdown: " + stunner.StunTicksLeft.ToStringTicksToPeriod());
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public class Gizmo_EnergyShieldStatus : Gizmo
|
||||
{
|
||||
public CompApparelInterceptor shield;
|
||||
private static readonly Texture2D FullShieldBarTex = SolidColorMaterials.NewSolidColorMaterial(new Color(0.2f, 0.8f, 0.85f), ShaderDatabase.MetaOverlay).mainTexture as Texture2D;
|
||||
private static readonly Texture2D EmptyShieldBarTex = SolidColorMaterials.NewSolidColorMaterial(new Color(0.2f, 0.2f, 0.24f), ShaderDatabase.MetaOverlay).mainTexture as Texture2D;
|
||||
|
||||
public override float GetWidth(float maxWidth) => 140f;
|
||||
|
||||
public override GizmoResult GizmoOnGUI(Vector2 topLeft, float maxWidth, GizmoRenderParms parms)
|
||||
{
|
||||
Rect rect = new Rect(topLeft.x, topLeft.y, GetWidth(maxWidth), 75f);
|
||||
Rect rect2 = rect.ContractedBy(6f);
|
||||
Widgets.DrawWindowBackground(rect);
|
||||
|
||||
Rect labelRect = rect2;
|
||||
labelRect.height = rect.height / 2f;
|
||||
Text.Font = GameFont.Tiny;
|
||||
Widgets.Label(labelRect, shield.parent.LabelCap);
|
||||
|
||||
Rect barRect = rect2;
|
||||
barRect.yMin = rect2.y + rect2.height / 2f;
|
||||
float fillPercent = (float)shield.currentHitPoints / shield.HitPointsMax;
|
||||
Widgets.FillableBar(barRect, fillPercent, FullShieldBarTex, EmptyShieldBarTex, false);
|
||||
|
||||
Text.Font = GameFont.Small;
|
||||
Text.Anchor = TextAnchor.MiddleCenter;
|
||||
|
||||
TaggedString statusText = shield.OnCooldown ? "Broken".Translate() : new TaggedString(shield.currentHitPoints + " / " + shield.HitPointsMax);
|
||||
Widgets.Label(barRect, statusText);
|
||||
|
||||
Text.Anchor = TextAnchor.UpperLeft;
|
||||
|
||||
return new GizmoResult(GizmoState.Clear);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using HarmonyLib;
|
||||
using RimWorld;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
|
||||
namespace WulaFallenEmpire.HarmonyPatches
|
||||
{
|
||||
[HarmonyPatch(typeof(Projectile), "CheckForFreeInterceptBetween")]
|
||||
public static class Projectile_CheckForFreeInterceptBetween_Patch
|
||||
{
|
||||
private static readonly MethodInfo ImpactMethod = AccessTools.Method(typeof(Projectile), "Impact");
|
||||
|
||||
public static bool Prefix(Projectile __instance, Vector3 lastExactPos, Vector3 newExactPos)
|
||||
{
|
||||
if (__instance.Map == null || __instance.Destroyed) return true;
|
||||
|
||||
foreach (Pawn pawn in __instance.Map.mapPawns.AllPawnsSpawned)
|
||||
{
|
||||
if (pawn.apparel != null)
|
||||
{
|
||||
foreach (Apparel apparel in pawn.apparel.WornApparel)
|
||||
{
|
||||
if (apparel.TryGetComp<CompApparelInterceptor>(out var interceptor))
|
||||
{
|
||||
if (interceptor.TryIntercept(__instance, lastExactPos, newExactPos))
|
||||
{
|
||||
|
||||
ImpactMethod.Invoke(__instance, new object[] { null, true });
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,6 +62,7 @@
|
||||
<Compile Include="Building_Wula_DarkEnergy_Engine.cs" />
|
||||
<Compile Include="MechanitorPatch.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="CompApparelInterceptor.cs" />
|
||||
<Compile Include="SectionLayer_WulaHull.cs" />
|
||||
<Compile Include="HediffComp_RegenerateBackstory.cs" />
|
||||
<Compile Include="WulaFallenEmpireMod.cs" />
|
||||
@@ -86,6 +87,7 @@
|
||||
<Compile Include="WulaCaravanEnergyDef.cs" />
|
||||
<Compile Include="HarmonyPatches\Caravan_NeedsTracker_TrySatisfyPawnNeeds_Patch.cs" />
|
||||
<Compile Include="HarmonyPatches\FloatMenuOptionProvider_Ingest_Patch.cs" />
|
||||
<Compile Include="HarmonyPatches\Projectile_Launch_Patch.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
|
||||
@@ -94,4 +96,4 @@
|
||||
<RemoveDir Directories="$(ProjectDir)obj\Debug" />
|
||||
<RemoveDir Directories="$(ProjectDir)obj\Release" />
|
||||
</Target>
|
||||
</Project>
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user