mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-02-02 04:13:44 +07:00
parent
e15a4e6bdf
commit
6014f2353a
@ -1025,6 +1025,7 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~ [stat]{1}[lightgray] tiles
|
||||
bullet.incendiary = [stat]incendiary
|
||||
bullet.homing = [stat]homing
|
||||
bullet.armorpierce = [stat]armor piercing
|
||||
bullet.maxdamagefraction = [stat]{0}%[lightgray] damage limit
|
||||
bullet.suppression = [stat]{0}[lightgray] seconds of repair suppression ~ [stat]{1}[lightgray] tiles
|
||||
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||
|
@ -3849,16 +3849,19 @@ public class Blocks{
|
||||
|
||||
requirements(Category.turret, with(Items.copper, 1000, Items.metaglass, 600, Items.surgeAlloy, 300, Items.plastanium, 200, Items.silicon, 600));
|
||||
ammo(
|
||||
Items.surgeAlloy, new PointBulletType(){{
|
||||
Items.surgeAlloy, new RailBulletType(){{
|
||||
shootEffect = Fx.instShoot;
|
||||
hitEffect = Fx.instHit;
|
||||
pierceEffect = Fx.railHit;
|
||||
smokeEffect = Fx.smokeCloud;
|
||||
trailEffect = Fx.instTrail;
|
||||
pointEffect = Fx.instTrail;
|
||||
despawnEffect = Fx.instBomb;
|
||||
trailSpacing = 20f;
|
||||
pointEffectSpace = 20f;
|
||||
damage = 1350;
|
||||
buildingDamageMultiplier = 0.2f;
|
||||
speed = brange;
|
||||
maxDamageFraction = 0.6f;
|
||||
pierceDamageFactor = 1f;
|
||||
length = brange;
|
||||
hitShake = 6f;
|
||||
ammoMultiplier = 1f;
|
||||
}}
|
||||
|
@ -48,6 +48,8 @@ public class BulletType extends Content implements Cloneable{
|
||||
public int pierceCap = -1;
|
||||
/** Multiplier of damage decreased per health pierced. */
|
||||
public float pierceDamageFactor = 0f;
|
||||
/** If positive, limits non-splash damage dealt to a fraction of the target's maximum health. */
|
||||
public float maxDamageFraction = -1f;
|
||||
/** If false, this bullet isn't removed after pierceCap is exceeded. Expert usage only. */
|
||||
public boolean removeAfterPierce = true;
|
||||
/** For piercing lasers, setting this to true makes it get absorbed by plastanium walls. */
|
||||
@ -382,10 +384,16 @@ public class BulletType extends Content implements Cloneable{
|
||||
boolean wasDead = entity instanceof Unit u && u.dead;
|
||||
|
||||
if(entity instanceof Healthc h){
|
||||
float damage = b.damage;
|
||||
if(maxDamageFraction > 0){
|
||||
damage = Math.min(damage, h.maxHealth() * maxDamageFraction);
|
||||
//cap health to effective health for handlePierce to handle it properly
|
||||
health = Math.min(health, h.maxHealth() * maxDamageFraction);
|
||||
}
|
||||
if(pierceArmor){
|
||||
h.damagePierce(b.damage);
|
||||
h.damagePierce(damage);
|
||||
}else{
|
||||
h.damage(b.damage);
|
||||
h.damage(damage);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -487,6 +487,10 @@ public class StatValues{
|
||||
sep(bt, "@bullet.armorpierce");
|
||||
}
|
||||
|
||||
if(type.maxDamageFraction > 0){
|
||||
sep(bt, Core.bundle.format("bullet.maxdamagefraction", (int)(type.maxDamageFraction * 100)));
|
||||
}
|
||||
|
||||
if(type.suppressionRange > 0){
|
||||
sep(bt, Core.bundle.format("bullet.suppression", Strings.autoFixed(type.suppressionDuration / 60f, 2), Strings.fixed(type.suppressionRange / tilesize, 1)));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user