@@ -1025,6 +1025,7 @@ bullet.splashdamage = [stat]{0}[lightgray] area dmg ~ [stat]{1}[lightgray] tiles
|
|||||||
bullet.incendiary = [stat]incendiary
|
bullet.incendiary = [stat]incendiary
|
||||||
bullet.homing = [stat]homing
|
bullet.homing = [stat]homing
|
||||||
bullet.armorpierce = [stat]armor piercing
|
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.suppression = [stat]{0}[lightgray] seconds of repair suppression ~ [stat]{1}[lightgray] tiles
|
||||||
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||||
bullet.frags = [stat]{0}[lightgray]x frag 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));
|
requirements(Category.turret, with(Items.copper, 1000, Items.metaglass, 600, Items.surgeAlloy, 300, Items.plastanium, 200, Items.silicon, 600));
|
||||||
ammo(
|
ammo(
|
||||||
Items.surgeAlloy, new PointBulletType(){{
|
Items.surgeAlloy, new RailBulletType(){{
|
||||||
shootEffect = Fx.instShoot;
|
shootEffect = Fx.instShoot;
|
||||||
hitEffect = Fx.instHit;
|
hitEffect = Fx.instHit;
|
||||||
|
pierceEffect = Fx.railHit;
|
||||||
smokeEffect = Fx.smokeCloud;
|
smokeEffect = Fx.smokeCloud;
|
||||||
trailEffect = Fx.instTrail;
|
pointEffect = Fx.instTrail;
|
||||||
despawnEffect = Fx.instBomb;
|
despawnEffect = Fx.instBomb;
|
||||||
trailSpacing = 20f;
|
pointEffectSpace = 20f;
|
||||||
damage = 1350;
|
damage = 1350;
|
||||||
buildingDamageMultiplier = 0.2f;
|
buildingDamageMultiplier = 0.2f;
|
||||||
speed = brange;
|
maxDamageFraction = 0.6f;
|
||||||
|
pierceDamageFactor = 1f;
|
||||||
|
length = brange;
|
||||||
hitShake = 6f;
|
hitShake = 6f;
|
||||||
ammoMultiplier = 1f;
|
ammoMultiplier = 1f;
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
public int pierceCap = -1;
|
public int pierceCap = -1;
|
||||||
/** Multiplier of damage decreased per health pierced. */
|
/** Multiplier of damage decreased per health pierced. */
|
||||||
public float pierceDamageFactor = 0f;
|
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. */
|
/** If false, this bullet isn't removed after pierceCap is exceeded. Expert usage only. */
|
||||||
public boolean removeAfterPierce = true;
|
public boolean removeAfterPierce = true;
|
||||||
/** For piercing lasers, setting this to true makes it get absorbed by plastanium walls. */
|
/** 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;
|
boolean wasDead = entity instanceof Unit u && u.dead;
|
||||||
|
|
||||||
if(entity instanceof Healthc h){
|
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){
|
if(pierceArmor){
|
||||||
h.damagePierce(b.damage);
|
h.damagePierce(damage);
|
||||||
}else{
|
}else{
|
||||||
h.damage(b.damage);
|
h.damage(damage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -487,6 +487,10 @@ public class StatValues{
|
|||||||
sep(bt, "@bullet.armorpierce");
|
sep(bt, "@bullet.armorpierce");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(type.maxDamageFraction > 0){
|
||||||
|
sep(bt, Core.bundle.format("bullet.maxdamagefraction", (int)(type.maxDamageFraction * 100)));
|
||||||
|
}
|
||||||
|
|
||||||
if(type.suppressionRange > 0){
|
if(type.suppressionRange > 0){
|
||||||
sep(bt, Core.bundle.format("bullet.suppression", Strings.autoFixed(type.suppressionDuration / 60f, 2), Strings.fixed(type.suppressionRange / tilesize, 1)));
|
sep(bt, Core.bundle.format("bullet.suppression", Strings.autoFixed(type.suppressionDuration / 60f, 2), Strings.fixed(type.suppressionRange / tilesize, 1)));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user