Reactivity and Assorted Changes (#11245)

* Implemented turretDepositCooldown (1)

* Implemented activationTime for Turrets (1)

* activationTime for Turrets Fixes (2)
readSync() line isn't needed,
Overdrive should not make the cooldown go faster, it stays as is unless there is a good argument against it.

* activationTime (3): Descriptions and SetBars()
Updated arc and lancer descriptions.
Added setBars() stuff for clearness.

* turretDepositCooldown (2):
now depositCooldown and is now on a per turret basis if needed... will potentially need further iteration

* turretDepositCooldown (3): made it opt in
added an internal gamerule (long name, need to reduce it later) to enable the balance (oriented for pvp)
depositCooldown = 0 by def
added depositCooldown entries in Blocks.java

* activationTime (4): Minor Adjustments to UI

* activitationTime (5): Implemented drawInactive() and inactiveColo, and arc/lancer sprite
Thinking if I should set the sprites to be white, then use Color.gray...

* turretDepositCooldown (4): Made the cooldown only affect turrets

* Reload Turret Coolant Fixes (1)
Made coolant and overdrive effects not get chopped off from Math.min when its too high

* activationTime (6): activationTime is now at the Base Turret Level
Also implemented the code for TractorBeamTurret thanks to the code changes
Parallax can have the feature if needed for future balancing.
Hopefully nothing was screwed up in the transition...

* Counterbalance (1): Swarmer 8 -> 7 firerate nerf, and Cyclone 7.5 -> 6 firerate nerf [First Attempt]

* Reload Turret Coolant Fixes (2): added a buffer if the excessReload exceeds more than 2 reloads.

* Reload Turret Coolant Fixes (3): hotfix, the buffer actually works this time

* turretDepositCooldown (5): Made the cooldown seperate from itemDepositCooldown

* Implemented armorMultiplier (1)

* fixing a merge

* (AT:7a) Reverted Saving Capability

* (AT:7b) Removed activation timer from lancer and arc as well as sprites

* (AT:7c) Removed visuals for activation timer
will be reimplemented via a greyscale effect if returned rather than via sprites

* (AT:7aa) oops

* Made the default value 0 when placed - Activation Timer (8)

* (depositCooldown : 6) Moved depositCooldown to Blocks.java, cleaned up canDepositItem(), removed enableTurretDepositCooldown

* armorMultiplier (2) - oops, made armorMultipler = 0 correspond to 100% armorPiercing

* Update core/src/mindustry/input/InputHandler.java

* Reload Turret Coolant Fixes (4): A bit too high

---------

Co-authored-by: Anuken <arnukren@gmail.com>
This commit is contained in:
SomeonesShade
2025-12-31 14:39:22 -05:00
committed by GitHub
co-authored by Anuken
parent 87e2dc69a2
commit 4122a9d51d
16 changed files with 155 additions and 15 deletions
@@ -181,6 +181,8 @@ public class BulletType extends Content implements Cloneable{
public boolean fragOnAbsorb = true;
/** If true, unit armor is ignored in damage calculations. */
public boolean pierceArmor = false;
/** Multiplies the unit armor used in damage calculations. Used for armor weakness, armor piercing, and anti-armor. */
public float armorMultiplier = 1f;
/** If true, the bullet will "stick" to enemies and get deactivated on collision. */
public boolean sticky = false;
/** Extra time added to bullet when it sticks to something. */
@@ -483,6 +485,8 @@ public class BulletType extends Content implements Cloneable{
}
if(pierceArmor){
h.damagePierce(damage);
}else if(armorMultiplier != 1){
h.damageArmorMult(damage, armorMultiplier);
}else{
h.damage(damage);
}
@@ -1727,7 +1727,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
float damage = other.type.buildingDamage(other);
if(!other.type.pierceArmor){
damage = Damage.applyArmor(damage, block.armor);
damage = Damage.applyArmor(damage, block.armor * other.type.armorMultiplier);
}
damage(other, other.team, damage);
@@ -58,6 +58,16 @@ abstract class HealthComp implements Entityc, Posc{
damagePierce(amount, true);
}
/** Damage and multiply armor received. */
void damageArmorMult(float amount, float armorMult, boolean withEffect){
damage(amount, withEffect);
}
/** Damage and multiply armor received. */
void damageArmorMult(float amount, float armorMult){
damageArmorMult(amount, armorMult, true);
}
void damage(float amount){
if(Float.isNaN(health)) health = 0f;
@@ -86,6 +96,10 @@ abstract class HealthComp implements Entityc, Posc{
damagePierce(amount * Time.delta, hitTime <= -20 + hitDuration);
}
void damageContinuousArmorMult(float amount, float armorMult){
damageArmorMult(amount * Time.delta, armorMult, hitTime <= -20 + hitDuration);
}
void clampHealth(){
health = Math.min(health, maxHealth);
if(Float.isNaN(health)) health = 0f;
@@ -42,6 +42,18 @@ abstract class ShieldComp implements Healthc, Posc{
}
}
@Replace
@Override
public void damageArmorMult(float amount, float armorMult, boolean withEffect){
float pre = hitTime;
rawDamage(Damage.applyArmor(amount, armorOverride >= 0f ? armorOverride * armorMult : armor * armorMult) / healthMultiplier / Vars.state.rules.unitHealth(team));
if(!withEffect){
hitTime = pre;
}
}
protected void rawDamage(float amount){
boolean hadShields = shield > 0.0001f;