Fill#rect bugfix
BIN
core/assets-raw/sprites/blocks/turrets/afflict.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/diffuse.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1017 B After Width: | Height: | Size: 1002 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -783,6 +783,7 @@ stat.speedmultiplier = Speed Multiplier
|
|||||||
stat.reloadmultiplier = Reload Multiplier
|
stat.reloadmultiplier = Reload Multiplier
|
||||||
stat.buildspeedmultiplier = Build Speed Multiplier
|
stat.buildspeedmultiplier = Build Speed Multiplier
|
||||||
stat.reactive = Reacts
|
stat.reactive = Reacts
|
||||||
|
stat.immunities = Immunities
|
||||||
stat.healing = Healing
|
stat.healing = Healing
|
||||||
|
|
||||||
ability.forcefield = Force Field
|
ability.forcefield = Force Field
|
||||||
|
|||||||
@@ -2863,31 +2863,32 @@ public class Blocks{
|
|||||||
fracture = new ItemTurret("fracture"){{
|
fracture = new ItemTurret("fracture"){{
|
||||||
requirements(Category.turret, with(Items.tungsten, 35, Items.silicon, 35));
|
requirements(Category.turret, with(Items.tungsten, 35, Items.silicon, 35));
|
||||||
ammo(
|
ammo(
|
||||||
Items.tungsten, new BasicBulletType(5f, 20){{
|
Items.tungsten, new ContinuousFlameBulletType(20f){{
|
||||||
velocityInaccuracy = 0.2f;
|
length = 90f;
|
||||||
width = 6f;
|
|
||||||
height = 12f;
|
|
||||||
shootEffect = Fx.colorSpark;
|
shootEffect = Fx.colorSpark;
|
||||||
smokeEffect = Fx.shootBigSmoke;
|
smokeEffect = Fx.shootBigSmoke;
|
||||||
ammoMultiplier = 2;
|
ammoMultiplier = 2;
|
||||||
pierce = true;
|
pierce = true;
|
||||||
pierceBuilding = true;
|
knockback = 4f;
|
||||||
hitColor = backColor = trailColor = Items.tungsten.color;
|
status = StatusEffects.slow;
|
||||||
frontColor = Color.white;
|
hitColor = Items.tungsten.color;
|
||||||
trailWidth = 1f;
|
lifetime = 16f;
|
||||||
trailLength = 4;
|
despawnEffect = Fx.none;
|
||||||
|
drawFlare = false;
|
||||||
|
lengthInterp = f -> Interp.pow2In.apply(1f - f);
|
||||||
//TODO different effect?
|
//TODO different effect?
|
||||||
hitEffect = despawnEffect = Fx.hitBulletColor;
|
hitEffect = Fx.hitBulletColor;
|
||||||
}}
|
}}
|
||||||
);
|
);
|
||||||
|
|
||||||
acceptCoolant = false;
|
acceptCoolant = false;
|
||||||
consumes.liquid(Liquids.hydrogen, 1.5f / 60f);
|
consumes.liquid(Liquids.hydrogen, 1.5f / 60f);
|
||||||
shots = 5;
|
shots = 1;
|
||||||
|
|
||||||
//TODO cool reload animation
|
//TODO cool reload animation
|
||||||
draw = new DrawTurret("reinforced-");
|
draw = new DrawTurret("reinforced-");
|
||||||
shootLength = 8f;
|
shootShake = 2f;
|
||||||
|
shootLength = 6f;
|
||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
size = 2;
|
size = 2;
|
||||||
envEnabled |= Env.space;
|
envEnabled |= Env.space;
|
||||||
@@ -2895,11 +2896,9 @@ public class Blocks{
|
|||||||
restitution = 0.03f;
|
restitution = 0.03f;
|
||||||
range = 90;
|
range = 90;
|
||||||
shootCone = 15f;
|
shootCone = 15f;
|
||||||
inaccuracy = 20f;
|
inaccuracy = 0f;
|
||||||
health = 300 * size * size;
|
health = 300 * size * size;
|
||||||
rotateSpeed = 1.8f;
|
rotateSpeed = 3f;
|
||||||
|
|
||||||
limitRange();
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//TODO implementation, better name
|
//TODO implementation, better name
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ public class World{
|
|||||||
}
|
}
|
||||||
|
|
||||||
state.rules.cloudColor = sector.planet.landCloudColor;
|
state.rules.cloudColor = sector.planet.landCloudColor;
|
||||||
sector.info.resources = content.asArray();
|
sector.info.resources = content.toSeq();
|
||||||
sector.info.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id)));
|
sector.info.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id)));
|
||||||
sector.saveInfo();
|
sector.saveInfo();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public class ContinuousFlameBulletType extends ContinuousBulletType{
|
|||||||
public Color flareColor = Color.valueOf("e189f5");
|
public Color flareColor = Color.valueOf("e189f5");
|
||||||
public float flareWidth = 3f, flareInnerScl = 0.5f, flareLength = 40f, flareInnerLenScl = 0.5f, flareLayer = Layer.bullet - 0.0001f, flareRotSpeed = 1.2f;
|
public float flareWidth = 3f, flareInnerScl = 0.5f, flareLength = 40f, flareInnerLenScl = 0.5f, flareLayer = Layer.bullet - 0.0001f, flareRotSpeed = 1.2f;
|
||||||
public boolean rotateFlare = false;
|
public boolean rotateFlare = false;
|
||||||
|
public Interp lengthInterp = Interp.slope;
|
||||||
|
|
||||||
/** Lengths, widths, ellipse panning, and offsets, all as fractions of the base width and length. Stored as an 'interleaved' array of values: LWPO1 LWPO2 LWPO3... */
|
/** Lengths, widths, ellipse panning, and offsets, all as fractions of the base width and length. Stored as an 'interleaved' array of values: LWPO1 LWPO2 LWPO3... */
|
||||||
public float[] lengthWidthPanOffsets = {
|
public float[] lengthWidthPanOffsets = {
|
||||||
@@ -53,7 +54,7 @@ public class ContinuousFlameBulletType extends ContinuousBulletType{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Bullet b){
|
public void draw(Bullet b){
|
||||||
float mult = b.fslope();
|
float mult = b.fin(lengthInterp);
|
||||||
float realLength = (pierceMax <= 0 ? length : Damage.findPierceLength(b, pierceMax, length)) * mult;
|
float realLength = (pierceMax <= 0 ? length : Damage.findPierceLength(b, pierceMax, length)) * mult;
|
||||||
|
|
||||||
float sin = Mathf.sin(Time.time, oscScl, oscMag);
|
float sin = Mathf.sin(Time.time, oscScl, oscMag);
|
||||||
|
|||||||
@@ -250,9 +250,9 @@ public class ErekirPlanetGenerator extends PlanetGenerator{
|
|||||||
//TODO proper waves
|
//TODO proper waves
|
||||||
state.rules.waves = !OS.hasProp("mindustry.debug");
|
state.rules.waves = !OS.hasProp("mindustry.debug");
|
||||||
state.rules.waveTimer = true;
|
state.rules.waveTimer = true;
|
||||||
state.rules.waveSpacing = 60f * 60f * 7.5f;
|
state.rules.waveSpacing = 60f * 60f * 10f;
|
||||||
state.rules.spawns = Seq.with(new SpawnGroup(){{
|
state.rules.spawns = Seq.with(new SpawnGroup(){{
|
||||||
type = UnitTypes.emanate;
|
type = UnitTypes.fortress;
|
||||||
spacing = 1;
|
spacing = 1;
|
||||||
shieldScaling = 60;
|
shieldScaling = 60;
|
||||||
unitScaling = 2f;
|
unitScaling = 2f;
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class StatusEffect extends UnlockableContent{
|
|||||||
|
|
||||||
boolean reacts = false;
|
boolean reacts = false;
|
||||||
|
|
||||||
for(var e : opposites.asArray().sort()){
|
for(var e : opposites.toSeq().sort()){
|
||||||
stats.add(Stat.opposites, e.emoji() + "" + e);
|
stats.add(Stat.opposites, e.emoji() + "" + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,7 +96,7 @@ public class StatusEffect extends UnlockableContent{
|
|||||||
|
|
||||||
//don't list affinities *and* reactions, as that would be redundant
|
//don't list affinities *and* reactions, as that would be redundant
|
||||||
if(!reacts){
|
if(!reacts){
|
||||||
for(var e : affinities.asArray().sort()){
|
for(var e : affinities.toSeq().sort()){
|
||||||
stats.add(Stat.affinities, e.emoji() + "" + e);
|
stats.add(Stat.affinities, e.emoji() + "" + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -348,6 +348,17 @@ public class UnitType extends UnlockableContent{
|
|||||||
if(weapons.any()){
|
if(weapons.any()){
|
||||||
stats.add(Stat.weapons, StatValues.weapons(this, weapons));
|
stats.add(Stat.weapons, StatValues.weapons(this, weapons));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(immunities.size > 0){
|
||||||
|
var imm = immunities.toSeq().sort();
|
||||||
|
//it's redundant to list wet for naval units
|
||||||
|
if(naval){
|
||||||
|
imm.remove(StatusEffects.wet);
|
||||||
|
}
|
||||||
|
for(var i : imm){
|
||||||
|
stats.add(Stat.immunities, i.emoji() + " " + i.localizedName);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@CallSuper
|
@CallSuper
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class CustomRulesDialog extends BaseDialog{
|
|||||||
t.add("@empty");
|
t.add("@empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
Seq<T> array = set.asArray();
|
Seq<T> array = set.toSeq();
|
||||||
array.sort();
|
array.sort();
|
||||||
|
|
||||||
int cols = mobile && Core.graphics.isPortrait() ? 1 : mobile ? 2 : 3;
|
int cols = mobile && Core.graphics.isPortrait() ? 1 : mobile ? 2 : 3;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ public enum Stat{
|
|||||||
buildSpeedMultiplier,
|
buildSpeedMultiplier,
|
||||||
reactive,
|
reactive,
|
||||||
healing,
|
healing,
|
||||||
|
immunities,
|
||||||
|
|
||||||
itemCapacity(StatCat.items),
|
itemCapacity(StatCat.items),
|
||||||
itemsMoved(StatCat.items),
|
itemsMoved(StatCat.items),
|
||||||
|
|||||||