This commit is contained in:
2025-09-29 13:20:05 +08:00
parent 00f2867bcd
commit bde62a1ac6
5 changed files with 20 additions and 11 deletions

Binary file not shown.

View File

@@ -103,7 +103,7 @@
</additionalHediffs> </additionalHediffs>
</DamageDef> </DamageDef>
<DamageDef ParentName="Wula_Dark_Matter_Beam_DMG"> <DamageDef>
<defName>ARA_Psi_Damage</defName> <defName>ARA_Psi_Damage</defName>
<ignoreShields>true</ignoreShields> <ignoreShields>true</ignoreShields>
<igniteChanceByTargetFlammability> <igniteChanceByTargetFlammability>

View File

@@ -17,13 +17,17 @@
<hitPoints>1500</hitPoints> <hitPoints>1500</hitPoints>
<rechargeDelay>3200</rechargeDelay> <rechargeDelay>3200</rechargeDelay>
<rechargeHitPointsIntervalTicks>60</rechargeHitPointsIntervalTicks> <rechargeHitPointsIntervalTicks>60</rechargeHitPointsIntervalTicks>
<!-- Psyfocus/Entropy Mechanics --> <!-- Psyfocus/Entropy Mechanics -->
<!-- Removed psyfocusCostForFullRecharge as it's now gradual -->
<psyfocusCostPerInterval>0.001</psyfocusCostPerInterval> <!-- e.g., 0.1% of max psyfocus per recharge interval --> <psyfocusCostPerInterval>0.001</psyfocusCostPerInterval> <!-- e.g., 0.1% of max psyfocus per recharge interval -->
<entropyGainPerDamage>0.1</entropyGainPerDamage> <!-- 1 entropy per 2 damage --> <entropyGainPerDamage>0.1</entropyGainPerDamage> <!-- 1 entropy per 2 damage -->
<hitPointsPctPerInterval>0.01</hitPointsPctPerInterval> <!-- Restore 1% of max HP per interval --> <hitPointsPctPerInterval>0.01</hitPointsPctPerInterval> <!-- Restore 1% of max HP per interval -->
<!-- Projectile interception properties -->
<interceptGroundProjectiles>true</interceptGroundProjectiles>
<interceptNonHostileProjectiles>false</interceptNonHostileProjectiles>
<interceptAirProjectiles>true</interceptAirProjectiles>
<!-- Visuals and Sound --> <!-- Visuals and Sound -->
<color>(0.5, 0.3, 0.9, 0.5)</color> <color>(0.5, 0.3, 0.9, 0.5)</color>
<interceptEffecter>Interceptor_BlockedProjectile</interceptEffecter> <interceptEffecter>Interceptor_BlockedProjectile</interceptEffecter>

View File

@@ -430,10 +430,10 @@
<WorkToMake>1300</WorkToMake> <WorkToMake>1300</WorkToMake>
<!-- <MarketValue>370</MarketValue> --> <!-- <MarketValue>370</MarketValue> -->
<Mass>3.5</Mass> <Mass>3.5</Mass>
<AccuracyTouch>0.35</AccuracyTouch> <AccuracyTouch>0.60</AccuracyTouch>
<AccuracyShort>0.5</AccuracyShort> <AccuracyShort>0.70</AccuracyShort>
<AccuracyMedium>0.85</AccuracyMedium> <AccuracyMedium>0.65</AccuracyMedium>
<AccuracyLong>1</AccuracyLong> <AccuracyLong>0.55</AccuracyLong>
<RangedWeapon_Cooldown>2.2</RangedWeapon_Cooldown> <RangedWeapon_Cooldown>2.2</RangedWeapon_Cooldown>
</statBases> </statBases>
<verbs> <verbs>

View File

@@ -14,7 +14,6 @@ namespace ArachnaeSwarm
public int rechargeHitPointsIntervalTicks = 60; // Ticks to restore 1 HP public int rechargeHitPointsIntervalTicks = 60; // Ticks to restore 1 HP
// New properties for psyfocus/entropy mechanics // New properties for psyfocus/entropy mechanics
// Removed psyfocusCostForFullRecharge
public float psyfocusCostPerInterval = 0.001f; // e.g., 0.1% of max psyfocus per recharge interval public float psyfocusCostPerInterval = 0.001f; // e.g., 0.1% of max psyfocus per recharge interval
public float entropyGainPerDamage = 0.5f; // For self public float entropyGainPerDamage = 0.5f; // For self
// Removed entropyGainPerAllyDamage // Removed entropyGainPerAllyDamage
@@ -22,6 +21,11 @@ namespace ArachnaeSwarm
public EffecterDef absorbEffecter; public EffecterDef absorbEffecter;
// Removed transferAllyDamage // Removed transferAllyDamage
// Projectile interception properties
public bool interceptGroundProjectiles = false;
public bool interceptNonHostileProjectiles = false;
public bool interceptAirProjectiles = true;
public EffecterDef interceptEffecter; public EffecterDef interceptEffecter;
public EffecterDef breakEffecter; public EffecterDef breakEffecter;
public EffecterDef reactivateEffecter; public EffecterDef reactivateEffecter;
@@ -134,9 +138,10 @@ namespace ArachnaeSwarm
{ {
if (!Active) return false; if (!Active) return false;
// We now intercept all projectiles, the filter will be done by the PostPreApplyDamage on self // Filter projectile types based on properties
// and the TryAbsorbDamageForAllyOnly for allies. if (projectile.def.projectile.flyOverhead && !Props.interceptAirProjectiles) return false;
// This method is only for projectile visual/sound and psyfocus cost. if (!projectile.def.projectile.flyOverhead && !Props.interceptGroundProjectiles) return false;
if (projectile.Launcher != null && !projectile.Launcher.HostileTo(PawnOwner.Faction) && !Props.interceptNonHostileProjectiles) return false;
// --- Interception Success --- // --- Interception Success ---
lastInterceptTicks = Find.TickManager.TicksGame; lastInterceptTicks = Find.TickManager.TicksGame;