Mech descriptions / Balancing / Crash fix / Physics fix
This commit is contained in:
@@ -26,7 +26,7 @@ allprojects {
|
|||||||
appName = 'Mindustry'
|
appName = 'Mindustry'
|
||||||
gdxVersion = '1.9.8'
|
gdxVersion = '1.9.8'
|
||||||
roboVMVersion = '2.3.0'
|
roboVMVersion = '2.3.0'
|
||||||
uCoreVersion = 'f5cecd22475aedd70af8d6378f9061e8967403de'
|
uCoreVersion = 'b75be1b8a4758e3f80f46d3bb598e82fcdd8c679'
|
||||||
|
|
||||||
getVersionString = {
|
getVersionString = {
|
||||||
String buildVersion = getBuildVersion()
|
String buildVersion = getBuildVersion()
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 315 B After Width: | Height: | Size: 322 B |
@@ -431,14 +431,35 @@ liquid.lava.name=Lava
|
|||||||
liquid.oil.name=Oil
|
liquid.oil.name=Oil
|
||||||
liquid.cryofluid.name=Cryofluid
|
liquid.cryofluid.name=Cryofluid
|
||||||
|
|
||||||
mech.alpha.name=Alpha
|
mech.alpha-mech.name=Alpha
|
||||||
mech.delta.name=Delta
|
mech.alpha-mech.weapon=Heavy Repeater
|
||||||
mech.tau.name=Tau
|
mech.alpha-mech.ability=Drone Swarm
|
||||||
mech.omega.name=Omega
|
mech.alpha-mech.description=The standard mech. Has decent speed and damage output; can create up to 3 drones for increased offensive capability.
|
||||||
mech.dart.name=Dart
|
mech.delta-mech.name=Delta
|
||||||
mech.javelin.name=Javelin
|
mech.delta-mech.weapon=Arc Generator
|
||||||
mech.trident.name=Trident
|
mech.delta-mech.ability=Discharge
|
||||||
mech.glaive.name=Glaive
|
mech.delta-mech.description=A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons.
|
||||||
|
mech.tau-mech.name=Tau
|
||||||
|
mech.tau-mech.weapon=Restruct Laser
|
||||||
|
mech.tau-mech.ability=Repair Burst
|
||||||
|
mech.tau-mech.description=The support mech. Heals allied blocks by shooting at them. Can extinguish fires and heal allies in a radius with its repair ability.
|
||||||
|
mech.omega-mech.name=Omega
|
||||||
|
mech.omega-mech.weapon=Swarm Missiles
|
||||||
|
mech.omega-mech.ability=Armored Configuration
|
||||||
|
mech.omega-mech.description=A bulky and well-armored mech, made for front-line assaults. Its armor ability can block up to 90% of incoming damage.
|
||||||
|
mech.dart-ship.name=Dart
|
||||||
|
mech.dart-ship.weapon=Repeater
|
||||||
|
mech.dart-ship.description=The standard ship. Reasonably fast and light, but has little offensive capability and low mining speed.
|
||||||
|
mech.javelin-ship.name=Javelin
|
||||||
|
mech.javelin-ship.description=A hit-and-run strike ship. While initially slow, it can accelerate to great speeds and fly by enemy outposts, dealing large amounts of damage with its lightning ability and missiles.
|
||||||
|
mech.javelin-ship.weapon=Burst Missiles
|
||||||
|
mech.javelin-ship.ability=Discharge Booster
|
||||||
|
mech.trident-ship.name=Trident
|
||||||
|
mech.trident-ship.description=A heavy bomber. Reasonably well armored.
|
||||||
|
mech.trident-ship.weapon=Bomb Bay
|
||||||
|
mech.glaive-ship.name=Glaive
|
||||||
|
mech.glaive-ship.description=A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed.
|
||||||
|
mech.glaive-ship.weapon=Flame Repeater
|
||||||
|
|
||||||
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
|
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
|
||||||
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
|
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
|
||||||
@@ -449,6 +470,14 @@ text.item.hardness=[LIGHT_GRAY]Hardness: {0}
|
|||||||
text.unit.health=[LIGHT_GRAY]Health: {0}
|
text.unit.health=[LIGHT_GRAY]Health: {0}
|
||||||
text.unit.speed=[LIGHT_GRAY]Speed: {0}
|
text.unit.speed=[LIGHT_GRAY]Speed: {0}
|
||||||
|
|
||||||
|
text.mech.weapon=[LIGHT_GRAY]Weapon: {0}
|
||||||
|
text.mech.armor=[LIGHT_GRAY]Armor: {0}
|
||||||
|
text.mech.itemcapacity=[LIGHT_GRAY]Item Capacity: {0}
|
||||||
|
text.mech.minespeed=[LIGHT_GRAY]Mining Speed: {0}
|
||||||
|
text.mech.minepower=[LIGHT_GRAY]Mining Power: {0}
|
||||||
|
text.mech.ability=[LIGHT_GRAY]Ability: {0}
|
||||||
|
|
||||||
|
|
||||||
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
|
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
|
||||||
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
|
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
|
||||||
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
|
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
|
||||||
|
|||||||
30
core/assets/shaders/menu.fragment
Normal file
30
core/assets/shaders/menu.fragment
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#ifdef GL_ES
|
||||||
|
precision mediump float;
|
||||||
|
precision mediump int;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform sampler2D u_texture;
|
||||||
|
uniform float resolution;
|
||||||
|
uniform vec4 u_color;
|
||||||
|
|
||||||
|
varying vec4 v_color;
|
||||||
|
varying vec2 v_texCoord;
|
||||||
|
|
||||||
|
bool hex(vec2 p) {
|
||||||
|
p.x *= 0.57735*2.0;
|
||||||
|
p.y += mod(floor(p.x), 2.0)*0.5;
|
||||||
|
p = abs((mod(p, 1.0) - 0.5));
|
||||||
|
return abs(max(p.x*1.5 + p.y, p.y*2.0) - 1.0) > 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 palette(float i) {
|
||||||
|
return vec3(1.0, 1.0, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
|
||||||
|
bool h = hex(v_texCoord.xy/100.0);
|
||||||
|
|
||||||
|
gl_FragColor.rgb = vec3(h,h,h);
|
||||||
|
gl_FragColor.a = 1.0;
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 140 KiB |
@@ -137,7 +137,7 @@ public class Mechs implements ContentList{
|
|||||||
boostSpeed = 0.8f;
|
boostSpeed = 0.8f;
|
||||||
weapon = Weapons.healBlaster;
|
weapon = Weapons.healBlaster;
|
||||||
maxSpeed = 5f;
|
maxSpeed = 5f;
|
||||||
armor = 30f;
|
armor = 35f;
|
||||||
altChargeAlpha = 0.05f;
|
altChargeAlpha = 0.05f;
|
||||||
trailColorTo = Palette.heal;
|
trailColorTo = Palette.heal;
|
||||||
}
|
}
|
||||||
@@ -251,6 +251,7 @@ public class Mechs implements ContentList{
|
|||||||
maxSpeed = 3f;
|
maxSpeed = 3f;
|
||||||
drag = 0.1f;
|
drag = 0.1f;
|
||||||
armor = 10f;
|
armor = 10f;
|
||||||
|
weapon = Weapons.blasterSmall;
|
||||||
weaponOffsetX = -1;
|
weaponOffsetX = -1;
|
||||||
weaponOffsetY = -1;
|
weaponOffsetY = -1;
|
||||||
trailColor = Palette.lightTrail;
|
trailColor = Palette.lightTrail;
|
||||||
|
|||||||
@@ -13,7 +13,9 @@ public class Recipes implements ContentList{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
//WALLS
|
//DEFENSE
|
||||||
|
|
||||||
|
//walls
|
||||||
new Recipe(defense, DefenseBlocks.copperWall, new ItemStack(Items.copper, 12));
|
new Recipe(defense, DefenseBlocks.copperWall, new ItemStack(Items.copper, 12));
|
||||||
new Recipe(defense, DefenseBlocks.copperWallLarge, new ItemStack(Items.copper, 12 * 4));
|
new Recipe(defense, DefenseBlocks.copperWallLarge, new ItemStack(Items.copper, 12 * 4));
|
||||||
|
|
||||||
@@ -29,7 +31,7 @@ public class Recipes implements ContentList{
|
|||||||
new Recipe(defense, DefenseBlocks.door, new ItemStack(Items.densealloy, 12), new ItemStack(Items.silicon, 8));
|
new Recipe(defense, DefenseBlocks.door, new ItemStack(Items.densealloy, 12), new ItemStack(Items.silicon, 8));
|
||||||
new Recipe(defense, DefenseBlocks.doorLarge, new ItemStack(Items.densealloy, 12 * 4), new ItemStack(Items.silicon, 8 * 4));
|
new Recipe(defense, DefenseBlocks.doorLarge, new ItemStack(Items.densealloy, 12 * 4), new ItemStack(Items.silicon, 8 * 4));
|
||||||
|
|
||||||
//cores
|
//projectors
|
||||||
new Recipe(defense, DefenseBlocks.mendProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250));
|
new Recipe(defense, DefenseBlocks.mendProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250));
|
||||||
|
|
||||||
//TURRETS
|
//TURRETS
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class UnitTypes implements ContentList{
|
|||||||
speed = 0.5f;
|
speed = 0.5f;
|
||||||
maxVelocity = 1.6f;
|
maxVelocity = 1.6f;
|
||||||
range = 40f;
|
range = 40f;
|
||||||
health = 30;
|
health = 35;
|
||||||
weapon = Weapons.droneBlaster;
|
weapon = Weapons.droneBlaster;
|
||||||
trailColor = Color.valueOf("ffd37f");
|
trailColor = Color.valueOf("ffd37f");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import io.anuke.mindustry.type.ContentList;
|
|||||||
import io.anuke.mindustry.type.Weapon;
|
import io.anuke.mindustry.type.Weapon;
|
||||||
|
|
||||||
public class Weapons implements ContentList{
|
public class Weapons implements ContentList{
|
||||||
public static Weapon blaster, glaiveBlaster, droneBlaster, healBlaster, chainBlaster, shockgun, sapper, swarmer, bomber, bomberTrident, flakgun, flamethrower, missiles;
|
public static Weapon blaster, blasterSmall, glaiveBlaster, droneBlaster, healBlaster, chainBlaster, shockgun, sapper, swarmer, bomber, bomberTrident, flakgun, flamethrower, missiles;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
@@ -21,6 +21,14 @@ public class Weapons implements ContentList{
|
|||||||
ammo = AmmoTypes.bulletMech;
|
ammo = AmmoTypes.bulletMech;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
blasterSmall = new Weapon("blaster"){{
|
||||||
|
length = 1.5f;
|
||||||
|
reload = 15f;
|
||||||
|
roundrobin = true;
|
||||||
|
ejectEffect = ShootFx.shellEjectSmall;
|
||||||
|
ammo = AmmoTypes.bulletCopper;
|
||||||
|
}};
|
||||||
|
|
||||||
glaiveBlaster = new Weapon("bomber"){{
|
glaiveBlaster = new Weapon("bomber"){{
|
||||||
length = 1.5f;
|
length = 1.5f;
|
||||||
reload = 10f;
|
reload = 10f;
|
||||||
@@ -31,7 +39,7 @@ public class Weapons implements ContentList{
|
|||||||
|
|
||||||
droneBlaster = new Weapon("blaster"){{
|
droneBlaster = new Weapon("blaster"){{
|
||||||
length = 2f;
|
length = 2f;
|
||||||
reload = 40f;
|
reload = 30f;
|
||||||
width = 1f;
|
width = 1f;
|
||||||
roundrobin = true;
|
roundrobin = true;
|
||||||
ejectEffect = ShootFx.shellEjectSmall;
|
ejectEffect = ShootFx.shellEjectSmall;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class StandardBullets extends BulletList implements ContentList{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
glaive = new BasicBulletType(4f, 6, "bullet"){
|
glaive = new BasicBulletType(4f, 7.5f, "bullet"){
|
||||||
{
|
{
|
||||||
bulletWidth = 10f;
|
bulletWidth = 10f;
|
||||||
bulletHeight = 12f;
|
bulletHeight = 12f;
|
||||||
|
|||||||
@@ -1,113 +1,16 @@
|
|||||||
package io.anuke.mindustry.maps.generation;
|
package io.anuke.mindustry.maps.generation;
|
||||||
|
|
||||||
import com.badlogic.gdx.math.Rectangle;
|
import io.anuke.mindustry.content.blocks.StorageBlocks;
|
||||||
import com.badlogic.gdx.math.Vector2;
|
|
||||||
import com.badlogic.gdx.utils.Array;
|
|
||||||
import io.anuke.mindustry.content.blocks.Blocks;
|
|
||||||
import io.anuke.mindustry.content.blocks.DefenseBlocks;
|
|
||||||
import io.anuke.mindustry.content.blocks.UnitBlocks;
|
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.maps.generation.StructureFormat.StructBlock;
|
|
||||||
import io.anuke.mindustry.type.AmmoType;
|
|
||||||
import io.anuke.mindustry.type.Item;
|
|
||||||
import io.anuke.mindustry.world.Block;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
|
||||||
import io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret;
|
|
||||||
import io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret;
|
|
||||||
import io.anuke.ucore.util.Mathf;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.world;
|
|
||||||
|
|
||||||
public class FortressGenerator{
|
public class FortressGenerator{
|
||||||
private final static int minCoreDst = 60;
|
private final static int minCoreDst = 60;
|
||||||
|
|
||||||
private static Structure[] structures;
|
|
||||||
private static Structure[] bases;
|
|
||||||
|
|
||||||
private int enemyX, enemyY, coreX, coreY;
|
private int enemyX, enemyY, coreX, coreY;
|
||||||
private Team team;
|
private Team team;
|
||||||
private Generation gen;
|
private Generation gen;
|
||||||
|
|
||||||
private static void init(){
|
|
||||||
if(structures != null) return;
|
|
||||||
|
|
||||||
structures = new Structure[]{
|
|
||||||
/*
|
|
||||||
//tiny duo outpost
|
|
||||||
new Structure(0.03f, Items.tungsten, "BAMADnR1bmdzdGVuLWRyaWxsAgADZHVvAQANdHVuZ3N0ZW4td2FsbAAAA2FpcgMFAQABAwEDAQMBAAEAAgMDAwIDAQABAAEBAQEBAQEA"),
|
|
||||||
|
|
||||||
//basic outposts with duos
|
|
||||||
new Structure(0.03f, Items.tungsten, "BAIAA2R1bwMADWNhcmJpZGUtZHJpbGwBAA10dW5nc3Rlbi13YWxsAAADYWlyBQUAAAEAAQABAAAAAQABAAIAAQABAAEAAgADAwIAAQABAAEAAgABAAEAAAABAAEAAQAAAA=="),
|
|
||||||
|
|
||||||
//more advanced duo outpost
|
|
||||||
new Structure(0.04f, Items.lead, "BwYADnR1bmdzdGVuLWRyaWxsAwADZHVvBAAIc3BsaXR0ZXIBAA10dW5nc3Rlbi13YWxsAgATdHVuZ3N0ZW4td2FsbC1sYXJnZQAAA2FpcgUACGNvbnZleW9yCQkAAAAAAQEBAQEBAQEBAgAAAAAAAAICAAEDAAQDAwACAgAAAAABAgACAAABAgUCAQEAAAAAAQABAgMAAQIBAgUCAQEBAQMAAQABAgQCBQMFAwYCBQEFAQQDAQABAgMAAQEBAQUAAQMBAwMAAQABAwICAAMBAQUAAQMCAgADAQMAAAAAAAIDAAQDAwAAAwADAAAAAAAAAQIBAwEDAQMBAwAAAAA="),
|
|
||||||
|
|
||||||
//tungsten duo and drone outpost
|
|
||||||
new Structure(0.02f, Items.tungsten, "BgEADXR1bmdzdGVuLXdhbGwEAA1jYXJiaWRlLWRyaWxsAwADZHVvAgATdHVuZ3N0ZW4td2FsbC1sYXJnZQAAA2FpcgUACWRyb25lLXBhZAUHAAAAAAEDAQMCAgAAAAAAAAAAAQADAAADAAMBAgAAAAABAAQBBQAAAAECAAAAAAEAAwAAAAAAAQIAAAAAAQABAQEBAQEBAg=="),
|
|
||||||
|
|
||||||
//resupply point
|
|
||||||
new Structure(0.03f, Items.lead, "BgEADXR1bmdzdGVuLXdhbGwCAAtzb2xhci1wYW5lbAUAA2R1bwMADnJlc3VwcGx5LXBvaW50AAADYWlyBAANY2FyYmlkZS1kcmlsbAUFAQABAAEAAAAAAAEAAgMBAQEBAQABAAMDBAEFAQEAAQACAwEBAQEBAAEBAQEBAQAAAAA="),
|
|
||||||
|
|
||||||
//mini dagger outpost
|
|
||||||
new Structure(0.02f, Items.lead, "CwIADXR1bmdzdGVuLXdhbGwGAAhjb252ZXlvcgUAA2R1bwgACmRhZ2dlci1wYWQBABN0dW5nc3Rlbi13YWxsLWxhcmdlBwAIc3BsaXR0ZXIDAA5yZXN1cHBseS1wb2ludAoADHJlcGFpci1wb2ludAkADnR1bmdzdGVuLWRyaWxsAAADYWlyBAALc29sYXItcGFuZWwHCQAAAAABAAABAgECAQIBAAAAAAEAAAMAAwADAwEEAAIBAgICAgAAAAAFAwYDBwMCAQIBBQECAgAAAAAIAAAACQMGAQYBBwMCAgAAAAAAAAAAAQMAAAIDBQECAgEAAAAKAQQBAAAAAAIBAgECAgAAAAACAQIBAgEAAAAAAAAAAA=="),
|
|
||||||
|
|
||||||
//salvo outpost
|
|
||||||
new Structure(0.02f, Items.tungsten, "BAIABXNhbHZvAwANY2FyYmlkZS1kcmlsbAAAA2FpcgEADGNhcmJpZGUtd2FsbAcHAAAAAAEDAQMBAwEDAAABAwEDAQMCAAAAAQMAAAEAAgAAAAAAAAABAwEDAQAAAAAAAwACAAAAAQIBAAEBAgAAAAAAAAABAgAAAQEAAAAAAQEBAQEBAAABAQEBAQEBAQAAAAA="),
|
|
||||||
|
|
||||||
//advanced laser outpost
|
|
||||||
new Structure(0.03f, null, "BQIABmxhbmNlcgEAEmNhcmJpZGUtd2FsbC1sYXJnZQQAEXNvbGFyLXBhbmVsLWxhcmdlAAADYWlyAwALc29sYXItcGFuZWwLCwAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMAAwAAAAAAAwABAAAAAAABAAAAAgAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAQAAAACAAAAAQAAAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAIAAAADAAMAAQAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
|
|
||||||
|
|
||||||
//2x interceptor outpost
|
|
||||||
new Structure(0.02f, Items.lead, "CgMAEXNvbGFyLXBhbmVsLWxhcmdlBgADZHVvAgAPaW50ZXJjZXB0b3ItcGFkBAASY2FyYmlkZS13YWxsLWxhcmdlBwAOcmVzdXBwbHktcG9pbnQAAANhaXIFAAtzb2xhci1wYW5lbAEADGNhcmJpZGUtd2FsbAkAC2Rpc3RyaWJ1dG9yCAALbGFzZXItZHJpbGwKCAEAAQMBAwEDAQMBAwECAAABAAIDAAAAAAAAAAABAgAAAQAAAAAAAAADAQAAAQIBAgQDAAAFAAAAAAAAAAYCAQMAAAAABwAIAAAACQAAAAECBAMAAAEAAAAAAAABAAABAgAAAAAFAAAAAAAAAAYCAQIBAAIDAAAAAAMBAAABAgECAQAAAAAAAAAAAAAAAQIAAAEAAQEBAQEBAQEBAQEBAAA="),
|
|
||||||
|
|
||||||
//resupply point (again)
|
|
||||||
new Structure(0.02f, Items.lead, "BgEADXR1bmdzdGVuLXdhbGwCAAtzb2xhci1wYW5lbAUAA2R1bwMADnJlc3VwcGx5LXBvaW50AAADYWlyBAANY2FyYmlkZS1kcmlsbAUFAQABAAEAAAAAAAEAAgMBAQEBAQABAAMDBAEFAQEAAQACAwEBAQEBAAEBAQEBAQAAAAA="),
|
|
||||||
|
|
||||||
//coal laser outpost
|
|
||||||
new Structure(0.03f, null, "BgEADHRob3JpdW0td2FsbAMABmxhbmNlcgUAFGNvbWJ1c3Rpb24tZ2VuZXJhdG9yBAANY2FyYmlkZS1kcmlsbAAAA2FpcgIAC3NvbGFyLXBhbmVsBwcAAAEAAQABAQEBAQEBAAAAAQACAgMAAAACAAEAAAABAAICAAAAAAIAAQAAAAEAAQAEAQUAAQABAAAAAQACAAMBAAMCAAEAAAABAAIAAAMAAwIAAQAAAAEAAQABAwEDAQABAA=="),
|
|
||||||
|
|
||||||
//ultimate laser outpost
|
|
||||||
new Structure(0.02f, null, "BgMABmxhbmNlcgIAEmNhcmJpZGUtd2FsbC1sYXJnZQUAEXNvbGFyLXBhbmVsLWxhcmdlAAADYWlyBAALc29sYXItcGFuZWwBAAxjYXJiaWRlLXdhbGwPDwAAAAAAAAAAAAABAwIDAAABAwAAAAAAAAAAAAAAAAAAAAACAwAAAgMAAAAAAAACAwAAAgMAAAAAAAAAAAAAAQMAAAAAAAAAAAMDAAAAAAAAAAAAAAIDAAAAAAAAAgMAAAMDAAAEAwAAAAADAwAAAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAAAAAAAAAgMAAAMDAAAAAAUDAAAAAAAAAAAEAwAAAAABAwEDAAAAAAAAAAAAAAAAAAAAAAUDAAADAwAAAgMAAAIDAAADAwAAAAAAAAAABAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAFAwAAAAAAAAAAAwMAAAIDAAABAwEDAgMAAAQDAAAAAAAAAAAFAwAAAAAAAAAAAAAAAAAAAAAAAAMDAAADAwAAAAAAAAAAAwMAAAIDAAAAAAAAAgMAAAAAAAAAAAAAAwMAAAQDAAAAAAAAAAAAAAAAAAAAAAIDAAACAwAAAAAAAAIDAAACAwAAAQMAAAAAAAABAwAAAAAAAAAAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDAAAAAAEDAAAAAAAAAAAAAA=="),
|
|
||||||
|
|
||||||
//fabricator outpost
|
|
||||||
new Structure(0.02f, Items.tungsten, "BgUADWNhcmJpZGUtZHJpbGwBABJ0aG9yaXVtLXdhbGwtbGFyZ2UCAAx0aG9yaXVtLXdhbGwEAANkdW8AAANhaXIDAA5mYWJyaWNhdG9yLXBhZAkJAAAAAAEDAAACAwEDAAAAAAAAAAACAwADAAMCAwADAAMCAgAAAQMAAAMCAAACAAMCAAABAwAAAAAAAAAAAAAEAgAAAAAAAgAAAgMCAAIBBAIFAAQCAgMCAgIDAQMAAAMCAAAEAgMCAAABAwAAAAAAAAAAAAACAQAAAAAAAgAAAAACAAEDAAECAQEDAAECAQAAAAAAAAAAAAACAwACAAAAAAAA"),
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
bases = new Structure[]{
|
|
||||||
/*
|
|
||||||
//primitive 4-spawner base
|
|
||||||
new Structure("CAQADXR1bmdzdGVuLXdhbGwFAANkdW8HAARjb3JlAQAKZGFnZ2VyLXBhZAYACHVubG9hZGVyAgAMcmVwYWlyLXBvaW50AAADYWlyAwALc29sYXItcGFuZWwJBwAAAQMAAAIDAQMAAAAAAAAAAAAAAwIAAAAAAAAEAAQBBAEEAQQBBAEEAgQABQIAAAAAAAAFAgQCBAAGAwAABwAAAAYDBAAEAAUCAAAAAAAABQIEAAQABAMEAwQDBAMEAAQAAAABAwAAAwIBAwAAAAAAAAAAAAACAwAAAAAAAA=="),
|
|
||||||
|
|
||||||
//more advanced base, 8 spawners
|
|
||||||
new Structure("CQIADXR1bmdzdGVuLXdhbGwGAANkdW8IAARjb3JlAQAKZGFnZ2VyLXBhZAcACHVubG9hZGVyBAATdHVuZ3N0ZW4td2FsbC1sYXJnZQUADHJlcGFpci1wb2ludAAAA2FpcgMAC3NvbGFyLXBhbmVsCwsAAAAAAQEAAAAAAAAAAAEBAAAAAAAAAAAAAAAAAAACAwMAAgMAAAAAAAAAAAEBAAAEAAAAAgMFAAIDBAAAAAEBAAAAAAAAAAAAAAYABwIGAAAAAAAAAAAAAAACAAIABgAAAAAAAAAGAAICAgAAAAAAAwAFAAcCAAAIAAAABwIFAAMAAAAAAAIAAgAGAAAAAAAAAAYAAgICAAAAAQEAAAQAAAAGAAcCBgAEAAAAAQEAAAAAAAAAAAAAAgEFAAIBAAAAAAAAAAAAAAAAAQEAAAIDAwACAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="),
|
|
||||||
|
|
||||||
//rather advanced flyer base, no ground units, drones
|
|
||||||
new Structure("DQIADXR1bmdzdGVuLXdhbGwHAAhjb252ZXlvcgMAA2R1bwwABGNvcmULAAh1bmxvYWRlcgEAE3R1bmdzdGVuLXdhbGwtbGFyZ2UGAA9pbnRlcmNlcHRvci1wYWQFAAhzcGxpdHRlcgoADHJlcGFpci1wb2ludAQABXNhbHZvAAADYWlyCAAJZHJvbmUtcGFkCQALc29sYXItcGFuZWwREQAAAAAAAAAAAAAAAAEAAAACAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAwAAAAAAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAADAAUAAwAEAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAAAAAAAgMHAgIDAAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAgMHAgcDBQEHAQcCAgMAAAAAAAAAAAAAAAACAAQAAAACAwgAAAAJAAcCCQAIAAAAAgMEAAAAAgAAAAEAAAAAAAAABwMAAAAACgMLAgoDAAAAAAcBAAAAAAEAAAAAAAAAAwACAwcCCQAKAwAAAAAAAAoDCQAHAgIDAwAAAAAAAgADAAUABwMFAAcDCwIAAAwAAAALAwcBBQIHAQUAAwACAAEAAAADAAIDBwAJAAoDAAAAAAAACgMJAAcAAgMDAAEAAAAAAAAABAAAAAcDCAAAAAoDCwMKAwgAAAAHAQQAAAAAAAAAAAACAAAAAAACAwAAAAAJAAcACQAAAAAAAgMAAAAAAgAAAAAAAQAAAAYAAAACAwcABwMFAgcBBwACAwYAAAABAAAAAAAAAAAAAAAAAAAABAAAAAIDBwACAwQAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAUDAwAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAEAAAADAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAA"),
|
|
||||||
|
|
||||||
//advanced carbide base with fabricators, drones
|
|
||||||
new Structure("Ew4ADXR1bmdzdGVuLXdhbGwHABFzb2xhci1wYW5lbC1sYXJnZRAACGNvbnZleW9yDAADZHVvEgAEY29yZQMACmRhZ2dlci1wYWQRAAh1bmxvYWRlcgkAD2ludGVyY2VwdG9yLXBhZA8ACHNwbGl0dGVyBgAGbGFuY2VyDQARdGl0YW5pdW0tY29udmV5b3IBABJjYXJiaWRlLXdhbGwtbGFyZ2ULAAxyZXBhaXItcG9pbnQIAAVzYWx2bwAAA2FpcgUACXRpdGFuLXBhZAoAC3NvbGFyLXBhbmVsAgAMY2FyYmlkZS13YWxsBAAOZmFicmljYXRvci1wYWQTFQAAAAAAAAAAAAAAAAAAAQMAAwAAAAAAAAEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAIBAAEAAQAAAAAAAAABAAECAQAAAAACAgAAAAAAAAAAAAAAAAICAwAAAAICBAAAAAAABQAAAAQAAAACAAMAAAACAgAAAAAAAAAAAAAAAAICAAAAAAICAAAAAAAAAAAAAAAAAAACAAAAAAACAgAAAAAAAAAAAAAAAAEAAAABAAAABgAAAAAAAAAAAAYAAAABAAAAAQAAAAAAAAAAAAIAAQIAAAAAAAAAAAAAAAMAAwAABwAAAAAAAAAAAAAAAAAAAAECAAACAAIAAAAAAAEAAAAIAAAACQAAAAAAAAAAAAkAAAAIAAAAAQAAAAAAAAACAAIACAMAAAAAAAAAAAAAAAAAAAoACwAKAAAAAAAAAAAAAAAAAAgDAAACAAIAAAAAAAIADAMMAw0CDgAMAAAAAAAAAAwADgANAgwBDAECAAAAAAACAAIAAgMPAw0DDwAPAw8AEAMRAgAAEgAAABECEAEPAA8DDwANAQ8DAgMCAAIACAMAAAIADAMMAw0ADgAMAAAAAAAAAAwADgANAAwBDAECAAgDAAACAAIAAAAAAAEAAAAIAAAACQAAAAoACwAKAAkAAAAIAAAAAQAAAAAAAAACAAIAAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAACAAIAAAIAAAEAAAABAAAABgAAAAAABwAAAAYAAAABAAAAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAwAAAAICBAAAAAAAAAAAAAQAAAACAAMAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAICAAAAAAAABQAAAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAICAQMAAwAAAAAAAAEDAAMCAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAA=="),
|
|
||||||
|
|
||||||
//lots of titans and daggers
|
|
||||||
new Structure("DAcACHNwbGl0dGVyBgADZHVvCwAEY29yZQMACmRhZ2dlci1wYWQKAAh1bmxvYWRlcggAEXRpdGFuaXVtLWNvbnZleW9yAgASY2FyYmlkZS13YWxsLWxhcmdlBQAFc2Fsdm8AAANhaXIEAAl0aXRhbi1wYWQBAAxjYXJiaWRlLXdhbGwJAAtkaXN0cmlidXRvchMTAAAAAAECAAAAAAAAAAAAAAECAAABAgAAAAAAAAAAAAABAgAAAAAAAAIDAAAAAAAAAAAAAAAAAQIBAAECAAAAAAAAAAAAAAIDAAAAAAECAAAAAAAAAAAAAAMAAAABAgEAAQIDAAAAAAAAAAAAAAAAAAECAAAAAAAAAAAAAAAAAAMAAAECAQABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAwAABgAHAAYABQMAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAgCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAwAACQAAAAYDCAIGAwkAAAAFAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCgMKAAoDAAAAAAAAAAAAAAAAAAAAAAECAQMBAwEDBgABAAYDCgMAAAAAAAAKAwYDAQAGAAEBAQEBAQECAAABAwEDAQMHAAgDCAMKAAAACwAAAAoACAEIAQcAAQEBAQEBAAABAgEDAQMBAwYAAQAGAwoDAAAAAAAACgMGAwEABgABAQEBAQEBAgAAAAADAAAABQMAAAkAAAAKAwoACgMJAAAABQMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDCAAGAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAwAAAQMIAAEDBQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAGAAcABgAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAECAQABAAMAAAAAAAAAAAAAAAAAAAABAgIDAAAAAAAAAAAAAAAAAQIBAAEAAAAAAAADAAMAAwIDAAABAgAAAAAAAAAAAAAAAAAAAAABAgEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAAAAAAAAAAAAAECAAABAgAAAAAAAAAAAAABAgAAAAA="),
|
|
||||||
|
|
||||||
//superfortress
|
|
||||||
new Structure("EwwAEXNvbGFyLXBhbmVsLWxhcmdlDgADZHVvEgAEY29yZQMACmRhZ2dlci1wYWQQAAttb25zb29uLXBhZBEACHVubG9hZGVyCgAPaW50ZXJjZXB0b3ItcGFkCQAGbGFuY2VyDwARdGl0YW5pdW0tY29udmV5b3ICABJjYXJiaWRlLXdhbGwtbGFyZ2UGAA5yZXN1cHBseS1wb2ludAQADHJlcGFpci1wb2ludAsABXNhbHZvAAADYWlyCAAJZHJvbmUtcGFkBwAJdGl0YW4tcGFkBQALc29sYXItcGFuZWwBAAxjYXJiaWRlLXdhbGwNAAtkaXN0cmlidXRvch8fAAAAAAAAAAAAAAAAAAABAwAAAAAAAAAAAAACAgAAAQICAgAAAAAAAAAAAAAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDAAAAAAAAAAAAAAAAAAABAgAAAAAAAAAAAAAAAAAAAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAADAgAABAEFAQYBBQEEAQMCAAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAAAAAAABwIAAAAAAAAIAgAABQEIAgAAAAAAAAAABwIAAAAAAAABAgAAAAAAAAAAAAAAAAAAAAAAAAICAAAJAgAAAAAAAAAACgMAAAAAAAABAAAAAAAKAwAAAAAAAAAACQIAAAICAAAAAAAAAAAAAAAAAAAAAAECAAAAAAAAAAAAAAAAAAAAAAAACwAAAAEACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAAAAAAAAAAAAAICAAAJAgAACQIAAAAADAAAAAsAAAAAAAAAAQAAAAAACwAAAAAADAAAAAkCAAAJAgAAAgIAAAAAAAABAwEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAOAg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAA4CAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwIAAAAADAAAAAAADAAAAAAAAAABAQ8CDwIPAgEAAAAAAAAADAAAAAAADAAAAAAABwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBDwIPAg8CAQABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgAACgMAAAsAAAALAAAAAQIAAAAAAAAPAg8CDwIAAAAAAAABAQsAAAALAAAACgMAAAMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgAAEAIAAA8CDwIPAgAAEAIAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAACAgAABAEIAgAACwEAAA0AAAABAQEBAAAAAAAAEQARABEAAAAAAAAAAQABAA0AAAALAQAACAIAAAQBAgIAAAAAAAAFAQAAAAAAAAAAAAAAAA8DDwMPAw8DEQMAAAAAAAARAw8BDwEPAQ8BAAAAAAAAAAAAAAAABQEAAAAAAQMBAwYBBQEBAQEBAQEOAg4CDwMPAw8DDwMRAAAAEgAAABEADwEPAQ8BDwEOAQ4BAQEBAQEBBQEGAQEBAQECAgAABQEIAgAACwEAAA0AAAAPAw8DDwMPAxEDAAAAAAAAEQMPAQ8BDwEPAQ0AAAALAQAACAIAAAUBAgIAAAAAAAAEAQAAAAAAAAAAAAAAAAECAQIAAAAAAAARAxEAEQMAAAAAAAABAwEDAAAAAAAAAAAAAAAABAEAAAAAAAAAAAMCAAAKAwAACwAAAAsAAAABAgAAEAIAAA8ADwAPAAAAEAIAAAEACwAAAAsAAAAKAwAAAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAAAAAAADwAPAA8AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEPAA8ADwABAwEDAQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwIAAAAADAAAAAAADAAAAAsAAAABAQ8ADwAPAAEDCwAAAAAADAAAAAAADAIAAAAABwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAOAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDAQMCAgAACQIAAAkCAAAAAAAAAAALAAAAAAAAAA4AAAAAAAsAAAAAAAAAAAAJAgAACQIAAAICAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAALAQAAAQILAQAAAAAAAAAADAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgICAAAJAgAAAAAAAAAACgMAAAAAAAABAgAAAAAKAwAAAAAAAAAACQIAAAICAAABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAIAAAECCAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAgIAAAAABwIAAAMCAAAAAAAABQEAAAAAAwIAAAAABwIAAAICAAABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBBQEGAQUBBAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAgIAAAEAAgIAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA="),
|
|
||||||
|
|
||||||
//welcome to drone hell
|
|
||||||
new Structure("CwcAEXNvbGFyLXBhbmVsLWxhcmdlCQAMdGhvcml1bS13YWxsCgAEY29yZQUACmRhZ2dlci1wYWQDAAZsYW5jZXIBABJjYXJiaWRlLXdhbGwtbGFyZ2UGAAxyZXBhaXItcG9pbnQAAANhaXIIAAlkcm9uZS1wYWQEAAtzb2xhci1wYW5lbAIADGNhcmJpZGUtd2FsbBERAQMAAAEAAAACAwIDAAAAAAICAAAAAAIBAgEBAwAAAQMAAAAAAAAAAAAAAwAAAAAAAAACAgADAAMDAAAAAAAAAAAAAAABAAAABAEEAwAAAAAFAwAABgEFAwAAAAAAAAQBBAEBAwAAAAAAAAQDAAAAAAAAAAAAAAQCAAAAAAAAAAAAAAQBAAAAAAIAAwAAAAAABwMAAAgBAAAJAAgBAAAAAAcDAAADAAAAAgACAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAIAAAAAAAUDAAAIAQAACQMJAwkDCQMJAwgBAAAFAwAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAACQIAAAAAAAAAAAAAAAACAwIDBgEEAgkBCQEJAAAACgAAAAkCCQEJAQQCBgECAQIBAAAAAAUDAAAIAQAACQAAAAAAAAAJAggBAAAFAwAAAAAAAAAAAAAAAAAAAAEAAAkACQEJAQkBCQEAAAAAAAAAAAAAAAACAAMAAAAAAAAAAAAIAQAACQIIAQAAAAAAAAAAAwAAAAIAAgAAAAAAAAAHAwAAAAAAAAkCAAAAAAAABwMAAAAAAAACAAEDAAAEAAAAAAAAAAUDAAAEAgUDAAAAAAAAAAAEAAEDAAAAAAAABAAEAAMAAAAAAAAABgEAAAAAAwAAAAQABAAAAAAAAQMAAAEDAAAAAAAAAAAAAAIAAAAAAAAAAAABAwAAAQMAAAAAAAAAAAAAAgMCAwAAAAACAAAAAAACAQIBAAAAAAAAAAA="),
|
|
||||||
|
|
||||||
//welcome to bomber/interceptor hell
|
|
||||||
new Structure("DgUACHNwbGl0dGVyBgAEaGFpbAIAEnRob3JpdW0td2FsbC1sYXJnZQEADHRob3JpdW0td2FsbAQAA2R1bw0ABGNvcmULAAttb25zb29uLXBhZAwACHVubG9hZGVyCgAPaW50ZXJjZXB0b3ItcGFkCAARdGl0YW5pdW0tY29udmV5b3IDAAVzYWx2bwkABnJpcHBsZQAAA2FpcgcAC2Rpc3RyaWJ1dG9yGRkAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAAEAAgMAAAIDAAACAwAAAwIAAAQBAwIAAAIDAAACAwAAAgMAAAEAAgIAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAEBAQEAAAAAAAAGAQYBAwIAAAcAAAAIAgcAAAADAgAABgEGAQAAAAAAAAEBAQEAAAAAAgIAAAAACQEAAAoCAAAAAAAAAAAAAAgCAAAAAAAAAAAKAgAAAAAJAQAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCCAIIAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAGAAoCAAAKAwAAAAALAwAACAIIAggCAAALAwAACgMAAAoCAAAGAAICAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAIAggCCAIAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAACAgAAAwIAAAAAAAAAAAAAAAAAAAgCCAIIAgAAAAAAAAAAAAAAAAMCAAACAgAAAAABAAAAAAAAAAAAAAALAwAAAAALAwAACAIIAggCAAALAwAAAAALAwAAAAAAAAAAAAABAAEAAwIAAAcAAAAAAAAAAAAAAAAAAAAMAwwBDAIAAAAAAAAAAAAAAAAHBQAAAwIAAAEAAQAAAAAAAAAAAAgDCAMIAwgDCAMMAQAAAAAAAAwCCAEIAQgBCAEIAQAAAAAAAAAAAQABAAQBBQAIAwgDCAMIAwgDCAMIAwwDAAANAAAADAMIAQgBCAEIAQgBCAEIAQUABAEBAAEAAwIAAAcAAAAIAwgDCAMIAwgDDAIAAAAAAAAMAwgBCAEIAQgBCAEHAAAAAwIAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAwCDAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAIAAAADAgAAAAALAwAAAAALAwAACAAIAAgAAAALAwAAAAALAwAAAwIAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAKAgAACgMAAAAAAAAAAAgACAAIAAAAAAAAAAoDAAAKAgAABgACAAAAAAAAAAAAAAEGAAAAAAAAAAAAAAALAwAACAAIAAgAAAALAwAAAAAAAAAAAAAGAAAAAAAAAAAAAgAAAAAAAAAAAAoCAAAAAAAAAAAIAAgACAAAAAAAAAAKAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAJAQAAAAAAAAMCAAAHBQAACAAHAAAAAwIAAAAAAAAAAAkBAAAAAAAAAAAAAAEBAQEAAAAAAAAGAQYBAAAAAAAAAAAIAAAAAAAAAAAABgMGAwAAAAAAAAEBAQEAAAAAAgMAAAEAAgMAAwIDAAACAwAAAwIAAAUAAwIAAAIBAAACAQAAAgEAAAEDAgMAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAABAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAA=="),
|
|
||||||
|
|
||||||
//welcome to unit hell
|
|
||||||
new Structure("DQoACHNwbGl0dGVyBAAMdGhvcml1bS13YWxsDAAEY29yZQEACmRhZ2dlci1wYWQHAAttb25zb29uLXBhZAsACHVubG9hZGVyCAAPaW50ZXJjZXB0b3ItcGFkBQARdGl0YW5pdW0tY29udmV5b3IJAAxyZXBhaXItcG9pbnQDAAVzYWx2bwAAA2FpcgIACXRpdGFuLXBhZAYAC3NvbGFyLXBhbmVsFRUAAAAAAAAAAAAAAAABAQAAAQEAAAAAAQEAAAEBAAAAAAAAAAAAAAAAAAAAAAIBAAAAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBAAAAAAIBAAAAAAAAAAAAAAAAAAADAQAABAAEAAAABAAEAAMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQMGAAAABgAFAQAAAAAAAAAAAAAAAAAAAAAAAAIBAAAAAAcDAAAIAwAABQIJAAAACQAFAggDAAAAAAcDAAAAAAIBAAAAAAAAAAAAAAAAAAAAAAAABQIKAAACCgAFAgAAAAAAAAAAAAAAAAAAAAABAQAAAwEAAAgDAAAAAAAAAAAFAgACBQIAAAAAAAAIAwAAAwEAAAEBAAAAAAAAAAAAAAAAAAAAAAcDAAAFAgACBQIAAAcDAAAAAAAAAAAAAAAAAAABAQAABAMFAgUDBQMAAAAAAAALAQACCwEAAAAAAAAFAQUBBQIEAQEBAAAAAAAABAMGAAkACgAFAwUDCwIAAAAAAAALAQUBBQEKAAkABgAEAQAAAAAAAAAAAAAAAAAAAAMAAwADAAIAAAwAAAAAAgABAAEAAQAAAAAAAAAAAAABAQAABAMGAAkACgAFAwUDCwAAAAAAAAALAgUBBQEKAAkABgAEAQEBAAAAAAAABAMFAAUDBQMAAAAAAAALAQABCwAAAAAAAAAFAQUBBQAEAQAAAAABAQAAAwEAAAgDAAAAAAcDAAAFAAAABQAAAAcDAAAIAwAAAwEAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAwAABQAKAAAACgAFAAgDAAAAAAAAAAAAAAAAAAAAAAIBAAAAAAcDAAAAAAAABQAJAAAACQAFAAAAAAAAAAcDAAAAAAIBAAAAAAAAAAAAAAAAAAADAQAABQMGAAAABgAFAQMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAAABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAIBAAAAAAIBAAEBAQAAAQEAAAAAAQEAAAEBAAAAAAIBAAAAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA=")
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public void generate(Generation gen, Team team, int coreX, int coreY, int enemyX, int enemyY){
|
public void generate(Generation gen, Team team, int coreX, int coreY, int enemyX, int enemyY){
|
||||||
init();
|
|
||||||
|
|
||||||
this.enemyX = enemyX;
|
this.enemyX = enemyX;
|
||||||
this.enemyY = enemyY;
|
this.enemyY = enemyY;
|
||||||
@@ -116,118 +19,10 @@ public class FortressGenerator{
|
|||||||
this.gen = gen;
|
this.gen = gen;
|
||||||
this.team = team;
|
this.team = team;
|
||||||
|
|
||||||
genOutposts();
|
gen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void genOutposts(){
|
void gen(){
|
||||||
int padding = 10;
|
gen.tiles[enemyX][enemyY].setBlock(StorageBlocks.core, team);
|
||||||
int maxDifficulty = 13;
|
|
||||||
Array<Structure> selected = new Array<>();
|
|
||||||
Array<Rectangle> used = new Array<>();
|
|
||||||
Rectangle rect = new Rectangle();
|
|
||||||
Structure base = bases[Mathf.clamp((int)(bases.length * (float)gen.sector.difficulty / maxDifficulty) + gen.random.range(2), 0, bases.length-1)];
|
|
||||||
|
|
||||||
int maxIndex = (int)(1 + ((float)gen.sector.difficulty / maxDifficulty * (structures.length-2)));
|
|
||||||
|
|
||||||
for(int i = maxIndex/2; i < maxIndex; i++){
|
|
||||||
selected.add(structures[Math.min(i, structures.length-1)]);
|
|
||||||
}
|
|
||||||
|
|
||||||
float baseChance = 0.8f / selected.size;
|
|
||||||
|
|
||||||
used.add(new Rectangle(enemyX - base.width()/2, enemyY - base.height()/2, base.width(), base.height()));
|
|
||||||
int elev = gen.tiles[enemyX][enemyY].getElevation();
|
|
||||||
for(int x = 0; x < base.width(); x++){
|
|
||||||
for(int y = 0; y < base.height(); y++){
|
|
||||||
Tile tile = gen.tiles[enemyX - base.width()/2 + x][enemyY - base.height()/2 + y];
|
|
||||||
StructBlock block = base.layout[x][y];
|
|
||||||
Block result = fixBlock(block.block);
|
|
||||||
tile.setElevation(elev);
|
|
||||||
tile.setRotation(block.rotation);
|
|
||||||
tile.setBlock(result, team);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(Structure struct : selected){
|
|
||||||
for(int x = padding; x < gen.width - padding; x++){
|
|
||||||
loop:
|
|
||||||
for(int y = padding; y < gen.height - padding; y++){
|
|
||||||
rect.set(x - struct.layout.length, y - struct.layout[0].length, struct.layout.length, struct.layout[0].length);
|
|
||||||
if(Vector2.dst(x, y, coreX, coreY) > minCoreDst && Vector2.dst(x, y, enemyX, enemyY) > 30 && world.tile(x, y).floor().liquidDrop == null &&
|
|
||||||
(struct.ore == null || gen.tiles[x][y].floor().dropsItem(struct.ore)) && gen.random.chance(struct.chance * baseChance)){
|
|
||||||
for(Rectangle other : used){
|
|
||||||
if(other.overlaps(rect)){
|
|
||||||
continue loop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
used.add(new Rectangle(rect.x - 1, rect.y - 1, rect.width + 2, rect.height + 2));
|
|
||||||
int elevation = world.tile(x, y).getElevation();
|
|
||||||
for(int cx = 0; cx < struct.layout.length; cx++){
|
|
||||||
for(int cy = 0; cy < struct.layout[0].length; cy++){
|
|
||||||
int wx = x + cx - struct.layout.length/2;
|
|
||||||
int wy = y + cy - struct.layout[0].length/2;
|
|
||||||
StructBlock block = struct.layout[cx][cy];
|
|
||||||
Tile tile = world.tile(wx, wy);
|
|
||||||
|
|
||||||
Block result = fixBlock(block.block);
|
|
||||||
|
|
||||||
//resupply points should not be placed anymore, they confuse units
|
|
||||||
if(result != Blocks.air && tile.block().alwaysReplace){
|
|
||||||
tile.setElevation(elevation);
|
|
||||||
tile.setRotation(block.rotation);
|
|
||||||
tile.setBlock(result, team);
|
|
||||||
|
|
||||||
fill(tile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Block fixBlock(Block result){
|
|
||||||
if(result == UnitBlocks.dronePad) result = DefenseBlocks.copperWallLarge;
|
|
||||||
if(result == UnitBlocks.fabricatorPad) result = DefenseBlocks.copperWallLarge;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fill(Tile tile){
|
|
||||||
Block block = tile.block();
|
|
||||||
|
|
||||||
if(block instanceof PowerTurret){
|
|
||||||
tile.entity.power.amount = block.powerCapacity;
|
|
||||||
}else if(block instanceof ItemTurret){
|
|
||||||
ItemTurret turret = (ItemTurret)block;
|
|
||||||
AmmoType[] type = turret.getAmmoTypes();
|
|
||||||
block.handleStack(type[0].item, block.acceptStack(type[0].item, 1000, tile, null), tile, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static class Structure{
|
|
||||||
public final StructBlock[][] layout;
|
|
||||||
public final Item ore;
|
|
||||||
public final float chance;
|
|
||||||
|
|
||||||
public Structure(float chance, Item ore, String encoding){
|
|
||||||
this.ore = ore;
|
|
||||||
this.layout = StructureFormat.read(encoding);
|
|
||||||
this.chance = chance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Structure(String encoding){
|
|
||||||
this.ore = null;
|
|
||||||
this.layout = StructureFormat.read(encoding);
|
|
||||||
this.chance = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int width(){
|
|
||||||
return layout.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
int height(){
|
|
||||||
return layout[0].length;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,12 +155,26 @@ public class ContentDisplay{
|
|||||||
|
|
||||||
table.left().defaults().fillX();
|
table.left().defaults().fillX();
|
||||||
|
|
||||||
//TODO stat list goes here
|
if(Bundles.has("mech." + mech.name + ".weapon")){
|
||||||
//table.add(Bundles.format("text.mech.armor", mech.armor));
|
table.add(Bundles.format("text.mech.weapon", Bundles.get("mech." + mech.name + ".weapon")));
|
||||||
table.row();
|
table.row();
|
||||||
//table.add(Bundles.format("text.unit.speed", Strings.toFixed(mech.speed, 1)));
|
}
|
||||||
|
if(Bundles.has("mech." + mech.name + ".ability")){
|
||||||
|
table.add(Bundles.format("text.mech.ability", Bundles.get("mech." + mech.name + ".ability")));
|
||||||
|
table.row();
|
||||||
|
}
|
||||||
|
table.add(Bundles.format("text.mech.armor", mech.armor));
|
||||||
table.row();
|
table.row();
|
||||||
|
table.add(Bundles.format("text.mech.itemcapacity", mech.itemCapacity));
|
||||||
table.row();
|
table.row();
|
||||||
|
|
||||||
|
if(mech.drillPower > 0){
|
||||||
|
table.add(Bundles.format("text.mech.minespeed", (int) (mech.mineSpeed * 10)));
|
||||||
|
table.row();
|
||||||
|
table.add(Bundles.format("text.mech.minepower", mech.drillPower));
|
||||||
|
table.row();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void displayUnit(Table table, UnitType unit){
|
public static void displayUnit(Table table, UnitType unit){
|
||||||
|
|||||||
@@ -260,7 +260,6 @@ public class BuildBlock extends Block{
|
|||||||
//move max progress down if this fraction is less than 1
|
//move max progress down if this fraction is less than 1
|
||||||
maxProgress = Math.min(maxProgress, maxProgress * fraction);
|
maxProgress = Math.min(maxProgress, maxProgress * fraction);
|
||||||
|
|
||||||
//TODO uncomment?
|
|
||||||
accumulator[i] -= maxUse;
|
accumulator[i] -= maxUse;
|
||||||
|
|
||||||
//remove stuff that is actually used
|
//remove stuff that is actually used
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ public class MendProjector extends Block{
|
|||||||
protected float reload = 250f;
|
protected float reload = 250f;
|
||||||
protected float range = 50f;
|
protected float range = 50f;
|
||||||
protected float healPercent = 6f;
|
protected float healPercent = 6f;
|
||||||
protected float phaseBoost = 12f;
|
protected float phaseBoost = 10f;
|
||||||
protected float useTime = 340f;
|
protected float useTime = 300f;
|
||||||
|
|
||||||
public MendProjector(String name){
|
public MendProjector(String name){
|
||||||
super(name);
|
super(name);
|
||||||
|
|||||||
@@ -79,14 +79,16 @@ public class Generators {
|
|||||||
Image image = context.get(mech.region);
|
Image image = context.get(mech.region);
|
||||||
|
|
||||||
if(!mech.flying){
|
if(!mech.flying){
|
||||||
image.draw(mech.baseRegion);
|
image.drawCenter(mech.baseRegion);
|
||||||
image.draw(mech.legRegion);
|
image.drawCenter(mech.legRegion);
|
||||||
image.draw(mech.legRegion, true, false);
|
image.drawCenter(mech.legRegion, true, false);
|
||||||
image.draw(mech.region);
|
image.drawCenter(mech.region);
|
||||||
}
|
}
|
||||||
|
|
||||||
image.draw(mech.weapon.equipRegion, -(int)mech.weaponOffsetX, (int)mech.weaponOffsetY, false, false);
|
int off = (image.width() - mech.weapon.equipRegion.getRegionWidth())/2;
|
||||||
image.draw(mech.weapon.equipRegion, (int)mech.weaponOffsetX, (int)mech.weaponOffsetY, true, false);
|
|
||||||
|
image.draw(mech.weapon.equipRegion, -(int)mech.weaponOffsetX + off, (int)mech.weaponOffsetY + off, false, false);
|
||||||
|
image.draw(mech.weapon.equipRegion, (int)mech.weaponOffsetX + off, (int)mech.weaponOffsetY + off, true, false);
|
||||||
|
|
||||||
|
|
||||||
image.save("mech-icon-" + mech.name);
|
image.save("mech-icon-" + mech.name);
|
||||||
|
|||||||
@@ -67,6 +67,16 @@ public class Image {
|
|||||||
draw(region, 0, 0, false, false);
|
draw(region, 0, 0, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**Draws a region at the center.*/
|
||||||
|
public void drawCenter(TextureRegion region){
|
||||||
|
draw(region, (width() - region.getRegionWidth())/2, (height() - region.getRegionHeight())/2, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Draws a region at the center.*/
|
||||||
|
public void drawCenter(TextureRegion region, boolean flipx, boolean flipy){
|
||||||
|
draw(region, (width() - region.getRegionWidth())/2, (height() - region.getRegionHeight())/2, flipx, flipy);
|
||||||
|
}
|
||||||
|
|
||||||
/**Draws an image at the top left corner.*/
|
/**Draws an image at the top left corner.*/
|
||||||
public void draw(Image image){
|
public void draw(Image image){
|
||||||
draw(image, 0, 0);
|
draw(image, 0, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user