Small heat redirector / Carbide ammo for breach

This commit is contained in:
Anuken
2025-01-04 17:46:50 -05:00
parent 7e645e0208
commit f28781dc00
12 changed files with 61 additions and 5 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1139,6 +1139,8 @@ bullet.healamount = [stat]{0}[lightgray] direct repair
bullet.multiplier = [stat]{0}[lightgray] ammo/item bullet.multiplier = [stat]{0}[lightgray] ammo/item
bullet.reload = [stat]{0}%[lightgray] fire rate bullet.reload = [stat]{0}%[lightgray] fire rate
bullet.range = [stat]{0}[lightgray] tiles range bullet.range = [stat]{0}[lightgray] tiles range
bullet.notargetsmissiles = [stat] ignores buildings
bullet.notargetsbuildings = [stat] ignores missiles
unit.blocks = blocks unit.blocks = blocks
unit.blockssquared = blocks\u00B2 unit.blockssquared = blocks\u00B2
@@ -1839,6 +1841,7 @@ block.electric-heater.name = Electric Heater
block.slag-heater.name = Slag Heater block.slag-heater.name = Slag Heater
block.phase-heater.name = Phase Heater block.phase-heater.name = Phase Heater
block.heat-redirector.name = Heat Redirector block.heat-redirector.name = Heat Redirector
block.small-heat-redirector.name = Small Heat Redirector
block.heat-router.name = Heat Router block.heat-router.name = Heat Router
block.slag-incinerator.name = Slag Incinerator block.slag-incinerator.name = Slag Incinerator
block.carbide-crucible.name = Carbide Crucible block.carbide-crucible.name = Carbide Crucible
@@ -2237,7 +2240,7 @@ block.repair-turret.description = Continuously repairs the closest damaged unit
block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost.
block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core.
block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core.
block.breach.description = Fires piercing beryllium or tungsten ammunition at enemy targets. block.breach.description = Fires piercing bullets at enemy targets.
block.diffuse.description = Fires a burst of bullets in a wide cone. Pushes enemy targets back. block.diffuse.description = Fires a burst of bullets in a wide cone. Pushes enemy targets back.
block.sublimate.description = Fires a continuous jet of flame at enemy targets. Pierces armor. block.sublimate.description = Fires a continuous jet of flame at enemy targets. Pierces armor.
block.titan.description = Fires a massive explosive artillery shell at ground targets. Requires hydrogen. block.titan.description = Fires a massive explosive artillery shell at ground targets. Requires hydrogen.
@@ -2253,6 +2256,7 @@ block.electric-heater.description = Applies heat to structures. Requires large a
block.slag-heater.description = Applies heat to structures. Requires slag. block.slag-heater.description = Applies heat to structures. Requires slag.
block.phase-heater.description = Applies heat to structures. Requires phase fabric. block.phase-heater.description = Applies heat to structures. Requires phase fabric.
block.heat-redirector.description = Redirects accumulated heat to other blocks. block.heat-redirector.description = Redirects accumulated heat to other blocks.
block.small-heat-redirector.description = Redirects accumulated heat to other blocks.
block.heat-router.description = Spreads accumulated heat in three output directions. block.heat-router.description = Spreads accumulated heat in three output directions.
block.electrolyzer.description = Converts water into hydrogen and ozone gas. Outputs resulting gases in two opposite directions, marked by corresponding colors. block.electrolyzer.description = Converts water into hydrogen and ozone gas. Outputs resulting gases in two opposite directions, marked by corresponding colors.
block.atmospheric-concentrator.description = Concentrates nitrogen from the atmosphere. Requires heat. block.atmospheric-concentrator.description = Concentrates nitrogen from the atmosphere. Requires heat.

View File

@@ -590,3 +590,4 @@
63092=dynamic|status-dynamic-ui 63092=dynamic|status-dynamic-ui
63091=remove-wall|block-remove-wall-ui 63091=remove-wall|block-remove-wall-ui
63090=remove-ore|block-remove-ore-ui 63090=remove-ore|block-remove-ore-ui
63089=small-heat-redirector|block-small-heat-redirector-ui

Binary file not shown.

View File

@@ -73,7 +73,7 @@ public class Blocks{
melter, separator, disassembler, sporePress, pulverizer, incinerator, coalCentrifuge, melter, separator, disassembler, sporePress, pulverizer, incinerator, coalCentrifuge,
//crafting - erekir //crafting - erekir
siliconArcFurnace, electrolyzer, oxidationChamber, atmosphericConcentrator, electricHeater, slagHeater, phaseHeater, heatRedirector, heatRouter, slagIncinerator, siliconArcFurnace, electrolyzer, oxidationChamber, atmosphericConcentrator, electricHeater, slagHeater, phaseHeater, heatRedirector, smallHeatRedirector, heatRouter, slagIncinerator,
carbideCrucible, slagCentrifuge, surgeCrucible, cyanogenSynthesizer, phaseSynthesizer, heatReactor, carbideCrucible, slagCentrifuge, surgeCrucible, cyanogenSynthesizer, phaseSynthesizer, heatReactor,
//sandbox //sandbox
@@ -1327,6 +1327,17 @@ public class Blocks{
regionRotated1 = 1; regionRotated1 = 1;
}}; }};
smallHeatRedirector = new HeatConductor("small-heat-redirector"){{
requirements(Category.crafting, with(Items.surgeAlloy, 10, Items.graphite, 10));
researchCostMultiplier = 10f;
group = BlockGroup.heat;
size = 2;
drawer = new DrawMulti(new DrawDefault(), new DrawHeatOutput(), new DrawHeatInput("-heat"));
regionRotated1 = 1;
}};
heatRouter = new HeatConductor("heat-router"){{ heatRouter = new HeatConductor("heat-router"){{
requirements(Category.crafting, with(Items.tungsten, 15, Items.graphite, 10)); requirements(Category.crafting, with(Items.tungsten, 15, Items.graphite, 10));
@@ -4006,7 +4017,7 @@ public class Blocks{
smokeEffect = Fx.shootBigSmoke; smokeEffect = Fx.shootBigSmoke;
ammoMultiplier = 1; ammoMultiplier = 1;
reloadMultiplier = 1f; reloadMultiplier = 1f;
pierceCap = 3; pierceCap = 4;
pierce = true; pierce = true;
pierceBuilding = true; pierceBuilding = true;
hitColor = backColor = trailColor = Pal.tungstenShot; hitColor = backColor = trailColor = Pal.tungstenShot;
@@ -4016,6 +4027,26 @@ public class Blocks{
hitEffect = despawnEffect = Fx.hitBulletColor; hitEffect = despawnEffect = Fx.hitBulletColor;
rangeChange = 40f; rangeChange = 40f;
buildingDamageMultiplier = 0.3f; buildingDamageMultiplier = 0.3f;
}},
Items.carbide, new BasicBulletType(12f, 400f/0.75f){{
width = 15f;
height = 21f;
hitSize = 7f;
shootEffect = sfe;
smokeEffect = Fx.shootBigSmoke;
ammoMultiplier = 1;
reloadMultiplier = 0.67f;
hitColor = backColor = trailColor = Color.valueOf("ab8ec5");
frontColor = Color.white;
trailWidth = 2.2f;
trailLength = 11;
trailEffect = Fx.disperseTrail;
trailInterval = 2f;
hitEffect = despawnEffect = Fx.hitBulletColor;
rangeChange = 136f;
buildingDamageMultiplier = 0.3f;
targetBlocks = false;
targetMissiles = false;
}} }}
); );

View File

@@ -220,11 +220,13 @@ public class ErekirTechTree{
}); });
node(heatRouter, () -> { node(heatRouter, () -> {
node(smallHeatRedirector, () -> {
}); });
}); });
}); });
}); });
});
node(slagIncinerator, Seq.with(new OnSector(basin)), () -> { node(slagIncinerator, Seq.with(new OnSector(basin)), () -> {

View File

@@ -102,6 +102,10 @@ public class BulletType extends Content implements Cloneable{
public StatusEffect status = StatusEffects.none; public StatusEffect status = StatusEffects.none;
/** Intensity of applied status effect in terms of duration. */ /** Intensity of applied status effect in terms of duration. */
public float statusDuration = 60 * 8f; public float statusDuration = 60 * 8f;
/** Turret only. If false, blocks will not be targeted. */
public boolean targetBlocks = true;
/** Turret only. If false, missiles will not be targeted. */
public boolean targetMissiles = true;
/** Whether this bullet type collides with tiles. */ /** Whether this bullet type collides with tiles. */
public boolean collidesTiles = true; public boolean collidesTiles = true;
/** Whether this bullet type collides with tiles that are of the same team. */ /** Whether this bullet type collides with tiles that are of the same team. */

View File

@@ -79,6 +79,8 @@ public class Turret extends ReloadTurret{
public boolean targetAir = true; public boolean targetAir = true;
/** If true, this block targets ground units and structures. */ /** If true, this block targets ground units and structures. */
public boolean targetGround = true; public boolean targetGround = true;
/** If true, this block targets blocks. */
public boolean targetBlocks = true;
/** If true, this block targets friend blocks, to heal them. */ /** If true, this block targets friend blocks, to heal them. */
public boolean targetHealing = false; public boolean targetHealing = false;
/** If true, this turret can be controlled by players. */ /** If true, this turret can be controlled by players. */
@@ -486,7 +488,11 @@ public class Turret extends ReloadTurret{
if(targetAir && !targetGround){ if(targetAir && !targetGround){
return Units.bestEnemy(team, x, y, range, e -> !e.dead() && !e.isGrounded() && unitFilter.get(e), unitSort); return Units.bestEnemy(team, x, y, range, e -> !e.dead() && !e.isGrounded() && unitFilter.get(e), unitSort);
}else{ }else{
return Units.bestTarget(team, x, y, range, e -> !e.dead() && unitFilter.get(e) && (e.isGrounded() || targetAir) && (!e.isGrounded() || targetGround), b -> targetGround && buildingFilter.get(b), unitSort); var ammo = peekAmmo();
boolean buildings = targetGround && targetBlocks && (ammo == null || ammo.targetBlocks), missiles = ammo == null || ammo.targetMissiles;
return Units.bestTarget(team, x, y, range,
e -> !e.dead() && unitFilter.get(e) && (e.isGrounded() || targetAir) && (!e.isGrounded() || targetGround) && (missiles || !(e instanceof TimedKillc)),
b -> buildings && buildingFilter.get(b), unitSort);
} }
} }

View File

@@ -631,6 +631,14 @@ public class StatValues{
((int)(type.statusDuration / 60f)) + "[lightgray] " + Core.bundle.get("unit.seconds"))).with(c -> withTooltip(c, type.status)); ((int)(type.statusDuration / 60f)) + "[lightgray] " + Core.bundle.get("unit.seconds"))).with(c -> withTooltip(c, type.status));
} }
if(!type.targetMissiles){
sep(bt, "@bullet.notargetsmissiles");
}
if(!type.targetBlocks){
sep(bt, "@bullet.notargetsbuildings");
}
if(type.intervalBullet != null){ if(type.intervalBullet != null){
bt.row(); bt.row();