Mech palette change, delta mech implementation
|
After Width: | Height: | Size: 363 B |
|
After Width: | Height: | Size: 370 B |
|
Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 177 B After Width: | Height: | Size: 181 B |
|
Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 320 B |
|
Before Width: | Height: | Size: 309 B After Width: | Height: | Size: 289 B |
|
Before Width: | Height: | Size: 234 B |
|
Before Width: | Height: | Size: 314 B After Width: | Height: | Size: 321 B |
|
Before Width: | Height: | Size: 253 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 283 B |
|
Before Width: | Height: | Size: 281 B |
|
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 344 B |
|
Before Width: | Height: | Size: 250 B |
|
Before Width: | Height: | Size: 233 B |
|
Before Width: | Height: | Size: 261 B |
|
Before Width: | Height: | Size: 244 B |
|
Before Width: | Height: | Size: 268 B |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 122 KiB |
|
|
@ -9,6 +9,7 @@ import io.anuke.mindustry.type.ContentList;
|
|||
|
||||
public class AmmoTypes implements ContentList {
|
||||
public static AmmoType bulletTungsten, bulletLead, bulletCarbide, bulletThorium, bulletSilicon, bulletThermite,
|
||||
shotgunTungsten,
|
||||
flakLead, flakExplosive, flakPlastic, flakSurge, missileExplosive, missileIncindiary, missileSurge,
|
||||
artilleryCarbide, artilleryThorium, artilleryPlastic, artilleryHoming, artilleryIncindiary,
|
||||
basicFlame, lancerLaser, lightning, spectreLaser, meltdownLaser, fuseShotgun, oil, water, lava, cryofluid;
|
||||
|
|
@ -54,6 +55,14 @@ public class AmmoTypes implements ContentList {
|
|||
inaccuracy = 3f;
|
||||
}};
|
||||
|
||||
//shotgun (delta mech)
|
||||
|
||||
shotgunTungsten = new AmmoType(Items.tungsten, WeaponBullets.tungstenShotgun, 2) {{
|
||||
shootEffect = ShootFx.shootBig;
|
||||
smokeEffect = ShootFx.shootBigSmoke;
|
||||
recoil = 1f;
|
||||
}};
|
||||
|
||||
//flak
|
||||
|
||||
flakLead = new AmmoType(Items.lead, FlakBullets.lead, 5) {{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
package io.anuke.mindustry.content;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.game.Content;
|
||||
import io.anuke.mindustry.graphics.Palette;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
import io.anuke.mindustry.type.Mech;
|
||||
import io.anuke.mindustry.type.Upgrade;
|
||||
|
|
@ -18,11 +20,21 @@ public class Mechs implements ContentList {
|
|||
alpha = new Mech("alpha-mech", false){{
|
||||
drillPower = 1;
|
||||
speed = 0.5f;
|
||||
weapon = Weapons.blaster;
|
||||
trailColor = Palette.lightTrail;
|
||||
}};
|
||||
|
||||
delta = new Mech("delta-mech", false){{
|
||||
drillPower = -1;
|
||||
speed = 0.6f;
|
||||
speed = 0.63f;
|
||||
boostSpeed = 0.86f;
|
||||
itemCapacity = 15;
|
||||
armor = 30f;
|
||||
weaponOffsetX = -1;
|
||||
weaponOffsetY = -1;
|
||||
weapon = Weapons.shockgun;
|
||||
ammoCapacity = 50;
|
||||
trailColor = Color.valueOf("d3ddff");
|
||||
}};
|
||||
|
||||
tau = new Mech("tau-mech", false){{
|
||||
|
|
@ -42,6 +54,7 @@ public class Mechs implements ContentList {
|
|||
drag = 0.1f;
|
||||
weaponOffsetX = -1;
|
||||
weaponOffsetY = -1;
|
||||
trailColor = Palette.lightTrail;
|
||||
}};
|
||||
|
||||
trident = new Mech("trident-ship", true){{
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public class Recipes implements ContentList{
|
|||
new Recipe(crafting, CraftingBlocks.siliconsmelter, new ItemStack(Items.tungsten, 60), new ItemStack(Items.lead, 50));
|
||||
|
||||
//other crafting
|
||||
new Recipe(crafting, CraftingBlocks.phaseweaver, new ItemStack(Items.silicon, 160), new ItemStack(Items.lead, 160), new ItemStack(Items.thorium, 150));
|
||||
new Recipe(crafting, CraftingBlocks.phaseweaver, new ItemStack(Items.silicon, 160), new ItemStack(Items.lead, 240), new ItemStack(Items.thorium, 150));
|
||||
//TODO implement alloy smelter
|
||||
// new Recipe(crafting, CraftingBlocks.alloySmelter, new ItemStack(Items.silicon, 160), new ItemStack(Items.lead, 160), new ItemStack(Items.thorium, 140));
|
||||
|
||||
|
|
@ -69,6 +69,7 @@ public class Recipes implements ContentList{
|
|||
new Recipe(crafting, CraftingBlocks.pulverizer, new ItemStack(Items.tungsten, 60), new ItemStack(Items.lead, 50));
|
||||
new Recipe(crafting, CraftingBlocks.thermiteMixer, new ItemStack(Items.tungsten, 100), new ItemStack(Items.lead, 50));
|
||||
new Recipe(crafting, CraftingBlocks.blastMixer, new ItemStack(Items.tungsten, 60), new ItemStack(Items.lead, 60), new ItemStack(Items.carbide, 40));
|
||||
new Recipe(crafting, CraftingBlocks.cryofluidmixer, new ItemStack(Items.lead, 130), new ItemStack(Items.silicon, 80), new ItemStack(Items.titanium, 90));
|
||||
|
||||
//processing
|
||||
new Recipe(crafting, CraftingBlocks.biomatterCompressor, new ItemStack(Items.lead, 70), new ItemStack(Items.silicon, 60));
|
||||
|
|
@ -107,6 +108,8 @@ public class Recipes implements ContentList{
|
|||
new Recipe(units, UpgradeBlocks.dartFactory, new ItemStack(Items.lead, 150), new ItemStack(Items.silicon, 200), new ItemStack(Items.titanium, 240))
|
||||
.setDesktop(); //dart is desktop only, because it's the starter mobile ship
|
||||
|
||||
new Recipe(units, UpgradeBlocks.deltaFactory, new ItemStack(Items.carbide, 160), new ItemStack(Items.silicon, 220), new ItemStack(Items.titanium, 250)).setDesktop();
|
||||
|
||||
//new Recipe(units, UpgradeBlocks.deltaFactory, new ItemStack(Items.tungsten, 30), new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 30));
|
||||
|
||||
//actual unit related stuff
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import io.anuke.mindustry.type.Upgrade;
|
|||
import io.anuke.mindustry.type.Weapon;
|
||||
|
||||
public class Weapons implements ContentList {
|
||||
public static Weapon blaster, blaster2, blaster3, blaster4;
|
||||
public static Weapon blaster, shockgun, sapper, swarmer;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
|
|
@ -21,15 +21,19 @@ public class Weapons implements ContentList {
|
|||
setAmmo(AmmoTypes.bulletLead);
|
||||
}};
|
||||
|
||||
blaster2 = new Weapon("clustergun") {{
|
||||
length = 1.5f;
|
||||
reload = 13f;
|
||||
shockgun = new Weapon("shockgun") {{
|
||||
length = 1f;
|
||||
reload = 50f;
|
||||
roundrobin = true;
|
||||
shots = 6;
|
||||
inaccuracy = 15f;
|
||||
recoil = 2f;
|
||||
velocityRnd = 0.7f;
|
||||
ejectEffect = ShootFx.shellEjectSmall;
|
||||
setAmmo(AmmoTypes.bulletLead);
|
||||
setAmmo(AmmoTypes.shotgunTungsten);
|
||||
}};
|
||||
|
||||
blaster3 = new Weapon("shockgun") {{
|
||||
sapper = new Weapon("sapper") {{
|
||||
length = 1.5f;
|
||||
reload = 12f;
|
||||
roundrobin = true;
|
||||
|
|
@ -37,7 +41,7 @@ public class Weapons implements ContentList {
|
|||
setAmmo(AmmoTypes.bulletCarbide);
|
||||
}};
|
||||
|
||||
blaster4 = new Weapon("vulcan") {{
|
||||
swarmer = new Weapon("swarmer") {{
|
||||
length = 1.5f;
|
||||
reload = 10f;
|
||||
roundrobin = true;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
package io.anuke.mindustry.content.bullets;
|
||||
|
||||
import io.anuke.mindustry.entities.bullet.BasicBulletType;
|
||||
import io.anuke.mindustry.entities.bullet.BulletType;
|
||||
|
||||
public class WeaponBullets extends BulletList {
|
||||
public static BulletType tungstenShotgun;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
tungstenShotgun = new BasicBulletType(5f, 8, "bullet") {
|
||||
{
|
||||
bulletWidth = 8f;
|
||||
bulletHeight = 9f;
|
||||
bulletShrink = 0.6f;
|
||||
lifetime = 30f;
|
||||
drag = 0.04f;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -58,6 +58,7 @@ public class ContentLoader {
|
|||
new MissileBullets(),
|
||||
new StandardBullets(),
|
||||
new TurretBullets(),
|
||||
new WeaponBullets(),
|
||||
|
||||
//ammotypes
|
||||
new AmmoTypes(),
|
||||
|
|
|
|||
|
|
@ -317,7 +317,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||
Draw.rect(mech.region, x, y, rotation -90);
|
||||
|
||||
for (int i : Mathf.signs) {
|
||||
float tra = rotation - 90, trY = - mech.weapon.getRecoil(this, i > 0)*1.5f + mech.weaponOffsetY;
|
||||
float tra = rotation - 90, trY = - mech.weapon.getRecoil(this, i > 0) + mech.weaponOffsetY;
|
||||
float w = i > 0 ? -12 : 12;
|
||||
Draw.rect(mech.weapon.equipRegion,
|
||||
x + Angles.trnsx(tra, mech.weaponOffsetX * i, trY),
|
||||
|
|
@ -357,7 +357,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||
float wobblyness = 0.6f;
|
||||
trail.update(x + Angles.trnsx(rotation + 180f, 5f) + Mathf.range(wobblyness),
|
||||
y + Angles.trnsy(rotation + 180f, 5f) + Mathf.range(wobblyness));
|
||||
trail.draw(Palette.lighterOrange, Palette.lightishOrange, 5f * (isFlying() ? 1f : boostHeat));
|
||||
trail.draw(mech.trailColor, mech.trailColor, 5f * (isFlying() ? 1f : boostHeat));
|
||||
}else{
|
||||
trail.clear();
|
||||
}
|
||||
|
|
@ -676,6 +676,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||
stream.writeBoolean(isLocal);
|
||||
|
||||
if(isLocal){
|
||||
stream.writeByte(mech.id);
|
||||
stream.writeByte(playerIndex);
|
||||
super.writeSave(stream, false);
|
||||
}
|
||||
|
|
@ -686,8 +687,10 @@ public class Player extends Unit implements BuilderTrait, CarryTrait {
|
|||
boolean local = stream.readBoolean();
|
||||
|
||||
if(local){
|
||||
byte mechid = stream.readByte();
|
||||
int index = stream.readByte();
|
||||
players[index].readSaveSuper(stream);
|
||||
players[index].mech = Upgrade.getByID(mechid);
|
||||
players[index].dead = false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{
|
|||
|
||||
@Override
|
||||
public void drawOver() {
|
||||
trail.draw(Palette.lightFlame, Palette.lightOrange, 5f);
|
||||
trail.draw(Palette.lightTrail, Palette.lightTrail, 5f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ public class Drone extends FlyingUnit implements BuilderTrait {
|
|||
|
||||
@Override
|
||||
public void drawOver() {
|
||||
trail.draw(Palette.lighterOrange, Palette.lightishOrange, 3f);
|
||||
trail.draw(Palette.lightTrail, Palette.lightTrail, 3f);
|
||||
|
||||
if(target instanceof TileEntity && state.is(repair)){
|
||||
float len = 5f;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ public class Palette {
|
|||
public static final Color power = Color.valueOf("fbd367");
|
||||
public static final Color placing = Color.valueOf("616161");
|
||||
|
||||
public static final Color lightTrail = Color.valueOf("ffe2a9");
|
||||
|
||||
public static final Color redSpark = Color.valueOf("fbb97f");
|
||||
public static final Color orangeSpark = Color.valueOf("d2b29c");
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package io.anuke.mindustry.type;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import io.anuke.mindustry.content.Weapons;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
|
|
@ -19,6 +20,7 @@ public class Mech extends Upgrade {
|
|||
public float carryWeight = 10f;
|
||||
public float buildPower = 1f;
|
||||
public boolean canRepair = false;
|
||||
public Color trailColor = Color.valueOf("ffd37f");
|
||||
|
||||
public float weaponOffsetX, weaponOffsetY;
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ public class Weapon extends Upgrade {
|
|||
protected float inaccuracy = 0f;
|
||||
/**intensity and duration of each shot's screen shake*/
|
||||
protected float shake = 0f;
|
||||
/**visual weapon knockback.*/
|
||||
protected float recoil = 1.5f;
|
||||
/**shoot barrel length*/
|
||||
protected float length = 3f;
|
||||
/**fraction of velocity that is random*/
|
||||
protected float velocityRnd = 0f;
|
||||
/**whether to shoot the weapons in different arms one after another, rather than all at once*/
|
||||
protected boolean roundrobin = false;
|
||||
/**translator for vector calulations*/
|
||||
|
|
@ -76,7 +80,7 @@ public class Weapon extends Upgrade {
|
|||
}
|
||||
|
||||
public float getRecoil(Player player, boolean left){
|
||||
return 1f-Mathf.clamp(player.timer.getTime(left ? Player.timerShootLeft : Player.timerShootRight)/reload);
|
||||
return (1f-Mathf.clamp(player.timer.getTime(left ? Player.timerShootLeft : Player.timerShootRight)/reload))*recoil;
|
||||
}
|
||||
|
||||
public float getReload(){
|
||||
|
|
@ -106,7 +110,7 @@ public class Weapon extends Upgrade {
|
|||
|
||||
void bullet(Unit owner, float x, float y, float angle){
|
||||
tr.trns(angle, 3f);
|
||||
Bullet.create(owner.inventory.getAmmo().bullet, owner, x + tr.x, y + tr.y, angle);
|
||||
Bullet.create(owner.inventory.getAmmo().bullet, owner, owner.getTeam(), x + tr.x, y + tr.y, angle, (1f-velocityRnd) + Mathf.random(velocityRnd));
|
||||
}
|
||||
|
||||
@Remote(targets = Loc.server, called = Loc.both, in = In.entities, unreliable = true)
|
||||
|
|
|
|||
|
|
@ -163,6 +163,7 @@ public class MechFactory extends Block{
|
|||
entity.player.heal();
|
||||
entity.open = true;
|
||||
entity.player.setDead(false);
|
||||
entity.player.inventory.clear();
|
||||
entity.player = null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,8 +55,8 @@ public class Generators {
|
|||
image.draw(mech.region);
|
||||
}
|
||||
|
||||
image.draw(mech.weapon.equipRegion, false, false);
|
||||
image.draw(mech.weapon.equipRegion, true, false);
|
||||
image.draw(mech.weapon.equipRegion, -(int)mech.weaponOffsetX, (int)mech.weaponOffsetY, false, false);
|
||||
image.draw(mech.weapon.equipRegion, (int)mech.weaponOffsetX, (int)mech.weaponOffsetY, true, false);
|
||||
|
||||
|
||||
image.save("mech-icon-" + mech.name);
|
||||
|
|
|
|||