New WIP turret
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-back-l.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-back-r.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 506 B |
After Width: | Height: | Size: 506 B |
After Width: | Height: | Size: 3.4 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-blade-l.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-blade-r.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-front-l.png
Normal file
After Width: | Height: | Size: 945 B |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-front-r.png
Normal file
After Width: | Height: | Size: 921 B |
After Width: | Height: | Size: 1.5 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-mid.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-preview.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 1.5 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-spine-l.png
Normal file
After Width: | Height: | Size: 382 B |
BIN
core/assets-raw/sprites/blocks/turrets/ravage/ravage-spine-r.png
Normal file
After Width: | Height: | Size: 382 B |
@ -571,3 +571,4 @@
|
|||||||
63113=lustre|block-lustre-ui
|
63113=lustre|block-lustre-ui
|
||||||
63112=scathe|block-scathe-ui
|
63112=scathe|block-scathe-ui
|
||||||
63111=scathe-missile|unit-scathe-missile-ui
|
63111=scathe-missile|unit-scathe-missile-ui
|
||||||
|
63110=ravage|block-ravage-ui
|
||||||
|
BIN
core/assets/maps/atlas.msav
Normal file
@ -3885,6 +3885,7 @@ public class Blocks{
|
|||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
|
|
||||||
liquidConsumed = 10f / 60f;
|
liquidConsumed = 10f / 60f;
|
||||||
|
targetInterval = 5f;
|
||||||
|
|
||||||
float r = range = 130f;
|
float r = range = 130f;
|
||||||
|
|
||||||
@ -4268,6 +4269,7 @@ public class Blocks{
|
|||||||
Items.carbide, new BasicBulletType(0f, 1){{
|
Items.carbide, new BasicBulletType(0f, 1){{
|
||||||
shootEffect = Fx.shootBig;
|
shootEffect = Fx.shootBig;
|
||||||
smokeEffect = Fx.shootSmokeMissile;
|
smokeEffect = Fx.shootSmokeMissile;
|
||||||
|
ammoMultiplier = 1f;
|
||||||
|
|
||||||
spawnUnit = new MissileUnitType("scathe-missile"){{
|
spawnUnit = new MissileUnitType("scathe-missile"){{
|
||||||
speed = 4.6f;
|
speed = 4.6f;
|
||||||
@ -4285,7 +4287,7 @@ public class Blocks{
|
|||||||
|
|
||||||
fogRadius = 6f;
|
fogRadius = 6f;
|
||||||
|
|
||||||
health = 250;
|
health = 190;
|
||||||
|
|
||||||
weapons.add(new Weapon(){{
|
weapons.add(new Weapon(){{
|
||||||
shootCone = 360f;
|
shootCone = 360f;
|
||||||
@ -4302,6 +4304,7 @@ public class Blocks{
|
|||||||
sizeTo = 130f;
|
sizeTo = 130f;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
ammoMultiplier = 1f;
|
||||||
fragLifeMin = 0.1f;
|
fragLifeMin = 0.1f;
|
||||||
fragBullets = 7;
|
fragBullets = 7;
|
||||||
fragBullet = new ArtilleryBulletType(3.4f, 30){{
|
fragBullet = new ArtilleryBulletType(3.4f, 30){{
|
||||||
@ -4403,53 +4406,169 @@ public class Blocks{
|
|||||||
shootCone = 1f;
|
shootCone = 1f;
|
||||||
scaledHealth = 220;
|
scaledHealth = 220;
|
||||||
rotateSpeed = 0.9f;
|
rotateSpeed = 0.9f;
|
||||||
researchCostMultiplier = 0.05f;
|
|
||||||
|
|
||||||
coolant = consume(new ConsumeLiquid(Liquids.water, 15f / 60f));
|
coolant = consume(new ConsumeLiquid(Liquids.water, 15f / 60f));
|
||||||
limitRange();
|
limitRange();
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//TODO
|
|
||||||
if(false)
|
|
||||||
ravage = new ItemTurret("ravage"){{
|
ravage = new ItemTurret("ravage"){{
|
||||||
requirements(Category.turret, with(Items.beryllium, 150, Items.silicon, 150, Items.carbide, 250, Items.phaseFabric, 100));
|
requirements(Category.turret, with(Items.beryllium, 150, Items.silicon, 150, Items.carbide, 250, Items.phaseFabric, 100));
|
||||||
|
|
||||||
ammo(
|
ammo(
|
||||||
Items.beryllium, new BasicBulletType(7.5f, 85){{
|
//this is really lazy
|
||||||
width = 12f;
|
Items.surgeAlloy, new BasicBulletType(7f, 250){{
|
||||||
|
width = 16f;
|
||||||
hitSize = 7f;
|
hitSize = 7f;
|
||||||
height = 20f;
|
height = 20f;
|
||||||
shootEffect = new MultiEffect(Fx.shootBigColor, Fx.colorSparkBig);
|
shootEffect = new MultiEffect(Fx.shootTitan, Fx.colorSparkBig, new WaveEffect(){{
|
||||||
smokeEffect = Fx.shootBigSmoke;
|
colorFrom = colorTo = Pal.accent;
|
||||||
|
lifetime = 12f;
|
||||||
|
sizeTo = 20f;
|
||||||
|
strokeFrom = 3f;
|
||||||
|
strokeTo = 0.3f;
|
||||||
|
}});
|
||||||
|
smokeEffect = Fx.shootSmokeRavage;
|
||||||
ammoMultiplier = 1;
|
ammoMultiplier = 1;
|
||||||
pierceCap = 2;
|
pierceCap = 4;
|
||||||
pierce = true;
|
pierce = true;
|
||||||
pierceBuilding = true;
|
pierceBuilding = true;
|
||||||
hitColor = backColor = trailColor = Pal.berylShot;
|
hitColor = backColor = trailColor = Pal.accent;
|
||||||
frontColor = Color.white;
|
frontColor = Color.white;
|
||||||
trailWidth = 2.1f;
|
trailWidth = 2.8f;
|
||||||
trailLength = 10;
|
trailLength = 9;
|
||||||
hitEffect = despawnEffect = Fx.hitBulletColor;
|
hitEffect = despawnEffect = Fx.hitBulletBig;
|
||||||
buildingDamageMultiplier = 0.3f;
|
buildingDamageMultiplier = 0.3f;
|
||||||
|
|
||||||
|
//TODO
|
||||||
|
intervalBullet = new LightningBulletType(){{
|
||||||
|
damage = 30;
|
||||||
|
collidesAir = false;
|
||||||
|
ammoMultiplier = 1f;
|
||||||
|
lightningColor = Pal.accent;
|
||||||
|
lightningLength = 5;
|
||||||
|
lightningLengthRand = 10;
|
||||||
|
|
||||||
|
//for visual stats only.
|
||||||
|
buildingDamageMultiplier = 0.25f;
|
||||||
|
|
||||||
|
lightningType = new BulletType(0.0001f, 0f){{
|
||||||
|
lifetime = Fx.lightning.lifetime;
|
||||||
|
hitEffect = Fx.hitLancer;
|
||||||
|
despawnEffect = Fx.none;
|
||||||
|
status = StatusEffects.shocked;
|
||||||
|
statusDuration = 10f;
|
||||||
|
hittable = false;
|
||||||
|
lightColor = Color.white;
|
||||||
|
buildingDamageMultiplier = 0.25f;
|
||||||
|
}};
|
||||||
|
}};
|
||||||
|
|
||||||
|
bulletInterval = 3f;
|
||||||
}}
|
}}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
shoot = new ShootAlternate(){{
|
||||||
|
spread = 3.3f;
|
||||||
|
barrels = 9;
|
||||||
|
shots = 9;
|
||||||
|
}};
|
||||||
|
|
||||||
|
minWarmup = 0.99f;
|
||||||
coolantMultiplier = 6f;
|
coolantMultiplier = 6f;
|
||||||
|
|
||||||
shake = 1f;
|
shake = 2f;
|
||||||
ammoPerShot = 2;
|
ammoPerShot = 2;
|
||||||
drawer = new DrawTurret("reinforced-");
|
drawer = new DrawTurret("reinforced-"){{
|
||||||
shootY = -2;
|
parts.addAll(
|
||||||
|
|
||||||
|
new RegionPart("-mid"){{
|
||||||
|
heatProgress = PartProgress.heat.blend(PartProgress.warmup, 0.5f);
|
||||||
|
mirror = false;
|
||||||
|
}},
|
||||||
|
new RegionPart("-blade"){{
|
||||||
|
progress = PartProgress.warmup;
|
||||||
|
heatProgress = PartProgress.warmup;
|
||||||
|
mirror = true;
|
||||||
|
moveX = 5.5f;
|
||||||
|
moves.add(new PartMove(PartProgress.recoil, 0f, -3f, 0f));
|
||||||
|
}},
|
||||||
|
new RegionPart("-front"){{
|
||||||
|
progress = PartProgress.warmup;
|
||||||
|
heatProgress = PartProgress.recoil;
|
||||||
|
mirror = true;
|
||||||
|
under = true;
|
||||||
|
moveY = 4f;
|
||||||
|
moveX = 6.5f;
|
||||||
|
moves.add(new PartMove(PartProgress.recoil, 0f, -5.5f, 0f));
|
||||||
|
}},
|
||||||
|
new RegionPart("-back"){{
|
||||||
|
progress = PartProgress.warmup;
|
||||||
|
heatProgress = PartProgress.warmup;
|
||||||
|
mirror = true;
|
||||||
|
under = true;
|
||||||
|
moveX = 5.5f;
|
||||||
|
}},
|
||||||
|
new ShapePart(){{
|
||||||
|
progress = PartProgress.warmup.delay(0.5f);
|
||||||
|
color = Pal.accent;
|
||||||
|
sides = 6;
|
||||||
|
hollow = true;
|
||||||
|
stroke = 0f;
|
||||||
|
strokeTo = 3f;
|
||||||
|
radius = 10f;
|
||||||
|
layer = Layer.effect;
|
||||||
|
y = -15f;
|
||||||
|
rotateSpeed = 2f;
|
||||||
|
}}
|
||||||
|
);
|
||||||
|
|
||||||
|
for(int i = 0; i < 3; i++){
|
||||||
|
int fi = i;
|
||||||
|
parts.add(new RegionPart("-blade-bar"){{
|
||||||
|
progress = PartProgress.warmup;
|
||||||
|
heatProgress = PartProgress.warmup;
|
||||||
|
mirror = true;
|
||||||
|
under = true;
|
||||||
|
outline = false;
|
||||||
|
layerOffset = -0.3f;
|
||||||
|
turretHeatLayer = Layer.turret - 0.2f;
|
||||||
|
y = 44f / 4f - fi * 38f / 4f;
|
||||||
|
moveX = 2f;
|
||||||
|
|
||||||
|
color = Pal.accent;
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
int fi = i;
|
||||||
|
parts.add(new RegionPart("-spine"){{
|
||||||
|
progress = PartProgress.warmup.delay(fi / 5f);
|
||||||
|
heatProgress = PartProgress.warmup;
|
||||||
|
mirror = true;
|
||||||
|
under = true;
|
||||||
|
layerOffset = -0.3f;
|
||||||
|
turretHeatLayer = Layer.turret - 0.2f;
|
||||||
|
moveY = -22f / 4f - fi * 3f;
|
||||||
|
moveX = 52f / 4f - fi * 1f + 2f;
|
||||||
|
moveRot = -fi * 30f;
|
||||||
|
|
||||||
|
color = Pal.accent;
|
||||||
|
moves.add(new PartMove(PartProgress.recoil.delay(fi / 5f), 0f, 0f, 35f));
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
|
||||||
|
shootWarmupSpeed = 0.05f;
|
||||||
|
shootY = 15f;
|
||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
size = 5;
|
size = 5;
|
||||||
envEnabled |= Env.space;
|
envEnabled |= Env.space;
|
||||||
reload = 40f;
|
reload = 100f;
|
||||||
recoil = 2f;
|
recoil = 2f;
|
||||||
range = 190;
|
range = 300;
|
||||||
shootCone = 3f;
|
shootCone = 7f;
|
||||||
scaledHealth = 250;
|
scaledHealth = 350;
|
||||||
rotateSpeed = 1.5f;
|
rotateSpeed = 1.5f;
|
||||||
researchCostMultiplier = 0.05f;
|
|
||||||
|
|
||||||
coolant = consume(new ConsumeLiquid(Liquids.water, 15f / 60f));
|
coolant = consume(new ConsumeLiquid(Liquids.water, 15f / 60f));
|
||||||
limitRange();
|
limitRange();
|
||||||
|
@ -1611,6 +1611,19 @@ public class Fx{
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
shootSmokeRavage = new Effect(70f, e -> {
|
||||||
|
rand.setSeed(e.id);
|
||||||
|
for(int i = 0; i < 13; i++){
|
||||||
|
float a = e.rotation + rand.range(30f);
|
||||||
|
v.trns(a, rand.random(e.finpow() * 50f));
|
||||||
|
e.scaled(e.lifetime * rand.random(0.3f, 1f), b -> {
|
||||||
|
color(e.color);
|
||||||
|
Lines.stroke(b.fout() * 3f + 0.5f);
|
||||||
|
Lines.lineAngle(e.x + v.x, e.y + v.y, a, b.fout() * 8f + 0.4f);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
shootSmokeMissile = new Effect(130f, 300f, e -> {
|
shootSmokeMissile = new Effect(130f, 300f, e -> {
|
||||||
color(Pal.redLight);
|
color(Pal.redLight);
|
||||||
alpha(0.5f);
|
alpha(0.5f);
|
||||||
|
@ -11,6 +11,7 @@ public class ShapePart extends DrawPart{
|
|||||||
public float radius = 3f, radiusTo = -1f, stroke = 1f, strokeTo = -1f;
|
public float radius = 3f, radiusTo = -1f, stroke = 1f, strokeTo = -1f;
|
||||||
public float x, y, rotation;
|
public float x, y, rotation;
|
||||||
public float moveX, moveY, moveRot;
|
public float moveX, moveY, moveRot;
|
||||||
|
public float rotateSpeed = 0f;
|
||||||
public Color color = Color.white;
|
public Color color = Color.white;
|
||||||
public @Nullable Color colorTo;
|
public @Nullable Color colorTo;
|
||||||
public boolean mirror = false;
|
public boolean mirror = false;
|
||||||
@ -26,6 +27,7 @@ public class ShapePart extends DrawPart{
|
|||||||
Draw.z(Draw.z() + layerOffset);
|
Draw.z(Draw.z() + layerOffset);
|
||||||
|
|
||||||
float prog = progress.getClamp(params);
|
float prog = progress.getClamp(params);
|
||||||
|
float baseRot = Time.time * rotateSpeed;
|
||||||
int len = mirror && params.sideOverride == -1 ? 2 : 1;
|
int len = mirror && params.sideOverride == -1 ? 2 : 1;
|
||||||
|
|
||||||
for(int s = 0; s < len; s++){
|
for(int s = 0; s < len; s++){
|
||||||
@ -49,14 +51,14 @@ public class ShapePart extends DrawPart{
|
|||||||
|
|
||||||
if(!hollow){
|
if(!hollow){
|
||||||
if(!circle){
|
if(!circle){
|
||||||
Fill.poly(rx, ry, sides, rad, moveRot * prog * sign + params.rotation - 90 * sign + rotation * sign);
|
Fill.poly(rx, ry, sides, rad, moveRot * prog * sign + params.rotation - 90 * sign + rotation * sign + baseRot * sign);
|
||||||
}else{
|
}else{
|
||||||
Fill.circle(rx, ry, rad);
|
Fill.circle(rx, ry, rad);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
Lines.stroke(str);
|
Lines.stroke(str);
|
||||||
if(!circle){
|
if(!circle){
|
||||||
Lines.poly(rx, ry, sides, rad, moveRot * prog * sign + params.rotation - 90 * sign + rotation * sign);
|
Lines.poly(rx, ry, sides, rad, moveRot * prog * sign + params.rotation - 90 * sign + rotation * sign + baseRot * sign);
|
||||||
}else{
|
}else{
|
||||||
Lines.circle(rx, ry, rad);
|
Lines.circle(rx, ry, rad);
|
||||||
}
|
}
|
||||||
|