diff --git a/assets/sprites/blocks/production/mantle-pulverizer-bottom.png b/assets/sprites/blocks/production/mantle-pulverizer-bottom.png new file mode 100644 index 0000000..7c48b68 Binary files /dev/null and b/assets/sprites/blocks/production/mantle-pulverizer-bottom.png differ diff --git a/assets/sprites/blocks/production/mantle-pulverizer-light.png b/assets/sprites/blocks/production/mantle-pulverizer-light.png index bb58e2a..9ab555c 100644 Binary files a/assets/sprites/blocks/production/mantle-pulverizer-light.png and b/assets/sprites/blocks/production/mantle-pulverizer-light.png differ diff --git a/assets/sprites/blocks/production/mantle-pulverizer.png b/assets/sprites/blocks/production/mantle-pulverizer.png index d096efe..2fc34ce 100644 Binary files a/assets/sprites/blocks/production/mantle-pulverizer.png and b/assets/sprites/blocks/production/mantle-pulverizer.png differ diff --git a/assets/sprites/blocks/turrets/acidic.png b/assets/sprites/blocks/turrets/acidic.png deleted file mode 100644 index 020e376..0000000 Binary files a/assets/sprites/blocks/turrets/acidic.png and /dev/null differ diff --git a/assets/sprites/blocks/turrets/base/acidic-base.png b/assets/sprites/blocks/turrets/base/acidic-base.png new file mode 100644 index 0000000..2f564e5 Binary files /dev/null and b/assets/sprites/blocks/turrets/base/acidic-base.png differ diff --git a/assets/sprites/blocks/turrets/base/corrosive-base.png b/assets/sprites/blocks/turrets/base/corrosive-base.png new file mode 100644 index 0000000..43f4934 Binary files /dev/null and b/assets/sprites/blocks/turrets/base/corrosive-base.png differ diff --git a/assets/sprites/blocks/turrets/base/granite-base.png b/assets/sprites/blocks/turrets/base/granite-base.png new file mode 100644 index 0000000..2be2a08 Binary files /dev/null and b/assets/sprites/blocks/turrets/base/granite-base.png differ diff --git a/assets/sprites/blocks/turrets/base/hammer-base.png b/assets/sprites/blocks/turrets/base/hammer-base.png new file mode 100644 index 0000000..00656cc Binary files /dev/null and b/assets/sprites/blocks/turrets/base/hammer-base.png differ diff --git a/assets/sprites/blocks/turrets/base/press-base.png b/assets/sprites/blocks/turrets/base/press-base.png new file mode 100644 index 0000000..684238f Binary files /dev/null and b/assets/sprites/blocks/turrets/base/press-base.png differ diff --git a/assets/sprites/blocks/turrets/base/rain-base.png b/assets/sprites/blocks/turrets/base/rain-base.png new file mode 100644 index 0000000..0aef35a Binary files /dev/null and b/assets/sprites/blocks/turrets/base/rain-base.png differ diff --git a/assets/sprites/blocks/turrets/base/toxic-base.png b/assets/sprites/blocks/turrets/base/toxic-base.png new file mode 100644 index 0000000..6dfaebe Binary files /dev/null and b/assets/sprites/blocks/turrets/base/toxic-base.png differ diff --git a/assets/sprites/blocks/turrets/base/uno-base.png b/assets/sprites/blocks/turrets/base/uno-base.png new file mode 100644 index 0000000..189b920 Binary files /dev/null and b/assets/sprites/blocks/turrets/base/uno-base.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/hammer-cannon.png b/assets/sprites/blocks/turrets/calenmite/hammer-cannon.png new file mode 100644 index 0000000..d44c29d Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/hammer-cannon.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/hammer-preview.png b/assets/sprites/blocks/turrets/calenmite/hammer-preview.png new file mode 100644 index 0000000..091a3ce Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/hammer-preview.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/hammer-support.png b/assets/sprites/blocks/turrets/calenmite/hammer-support.png new file mode 100644 index 0000000..739eae5 Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/hammer-support.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/hammer.png b/assets/sprites/blocks/turrets/calenmite/hammer.png new file mode 100644 index 0000000..56cd675 Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/hammer.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/press-cannon.png b/assets/sprites/blocks/turrets/calenmite/press-cannon.png new file mode 100644 index 0000000..637fcaa Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/press-cannon.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/press-preview.png b/assets/sprites/blocks/turrets/calenmite/press-preview.png new file mode 100644 index 0000000..a99161a Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/press-preview.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/press-wing-l.png b/assets/sprites/blocks/turrets/calenmite/press-wing-l.png new file mode 100644 index 0000000..747b009 Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/press-wing-l.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/press-wing-r.png b/assets/sprites/blocks/turrets/calenmite/press-wing-r.png new file mode 100644 index 0000000..0d29540 Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/press-wing-r.png differ diff --git a/assets/sprites/blocks/turrets/calenmite/press.png b/assets/sprites/blocks/turrets/calenmite/press.png new file mode 100644 index 0000000..71ebe6e Binary files /dev/null and b/assets/sprites/blocks/turrets/calenmite/press.png differ diff --git a/assets/sprites/blocks/turrets/copremite/acidic-preview.png b/assets/sprites/blocks/turrets/copremite/acidic-preview.png new file mode 100644 index 0000000..a41a336 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/acidic-preview.png differ diff --git a/assets/sprites/blocks/turrets/copremite/acidic-wing-l.png b/assets/sprites/blocks/turrets/copremite/acidic-wing-l.png new file mode 100644 index 0000000..c3c8994 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/acidic-wing-l.png differ diff --git a/assets/sprites/blocks/turrets/copremite/acidic-wing-r.png b/assets/sprites/blocks/turrets/copremite/acidic-wing-r.png new file mode 100644 index 0000000..752feff Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/acidic-wing-r.png differ diff --git a/assets/sprites/blocks/turrets/copremite/acidic.png b/assets/sprites/blocks/turrets/copremite/acidic.png new file mode 100644 index 0000000..70fa27a Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/acidic.png differ diff --git a/assets/sprites/blocks/turrets/copremite/corrosive-blade-l.png b/assets/sprites/blocks/turrets/copremite/corrosive-blade-l.png new file mode 100644 index 0000000..74f1d91 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/corrosive-blade-l.png differ diff --git a/assets/sprites/blocks/turrets/copremite/corrosive-blade-r.png b/assets/sprites/blocks/turrets/copremite/corrosive-blade-r.png new file mode 100644 index 0000000..e6a7493 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/corrosive-blade-r.png differ diff --git a/assets/sprites/blocks/turrets/copremite/corrosive-preview.png b/assets/sprites/blocks/turrets/copremite/corrosive-preview.png new file mode 100644 index 0000000..fc73748 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/corrosive-preview.png differ diff --git a/assets/sprites/blocks/turrets/copremite/corrosive.png b/assets/sprites/blocks/turrets/copremite/corrosive.png new file mode 100644 index 0000000..02f7d14 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/corrosive.png differ diff --git a/assets/sprites/blocks/turrets/copremite/toxic-preview.png b/assets/sprites/blocks/turrets/copremite/toxic-preview.png new file mode 100644 index 0000000..1b49fa5 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/toxic-preview.png differ diff --git a/assets/sprites/blocks/turrets/copremite/toxic-shoot.png b/assets/sprites/blocks/turrets/copremite/toxic-shoot.png new file mode 100644 index 0000000..73aabb4 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/toxic-shoot.png differ diff --git a/assets/sprites/blocks/turrets/copremite/toxic.png b/assets/sprites/blocks/turrets/copremite/toxic.png new file mode 100644 index 0000000..d595477 Binary files /dev/null and b/assets/sprites/blocks/turrets/copremite/toxic.png differ diff --git a/assets/sprites/blocks/turrets/corrosive.png b/assets/sprites/blocks/turrets/corrosive.png deleted file mode 100644 index 1780988..0000000 Binary files a/assets/sprites/blocks/turrets/corrosive.png and /dev/null differ diff --git a/assets/sprites/blocks/turrets/granite.png b/assets/sprites/blocks/turrets/granite.png deleted file mode 100644 index 7d1516b..0000000 Binary files a/assets/sprites/blocks/turrets/granite.png and /dev/null differ diff --git a/assets/sprites/blocks/turrets/hammer.png b/assets/sprites/blocks/turrets/hammer.png deleted file mode 100644 index 5050013..0000000 Binary files a/assets/sprites/blocks/turrets/hammer.png and /dev/null differ diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-preview.png b/assets/sprites/blocks/turrets/mesulfate/granite-preview.png new file mode 100644 index 0000000..6dca765 Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/granite-preview.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-shoot.png b/assets/sprites/blocks/turrets/mesulfate/granite-shoot.png new file mode 100644 index 0000000..4d3c38a Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/granite-shoot.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-wing-l.png b/assets/sprites/blocks/turrets/mesulfate/granite-wing-l.png new file mode 100644 index 0000000..d4b81b4 Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/granite-wing-l.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png b/assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png new file mode 100644 index 0000000..12a4dac Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/granite.png b/assets/sprites/blocks/turrets/mesulfate/granite.png new file mode 100644 index 0000000..96bf47f Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/granite.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-cannon.png b/assets/sprites/blocks/turrets/mesulfate/rain-cannon.png new file mode 100644 index 0000000..5d11938 Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/rain-cannon.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png b/assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png new file mode 100644 index 0000000..99b0712 Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png b/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png new file mode 100644 index 0000000..b0a788f Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-preview.png b/assets/sprites/blocks/turrets/mesulfate/rain-preview.png new file mode 100644 index 0000000..fb0c65e Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/rain-preview.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/rain.png b/assets/sprites/blocks/turrets/mesulfate/rain.png new file mode 100644 index 0000000..fdc36da Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/rain.png differ diff --git a/assets/sprites/blocks/turrets/uno.png b/assets/sprites/blocks/turrets/mesulfate/uno-preview.png similarity index 100% rename from assets/sprites/blocks/turrets/uno.png rename to assets/sprites/blocks/turrets/mesulfate/uno-preview.png diff --git a/assets/sprites/blocks/turrets/mesulfate/uno-shoot.png b/assets/sprites/blocks/turrets/mesulfate/uno-shoot.png new file mode 100644 index 0000000..6ab9787 Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/uno-shoot.png differ diff --git a/assets/sprites/blocks/turrets/mesulfate/uno.png b/assets/sprites/blocks/turrets/mesulfate/uno.png new file mode 100644 index 0000000..e1e5c52 Binary files /dev/null and b/assets/sprites/blocks/turrets/mesulfate/uno.png differ diff --git a/assets/sprites/blocks/turrets/rain.png b/assets/sprites/blocks/turrets/rain.png deleted file mode 100644 index bbcc409..0000000 Binary files a/assets/sprites/blocks/turrets/rain.png and /dev/null differ diff --git a/assets/sprites/blocks/turrets/toxic.png b/assets/sprites/blocks/turrets/toxic.png deleted file mode 100644 index 99b6de2..0000000 Binary files a/assets/sprites/blocks/turrets/toxic.png and /dev/null differ diff --git a/build.gradle b/build.gradle index 1b753b2..aa357a0 100644 --- a/build.gradle +++ b/build.gradle @@ -28,8 +28,8 @@ allprojects{ } dependencies{ - compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" - compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion" + compileOnly "com.github.Anuken.Arc:arc-core:dfcb21ce56" + compileOnly "com.github.Anuken.MindustryJitpack:core:935b478139" annotationProcessor "com.github.Anuken:jabel:$jabelVersion" } diff --git a/mod.hjson b/mod.hjson index 82cdbf2..7081c90 100644 --- a/mod.hjson +++ b/mod.hjson @@ -4,5 +4,5 @@ author: "Uujuju" main: "oblivion.ProjectOblivion" description: "The technology of the oblivion awaits you..." version: 1 -minGameVersion: 135 +minGameVersion: 136 java: true diff --git a/src/oblivion/blocks/defense/StatusBomb.java b/src/oblivion/blocks/defense/StatusBomb.java index a503cd7..a806780 100644 --- a/src/oblivion/blocks/defense/StatusBomb.java +++ b/src/oblivion/blocks/defense/StatusBomb.java @@ -39,9 +39,9 @@ public TextureRegion[] icons() { @Override public void setBars() { super.setBars(); - bars.add("charge", entity -> new Bar(Core.bundle.get("stat.reload"), Color.valueOf("E6875C"), () -> ((StatusBombBuild) entity).reload/cooldownTime)); - bars.add("craftCharge", entity -> new Bar(Core.bundle.get("stat.productiontime"), Color.valueOf("FFA665"), () -> ((StatusBombBuild) entity).craftReload/craftTime)); - bars.add("capacity", entity -> new Bar(Core.bundle.get("stat.ammo"), Pal.lancerLaser, () -> ((float) ((StatusBombBuild) entity).shots/bombCapacity))); + addBar("charge", entity -> new Bar(Core.bundle.get("stat.reload"), Color.valueOf("E6875C"), () -> ((StatusBombBuild) entity).reload/cooldownTime)); + addBar("craftCharge", entity -> new Bar(Core.bundle.get("stat.productiontime"), Color.valueOf("FFA665"), () -> ((StatusBombBuild) entity).craftReload/craftTime)); + addBar("capacity", entity -> new Bar(Core.bundle.get("stat.ammo"), Pal.lancerLaser, () -> ((float) ((StatusBombBuild) entity).shots/bombCapacity))); } @Override @@ -69,7 +69,7 @@ public void buildConfiguration(Table table) { @Override public void updateTile() { - if (cons.valid() && shots < bombCapacity) { + if (efficiency > 0f && shots < bombCapacity) { craftReload += Time.delta; if (craftReload >= craftTime) { craftEffect.at(x, y); diff --git a/src/oblivion/blocks/production/ManualDrill.java b/src/oblivion/blocks/production/ManualDrill.java deleted file mode 100644 index d0633f5..0000000 --- a/src/oblivion/blocks/production/ManualDrill.java +++ /dev/null @@ -1,51 +0,0 @@ -package oblivion.blocks.production; - -import arc.*; -import arc.util.*; -import arc.scene.ui.layout.*; -import mindustry.ui.*; -import mindustry.gen.*; -import mindustry.graphics.*; -import mindustry.world.meta.*; -import mindustry.world.blocks.production.*; -import oblivion.blocks.meta.*; -// like abyss's but better(broken) -public class ManualDrill extends Drill { - public float holdTime = 60f, decayTime = 60f; - - public ManualDrill(String name) { - super(name); - } - - @Override - public void setBars() { - super.setBars(); - bars.add("holdTime", entity -> new Bar(Core.bundle.get("stat.hold"), Pal.accent, () -> ((ManualDrillBuild) entity).hold/holdTime)); - bars.add("decayTime", entity -> new Bar(Core.bundle.get("stat.decay"), Pal.accent, () -> ((ManualDrillBuild) entity).decay/decayTime)); - } - - @Override - public void setStats() { - super.setStats(); - stats.add(Stat.abilities, OblivionStatValues.chargeDrill(holdTime, decayTime)); - } - - public class ManualDrillBuild extends DrillBuild { - public float hold = 0f, decay = 0f; - - @Override - public float efficiency() { - return decay/decayTime; - } - - @Override - public void buildConfiguration(Table table) {{ - table.button(Icon.settings, () -> { - if (hold <= 0f) { - hold = holdTime; - decay = decayTime; - } - }); - }} - } -} \ No newline at end of file diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index ad1c5eb..217d1a4 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -8,13 +8,14 @@ import arc.graphics.g2d.*; import mindustry.gen.*; import mindustry.type.*; -import mindustry.ctype.*; import mindustry.world.*; import mindustry.content.*; import mindustry.graphics.*; import mindustry.world.meta.*; import mindustry.world.draw.*; +import mindustry.entities.part.*; import mindustry.entities.bullet.*; +import mindustry.entities.pattern.*; import mindustry.world.blocks.units.*; import mindustry.world.blocks.defense.*; import mindustry.world.blocks.production.*; @@ -27,7 +28,7 @@ import static mindustry.type.ItemStack.*; -public class OblivionBlocks implements ContentList { +public class OblivionBlocks { public static Block start, // lonela @@ -55,7 +56,6 @@ public class OblivionBlocks implements ContentList { mantlePulverizer, imperialDrill; - @Override public void load() { start = new Block("start"){{ buildVisibility = BuildVisibility.debugOnly; @@ -70,6 +70,7 @@ public void load() { Items.copper, 50, Items.lead, 80 )); + alwaysUnlocked = true; size = 3; health = 200; craftTime = 30f; @@ -100,11 +101,11 @@ public void load() { Draw.reset(); Fill.circle(bu.x, bu.y, (5f + Mathf.absin(5f, 1f)) /2f * bu.warmup); }; - consumes.items(with( + consumeItems(with( Items.copper, 2, Items.lead, 2 )); - consumes.power(1f); + consumePower(1f); outputItem = new ItemStack(OblivionResources.mesulfate, 1); }}; carbonicInfuser = new DrawableCrafter("carbonic-infuser") {{ @@ -139,11 +140,11 @@ public void load() { Drawf.tri(x, y, 4 * bu.warmup, 4 * bu.warmup, (i * 90) + 45 + Time.time); } }; - consumes.items(with( + consumeItems(with( OblivionResources.calenmite, 3, Items.silicon, 2 )); - consumes.power(1.5f); + consumePower(1.5f); outputItem = new ItemStack(OblivionResources.carmanite, 2); }}; cloroSynthetizer = new DrawableCrafter("cloro-synthetizer") {{ @@ -169,11 +170,11 @@ public void load() { Draw.reset(); Draw.rect(Core.atlas.find("oblivion-cloro-synthetizer-top"), bu.x, bu.y, 0f); }; - consumes.items(with( + consumeItems(with( OblivionResources.mesulfate, 1, Items.sporePod, 1 )); - consumes.power(0.5f); + consumePower(0.5f); outputItem = new ItemStack(OblivionResources.copremite, 1); }}; calonicKiln = new DrawableCrafter("calonic-kiln") {{ @@ -212,11 +213,11 @@ public void load() { Draw.reset(); Fill.circle(bu.x, bu.y, (5f + Mathf.absin(5f, 1f)) /2f * bu.warmup); }; - consumes.items(with( + consumeItems(with( OblivionResources.mesulfate, 1, Items.metaglass, 3 )); - consumes.power(0.25f); + consumePower(0.25f); outputItem = new ItemStack(OblivionResources.calenmite, 1); }}; moloniteSmelter = new DrawableCrafter("molonite-smelter") {{ @@ -251,15 +252,15 @@ public void load() { Drawf.tri(x, y, 4 * bu.warmup, 4 * bu.warmup, (i * 90) + 45 + Time.time); } }; - consumes.items(with( + consumeItems(with( OblivionResources.mesulfate, 5, Items.thorium, 4, Items.silicon, 6 )); - consumes.power(2.5f); + consumePower(2.5f); outputItem = new ItemStack(OblivionResources.mothalate, 1); }}; - + uno = new ItemTurret("uno") {{ requirements(Category.turret, with( OblivionResources.mesulfate, 10, @@ -268,9 +269,18 @@ public void load() { )); size = 1; health = 160; - reloadTime = 60f; + reload = 60f; range = 120f; + recoil = 0.2f; rotateSpeed = 10f; + drawer = new DrawTurret() {{ + parts.addAll( + new RegionPart("-shoot") {{ + moveY = -1f; + progress = PartProgress.reload.curve(Interp.pow2In); + }} + ); + }}; ammo( OblivionResources.mesulfate, new BasicBulletType(2f, 15) {{ lifetime = 60f; @@ -298,12 +308,33 @@ Items.silicon, new MissileBulletType(2f, 7) {{ )); size = 2; health = 640; - reloadTime = 10f; - spread = 4f; - shots = 2; - alternate = true; + reload = 10f; range = 184f; rotateSpeed = 7.5f; + recoil = 0.7f; + shoot = new ShootAlternate() {{ + spread = 7f; + }}; + drawer = new DrawTurret() {{ + parts.addAll( + new RegionPart("-cannon") {{ + x = 0f; + y = 2f; + moveY = -2f; + progress = PartProgress.reload.curve(Interp.pow2In); + under = true; + }} + ); + parts.addAll( + new RegionPart("-lock") {{ + x = 5.5f; + y = -2f; + moveRot = -45f; + progress = PartProgress.warmup; + mirror = true; + }} + ); + }}; ammo( OblivionResources.mesulfate, new BasicBulletType(5f, 20) {{ lifetime = 36.8f; @@ -314,8 +345,6 @@ OblivionResources.mesulfate, new BasicBulletType(5f, 20) {{ Items.graphite, new BasicBulletType(2f, 27) {{ lifetime = 73.6f; shootSound = Sounds.artillery; - frontColor = Color.valueOf("95ABD9"); - backColor = Color.valueOf("626F9B"); }}, Items.silicon, new MissileBulletType(2f, 17) {{ lifetime = 73.6f; @@ -335,12 +364,31 @@ Items.silicon, new MissileBulletType(2f, 17) {{ )); size = 3; health = 1440; - reloadTime = 90f; + reload = 90f; range = 240f; - shots = 4; - burstSpacing = 9f; inaccuracy = 8f; rotateSpeed = 5f; + recoil = 1f; + shoot = new ShootPattern() {{ + shots = 4; + }}; + drawer = new DrawTurret() {{ + parts.addAll( + new RegionPart("-wing") {{ + x = 6.6f; + y = -4f; + moveRot = -15f; + progress = PartProgress.warmup; + mirror = true; + }} + ); + parts.addAll( + new RegionPart("-shoot") {{ + moveY = -3f; + progress = PartProgress.reload; + }} + ); + }}; ammo( OblivionResources.mesulfate, new ArtilleryBulletType(3f, 35) {{ lifetime = 80f; @@ -361,8 +409,6 @@ Items.graphite, new ArtilleryBulletType(3f, 50) {{ splashDamageRadius = 20f; collides = true; shootSound = Sounds.shootBig; - frontColor = Color.valueOf("95ABD9"); - backColor = Color.valueOf("626F9B"); }}, Items.silicon, new ArtilleryBulletType(3f, 20) {{ lifetime = 80f; @@ -376,6 +422,7 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ }} ); }}; + toxic = new ItemTurret("toxic") {{ requirements(Category.turret, with( Items.graphite, 20, @@ -383,15 +430,21 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ )); size = 1; health = 180; - reloadTime = 45f; - spread = 4f; - shots = 2; - alternate = true; + reload = 45f; range = 13f * 8f; rotateSpeed = 7f; + recoil = 0.2f; + drawer = new DrawTurret() {{ + parts.addAll( + new RegionPart("-shoot") {{ + moveY = -1f; + progress = PartProgress.reload; + }} + ); + }}; ammo( OblivionResources.copremite, new BasicBulletType(1.5f, 8) {{ - lifetime = range/speed; + lifetime = 69f; /* unintentionally nice */ width = height = 8f; frontColor = Color.valueOf("74C272"); backColor = Color.valueOf("4F824B"); @@ -410,12 +463,25 @@ OblivionResources.copremite, new BasicBulletType(1.5f, 8) {{ )); size = 2; health = 180 * 4; - reloadTime = 30f; + reload = 30f; range = 18f * 8f; rotateSpeed = 6f; + recoil = 1.5f; + drawer = new DrawTurret() {{ + parts.addAll( + new RegionPart("-blade") {{ + x = 1.5f; + y = 2.5f; + moveX = 1f; + moveY = 1f; + progress = PartProgress.warmup; + under = mirror = true; + }} + ); + }}; ammo( OblivionResources.copremite, new BasicBulletType(2f, 13) {{ - lifetime = range/speed; + lifetime = 72f; width = height = 10f; frontColor = Color.valueOf("74C272"); backColor = Color.valueOf("4F824B"); @@ -435,12 +501,23 @@ OblivionResources.copremite, new BasicBulletType(2f, 13) {{ )); size = 3; health = 180 * 9; - reloadTime = 75f; + reload = 75f; range = 27f * 8f; rotateSpeed = 4.5f; + recoil = 2.25f; + drawer = new DrawTurret() {{ + parts.addAll( + new RegionPart("-wing") {{ + x = 7.75f; + y = -1.75f; + moveRot = -45f; + under = mirror = true; + }} + ); + }}; ammo( OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ - lifetime = range/speed; + lifetime = 86.4f; width = height = 13f; frontColor = Color.valueOf("74C272"); backColor = Color.valueOf("4F824B"); @@ -451,6 +528,7 @@ OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ }} ); }}; + hammer = new ItemTurret("hammer") {{ requirements(Category.turret, with( OblivionResources.calenmite, 40, @@ -459,17 +537,33 @@ OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ )); size = 2; health = 200 * 4; - reloadTime = 45f; + reload = 45f; range = 20f * 8f; rotateSpeed = 4.5f; + recoil = 1f; + drawer = new DrawTurret() {{ + parts.addAll( + new RegionPart("-support") {{ + moveY = -2f; + progress = PartProgress.reload.curve(Interp.pow2In); + }} + ); + parts.addAll( + new RegionPart("-cannon") {{ + moveY = -5f; + progress = PartProgress.reload.curve(Interp.pow2In); + }} + ); + }}; ammo( - OblivionResources.calenmite, new BasicBulletType(2f, 35) {{ - lifetime = range/speed; + OblivionResources.calenmite, new ArtilleryBulletType(2f, 35) {{ + lifetime = 90; width = height = 13f; frontColor = Color.white; backColor = Color.valueOf("DCDCDC"); hitEffect = OblivionFx.carmaniteHit; shootSound = Sounds.artillery; + collides = collidesTiles = collidesGround = collidesAir = true; }} ); }}; @@ -481,24 +575,44 @@ OblivionResources.calenmite, new BasicBulletType(2f, 35) {{ )); size = 3; health = 200 * 9; - reloadTime = 85f; + reload = 85f; range = 30f * 8f; - shots = 3; inaccuracy = 3f; - velocityInaccuracy = 0.9f; rotateSpeed = 4.5f; + recoil = 1.5f; + shoot = new ShootPattern() {{ + shots = 3; + }}; + drawer = new DrawTurret() {{ + parts.addAll( + new RegionPart("-wing") {{ + x = 6.5f; + y = -5f; + moveRot = 45f; + progress = PartProgress.warmup; + under = mirror = true; + }} + ); + parts.addAll( + new RegionPart("-cannon") {{ + moveY = -3f; + progress = PartProgress.reload.curve(Interp.pow2In); + }} + ); + }}; ammo( - OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ - lifetime = range/speed; + OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ + lifetime = 96; width = height = 17f; frontColor = Color.white; backColor = Color.valueOf("DCDCDC"); hitEffect = OblivionFx.carmaniteHit; shootSound = Sounds.artillery; + collides = collidesTiles = collidesGround = collidesAir = true; }} ); }}; - + inductionDrill = new Drill("induction-drill") {{ requirements(Category.production, with( Items.silicon, 25, @@ -510,8 +624,8 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ tier = 3; drillTime = 280f; hasPower = true; - consumes.power(1f); - consumes.liquid(Liquids.water, 0.06f).boost(); + consumePower(1f); + consumeLiquid(Liquids.water, 0.06f).boost(); }}; alomeriConveyor = new Conveyor("alomeri-conveyor") {{ @@ -534,7 +648,7 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 3; health = 200; - consumes.power(1.5f); + consumePower(1.5f); plans = Seq.with( new UnitPlan(OblivionUnits.slop, 60f * 25f, with(Items.silicon, 10, OblivionResources.mesulfate, 15)) ); @@ -547,7 +661,7 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 3; health = 200; - consumes.power(2f); + consumePower(2f); plans = Seq.with( new UnitPlan(OblivionUnits.pioli, 60f * 30f, with(Items.silicon, 6, OblivionResources.copremite, 20)) ); @@ -560,7 +674,7 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 3; health = 200; - consumes.power(2f); + consumePower(2f); plans = Seq.with( new UnitPlan(OblivionUnits.phi, 60f * 27f, with(Items.silicon, 6, OblivionResources.carmanite, 20)) ); @@ -572,8 +686,9 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 3; - consumes.power(3f); - consumes.items(with(Items.silicon, 40, Items.graphite, 40)); + health = 360; + consumePower(3f); + consumeItems(with(Items.silicon, 40, Items.graphite, 40)); constructTime = 60f * 10f; @@ -591,8 +706,9 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 5; - consumes.power(6f); - consumes.items(with(Items.silicon, 130, Items.titanium, 80, Items.metaglass, 40)); + health = 1200; + consumePower(6f); + consumeItems(with(Items.silicon, 130, Items.titanium, 80, Items.metaglass, 40)); constructTime = 60f * 30f; @@ -610,9 +726,10 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 7; - consumes.power(13f); - consumes.items(with(Items.silicon, 850, Items.titanium, 750, Items.plastanium, 650)); - consumes.liquid(Liquids.cryofluid, 1f); + health = 3035; + consumePower(13f); + consumeItems(with(Items.silicon, 850, Items.titanium, 750, Items.plastanium, 650)); + consumeLiquid(Liquids.cryofluid, 1f); constructTime = 60f * 60f * 1.5f; liquidCapacity = 60f; @@ -631,9 +748,10 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 9; - consumes.power(25f); - consumes.items(with(Items.silicon, 1000, Items.plastanium, 600, Items.surgeAlloy, 500, Items.phaseFabric, 350)); - consumes.liquid(Liquids.cryofluid, 3f); + health = 5830; + consumePower(25f); + consumeItems(with(Items.silicon, 1000, Items.plastanium, 600, Items.surgeAlloy, 500, Items.phaseFabric, 350)); + consumeLiquid(Liquids.cryofluid, 3f); constructTime = 60f * 60f * 4; liquidCapacity = 180f; @@ -652,9 +770,10 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 12; - consumes.power(30f); - consumes.items(with(Items.silicon, 2500, Items.plastanium, 1800, Items.surgeAlloy, 1000, OblivionResources.mothalate, 450)); - consumes.liquid(Liquids.cryofluid, 9f); + health = 7840; + consumePower(30f); + consumeItems(with(Items.silicon, 2500, Items.plastanium, 1800, Items.surgeAlloy, 1000, OblivionResources.mothalate, 450)); + consumeLiquid(Liquids.cryofluid, 9f); constructTime = 60f * 60f * 10; liquidCapacity = 360f; @@ -662,10 +781,11 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ new UnitType[]{UnitTypes.reign, OblivionUnits.republic}, new UnitType[]{UnitTypes.corvus, OblivionUnits.giga}, new UnitType[]{UnitTypes.toxopid, OblivionUnits.archaranid}, - new UnitType[]{UnitTypes.eclipse, OblivionUnits.bloodmoon} + new UnitType[]{UnitTypes.eclipse, OblivionUnits.bloodmoon}, + new UnitType[]{UnitTypes.omura, OblivionUnits.yetinus} ); }}; - + calamitySigil = new StatusBomb("calamity-sigil") {{ requirements(Category.units, with( OblivionResources.mothalate, 250, @@ -684,11 +804,11 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ status = OblivionStatuses.calamity; statusDuration = 600f; itemCapacity = 150; - consumes.items(with( + consumeItems(with( OblivionResources.mesulfate, 100, OblivionResources.mothalate, 5 )); - consumes.power(5f); + consumePower(5f); }}; fearSigil = new StatusBomb("fear-sigil") {{ requirements(Category.units, with( @@ -707,10 +827,10 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ statusDuration = 300f; itemCapacity = 100; bombCapacity = 15; - consumes.items(with( + consumeItems(with( OblivionResources.mothalate, 50 )); - consumes.power(3f); + consumePower(3f); }}; abyssSigil = new StatusBomb("abyss-sigil") {{ requirements(Category.units, with( @@ -730,11 +850,11 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ statusDuration = 150f; itemCapacity = 160; bombCapacity = 35; - consumes.items(with( + consumeItems(with( OblivionResources.mothalate, 10, OblivionResources.carmanite, 80 )); - consumes.power(7f); + consumePower(7f); }}; earthquake = new StatusBomb("earthquake") {{ @@ -753,10 +873,10 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ statusDuration = 60f; itemCapacity = 20; bombCapacity = 5; - consumes.items(with( + consumeItems(with( OblivionResources.carmanite, 10 )); - consumes.power(2f); + consumePower(2f); }}; // lamoni @@ -767,22 +887,31 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); health = 200; size = 3; - drillTime = 60f; + drillTime = 1200f; tier = 1; // holdTime = 300f; // decayTime = 300f; updateEffect = LamoniFx.imperialSmelt; }}; - mantlePulverizer = new DrawableCrafter("mantle-pulverizer") {{ - requirements(Category.production, with( + mantlePulverizer = new GenericCrafter("mantle-pulverizer") {{ + requirements(Category.crafting, with( OblivionResources.niobium, 200 )); health = 200; size = 3; craftTime = 10f; updateEffect = LamoniFx.imperialSmelt; - consumes.power(0.5f); + drawer = new DrawMulti( + new DrawRegion("-bottom"), + new DrawArcSmelt() {{ + flameColor = Color.valueOf("D1EFFF"); + midColor = Color.valueOf("8CA9E8"); + }}, + new DrawDefault(), + new DrawGlowRegion("-light") + ); + consumePower(0.5f); outputItem = new ItemStack(Items.sand, 1); }}; } diff --git a/src/oblivion/content/OblivionEnvironment.java b/src/oblivion/content/OblivionEnvironment.java index f03d0d2..eca3c07 100644 --- a/src/oblivion/content/OblivionEnvironment.java +++ b/src/oblivion/content/OblivionEnvironment.java @@ -1,12 +1,11 @@ package oblivion.content; -import mindustry.ctype.*; import mindustry.world.*; import mindustry.content.*; import mindustry.world.meta.*; import mindustry.world.blocks.environment.*; -public class OblivionEnvironment implements ContentList { +public class OblivionEnvironment { public static Block baletise, powderite, tobolite, driedpowder, baletiseWall, powderiteWall, toboliteWall, driedpowderWall, @@ -15,7 +14,6 @@ public class OblivionEnvironment implements ContentList { argeletineWall, goleteniraWall, malenatiteWall, paletolimeWall, mudoneWall, oreNiobium; - @Override public void load() { // lonela diff --git a/src/oblivion/content/OblivionPlanets.java b/src/oblivion/content/OblivionPlanets.java index d6a8907..ea8e8b6 100644 --- a/src/oblivion/content/OblivionPlanets.java +++ b/src/oblivion/content/OblivionPlanets.java @@ -8,14 +8,13 @@ import mindustry.graphics.g3d.*; import oblivion.planets.*; -public class OblivionPlanets implements ContentList { +public class OblivionPlanets { public static Planet berenit, lamoni, lonela; - @Override public void load() { - berenit = new Planet("berenit", Planets.sun, 0, 3f) {{ + berenit = new Planet("berenit", Planets.sun, 3f, 0) {{ bloom = true; accessible = false; orbitRadius = 750f; @@ -31,7 +30,7 @@ public void load() { Color.valueOf("FFE3A2") ); }}; - lamoni = new Planet("lamoni", berenit, 3, 1f) {{ + lamoni = new Planet("lamoni", berenit, 1f, 3) {{ generator = new LamoniPlanetGenerator(); meshLoader = () -> new HexMesh(this, 6); solarSystem = berenit; @@ -39,7 +38,7 @@ public void load() { accessible = true; alwaysUnlocked = true; }}; - lonela = new Planet("lonela", Planets.sun, 3, 1f) {{ + lonela = new Planet("lonela", Planets.sun, 1f, 3) {{ generator = new LonelaPlanetGenerator(); meshLoader = () -> new HexMesh(this, 6); cloudMeshLoader = () -> new MultiMesh( diff --git a/src/oblivion/content/OblivionResources.java b/src/oblivion/content/OblivionResources.java index e05f948..7d2b65e 100644 --- a/src/oblivion/content/OblivionResources.java +++ b/src/oblivion/content/OblivionResources.java @@ -1,16 +1,14 @@ package oblivion.content; import arc.graphics.*; -import mindustry.ctype.ContentList; import mindustry.type.*; -public class OblivionResources implements ContentList { +public class OblivionResources { // lonela public static Item mesulfate, calenmite, copremite, mothalate, carmanite, // lamoni niobium; - @Override public void load() { // lonela mesulfate = new Item("mesulfate", Color.valueOf("E86F6F")) {{cost = 2;}}; diff --git a/src/oblivion/content/OblivionSectors.java b/src/oblivion/content/OblivionSectors.java index e42d808..6740423 100644 --- a/src/oblivion/content/OblivionSectors.java +++ b/src/oblivion/content/OblivionSectors.java @@ -4,11 +4,10 @@ import mindustry.ctype.*; import oblivion.content.*; -public class OblivionSectors implements ContentList{ +public class OblivionSectors { public static SectorPreset newWorld, oldTown; - @Override public void load(){ newWorld = new SectorPreset("newWorld", OblivionPlanets.lonela, 15) {{ alwaysUnlocked = true; diff --git a/src/oblivion/content/OblivionStatuses.java b/src/oblivion/content/OblivionStatuses.java index 404990b..eb04940 100644 --- a/src/oblivion/content/OblivionStatuses.java +++ b/src/oblivion/content/OblivionStatuses.java @@ -1,13 +1,11 @@ package oblivion.content; import mindustry.type.*; -import mindustry.ctype.*; import mindustry.content.*; -public class OblivionStatuses implements ContentList { +public class OblivionStatuses { public static StatusEffect infested, calamity, fear, abyss; - @Override public void load() { infested = new StatusEffect("infested") {{ damage = 0.06f; diff --git a/src/oblivion/content/OblivionTechTree.java b/src/oblivion/content/OblivionTechTree.java index e82c01e..95e9046 100644 --- a/src/oblivion/content/OblivionTechTree.java +++ b/src/oblivion/content/OblivionTechTree.java @@ -1,186 +1,116 @@ package oblivion.content; -import arc.struct.Seq; +import arc.struct.*; +import arc.util.*; import mindustry.content.*; -import mindustry.content.TechTree.TechNode; -import mindustry.ctype.ContentList; -import mindustry.ctype.UnlockableContent; +import mindustry.entities.bullet.*; import mindustry.game.Objectives.*; -import mindustry.type.ItemStack; +import mindustry.type.*; +import mindustry.type.unit.*; +import mindustry.world.blocks.defense.turrets.*; -public class OblivionTechTree implements ContentList { - static TechTree.TechNode context = null; - - private static void extendNode (UnlockableContent parent, Runnable children) { - context = TechTree.all.find(t -> t.content == parent); - children.run(); - } - - private static void node (UnlockableContent content, ItemStack[] requirements, Seq objectives, Runnable children) { - TechNode node = new TechNode(context, content, requirements); - if (objectives != null) node.objectives = objectives; - - TechNode prev = context; - context = node; - children.run(); - context = prev; - } +import static mindustry.Vars.*; +import static mindustry.content.TechTree.*; - private static void node (UnlockableContent content, ItemStack[] requirements, Seq objectives) { - node(content, requirements, objectives, () -> { - }); - } - - private static void node (UnlockableContent content, Seq objectives) { - node(content, content.researchRequirements(), objectives, () -> { - }); - } - - private static void node (UnlockableContent content, ItemStack[] requirements) { - node(content, requirements, Seq.with(), () -> { - }); - } - - private static void node (UnlockableContent content, ItemStack[] requirements, Runnable children) { - node(content, requirements, null, children); - } - - private static void node (UnlockableContent content, Seq objectives, Runnable children) { - node(content, content.researchRequirements(), objectives, children); - } +public class OblivionTechTree { - private static void node (UnlockableContent content, Runnable children) { - node(content, content.researchRequirements(), children); - } - - private static void node (UnlockableContent block) { - node(block, () -> { - }); - } - - private static void nodeProduce (UnlockableContent content, Seq objectives, Runnable children) { - node(content, content.researchRequirements(), objectives.and(new Produce(content)), children); - } - - private static void nodeProduce (UnlockableContent content, Seq objectives) { - nodeProduce(content, objectives, () -> { - }); - } - - private static void nodeProduce (UnlockableContent content, Runnable children) { - nodeProduce(content, Seq.with(), children); - } + public void load() { + OblivionPlanets.lonela.techTree = nodeRoot("lonela", OblivionBlocks.start, true, () -> { + // items + nodeProduce(OblivionResources.mesulfate, Seq.with(new Produce(Items.silicon)), () -> { + nodeProduce(OblivionResources.calenmite, Seq.with(new Produce(Items.metaglass)), () -> { + nodeProduce(OblivionResources.carmanite, Seq.with(new Produce(Items.plastanium)), () -> {}); + }); + nodeProduce(OblivionResources.copremite, Seq.with(new Produce(Items.sporePod)), () -> { + nodeProduce(OblivionResources.mothalate, Seq.with(new Produce(OblivionResources.carmanite)), () -> {}); + }); + }); - private static void nodeProduce (UnlockableContent content) { - nodeProduce(content, Seq.with(), () -> { - }); - } + // crafters + node(OblivionBlocks.mesoForge, Seq.with(new Research(Blocks.siliconSmelter)), () -> { + node(OblivionBlocks.calonicKiln, Seq.with(new Research(Blocks.kiln)), () -> { + node(OblivionBlocks.carbonicInfuser); + }); + node(OblivionBlocks.cloroSynthetizer, Seq.with(new Research(Blocks.cultivator)), () -> { + node(OblivionBlocks.moloniteSmelter, Seq.with(new Research(OblivionBlocks.carbonicInfuser)), () -> {}); + }); + }); - @Override - public void load() { - extendNode(Blocks.coreShard, () -> { - node(OblivionBlocks.start, () -> { - nodeProduce(OblivionResources.mesulfate, Seq.with(new Produce(Items.silicon)), () -> { - nodeProduce(OblivionResources.calenmite, Seq.with(new Produce(Items.metaglass)), () -> { - nodeProduce(OblivionResources.carmanite, Seq.with(new SectorComplete(SectorPresets.stainedMountains))); - }); - nodeProduce(OblivionResources.copremite, Seq.with(new Produce(Items.sporePod)), () -> { - nodeProduce(OblivionResources.mothalate, Seq.with(new Produce(OblivionResources.carmanite))); + // turrets + node(OblivionBlocks.uno, Seq.with(new Produce(OblivionResources.mesulfate)), () -> { + node(OblivionBlocks.rain, Seq.with(new Research(Blocks.hail)), () -> { + node(OblivionBlocks.granite, Seq.with(new Research(Blocks.ripple)), () -> { + node(OblivionBlocks.fearSigil, Seq.with(new Produce(OblivionResources.mothalate)), () -> {}); + node(OblivionBlocks.calamitySigil, Seq.with(new Produce(OblivionResources.mothalate), new Produce(OblivionResources.mesulfate)), () -> {}); + node(OblivionBlocks.abyssSigil, Seq.with(new Produce(OblivionResources.mothalate), new Produce(OblivionResources.carmanite)), () -> {}); }); }); - node(OblivionBlocks.mesoForge, Seq.with(new Research(Blocks.siliconSmelter)), () -> { - node(OblivionBlocks.calonicKiln, Seq.with(new Research(Blocks.kiln)), () -> { - node(OblivionBlocks.carbonicInfuser); - }); - node(OblivionBlocks.cloroSynthetizer, Seq.with(new Research(Blocks.cultivator)), () -> { - node(OblivionBlocks.moloniteSmelter, Seq.with(new Research(OblivionBlocks.carbonicInfuser))); + node(OblivionBlocks.toxic, Seq.with(new Produce(OblivionResources.copremite)), () -> { + node(OblivionBlocks.corrosive, Seq.with(new Research(Blocks.salvo)), () -> { + node(OblivionBlocks.acidic, Seq.with(new Research(Blocks.spectre), new Research(Blocks.ripple)), () -> {}); }); }); - node(OblivionBlocks.uno, Seq.with(new Produce(OblivionResources.mesulfate)), () -> { - node(OblivionBlocks.rain, Seq.with(new SectorComplete(SectorPresets.craters)), () -> { - node(OblivionBlocks.granite, Seq.with(new SectorComplete(SectorPresets.ruinousShores), new Research(Blocks.ripple)), () -> { - node(OblivionBlocks.fearSigil, Seq.with(new Produce(OblivionResources.mothalate))); - node(OblivionBlocks.calamitySigil, Seq.with(new Produce(OblivionResources.mothalate), new Produce(OblivionResources.mesulfate))); - node(OblivionBlocks.abyssSigil, Seq.with(new Produce(OblivionResources.mothalate), new Produce(OblivionResources.carmanite))); - }); - }); - node(OblivionBlocks.toxic, Seq.with(new Produce(OblivionResources.copremite)), () -> { - node(OblivionBlocks.corrosive, Seq.with(new SectorComplete(SectorPresets.craters)), () -> { - node(OblivionBlocks.acidic, Seq.with(new SectorComplete(SectorPresets.ruinousShores), new Research(Blocks.ripple))); - }); - }); - node(OblivionBlocks.hammer, Seq.with(new Produce(OblivionResources.calenmite)), () -> { - node(OblivionBlocks.press, Seq.with(new SectorComplete(SectorPresets.craters))); + node(OblivionBlocks.hammer, Seq.with(new Produce(OblivionResources.calenmite)), () -> { + node(OblivionBlocks.press, Seq.with(new Research(Blocks.ripple)), () -> {}); + }); + }); + + // units + // old unit researching(may have requirements to each unit) + node(OblivionBlocks.solfreniteFactory, Seq.with(new Produce(OblivionResources.mesulfate)), () -> { + node(OblivionUnits.slop, () -> { + node(OblivionUnits.detra, Seq.with(new Research(OblivionBlocks.alphaReconstructor)), () -> { + node(OblivionUnits.tedri, Seq.with(new Research(OblivionBlocks.betaReconstructor)), () -> { + node(OblivionUnits.taleni, Seq.with(new Research(OblivionBlocks.gammaReconstructor)), () -> { + node(OblivionUnits.kolete, Seq.with(new Research(OblivionBlocks.omegaReconstructor)), () -> {}); + }); + }); }); }); - node(OblivionBlocks.solfreniteFactory, Seq.with(new Produce(OblivionResources.mesulfate)), () -> { - node(OblivionUnits.slop, () -> { - node(OblivionUnits.detra, Seq.with(new Research(OblivionBlocks.alphaReconstructor)), () -> { - node(OblivionUnits.tedri, Seq.with(new Research(OblivionBlocks.betaReconstructor)), () -> { - node(OblivionUnits.taleni, Seq.with(new Research(OblivionBlocks.gammaReconstructor)), () -> { - node(OblivionUnits.kolete, Seq.with(new Research(OblivionBlocks.omegaReconstructor))); + node(OblivionBlocks.infestromeniFactory, Seq.with(new Produce(OblivionResources.copremite)), () -> { + node(OblivionUnits.pioli, () -> { + node(OblivionUnits.taneki, Seq.with(new Research(OblivionBlocks.alphaReconstructor)), () -> { + node(OblivionUnits.notremite, Seq.with(new Research(OblivionBlocks.betaReconstructor)), () -> { + node(OblivionUnits.dopretile, Seq.with(new Research(OblivionBlocks.gammaReconstructor)), () -> { + node(OblivionUnits.niboletra, Seq.with(new Research(OblivionBlocks.omegaReconstructor)), () -> {}); }); }); }); }); - node(OblivionBlocks.infestromeniFactory, Seq.with(new Produce(OblivionResources.copremite)), () -> { - node(OblivionUnits.pioli, () -> { - node(OblivionUnits.taneki, Seq.with(new Research(OblivionBlocks.alphaReconstructor)), () -> { - node(OblivionUnits.notremite, Seq.with(new Research(OblivionBlocks.betaReconstructor)), () -> { - node(OblivionUnits.dopretile, Seq.with(new Research(OblivionBlocks.gammaReconstructor)), () -> { - node(OblivionUnits.niboletra, Seq.with(new Research(OblivionBlocks.omegaReconstructor))); - }); - }); - }); - }); - }); - node(OblivionBlocks.functiveFactory, Seq.with(new Produce(OblivionResources.carmanite)), () -> { - node(OblivionUnits.phi, () -> { - node(OblivionUnits.root, Seq.with(new Research(OblivionBlocks.alphaReconstructor)), () -> { - node(OblivionUnits.multi, Seq.with(new Research(OblivionBlocks.betaReconstructor)), () -> { - node(OblivionUnits.pow, Seq.with(new Research(OblivionBlocks.gammaReconstructor)), () -> { - node(OblivionUnits.expo, Seq.with(new Research(OblivionBlocks.omegaReconstructor))); - }); - }); - }); + }); + node(OblivionBlocks.functiveFactory, Seq.with(new Produce(OblivionResources.carmanite)), () -> { + node(OblivionUnits.phi, () -> { + node(OblivionUnits.root, Seq.with(new Research(OblivionBlocks.alphaReconstructor)), () -> { + node(OblivionUnits.multi, Seq.with(new Research(OblivionBlocks.betaReconstructor)), () -> { + node(OblivionUnits.pow, Seq.with(new Research(OblivionBlocks.gammaReconstructor)), () -> { + node(OblivionUnits.expo, Seq.with(new Research(OblivionBlocks.omegaReconstructor)), () -> {}); + }); + }); }); }); }); node(OblivionBlocks.alphaReconstructor, ItemStack.with(), Seq.with(new Research(Blocks.additiveReconstructor)), () -> { node(OblivionBlocks.betaReconstructor, ItemStack.with(), Seq.with(new Research(Blocks.multiplicativeReconstructor)), () -> { node(OblivionBlocks.gammaReconstructor, ItemStack.with(), Seq.with(new Research(Blocks.exponentialReconstructor)), () -> { - node(OblivionBlocks.omegaReconstructor, ItemStack.with(), Seq.with(new Research(Blocks.tetrativeReconstructor))); + node(OblivionBlocks.omegaReconstructor, ItemStack.with(), Seq.with(new Research(Blocks.tetrativeReconstructor)), () -> {}); }); }); }); }); - node(OblivionSectors.newWorld, Seq.with( - new SectorComplete(OblivionSectors.newWorld), - new Research(OblivionBlocks.mesoForge) - ), () -> { - node(OblivionSectors.oldTown, Seq.with( - new SectorComplete(OblivionSectors.oldTown), - new Research(OblivionBlocks.solfreniteFactory) - )); + + // sectors + node(OblivionSectors.newWorld, Seq.with(new Research(OblivionBlocks.mesoForge)), () -> { + node(OblivionSectors.oldTown, Seq.with(new Research(OblivionBlocks.solfreniteFactory)), () -> {}); }); - }); - extendNode(Blocks.tetrativeReconstructor, () -> { - node(OblivionBlocks.mandlebrotReconstructor, Seq.with(new Produce(OblivionResources.mothalate), new Research(UnitTypes.reign))); + + // skill issue + // t6 + node(OblivionBlocks.mandlebrotReconstructor, Seq.with(new Produce(OblivionResources.mothalate), new Research(UnitTypes.reign)), () -> {}); + node(OblivionUnits.republic, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor)), () -> {}); + node(OblivionUnits.giga, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor)), () -> {}); + node(OblivionUnits.archaranid, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor)), () -> {}); + node(OblivionUnits.bloodmoon, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor)), () -> {}); + node(OblivionUnits.yetinus, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor)), () -> {}); }); - extendNode(UnitTypes.reign, () -> { - node(OblivionUnits.republic, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor))); - }); - extendNode(UnitTypes.corvus, () -> { - node(OblivionUnits.giga, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor))); - }); - extendNode(UnitTypes.toxopid, () -> { - node(OblivionUnits.archaranid, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor))); - }); - extendNode(UnitTypes.eclipse, () -> { - node(OblivionUnits.bloodmoon, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor))); - }); - extendNode(UnitTypes.omura, () -> { - node(OblivionUnits.yetinus, Seq.with(new Research(OblivionBlocks.mandlebrotReconstructor))); - }); } } \ No newline at end of file diff --git a/src/oblivion/content/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java index 1ec4ae7..ff2c344 100644 --- a/src/oblivion/content/OblivionUnits.java +++ b/src/oblivion/content/OblivionUnits.java @@ -10,12 +10,12 @@ import mindustry.content.*; import mindustry.graphics.*; import mindustry.entities.bullet.*; +import mindustry.entities.pattern.*; import mindustry.entities.abilities.*; -import mindustry.ctype.ContentList; import oblivion.type.*; import oblivion.graphics.*; -public class OblivionUnits implements ContentList { +public class OblivionUnits{ public static UnitType slop, detra, tedri, taleni, kolete, pioli, taneki, notremite, dopretile, niboletra, @@ -23,7 +23,6 @@ public class OblivionUnits implements ContentList { republic, giga, archaranid, bloodmoon, yetinus; - @Override public void load() { slop = new UnitType("slop") {{ health = 240; @@ -67,13 +66,13 @@ public void load() { reload = 60f; shootSound = Sounds.artillery; bullet = new ArtilleryBulletType(1.5f, 30) {{ - hitEffect = Fx.blastExplosion; + hitEffect = Fx.blastExplosion; lifetime = 101f; knockback = 0.6f; collides = true; collidesTiles = true; - splashDamageRadius = 35f; - splashDamage = 20f; + splashDamageRadius = 35f; + splashDamage = 20f; frontColor = OblivionPal.mesoMedium; backColor = OblivionPal.mesoDark; }}; @@ -108,8 +107,6 @@ public void load() { y = 6f; mirror = false; reload = 150f; - shots = 5; - shotDelay = 10f; shake = 3; shootSound = Sounds.shootBig; bullet = new BasicBulletType(3f, 34) {{ @@ -117,6 +114,17 @@ public void load() { lifetime = 66.6f; //ohno ohfu- frontColor = OblivionPal.mesoMedium; backColor = OblivionPal.mesoDark; + for (int i = 1; i <= 5; i++) { + float speedMultiplier = 3f / i; + spawnBullets.addAll( + new BasicBulletType(speedMultiplier, 7) {{ + width = height = 5f; + lifetime = 66.6f; + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + }} + ); + } }}; }} ); @@ -149,9 +157,11 @@ public void load() { x = 15.25f; y = 4f; reload = 35f; - shots = 3; - shotDelay = 5f; shootSound = Sounds.shootBig; + shoot = new ShootPattern() {{ + shots = 3; + shotDelay = 5f; + }}; bullet = new BasicBulletType(6f, 40) {{ width = height = 10f; lifetime = 50f; @@ -165,9 +175,11 @@ public void load() { x = 15f; y = -14f; reload = 35f; - shots = 3; - shotDelay = 5f; shootSound = Sounds.shootBig; + shoot = new ShootPattern() {{ + shots = 3; + shotDelay = 5f; + }}; bullet = new BasicBulletType(6f, 40) {{ width = height = 10f; lifetime = 50f; @@ -215,10 +227,11 @@ public void load() { y = -12f; reload = 90f; range = 300f; - shots = 4; inaccuracy = 15f; - velocityRnd = 0.6f; shootSound = Sounds.artillery; + shoot = new ShootPattern() {{ + shots = 4; + }}; bullet = new BasicBulletType(11f, 100) {{ drag = 0.04f; width = height = 12f; @@ -458,7 +471,7 @@ public void load() { rotateSpeed = 1.4f; armor = 20f; mechStepParticles = true; - mechStepShake = 0.75f; + mechLandShake = 3f; canBoost = true; drownTimeMultiplier = 10f; mechFrontSway = 0.2f; @@ -474,10 +487,12 @@ public void load() { recoil = 10f; shootY = 12f; shootSound = Sounds.shootBig; - shots = 3; - shotDelay = 5f; shake = 5f; top = false; + shoot = new ShootPattern() {{ + shots = 3; + shotDelay = 5f; + }}; bullet = new BasicBulletType(8f, 150) {{ pierce = true; pierceCap = 7; @@ -529,18 +544,15 @@ public void load() { armor = 13f; speed = 0.3f; hitSize = 32f; - landShake = 1.5f; rotateSpeed = 1.5f; drownTimeMultiplier = 6f; - commandLimit = 8; constructor = LegsUnit::create; legCount = 6; legLength = 30f; legBaseOffset = 15f; legMoveSpace = 1.5f; - legTrns = 0.58f; + legForwardScl = 0.58f; hovering = true; - visualElevation = 0.2f; groundLayer = Layer.legUnit; range = 400f; weapons.add( @@ -566,7 +578,9 @@ public void load() { shootY = 2f; shootSound = Sounds.missile; alternate = true; - shots = 6; + shoot = new ShootPattern() {{ + shots = 6; + }}; inaccuracy = 7f; bullet = new MissileBulletType(4f, 40) {{ healPercent = 0.1f; @@ -585,10 +599,12 @@ public void load() { shake = 20f; shootSound = Sounds.laserblast; chargeSound = Sounds.lasercharge; - firstShotDelay = Fx.greenLaserCharge.lifetime; top = false; mirror = false; continuous = true; + shoot = new ShootPattern() {{ + firstShotDelay = Fx.greenLaserCharge.lifetime; + }}; bullet = new ContinuousLaserBulletType(210) {{ healPercent = 0.4f; lifetime = 60f; @@ -610,14 +626,12 @@ public void load() { legLength = 100f; legExtension = -20; legBaseOffset = 10f; - landShake = 1f; legLengthScl = 0.93f; legSpeed = 0.19f; legSplashDamage = 80; legSplashRange = 60; hitSize = 32f; hovering = true; - visualElevation = 0.95f; groundLayer = Layer.legUnit; constructor = LegsUnit::create; range = 45f * 8f; @@ -724,7 +738,7 @@ public void load() { ); }}; - yetinus = new OblivionUnitType("yetinus") {{ + yetinus = new UnitType("yetinus") {{ health = 65000; speed = 0.3f; drag = 0.18f; @@ -732,12 +746,10 @@ public void load() { armor = 25f; accel = 0.19f; rotateSpeed = 0.3f; - rotateShooting = true; constructor = UnitWaterMove::create; trailLength = 70; - trailX = 23f; - trailY = -32f; - trailScl = 3.5f; + waveTrailX = 23f; + waveTrailY = -32f; range = 600f; maxRange = range; weapons.add( @@ -759,7 +771,6 @@ public void load() { width = height = 40; homingRange = 600f; homingPower = 0.1f; - hitEffect = Fx.impactShockwave; hitColor = Pal.bulletYellow; smokeEffect = Fx.shootBig2; }}; @@ -771,7 +782,6 @@ public void load() { rotate = true; rotateSpeed = 1.5f; mirror = false; - rotate = true; recoil = 2f; shootY = 4f; shootSound = Sounds.laser; @@ -865,12 +875,14 @@ public void load() { x = 15.75f; y = 0f; reload = 90f; - shots = 3; - shotDelay = 5f; shake = 3f; top = false; shootY = 12f; shootSound = Sounds.shootBig; + shoot = new ShootPattern() {{ + shots = 3; + shotDelay = 5f; + }}; bullet = new BasicBulletType(4f, 45) {{ width = height = 13f; lifetime = 6.6f * 8f; @@ -918,8 +930,10 @@ public void load() { x = 18f; y = 0f; reload = 50f; - shots = 5; - shotDelay = 5f; + shoot = new ShootPattern() {{ + shots = 5; + shotDelay = 5f; + }}; shake = 5f; shootY = 18f; shootCone = 15f; @@ -937,10 +951,11 @@ public void load() { x = 8.25f; y = -6.5f; reload = 90f; - shots = 3; + shoot = new ShootPattern() {{ + shots = 3; + }}; inaccuracy = 10; shake = 7f; - velocityRnd = 0.1f; shootSound = Sounds.artillery; bullet = new ArtilleryBulletType(2f, 40) {{ lifetime = 12 * 8f; @@ -958,10 +973,11 @@ public void load() { y = 7.75f; flipSprite = true; reload = 90f; - shots = 3; + shoot = new ShootPattern() {{ + shots = 3; + }}; inaccuracy = 10; shake = 7f; - velocityRnd = 0.1f; shootSound = Sounds.artillery; bullet = new ArtilleryBulletType(2f, 40) {{ lifetime = 12 * 8f; diff --git a/src/oblivion/type/OblivionUnitType.java b/src/oblivion/type/OblivionUnitType.java index b21fe40..6a6490b 100644 --- a/src/oblivion/type/OblivionUnitType.java +++ b/src/oblivion/type/OblivionUnitType.java @@ -12,9 +12,8 @@ import mindustry.Vars; -// engineSize and engineOffset is now useless {: +// lazy to remove class and rework depending units public class OblivionUnitType extends UnitType { - private static final Vec2 legOffset = new Vec2(); public Cons engineDrawer = unit -> {}, topDrawer = unit -> {}; public OblivionUnitType(String name) { @@ -22,7 +21,7 @@ public OblivionUnitType(String name) { } @Override - public void drawEngine(Unit unit) { + public void drawEngines(Unit unit) { engineDrawer.get(unit); } } \ No newline at end of file