Implement passive relics and six-family defense towers

This commit is contained in:
2026-09-23 18:11:38 +09:00
parent 5d11288a6f
commit c94cbda1e6
21 changed files with 2882 additions and 152 deletions
@@ -12,6 +12,14 @@ namespace BumpCombat.Constants
[Min(0)] public int DirectTowerCost = 30;
[Min(0)] public int SummonTowerCost = 40;
[Min(0)] public int PortalRewardCurrency = 20;
[Min(0)] public int EnemyKillCurrency = 15;
[Min(0)] public int LightningTowerCost = 35;
[Min(0)] public int ColdTowerCost = 35;
[Min(0)] public int SeismicTowerCost = 35;
[Min(0)] public int EmpoweringTowerCost = 35;
[Min(0)] public int Tier2UpgradeCost = 20;
[Min(0)] public int Tier3UpgradeCost = 30;
[Min(0)] public int Tier4UpgradeCost = 40;
[Min(0.1f)] public float BuildInteractionRadius = 1.5f;
[Header("Prototype arena")]
@@ -39,6 +47,10 @@ namespace BumpCombat.Constants
{
new(-3.25f, 3.25f),
new(3.25f, -3.25f),
new(-3.25f, -3.25f),
new(3.25f, 3.25f),
new(0f, 3.25f),
new(0f, -3.25f),
};
[Tooltip("Two ordered waypoints per lane, indexed by lane * 2 + waypoint.")]
public Vector2[] WaypointPositions =
@@ -65,6 +77,23 @@ namespace BumpCombat.Constants
[Min(0.1f)] public float SummonAreaRadius = 2.25f;
[Min(0.1f)] public float SummonUnitMoveSpeed = 2.5f;
[Min(0.1f)] public float SummonAttackRange = 1.2f;
[Header("Six tower family comparison values")]
[Min(0.1f)] public float LightningDamage = 6f;
[Min(0.05f)] public float LightningInterval = 1.1f;
[Min(0.1f)] public float LightningRadius = 1.3f;
[Min(0.1f)] public float ColdDamage = 3f;
[Min(0.05f)] public float ColdInterval = 1.2f;
[Min(0f)] public float ColdSlowFraction = 0.35f;
[Min(0f)] public float ColdSlowSeconds = 1.5f;
[Min(0.1f)] public float SeismicDamage = 2f;
[Min(0.05f)] public float SeismicInterval = 2f;
[Min(0f)] public float SeismicStunSeconds = 0.45f;
[Min(0.1f)] public float SeismicRadius = 1.4f;
[Min(0.1f)] public float SupportRadius = 3.5f;
[Min(0f)] public float SupportDamageBonusPerTier = 0.1f;
[Min(0f)] public float SmotheringDamageBonus = 0.3f;
[Range(0.1f, 1f)] public float ImbuingAttackIntervalMultiplier = 0.75f;
[Min(0f)] public float TowerDamageBonusPerTier = 0.25f;
[Header("Prototype player recovery")]
[Min(0f)] public float PlayerReviveDelaySeconds = 5f;
@@ -17,5 +17,91 @@ namespace BumpCombat.Constants
[Range(0f, 1f)] public float RuptureSeedChance = 0.25f;
[Range(0f, 1f)] public float RuptureExplosionMaxHealthFraction = 0.1f;
[Min(0f)] public float RuptureExplosionPlayerBodyDiameters = 3f;
[Header("Wave Nail")]
[Range(0f, 1f)] public float WaveNailChance = 0.2f;
[Range(0f, 1f)] public float WaveNailDamageFraction = 0.6f;
[Min(0f)] public float WaveNailCooldownSeconds = 1.5f;
[Header("Capacitor Ring")]
[Range(0f, 1f)] public float CapacitorRingChance = 0.2f;
[Range(0f, 1f)] public float CapacitorRingDamageFraction = 0.35f;
[Min(0f)] public float CapacitorRingCooldownSeconds = 1.5f;
[Min(0)] public int CapacitorRingMaxTargets = 3;
[Header("Ember Wick")]
[Range(0f, 1f)] public float EmberWickChance = 0.25f;
[Header("Ember Carrier")]
[Range(0f, 1f)] public float EmberCarrierChance = 0.3f;
[Min(0f)] public float EmberCarrierCooldownSeconds = 0.5f;
[Min(0)] public int EmberCarrierMaxTargets = 3;
[Header("Rift Wedge")]
[Min(1)] public int RiftWedgeRequiredHits = 3;
[Min(0f)] public float RiftWedgeMaxHitGapSeconds = 4f;
[Header("Executioner Sigil")]
[Range(0f, 1f)] public float ExecutionerSigilChance = 0.25f;
[Range(0f, 1f)] public float ExecutionerSigilHealthThreshold = 0.1f;
[Header("Hunter Feather")]
[Range(0f, 1f)] public float HunterFeatherChance = 0.2f;
[Min(0f)] public float HunterFeatherDurationSeconds = 4f;
[Range(0f, 1f)] public float HunterFeatherMoveSpeedIncrease = 0.2f;
[Header("Blood Fang")]
[Range(0f, 1f)] public float BloodFangChance = 0.2f;
[Range(0f, 1f)] public float BloodFangHealMaxHealthFraction = 0.02f;
[Min(0f)] public float BloodFangCooldownSeconds = 1f;
[Header("Recovery Funnel")]
[Range(0f, 1f)] public float RecoveryFunnelChance = 0.25f;
[Range(0f, 1f)] public float RecoveryFunnelGaugeFraction = 0.05f;
[Min(0f)] public float RecoveryFunnelCooldownSeconds = 1f;
[Header("Trophy Mask")]
[Min(0f)] public float TrophyMaskDurationSeconds = 8f;
[Range(0f, 1f)] public float TrophyMaskBumpDamageIncrease = 0.2f;
[Range(0f, 1f)] public float TrophyMaskMoveSpeedIncrease = 0.1f;
[Header("Resonant Crystal")]
[Range(0f, 1f)] public float ResonantCrystalChance = 0.2f;
[Min(0f)] public float ResonantCrystalDelaySeconds = 0.5f;
[Range(0f, 1f)] public float ResonantCrystalDamageFraction = 0.5f;
[Min(0f)] public float ResonantCrystalCooldownSeconds = 6f;
[Header("Backflow Heart")]
[Range(0f, 1f)] public float BackflowHeartDamageThreshold = 0.25f;
[Range(0f, 1f)] public float BackflowHeartShieldFraction = 0.15f;
[Min(0f)] public float BackflowHeartShieldDurationSeconds = 4f;
[Min(0f)] public float BackflowHeartCooldownSeconds = 12f;
[Header("Counter Bell")]
[Range(0f, 1f)] public float CounterBellChance = 0.2f;
[Range(0f, 1f)] public float CounterBellSlowFraction = 0.3f;
[Min(0f)] public float CounterBellSlowDurationSeconds = 2f;
[Min(0f)] public float CounterBellCooldownSeconds = 4f;
[Header("Sprint Wheel")]
[Min(0f)] public float SprintWheelRequiredBodyDiameters = 8f;
[Range(0f, 1f)] public float SprintWheelShockwaveDamageFraction = 0.8f;
[Header("Battle Baton")]
[Range(0f, 1f)] public float BattleBatonTowerDamageIncrease = 0.15f;
[Min(0f)] public float BattleBatonDurationSeconds = 3f;
[Min(0f)] public float BattleBatonCooldownSeconds = 6f;
[Header("Bond Ledger")]
[Min(0f)] public float BondLedgerBumpWindowSeconds = 3f;
[Range(0f, 1f)] public float BondLedgerChance = 0.25f;
[Min(0f)] public float BondLedgerCooldownSeconds = 1f;
[Min(0)] public int BondLedgerCurrency = 1;
[Header("Pilgrim Pouch")]
[Range(0f, 1f)] public float PilgrimPouchChance = 0.05f;
[Range(0f, 1f)] public float PilgrimPouchHealMaxHealthFraction = 0.1f;
[Min(0f)] public float PilgrimPouchOrbLifetimeSeconds = 8f;
[Min(0f)] public float PilgrimPouchCooldownSeconds = 15f;
}
}