WIP 'bulwark' unit
|
Before Width: | Height: | Size: 770 B After Width: | Height: | Size: 764 B |
|
Before Width: | Height: | Size: 765 B After Width: | Height: | Size: 767 B |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
BIN
core/assets-raw/sprites/units/bulwark-cell.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
core/assets-raw/sprites/units/bulwark-foot.png
Normal file
|
After Width: | Height: | Size: 647 B |
BIN
core/assets-raw/sprites/units/bulwark-leg-base.png
Normal file
|
After Width: | Height: | Size: 775 B |
BIN
core/assets-raw/sprites/units/bulwark-leg.png
Normal file
|
After Width: | Height: | Size: 691 B |
BIN
core/assets-raw/sprites/units/bulwark.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
core/assets-raw/sprites/units/weapons/bulwark-weapon-heat.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
core/assets-raw/sprites/units/weapons/bulwark-weapon.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
core/assets-raw/sprites/units/weapons/vanquish-weapon-heat.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -494,3 +494,4 @@
|
|||||||
63210=eruption-drill|block-eruption-drill-ui
|
63210=eruption-drill|block-eruption-drill-ui
|
||||||
63209=ship-assembler|block-ship-assembler-ui
|
63209=ship-assembler|block-ship-assembler-ui
|
||||||
63208=quell-missile|unit-quell-missile-ui
|
63208=quell-missile|unit-quell-missile-ui
|
||||||
|
63207=bulwark|unit-bulwark-ui
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class UnitTypes{
|
|||||||
public static @EntityDef(value = {Unitc.class, Mechc.class}, legacy = true) UnitType nova, pulsar, quasar;
|
public static @EntityDef(value = {Unitc.class, Mechc.class}, legacy = true) UnitType nova, pulsar, quasar;
|
||||||
|
|
||||||
//legs
|
//legs
|
||||||
public static @EntityDef({Unitc.class, Legsc.class}) UnitType corvus, atrax;
|
public static @EntityDef({Unitc.class, Legsc.class}) UnitType corvus, atrax, bulwark;
|
||||||
|
|
||||||
//legs, legacy
|
//legs, legacy
|
||||||
public static @EntityDef(value = {Unitc.class, Legsc.class}, legacy = true) UnitType spiroct, arkyid, toxopid;
|
public static @EntityDef(value = {Unitc.class, Legsc.class}, legacy = true) UnitType spiroct, arkyid, toxopid;
|
||||||
@@ -2440,7 +2440,7 @@ public class UnitTypes{
|
|||||||
layerOffset = 0.0001f;
|
layerOffset = 0.0001f;
|
||||||
reload = 120f;
|
reload = 120f;
|
||||||
shootY = 71f / 4f;
|
shootY = 71f / 4f;
|
||||||
shake = 4f;
|
shake = 5f;
|
||||||
recoil = 4f;
|
recoil = 4f;
|
||||||
rotate = true;
|
rotate = true;
|
||||||
rotateSpeed = 1f;
|
rotateSpeed = 1f;
|
||||||
@@ -2448,12 +2448,14 @@ public class UnitTypes{
|
|||||||
x = 0f;
|
x = 0f;
|
||||||
y = 0;
|
y = 0;
|
||||||
shadow = 28f;
|
shadow = 28f;
|
||||||
|
heatColor = Color.valueOf("f9350f");
|
||||||
|
cooldownTime = 80f;
|
||||||
|
|
||||||
bullet = new BasicBulletType(7f, 90){{
|
bullet = new BasicBulletType(8f, 100){{
|
||||||
sprite = "missile-large";
|
sprite = "missile-large";
|
||||||
width = 9f;
|
width = 9.5f;
|
||||||
height = 15f;
|
height = 15f;
|
||||||
lifetime = 33f;
|
lifetime = 32f;
|
||||||
hitSize = 6f;
|
hitSize = 6f;
|
||||||
shootEffect = Fx.shootTitan;
|
shootEffect = Fx.shootTitan;
|
||||||
smokeEffect = Fx.shootSmokeTitan;
|
smokeEffect = Fx.shootSmokeTitan;
|
||||||
@@ -2462,7 +2464,7 @@ public class UnitTypes{
|
|||||||
pierceBuilding = true;
|
pierceBuilding = true;
|
||||||
hitColor = backColor = trailColor = Color.valueOf("feb380");
|
hitColor = backColor = trailColor = Color.valueOf("feb380");
|
||||||
frontColor = Color.white;
|
frontColor = Color.white;
|
||||||
trailWidth = 3f;
|
trailWidth = 3.1f;
|
||||||
trailLength = 8;
|
trailLength = 8;
|
||||||
hitEffect = despawnEffect = Fx.blastExplosion;
|
hitEffect = despawnEffect = Fx.blastExplosion;
|
||||||
}};
|
}};
|
||||||
@@ -2498,7 +2500,93 @@ public class UnitTypes{
|
|||||||
//endregion
|
//endregion
|
||||||
//region erekir - mech
|
//region erekir - mech
|
||||||
|
|
||||||
//TODO
|
bulwark = new UnitType("bulwark"){{
|
||||||
|
drag = 0.1f;
|
||||||
|
speed = 0.62f;
|
||||||
|
hitSize = 23f;
|
||||||
|
health = 8000;
|
||||||
|
armor = 6f;
|
||||||
|
outlineColor = Pal.darkOutline;
|
||||||
|
envDisabled = Env.space;
|
||||||
|
|
||||||
|
//TODO shield ability
|
||||||
|
|
||||||
|
rotateSpeed = 2.7f;
|
||||||
|
|
||||||
|
legCount = 4;
|
||||||
|
legLength = 15f;
|
||||||
|
legTrns = 0.45f;
|
||||||
|
legMoveSpace = 1.4f;
|
||||||
|
rippleScale = 2f;
|
||||||
|
landShake = 0.5f;
|
||||||
|
legExtension = -5f;
|
||||||
|
legBaseOffset = 5f;
|
||||||
|
|
||||||
|
ammoType = new PowerAmmoType(2000);
|
||||||
|
|
||||||
|
legSplashDamage = 32;
|
||||||
|
legSplashRange = 30;
|
||||||
|
drownTimeMultiplier = 2f;
|
||||||
|
|
||||||
|
hovering = true;
|
||||||
|
visualElevation = 0.65f;
|
||||||
|
groundLayer = Layer.legUnit;
|
||||||
|
|
||||||
|
weapons.add(new Weapon("bulwark-weapon"){{
|
||||||
|
mirror = true;
|
||||||
|
top = false;
|
||||||
|
|
||||||
|
x = 62/4f;
|
||||||
|
y = 1f;
|
||||||
|
shootY = 47 / 4f;
|
||||||
|
recoil = 3f;
|
||||||
|
reload = 40f;
|
||||||
|
shake = 3f;
|
||||||
|
cooldownTime = 40f;
|
||||||
|
|
||||||
|
shots = 3;
|
||||||
|
inaccuracy = 3f;
|
||||||
|
velocityRnd = 0.33f;
|
||||||
|
heatColor = Color.red;
|
||||||
|
|
||||||
|
bullet = new MissileBulletType(4.2f, 30){{
|
||||||
|
homingPower = 0.2f;
|
||||||
|
weaveMag = 4;
|
||||||
|
weaveScale = 4;
|
||||||
|
lifetime = 60f;
|
||||||
|
//TODO better
|
||||||
|
shootEffect = Fx.shootBig2;
|
||||||
|
smokeEffect = Fx.shootSmokeTitan;
|
||||||
|
splashDamage = 50f;
|
||||||
|
splashDamageRadius = 30f;
|
||||||
|
frontColor = Color.white;
|
||||||
|
hitSound = Sounds.none;
|
||||||
|
width = height = 10f;
|
||||||
|
|
||||||
|
lightColor = trailColor = backColor = Color.valueOf("8ca9e8");
|
||||||
|
lightRadius = 40f;
|
||||||
|
lightOpacity = 0.7f;
|
||||||
|
|
||||||
|
trailWidth = 2.8f;
|
||||||
|
trailLength = 20;
|
||||||
|
trailChance = -1f;
|
||||||
|
|
||||||
|
despawnEffect = Fx.none;
|
||||||
|
hitEffect = new ExplosionEffect(){{
|
||||||
|
lifetime = 20f;
|
||||||
|
waveStroke = 2f;
|
||||||
|
waveColor = sparkColor = trailColor;
|
||||||
|
waveRad = 12f;
|
||||||
|
smokeSize = 0f;
|
||||||
|
smokeSizeBase = 0f;
|
||||||
|
sparks = 10;
|
||||||
|
sparkRad = 35f;
|
||||||
|
sparkLen = 4f;
|
||||||
|
sparkStroke = 1.5f;
|
||||||
|
}};
|
||||||
|
}};
|
||||||
|
}});
|
||||||
|
}};
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
//region erekir - flying
|
//region erekir - flying
|
||||||
|
|||||||
@@ -151,6 +151,8 @@ public class Weapon implements Cloneable{
|
|||||||
|
|
||||||
//TODO copy-pasted code
|
//TODO copy-pasted code
|
||||||
public void drawOutline(Unit unit, WeaponMount mount){
|
public void drawOutline(Unit unit, WeaponMount mount){
|
||||||
|
if(!outlineRegion.found()) return;
|
||||||
|
|
||||||
//apply layer offset, roll it back at the end
|
//apply layer offset, roll it back at the end
|
||||||
float z = Draw.z();
|
float z = Draw.z();
|
||||||
Draw.z(z + layerOffset);
|
Draw.z(z + layerOffset);
|
||||||
@@ -173,6 +175,8 @@ public class Weapon implements Cloneable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void draw(Unit unit, WeaponMount mount){
|
public void draw(Unit unit, WeaponMount mount){
|
||||||
|
if(!region.found()) return;
|
||||||
|
|
||||||
//apply layer offset, roll it back at the end
|
//apply layer offset, roll it back at the end
|
||||||
float z = Draw.z();
|
float z = Draw.z();
|
||||||
Draw.z(z + layerOffset);
|
Draw.z(z + layerOffset);
|
||||||
@@ -434,7 +438,7 @@ public class Weapon implements Cloneable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void load(){
|
public void load(){
|
||||||
region = Core.atlas.find(name, Core.atlas.find("clear"));
|
region = Core.atlas.find(name);
|
||||||
heatRegion = Core.atlas.find(name + "-heat");
|
heatRegion = Core.atlas.find(name + "-heat");
|
||||||
outlineRegion = Core.atlas.find(name + "-outline");
|
outlineRegion = Core.atlas.find(name + "-outline");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -463,8 +463,9 @@ public class Turret extends ReloadTurret{
|
|||||||
return ammo.peek().type();
|
return ammo.peek().type();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return whether the turret has ammo. */
|
/** @return whether the turret has ammo. */
|
||||||
public boolean hasAmmo(){
|
public boolean hasAmmo(){
|
||||||
|
//used for "side-ammo" like gas in some turrets
|
||||||
if(!cons.canConsume()) return false;
|
if(!cons.canConsume()) return false;
|
||||||
|
|
||||||
//skip first entry if it has less than the required amount of ammo
|
//skip first entry if it has less than the required amount of ammo
|
||||||
|
|||||||
@@ -503,9 +503,19 @@ public class Generators{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
for(Weapon weapon : type.weapons){
|
Seq<Weapon> weapons = type.weapons;
|
||||||
|
weapons.each(Weapon::load);
|
||||||
|
weapons.removeAll(w -> !w.region.found());
|
||||||
|
|
||||||
|
for(Weapon weapon : weapons){
|
||||||
if(outlined.add(weapon.name) && has(weapon.name)){
|
if(outlined.add(weapon.name) && has(weapon.name)){
|
||||||
save(outline.get(get(weapon.name)), weapon.name + "-outline");
|
//only non-top weapons need separate outline sprites (this is mostly just mechs)
|
||||||
|
if(!weapon.top){
|
||||||
|
save(outline.get(get(weapon.name)), weapon.name + "-outline");
|
||||||
|
}else{
|
||||||
|
//replace weapon with outlined version, no use keeping standard around
|
||||||
|
outliner.get(weapon.region);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,9 +585,7 @@ public class Generators{
|
|||||||
|
|
||||||
//TODO draw under for layerOffset < 0
|
//TODO draw under for layerOffset < 0
|
||||||
//draw weapon outlines on base
|
//draw weapon outlines on base
|
||||||
for(Weapon weapon : type.weapons){
|
for(Weapon weapon : weapons){
|
||||||
weapon.load();
|
|
||||||
|
|
||||||
image.draw(weapon.flipSprite ? outline.get(get(weapon.region)).flipX() : outline.get(get(weapon.region)),
|
image.draw(weapon.flipSprite ? outline.get(get(weapon.region)).flipX() : outline.get(get(weapon.region)),
|
||||||
(int)(weapon.x / Draw.scl + image.width / 2f - weapon.region.width / 2f),
|
(int)(weapon.x / Draw.scl + image.width / 2f - weapon.region.width / 2f),
|
||||||
(int)(-weapon.y / Draw.scl + image.height / 2f - weapon.region.height / 2f),
|
(int)(-weapon.y / Draw.scl + image.height / 2f - weapon.region.height / 2f),
|
||||||
@@ -598,9 +606,7 @@ public class Generators{
|
|||||||
image.draw(cell, image.width / 2 - cell.width / 2, image.height / 2 - cell.height / 2, true);
|
image.draw(cell, image.width / 2 - cell.width / 2, image.height / 2 - cell.height / 2, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Weapon weapon : type.weapons){
|
for(Weapon weapon : weapons){
|
||||||
weapon.load();
|
|
||||||
|
|
||||||
Pixmap wepReg = weapon.top ? outline.get(get(weapon.region)) : get(weapon.region);
|
Pixmap wepReg = weapon.top ? outline.get(get(weapon.region)) : get(weapon.region);
|
||||||
if(weapon.flipSprite){
|
if(weapon.flipSprite){
|
||||||
wepReg = wepReg.flipX();
|
wepReg = wepReg.flipX();
|
||||||
|
|||||||