Added new unit type / Made reactor use cryo only / Balancing

This commit is contained in:
Anuken
2019-02-01 15:55:11 -05:00
parent f00d1f9505
commit 163ecb160a
23 changed files with 1325 additions and 1268 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

After

Width:  |  Height:  |  Size: 4.8 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -857,6 +857,7 @@ public class Blocks implements ContentList{
size = 3; size = 3;
health = 700; health = 700;
powerProduction = 11f; powerProduction = 11f;
consumes.liquid(Liquids.cryofluid, maxLiquidUse);
}}; }};
fusionReactor = new FusionReactor("fusion-reactor"){{ fusionReactor = new FusionReactor("fusion-reactor"){{

View File

@@ -46,7 +46,7 @@ public class Bullets implements ContentList{
waterShot, cryoShot, slagShot, oilShot, waterShot, cryoShot, slagShot, oilShot,
//environment, misc. //environment, misc.
fireball, basicFlame, fuseShot, driverBolt, healBullet, frag, fireball, basicFlame, fuseShot, driverBolt, healBullet, frag, eruptorShot,
//bombs //bombs
bombExplosive, bombIncendiary, bombOil, explode; bombExplosive, bombIncendiary, bombOil, explode;
@@ -559,6 +559,12 @@ public class Bullets implements ContentList{
drag = 0.03f; drag = 0.03f;
}}; }};
eruptorShot = new LiquidBulletType(Liquids.slag){{
damage = 2;
speed = 2.1f;
drag = 0.02f;
}};
oilShot = new LiquidBulletType(Liquids.oil){{ oilShot = new LiquidBulletType(Liquids.oil){{
speed = 2f; speed = 2f;
drag = 0.03f; drag = 0.03f;

View File

@@ -16,7 +16,7 @@ public class Liquids implements ContentList{
effect = StatusEffects.wet; effect = StatusEffects.wet;
}}; }};
slag = new Liquid("slag", Color.valueOf("ffcd66")){{ slag = new Liquid("slag", Color.valueOf("ffa166")){{
temperature = 1f; temperature = 1f;
viscosity = 0.8f; viscosity = 0.8f;
tier = 2; tier = 2;

View File

@@ -52,6 +52,7 @@ public class UnitTypes implements ContentList{
rotatespeed = 0.1f; rotatespeed = 0.1f;
weapon = Weapons.flamethrower; weapon = Weapons.flamethrower;
health = 440; health = 440;
immunities.add(StatusEffects.burning);
}}; }};
fortress = new UnitType("fortress", Fortress.class, Fortress::new){{ fortress = new UnitType("fortress", Fortress.class, Fortress::new){{
@@ -69,15 +70,16 @@ public class UnitTypes implements ContentList{
eruptor = new UnitType("eruptor", Eruptor.class, Eruptor::new){{ eruptor = new UnitType("eruptor", Eruptor.class, Eruptor::new){{
maxVelocity = 0.81f; maxVelocity = 0.81f;
speed = 0.17f; speed = 0.16f;
drag = 0.4f; drag = 0.4f;
mass = 5f; mass = 5f;
hitsize = 9f; hitsize = 9f;
rotatespeed = 0.07f; rotatespeed = 0.05f;
weaponOffsetX = 1; weaponOffsetX = 3;
targetAir = false; targetAir = false;
weapon = Weapons.eruption; weapon = Weapons.eruption;
health = 600; health = 600;
immunities = ObjectSet.with(StatusEffects.burning, StatusEffects.melting);
}}; }};
wraith = new UnitType("wraith", Wraith.class, Wraith::new){{ wraith = new UnitType("wraith", Wraith.class, Wraith::new){{

View File

@@ -11,11 +11,13 @@ public class Weapons implements ContentList{
@Override @Override
public void load(){ public void load(){
eruption = new Weapon("eruption"){{ eruption = new Weapon("eruption"){{
length = 1.5f; length = 3f;
reload = 14f; reload = 10f;
roundrobin = true; roundrobin = true;
ejectEffect = Fx.none; ejectEffect = Fx.none;
ammo = Bullets.slagShot; ammo = Bullets.eruptorShot;
recoil = 1f;
width = 9f;
}}; }};
blaster = new Weapon("blaster"){{ blaster = new Weapon("blaster"){{

View File

@@ -316,8 +316,8 @@ public class Zones implements ContentList{
impact = new Zone("impact0079", new MapGenerator("impact0079", 2) impact = new Zone("impact0079", new MapGenerator("impact0079", 2)
.decor( .decor(
new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01), new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01),
new Decoration(Blocks.metalFloor, Blocks.metalFloorDamaged, 0.02)) new Decoration(Blocks.metalFloor, Blocks.metalFloorDamaged, 0.02)
){{ ).drops(ItemStack.with(Items.copper, 2000, Items.lead, 1500, Items.silicon, 1000, Items.graphite, 1000, Items.pyratite, 2000, Items.titanium, 2000, Items.metaglass, 1000))){{
deployCost = ItemStack.with(Items.copper, 2500, Items.lead, 1000, Items.silicon, 300); deployCost = ItemStack.with(Items.copper, 2500, Items.lead, 1000, Items.silicon, 300);
startingItems = ItemStack.with(Items.copper, 2000, Items.lead, 500, Items.silicon, 200); startingItems = ItemStack.with(Items.copper, 2000, Items.lead, 500, Items.silicon, 200);
itemRequirements = ItemStack.with(Items.silicon, 8000, Items.titanium, 6000, Items.graphite, 4000); itemRequirements = ItemStack.with(Items.silicon, 8000, Items.titanium, 6000, Items.graphite, 4000);

View File

@@ -27,7 +27,7 @@ public class StatusController implements Saveable{
private float armorMultiplier; private float armorMultiplier;
public void handleApply(Unit unit, StatusEffect effect, float duration){ public void handleApply(Unit unit, StatusEffect effect, float duration){
if(effect == StatusEffects.none) return; //don't apply empty effects if(effect == StatusEffects.none || unit.isImmune(effect)) return; //don't apply empty or immune effects
if(statuses.size > 0){ if(statuses.size > 0){
//check for opposite effects //check for opposite effects

View File

@@ -184,6 +184,10 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
damage(1); damage(1);
} }
public boolean isImmune(StatusEffect effect){
return false;
}
public boolean isOutOfBounds(){ public boolean isOutOfBounds(){
return x < -worldBounds || y < -worldBounds || x > world.width() * tilesize + worldBounds || y > world.height() * tilesize + worldBounds; return x < -worldBounds || y < -worldBounds || x > world.width() * tilesize + worldBounds || y > world.height() * tilesize + worldBounds;
} }

View File

@@ -66,7 +66,7 @@ public abstract class BulletType extends Content{
/**Returns maximum distance the bullet this bullet type has can travel.*/ /**Returns maximum distance the bullet this bullet type has can travel.*/
public float range(){ public float range(){
return speed * lifetime; return speed * lifetime * (1f - drag);
} }
public boolean collides(Bullet bullet, Tile tile){ public boolean collides(Bullet bullet, Tile tile){

View File

@@ -33,6 +33,11 @@ public class LiquidBulletType extends BulletType{
knockback = 0.5f; knockback = 0.5f;
} }
@Override
public float range(){
return speed * lifetime /2f;
}
@Override @Override
public void update(Bullet b) { public void update(Bullet b) {
super.update(b); super.update(b);

View File

@@ -152,7 +152,7 @@ public class Fire extends TimedEntity implements SaveTrait, SyncTrait, Poolable{
entity.damage(0.4f); entity.damage(0.4f);
} }
Damage.damageUnits(null, tile.worldx(), tile.worldy(), tilesize, 3f, Damage.damageUnits(null, tile.worldx(), tile.worldy(), tilesize, 3f,
unit -> !unit.isFlying(), unit -> !unit.isFlying() && !unit.isImmune(StatusEffects.burning),
unit -> unit.applyEffect(StatusEffects.burning, 60 * 5)); unit -> unit.applyEffect(StatusEffects.burning, 60 * 5));
} }
} }

View File

@@ -212,7 +212,7 @@ public class Puddle extends SolidEntity implements SaveTrait, Poolable, DrawTrai
} }
}); });
if(liquid.temperature > 0.7f && tile.entity != null && Mathf.chance(0.3 * Time.delta())){ if(liquid.temperature > 0.7f && (tile.target().entity != null) && Mathf.chance(0.3 * Time.delta())){
Fire.create(tile); Fire.create(tile);
} }

View File

@@ -29,6 +29,7 @@ import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.type.ContentType; import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.StatusEffect;
import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.type.Weapon;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.meta.BlockFlag; import io.anuke.mindustry.world.meta.BlockFlag;
@@ -205,6 +206,11 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
} }
} }
@Override
public boolean isImmune(StatusEffect effect){
return type.immunities.contains(effect);
}
@Override @Override
public boolean isValid(){ public boolean isValid(){
return super.isValid() && isAdded(); return super.isValid() && isAdded();

View File

@@ -3,7 +3,6 @@ package io.anuke.mindustry.entities.units;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.collection.ObjectSet; import io.anuke.arc.collection.ObjectSet;
import io.anuke.arc.function.Supplier; import io.anuke.arc.function.Supplier;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.Log; import io.anuke.arc.util.Log;
@@ -15,6 +14,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.type.ContentType; import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.StatusEffect;
import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.type.Weapon;
import io.anuke.mindustry.ui.ContentDisplay; import io.anuke.mindustry.ui.ContentDisplay;
@@ -42,7 +42,7 @@ public class UnitType extends UnlockableContent{
public float buildPower = 0.3f, minePower = 0.7f; public float buildPower = 0.3f, minePower = 0.7f;
public Weapon weapon = Weapons.blaster; public Weapon weapon = Weapons.blaster;
public float weaponOffsetX, weaponOffsetY; public float weaponOffsetX, weaponOffsetY;
public Color trailColor = Color.valueOf("ffa665"); public ObjectSet<StatusEffect> immunities = new ObjectSet<>();
public TextureRegion iconRegion, legRegion, baseRegion, region; public TextureRegion iconRegion, legRegion, baseRegion, region;

View File

@@ -46,6 +46,11 @@ public class MapGenerator extends Generator{
this.enemySpawns = enemySpawns; this.enemySpawns = enemySpawns;
} }
public MapGenerator drops(ItemStack[] drops){
this.storageDrops = drops;
return this;
}
public MapGenerator decor(Decoration... decor){ public MapGenerator decor(Decoration... decor){
this.decorations.addAll(decor); this.decorations.addAll(decor);
return this; return this;

View File

@@ -6,17 +6,16 @@ import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.util.Time;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.mindustry.content.Items; import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.content.Items;
import io.anuke.mindustry.entities.Damage; import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.meta.BlockStat; import io.anuke.mindustry.world.meta.BlockStat;
import io.anuke.mindustry.world.meta.StatUnit; import io.anuke.mindustry.world.meta.StatUnit;
import io.anuke.mindustry.world.meta.values.LiquidFilterValue;
import java.io.DataInput; import java.io.DataInput;
import java.io.DataOutput; import java.io.DataOutput;
@@ -63,11 +62,9 @@ public class NuclearReactor extends PowerGenerator{
@Override @Override
public void setStats(){ public void setStats(){
super.setStats(); super.setStats();
stats.add(BlockStat.inputLiquid, new LiquidFilterValue(liquid -> liquid.temperature <= 0.5f));
stats.remove(BlockStat.basePowerGeneration); stats.remove(BlockStat.basePowerGeneration);
// Display the power which will be produced at 50% efficiency stats.add(BlockStat.basePowerGeneration, powerProduction * 60f, StatUnit.powerSecond);
stats.add(BlockStat.basePowerGeneration, powerProduction * 60f * 0.5f, StatUnit.powerSecond);
} }
@Override @Override
@@ -76,7 +73,7 @@ public class NuclearReactor extends PowerGenerator{
int fuel = entity.items.get(consumes.item()); int fuel = entity.items.get(consumes.item());
float fullness = (float) fuel / itemCapacity; float fullness = (float) fuel / itemCapacity;
entity.productionEfficiency = fullness / 2.0f; // Currently, efficiency of 0.5 = 100% entity.productionEfficiency = fullness;
if(fuel > 0){ if(fuel > 0){
entity.heat += fullness * heating * Math.min(entity.delta(), 4f); entity.heat += fullness * heating * Math.min(entity.delta(), 4f);
@@ -153,12 +150,6 @@ public class NuclearReactor extends PowerGenerator{
} }
} }
@Override
public boolean acceptLiquid(Tile tile, Tile source, Liquid liquid, float amount){
return tile.entity.liquids.get(liquid) + amount < liquidCapacity && liquid.temperature <= 0.5f &&
(tile.entity.liquids.current() == liquid || tile.entity.liquids.get(tile.entity.liquids.current()) < 0.01f);
}
@Override @Override
public void draw(Tile tile){ public void draw(Tile tile){
super.draw(tile); super.draw(tile);