From ada9e6234b428e4a71c6ba911bd126d21affb052 Mon Sep 17 00:00:00 2001 From: uujuju <84468589+uujuju1@users.noreply.github.com> Date: Thu, 12 May 2022 12:30:52 -0300 Subject: [PATCH 01/61] Update build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1b753b2..61fec6c 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ allprojects{ dependencies{ compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" - compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion" + compileOnly "com.github.Anuken.Mindustry:core:1d8d0f4a36a59579d75a2b2618320d940e6241fe" annotationProcessor "com.github.Anuken:jabel:$jabelVersion" } From 39b2caca384d5ea218a6270ed5d6d2a6080cdb3b Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 13:23:10 -0300 Subject: [PATCH 02/61] maybe --- .../production/mantle-pulverizer-light.png | Bin 776 -> 7652 bytes .../blocks/production/mantle-pulverizer.png | Bin 2404 -> 2317 bytes build.gradle | 6 +++++- src/oblivion/content/OblivionBlocks.java | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/sprites/blocks/production/mantle-pulverizer-light.png b/assets/sprites/blocks/production/mantle-pulverizer-light.png index bb58e2a58289294d66ffd0b9e80c6582765fec00..d12af3b7779a0f49f2805e7c0c670eb6be511cca 100644 GIT binary patch literal 7652 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 Hu0mjf!aho3 delta 2373 zcmV-L3A*-;666w)IDZKiNkl- zK_sV@g`g+_g%Cl!2ug$vco9JfBp1b8L{B1uh$7jGhnzw@xPRj63L)zu9)uux*c>+X z?CGtpuIjFy8N+_?;Jr6JHPhcW)!oxo)6?_yq3>4#00xIgp?^)-vwt$U?ac908G$v6C$MW({X=rBDjXFE1gT@kiy8w>8dW!o71@#{~5Q+$n& zKRYZcXE|)Ve(7qEB)@)^_1Uw3GFp#LXv6Z-T-W%W+bip~<9|{@LuD!3CC2QOP3qVw z^`Yz_V$D%dfT8V2VSeUG_qTfx|A3N{=E}JCO5QNJwtqR&QtFc`0@())Z9iK1Jv{b) z^n^Iqm0nf<{5c~kmkX|0b&*o1@rl0RKGemv&I5e%0ifauT4-FlZAdwHttSMVAPuw~ z*Z%=rojDPFtP^12(b;u{xF*Po{JNSS%VTLp5H&#nRT0`q{^I;B`6+qK5Tqi61{c95 zXyMV>)_;kF+cm7tM;3LZev}g>*#Us!^ zFd`n8Tab@s>k=X7J_$h41Zm0tZtq?ISPSgrW?E>-&)FvgZ4;{DN+duk`3R{9)Rmb- zB!9K9_TB(dN`$BYx#S~KM4$+KeE%8y@!{G?B_B~j1Xchm@(~&lLgdE~5+Rp-gtZ7} z_W?2T5mFHj-g{p8Eg?Tt*0+@ltq2@U1dx)Ch>39b)-?clO`L{&1nz@2(54lvM997m z(2|e9EIfaR>JxSF-g7wFTiy5Dhkuhce}CNZ_PTw2+n;~=Rm$m-SQ8nbJ%P#(qCBDE0TlTNDqBK=lfAD1Ab;E> zxL4xh{A|S&G^BIjJR;-?I4zPoe3d2ycRipa`Tlo=UwPLPtjLeqqCCN!lS-YLm8Qmb z0Lqh3{TI6O28TyY$wx>KB7+Y5maALhX{-Fvz3R*I{?*;FO3LV!6@=SJUOGXVSfo~UP(Li znwm0+B6O&zzJ%D+v_%(9l8@jf_oR@BK$SUj{FHra;s$is5TIdf2+%M#1ZWr=0yK;c zm1HW3PD#qd@L+l@+eR+@IC2U!%jmc`cKW|jkSl_QSgi=uO-+*`P~=lLj~q15qq$`< zskz$(ZSL8XbX9ZvNbfAC_J18xA2%1&w6yfj9g(uo;o$ISC8NC32XKKI4ml#=9DAK2 zAo*^Xv<~tC*2e}!L3s&6F<*f4>4G_!ez8eSzGYyB90k=O0v8pl8-4;;ol!A1F)IZU z5klnG(F}z`k|;v$AxSOoH1HcDjEPq9C|EpVsseOln zGq`Ss21Rtq+@Nj~R9XZ|kh(-bTT})fl^){~UOF*rU2bTIY&SpDIyF&}r>TvaaROon zUdjB>(9&hWkR(E~VAJjc=Tgou2uYr%#v@{7CAp|t_{q7&7i_9qgcCdFMAH@zrpKaL z3wLi_GkJOw5n2RLvVUL`yIP8b!8LIy%~5P^At}rPGS(vasf*gB3OHL7G$L4$4-gSRyMHjBl?W;6f?S!$_n)z; zlL(0jTJmEYik2+n9yX@NyE%P=Pn0%5;=>n`nlF)U-<}eAJ9~D1d#Wjb}C#EN|6s>uxcXr?k)g*bEHjkr@)afX@XqrK5&kGURttX z6W0WpEL&Np2!A=yl8;_|=k^LIf^@a4;>%XX-tVPtjA|s1#?$Y2PE(ln8A&mUfmn>pfz1i0~%C zs?MslB2wO{_a?vOE$7_L(o%es5@CMkNpc3B29nhv0n*5ypLr5|0cuiO3P*@LIh8w9 z^9e~^G=C%p=}Sse>f_hJwVgB!1(11y=1QT;QdeUMPmm5SQtCt5arxom%&Z3>LWEdc zsU_B{tNR!nKmP0CeTW304r19%XbB444O905bqGuy$F(h72$8I zi+tanZ`-{v{N_mP0d*iom~=*Td1579ZT7HU^kZ600000NkvXXu0mjfz(!r^ diff --git a/build.gradle b/build.gradle index 61fec6c..41f46b3 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,11 @@ allprojects{ dependencies{ compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" - compileOnly "com.github.Anuken.Mindustry:core:1d8d0f4a36a59579d75a2b2618320d940e6241fe" + compileOnly("com.github.Anuken.Mindustry:core") { + version() { + branch = 'master' + } + } annotationProcessor "com.github.Anuken:jabel:$jabelVersion" } diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index ad1c5eb..c0390e7 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -767,7 +767,7 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); health = 200; size = 3; - drillTime = 60f; + drillTime = 1200f; tier = 1; // holdTime = 300f; // decayTime = 300f; From bc2961c66e8267fb91f305ad4c51b34ed598494b Mon Sep 17 00:00:00 2001 From: uujuju <84468589+uujuju1@users.noreply.github.com> Date: Thu, 12 May 2022 13:26:19 -0300 Subject: [PATCH 03/61] Update build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 41f46b3..74f2faf 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ allprojects{ dependencies{ compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" - compileOnly("com.github.Anuken.Mindustry:core") { + compileOnly("com.github.Anuken.Mindustry:core:master") { version() { branch = 'master' } From 6200d806d228b2f5df764ab8c1290d413fb56a90 Mon Sep 17 00:00:00 2001 From: uujuju <84468589+uujuju1@users.noreply.github.com> Date: Thu, 12 May 2022 13:38:56 -0300 Subject: [PATCH 04/61] Update build.gradle --- build.gradle | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 74f2faf..6c5d545 100644 --- a/build.gradle +++ b/build.gradle @@ -29,10 +29,7 @@ allprojects{ dependencies{ compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" - compileOnly("com.github.Anuken.Mindustry:core:master") { - version() { - branch = 'master' - } + compileOnly "com.github.Anuken.Mindustry:core:master"} } annotationProcessor "com.github.Anuken:jabel:$jabelVersion" } From 0f723e341685a909e0698c4f8431ce86960e6d56 Mon Sep 17 00:00:00 2001 From: uujuju <84468589+uujuju1@users.noreply.github.com> Date: Thu, 12 May 2022 13:41:16 -0300 Subject: [PATCH 05/61] Update build.gradle --- build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 6c5d545..33b427e 100644 --- a/build.gradle +++ b/build.gradle @@ -29,8 +29,7 @@ allprojects{ dependencies{ compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" - compileOnly "com.github.Anuken.Mindustry:core:master"} - } + compileOnly "com.github.Anuken.Mindustry:core:master" annotationProcessor "com.github.Anuken:jabel:$jabelVersion" } From f26900a830ff5903c0771462764269394b748100 Mon Sep 17 00:00:00 2001 From: uujuju <84468589+uujuju1@users.noreply.github.com> Date: Thu, 12 May 2022 14:15:37 -0300 Subject: [PATCH 06/61] Update build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 33b427e..b7320b7 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ allprojects{ dependencies{ compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion" - compileOnly "com.github.Anuken.Mindustry:core:master" + compileOnly "com.github.Anuken.Mindustry:core:master-SNAPSHOT" annotationProcessor "com.github.Anuken:jabel:$jabelVersion" } From 9d2c7757eda1bc3ef5d7b7e7789158bc82f17954 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 14:43:16 -0300 Subject: [PATCH 07/61] remove most stuff --- src/oblivion/blocks/defense/StatusBomb.java | 116 -- .../blocks/meta/OblivionStatValues.java | 40 - .../blocks/production/DrawableCrafter.java | 31 - .../blocks/production/ManualDrill.java | 51 - src/oblivion/content/OblivionBlocks.java | 12 +- src/oblivion/content/OblivionPlanets.java | 58 - src/oblivion/content/OblivionSectors.java | 26 - src/oblivion/content/OblivionStatuses.java | 33 - src/oblivion/content/OblivionTechTree.java | 186 --- src/oblivion/content/OblivionUnits.java | 1017 ----------------- .../planets/LamoniPlanetGenerator.java | 417 ------- .../planets/LonelaPlanetGenerator.java | 655 ----------- src/oblivion/type/OblivionUnitType.java | 28 - 13 files changed, 8 insertions(+), 2662 deletions(-) delete mode 100644 src/oblivion/blocks/defense/StatusBomb.java delete mode 100644 src/oblivion/blocks/meta/OblivionStatValues.java delete mode 100644 src/oblivion/blocks/production/DrawableCrafter.java delete mode 100644 src/oblivion/blocks/production/ManualDrill.java delete mode 100644 src/oblivion/content/OblivionPlanets.java delete mode 100644 src/oblivion/content/OblivionSectors.java delete mode 100644 src/oblivion/content/OblivionStatuses.java delete mode 100644 src/oblivion/content/OblivionTechTree.java delete mode 100644 src/oblivion/content/OblivionUnits.java delete mode 100644 src/oblivion/planets/LamoniPlanetGenerator.java delete mode 100644 src/oblivion/planets/LonelaPlanetGenerator.java delete mode 100644 src/oblivion/type/OblivionUnitType.java diff --git a/src/oblivion/blocks/defense/StatusBomb.java b/src/oblivion/blocks/defense/StatusBomb.java deleted file mode 100644 index a503cd7..0000000 --- a/src/oblivion/blocks/defense/StatusBomb.java +++ /dev/null @@ -1,116 +0,0 @@ -package oblivion.blocks.defense; - -import arc.*; -import arc.util.*; -import arc.util.io.*; -import arc.graphics.*; -import arc.graphics.g2d.*; -import arc.scene.ui.layout.*; -import mindustry.ui.*; -import mindustry.gen.*; -import mindustry.type.*; -import mindustry.world.*; -import mindustry.content.*; -import mindustry.entities.*; -import mindustry.graphics.*; -import mindustry.world.meta.*; -import oblivion.blocks.meta.*; -// aka status field block with funky lore -public class StatusBomb extends Block { - public StatusEffect status; - public float statusDuration = 60f; - public Effect craftEffect = Fx.none, shootEffect = Fx.none; - public TextureRegion rotator; - public float range = 80f, craftTime = 60f, cooldownTime = 60f; - public int bombCapacity = 10; - - public StatusBomb(String name) { - super(name); - solid = destructible = true; - sync = update = true; - configurable = true; - } - - @Override - public TextureRegion[] icons() { - return new TextureRegion[]{region, rotator}; - } - - @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))); - } - - @Override - public void load() { - super.load(); - rotator = Core.atlas.find(name + "-rotator"); - } - - @Override - public void setStats() { - super.setStats(); - stats.add(Stat.range, range/8, StatUnit.blocks); - stats.add(Stat.productionTime, craftTime/60, StatUnit.seconds); - stats.add(Stat.abilities, OblivionStatValues.displayStatus(status, statusDuration)); - } - - public class StatusBombBuild extends Building { - public int shots = 0; - public float reload = 0f, craftReload = 0f; - - @Override - public void buildConfiguration(Table table) { - table.button(Icon.upload, () -> {shoot();}); - } - - @Override - public void updateTile() { - if (cons.valid() && shots < bombCapacity) { - craftReload += Time.delta; - if (craftReload >= craftTime) { - craftEffect.at(x, y); - craftReload = 0f; - consume(); - shots++; - } - } - if (reload >= 0) reload -= Time.delta; - } - - @Override - public void draw() { - super.draw(); - Draw.rect(rotator, x, y, Time.time); - } - - public void shoot() { - if (shots > 0 && reload <= 0) { - shootEffect.at(x, y); - Damage.status(team, x, y, range, status, statusDuration, true, true); - reload = cooldownTime; - shots--; - } - } - - @Override - public void write(Writes write){ - super.write(write); - write.f(reload); - write.f(craftReload); - write.i(shots); - - } - - @Override - public void read(Reads read, byte revision){ - super.read(read, revision); - reload = read.f(); - craftReload = read.f(); - shots = read.i(); - } - } -} \ No newline at end of file diff --git a/src/oblivion/blocks/meta/OblivionStatValues.java b/src/oblivion/blocks/meta/OblivionStatValues.java deleted file mode 100644 index 41b603b..0000000 --- a/src/oblivion/blocks/meta/OblivionStatValues.java +++ /dev/null @@ -1,40 +0,0 @@ -package oblivion.blocks.meta; - -import arc.*; -import arc.scene.ui.*; -import mindustry.gen.*; -import mindustry.type.*; -import mindustry.world.meta.*; -// custom ui moment -public class OblivionStatValues { - - public static StatValue displayStatus(StatusEffect status, float duration) { - return table -> { - table.row(); - table.table(Tex.underline, bt -> { - bt.add(new Image(status.uiIcon)).size(30f); - bt.row(); - bt.add(status.localizedName); - bt.row(); - bt.add(Core.bundle.get("stat.duration") + ": " + duration/60f + " " + Core.bundle.get("unit.seconds")); - }); - }; - } - - public static StatValue chargeDrill(float hold, float decay) { - return table -> { - table.row(); - table.add(new Image(Icon.settings)).size(30f); - table.row(); - table.table(Tex.underline, bt -> { - bt.add(Core.bundle.get("stat.manualDrill")); - }); - table.row(); - table.table(bt -> { - bt.add(Core.bundle.get("stat.hold") + ": " + hold/60f + " " + Core.bundle.get("unit.seconds")); - bt.row(); - bt.add(Core.bundle.get("stat.decay") + ": " + decay/60f + " " + Core.bundle.get("unit.seconds")); - }); - }; - } -} \ No newline at end of file diff --git a/src/oblivion/blocks/production/DrawableCrafter.java b/src/oblivion/blocks/production/DrawableCrafter.java deleted file mode 100644 index a326d79..0000000 --- a/src/oblivion/blocks/production/DrawableCrafter.java +++ /dev/null @@ -1,31 +0,0 @@ -package oblivion.blocks.production; - -import arc.*; -import arc.func.*; -import arc.graphics.g2d.*; -import mindustry.gen.*; -import mindustry.world.blocks.production.*; -// a crafter that inutilizes drawers -public class DrawableCrafter extends GenericCrafter { - public Cons draw; - public DrawableCrafter(String name, Cons draw) { - super(name); - this.draw = draw; - } - public DrawableCrafter(String name) { - super(name); - this.draw = b -> {Draw.rect(region, b.x, b.y, rotate ? b.rotdeg() : 0f);}; - } - - @Override - public TextureRegion[] icons() { - return new TextureRegion[]{Core.atlas.find(name + "-full", name)}; - } - - public class DrawableCrafterBuild extends GenericCrafterBuild { - @Override - public void draw() { - draw.get(this); - } - } -} \ No newline at end of file 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 c0390e7..ad82b4c 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -27,7 +27,7 @@ import static mindustry.type.ItemStack.*; -public class OblivionBlocks implements ContentList { +public class OblivionBlocks { public static Block start, // lonela @@ -55,7 +55,6 @@ public class OblivionBlocks implements ContentList { mantlePulverizer, imperialDrill; - @Override public void load() { start = new Block("start"){{ buildVisibility = BuildVisibility.debugOnly; @@ -100,13 +99,16 @@ public void load() { Draw.reset(); Fill.circle(bu.x, bu.y, (5f + Mathf.absin(5f, 1f)) /2f * bu.warmup); }; - consumes.items(with( + consumesItems(with( Items.copper, 2, Items.lead, 2 )); - consumes.power(1f); + consumesPower(1f); outputItem = new ItemStack(OblivionResources.mesulfate, 1); }}; + + /* + stuff that is broken(most) carbonicInfuser = new DrawableCrafter("carbonic-infuser") {{ requirements(Category.crafting, with( OblivionResources.mesulfate, 80, @@ -785,5 +787,7 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ consumes.power(0.5f); outputItem = new ItemStack(Items.sand, 1); }}; + + */ } } diff --git a/src/oblivion/content/OblivionPlanets.java b/src/oblivion/content/OblivionPlanets.java deleted file mode 100644 index d6a8907..0000000 --- a/src/oblivion/content/OblivionPlanets.java +++ /dev/null @@ -1,58 +0,0 @@ -package oblivion.content; - -import arc.graphics.*; -import mindustry.type.*; -import mindustry.ctype.*; -import mindustry.content.*; -import mindustry.graphics.*; -import mindustry.graphics.g3d.*; -import oblivion.planets.*; - -public class OblivionPlanets implements ContentList { - public static Planet - berenit, - lamoni, lonela; - - @Override - public void load() { - berenit = new Planet("berenit", Planets.sun, 0, 3f) {{ - bloom = true; - accessible = false; - orbitRadius = 750f; - meshLoader = () -> new SunMesh( - this, 6, - 5, 0.3, 1.7, 1.2, 1, - 1.1f, - Color.valueOf("FF4D0C"), - Color.valueOf("FF6625"), - Color.valueOf("FF8948"), - Color.valueOf("FFA564"), - Color.valueOf("FFBC7B"), - Color.valueOf("FFE3A2") - ); - }}; - lamoni = new Planet("lamoni", berenit, 3, 1f) {{ - generator = new LamoniPlanetGenerator(); - meshLoader = () -> new HexMesh(this, 6); - solarSystem = berenit; - startSector = 15; - accessible = true; - alwaysUnlocked = true; - }}; - lonela = new Planet("lonela", Planets.sun, 3, 1f) {{ - generator = new LonelaPlanetGenerator(); - meshLoader = () -> new HexMesh(this, 6); - cloudMeshLoader = () -> new MultiMesh( - new HexSkyMesh(this, 69, 0.1f, 0.16f, 5, Color.white.cpy().a(0.75f), 2, 0.45f, 1.1f, 0.45f), - new HexSkyMesh(this, 420, 0.1f, 0.13f, 5, Color.gray.cpy().a(0.75f), 2, 0.45f, 1.1f, 0.45f) - ); - atmosphereColor = Color.valueOf("ffffff"); - atmosphereRadIn = 0.02f; - atmosphereRadOut = 0.3f; - startSector = 15; - accessible = true; - alwaysUnlocked = true; - landCloudColor = Color.white.cpy().a(0.5f); - }}; - } -} diff --git a/src/oblivion/content/OblivionSectors.java b/src/oblivion/content/OblivionSectors.java deleted file mode 100644 index e42d808..0000000 --- a/src/oblivion/content/OblivionSectors.java +++ /dev/null @@ -1,26 +0,0 @@ -package oblivion.content; - -import mindustry.type.*; -import mindustry.ctype.*; -import oblivion.content.*; - -public class OblivionSectors implements ContentList{ - public static SectorPreset - newWorld, oldTown; - - @Override - public void load(){ - newWorld = new SectorPreset("newWorld", OblivionPlanets.lonela, 15) {{ - alwaysUnlocked = true; - addStartingItems = true; - captureWave = 10; - difficulty = 1; - startWaveTimeMultiplier = 3f; - }}; - oldTown = new SectorPreset("oldTown", OblivionPlanets.lonela, 130) {{ - captureWave = 20; - difficulty = 2; - startWaveTimeMultiplier = 2f; - }}; - } -} diff --git a/src/oblivion/content/OblivionStatuses.java b/src/oblivion/content/OblivionStatuses.java deleted file mode 100644 index 404990b..0000000 --- a/src/oblivion/content/OblivionStatuses.java +++ /dev/null @@ -1,33 +0,0 @@ -package oblivion.content; - -import mindustry.type.*; -import mindustry.ctype.*; -import mindustry.content.*; - -public class OblivionStatuses implements ContentList { - public static StatusEffect infested, calamity, fear, abyss; - - @Override - public void load() { - infested = new StatusEffect("infested") {{ - damage = 0.06f; - init(() -> { - opposite(StatusEffects.burning, StatusEffects.melting); - }); - }}; - calamity = new StatusEffect("calamity") {{ - damage = 1.6f; - healthMultiplier = 2f; - }}; - fear = new StatusEffect("fear") {{ - speedMultiplier = 0.3f; - reloadMultiplier = 0.4f; - damageMultiplier = 0.5f; - }}; - abyss = new StatusEffect("abyss") {{ - disarm = true; - speedMultiplier = 0f; - dragMultiplier = 69420f; - }}; - } -} \ No newline at end of file diff --git a/src/oblivion/content/OblivionTechTree.java b/src/oblivion/content/OblivionTechTree.java deleted file mode 100644 index e82c01e..0000000 --- a/src/oblivion/content/OblivionTechTree.java +++ /dev/null @@ -1,186 +0,0 @@ -package oblivion.content; - -import arc.struct.Seq; -import mindustry.content.*; -import mindustry.content.TechTree.TechNode; -import mindustry.ctype.ContentList; -import mindustry.ctype.UnlockableContent; -import mindustry.game.Objectives.*; -import mindustry.type.ItemStack; - -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; - } - - 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); - } - - 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); - } - - private static void nodeProduce (UnlockableContent content) { - nodeProduce(content, Seq.with(), () -> { - }); - } - - @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))); - }); - }); - 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.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.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.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(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) - )); - }); - }); - extendNode(Blocks.tetrativeReconstructor, () -> { - node(OblivionBlocks.mandlebrotReconstructor, Seq.with(new Produce(OblivionResources.mothalate), new Research(UnitTypes.reign))); - }); - 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 deleted file mode 100644 index 1ec4ae7..0000000 --- a/src/oblivion/content/OblivionUnits.java +++ /dev/null @@ -1,1017 +0,0 @@ -package oblivion.content; - -import arc.*; -import arc.util.*; -import arc.math.*; -import arc.graphics.*; -import arc.graphics.g2d.*; -import mindustry.gen.*; -import mindustry.type.*; -import mindustry.content.*; -import mindustry.graphics.*; -import mindustry.entities.bullet.*; -import mindustry.entities.abilities.*; -import mindustry.ctype.ContentList; -import oblivion.type.*; -import oblivion.graphics.*; - -public class OblivionUnits implements ContentList { - public static UnitType - slop, detra, tedri, taleni, kolete, - pioli, taneki, notremite, dopretile, niboletra, - phi, root, multi, pow, expo, - - republic, giga, archaranid, bloodmoon, yetinus; - - @Override - public void load() { - slop = new UnitType("slop") {{ - health = 240; - armor = 1f; - speed = 2f; - flying = true; - constructor = UnitEntity::create; - range = 104f; - maxRange = range; - weapons.add( - new Weapon("oblivion-mesulfate-missile") {{ - x = 0f; - y = -1.25f; - mirror = false; - reload = 30f; - shootSound = Sounds.missile; - bullet = new MissileBulletType(2f, 15) {{ - lifetime = 52f; - status = StatusEffects.burning; - frontColor = OblivionPal.mesoMedium; - backColor = OblivionPal.mesoDark; - trailColor = OblivionPal.mesoLight; - }}; - }} - ); - }}; - detra = new UnitType("detra") {{ - health = 450; - armor = 3f; - speed = 1.7f; - flying = true; - constructor = UnitEntity::create; - hitSize = 8f; - range = 152f; - maxRange = range; - engineOffset = 2f; - weapons.add( - new Weapon("oblivion-mesulfate-artillery") {{ - x = 4.5f; - y = -1.5f; - reload = 60f; - shootSound = Sounds.artillery; - bullet = new ArtilleryBulletType(1.5f, 30) {{ - hitEffect = Fx.blastExplosion; - lifetime = 101f; - knockback = 0.6f; - collides = true; - collidesTiles = true; - splashDamageRadius = 35f; - splashDamage = 20f; - frontColor = OblivionPal.mesoMedium; - backColor = OblivionPal.mesoDark; - }}; - }} - ); - }}; - tedri = new UnitType("tedri") {{ - health = 740; - armor = 5f; - speed = 1.5f; - flying = true; - constructor = UnitEntity::create; - hitSize = 14f; - range = 200f; - maxRange = range; - engineSize = 5f; - engineOffset = 4.5f; - weapons.add( - new Weapon("oblivion-mesulfate-laser") {{ - x = 5.75f; - y = -3.5f; - reload = 120f; - shootSound = Sounds.laser; - bullet = new LaserBulletType(50) {{ - width = 8f; - length = 200; - colors = new Color[]{OblivionPal.mesoDark, OblivionPal.mesoMedium, OblivionPal.mesoLight}; - }}; - }}, - new Weapon("oblivion-mesulfate-cannon") {{ - x = 0f; - y = 6f; - mirror = false; - reload = 150f; - shots = 5; - shotDelay = 10f; - shake = 3; - shootSound = Sounds.shootBig; - bullet = new BasicBulletType(3f, 34) {{ - width = height = 9f; - lifetime = 66.6f; //ohno ohfu- - frontColor = OblivionPal.mesoMedium; - backColor = OblivionPal.mesoDark; - }}; - }} - ); - }}; - taleni = new UnitType("taleni") {{ - health = 7500; - armor = 7f; - speed = 0.6f; - flying = true; - constructor = UnitEntity::create; - hitSize = 30f; - range = 256f; - engineSize = 7f; - engineOffset = 20f; - maxRange = range; - weapons.add( - new Weapon("oblivion-mesulfate-railgun") {{ - x = y = 0f; - reload = 180f; - shake = 3f; - shootSound = Sounds.plasmadrop; - mirror = false; - bullet = new LaserBulletType(175) {{ - width = 10f; - length = 256f; - colors = new Color[]{OblivionPal.mesoDark, OblivionPal.mesoMedium, OblivionPal.mesoLight}; - }}; - }}, - new Weapon("oblivion-mesulfate-big-mount") {{ - x = 15.25f; - y = 4f; - reload = 35f; - shots = 3; - shotDelay = 5f; - shootSound = Sounds.shootBig; - bullet = new BasicBulletType(6f, 40) {{ - width = height = 10f; - lifetime = 50f; - splashDamage = 50f; - splashDamageRadius = 10f; - frontColor = OblivionPal.mesoMedium; - backColor = OblivionPal.mesoDark; - }}; - }}, - new Weapon("oblivion-mesulfate-big-mount") {{ - x = 15f; - y = -14f; - reload = 35f; - shots = 3; - shotDelay = 5f; - shootSound = Sounds.shootBig; - bullet = new BasicBulletType(6f, 40) {{ - width = height = 10f; - lifetime = 50f; - splashDamage = 50f; - splashDamageRadius = 10f; - frontColor = OblivionPal.mesoMedium; - backColor = OblivionPal.mesoDark; - }}; - }} - ); - }}; - kolete = new UnitType("kolete") {{ - health = 22000; - armor = 13f; - speed = 0.7f; - flying = true; - constructor = UnitEntity::create; - hitSize = 40f; - range = 300f; - maxRange = range; - engineSize = 10f; - engineOffset = 27f; - abilities.add( - new EnergyFieldAbility(40f, 70f, 160f) {{ - hitBuildings = false; - color = Color.valueOf("E86F6F"); - x = 0f; - y = -4f; - }} - ); - weapons.add( - new Weapon("oblivion-mesulfate-big-laser") {{ - x = 26.5f; - y = 16.75f; - reload = 60f; - shootSound = Sounds.laser; - bullet = new LaserBulletType(70) {{ - width = 11f; - length = 300f; - colors = new Color[]{OblivionPal.mesoDark, OblivionPal.mesoMedium, OblivionPal.mesoLight}; - }}; - }}, - new Weapon("oblivion-mesulfate-mine") {{ - x = 24.25f; - y = -12f; - reload = 90f; - range = 300f; - shots = 4; - inaccuracy = 15f; - velocityRnd = 0.6f; - shootSound = Sounds.artillery; - bullet = new BasicBulletType(11f, 100) {{ - drag = 0.04f; - width = height = 12f; - lifetime = 300f; - frontColor = OblivionPal.mesoMedium; - backColor = OblivionPal.mesoDark; - fragBullets = 5; - fragBullet = new BasicBulletType(8f, 30) {{ - homingPower = 1f; - homingRange = 400f; - lifetime = 65f; - hitSound = despawnSound = Sounds.artillery; - hitEffect = despawnEffect = Fx.blastExplosion; - frontColor = OblivionPal.mesoMedium; - backColor = OblivionPal.mesoDark; - }}; - }}; - }} - ); - }}; - - pioli = new UnitType("pioli") {{ - health = 200; - armor = 0f; - speed = 2.5f; - flying = true; - constructor = UnitEntity::create; - range = 128f; - maxRange = range; - weapons.add( - new Weapon("oblivion-copremite-mount") {{ - x = 2f; - y = 2.5f; - reload = 30f; - shootSound = Sounds.lasershoot; - bullet = new LaserBoltBulletType(4f, 16) {{ - lifetime = 32f; - status = OblivionStatuses.infested; - frontColor = OblivionPal.copreLight; - backColor = OblivionPal.copreMedium; - }}; - }}, - new Weapon("oblivion-copremite-mount") {{ - x = -2.75f; - y = -3.5f; - reload = 30f; - shootSound = Sounds.lasershoot; - flipSprite = true; - bullet = new LaserBoltBulletType(4f, 16) {{ - lifetime = 32f; - status = OblivionStatuses.infested; - frontColor = OblivionPal.copreLight; - backColor = OblivionPal.copreMedium; - }}; - }} - ); - }}; - taneki = new UnitType("taneki") {{ - health = 530; - armor = 1f; - speed = 2f; - flying = true; - constructor = UnitEntity::create; - engineOffset = 8f; - range = 168f; - maxRange = range; - hitSize = 8f; - weapons.add( - new Weapon("oblivion-copremite-mount") {{ - x = 4.75f; - y = 0.5f; - reload = 30f; - shootSound = Sounds.lasershoot; - bullet = new LaserBoltBulletType(3f, 20) {{ - lifetime = 56f; - frontColor = OblivionPal.copreLight; - backColor = OblivionPal.copreMedium; - }}; - }}, - new Weapon("oblivion-copremite-artillery") {{ - x = 3.5f; - y = -4f; - reload = 60f; - shootSound = Sounds.plasmadrop; - bullet = new ArtilleryBulletType(3f, 20) {{ - width = 14f; - height = 14f; - lifetime = 56f; - status = OblivionStatuses.infested; - weaveMag = 5f; - weaveScale = 4f; - homingPower = 0.05f; - frontColor = OblivionPal.copreLight; - backColor = OblivionPal.copreMedium; - }}; - }} - ); - }}; - notremite = new UnitType("notremite") {{ - health = 920; - armor = 4f; - speed = 1.7f; - flying = true; - constructor = UnitEntity::create; - engineOffset = 14f; - engineSize = 4f; - range = 176f; - maxRange = range; - hitSize = 12f; - weapons.add( - new Weapon("oblivion-copremite-laser") {{ - x = 8.75f; - y = -2.25f; - reload = 60f; - shootSound = Sounds.laser; - bullet = new LaserBulletType(50) {{ - width = 7f; - length = 176f; - status = OblivionStatuses.infested; - colors = new Color[]{OblivionPal.copreDark, OblivionPal.copreMedium, OblivionPal.copreLight}; - }}; - }} - ); - }}; - dopretile = new UnitType("dopretile") {{ - health = 13000; - speed = 1.0f; - armor = 6f; - flying = true; - constructor = UnitEntity::create; - engineOffset = 27f; - engineSize = 6f; - range = 224f; - maxRange = range; - hitSize = 30f; - weapons.add( - new Weapon("oblivion-copremite-big-laser") {{ - x = 0f; - y = -4f; - reload = 60f; - shootSound = Sounds.plasmadrop; - mirror = false; - bullet = new LaserBulletType(160) {{ - width = 9f; - length = 224f; - status = OblivionStatuses.infested; - colors = new Color[]{OblivionPal.copreDark, OblivionPal.copreMedium, OblivionPal.copreLight}; - }}; - }}, - new Weapon("oblivion-copremite-laser") {{ - x = 6.25f; - y = 12.75f; - reload = 15f; - shootSound = Sounds.artillery; - bullet = new BasicBulletType(2.5f, 40) {{ - width = 9f; - height = 12f; - lifetime = 89.6f; - frontColor = OblivionPal.copreLight; - backColor = OblivionPal.copreMedium; - }}; - }}, - new Weapon("oblivion-copremite-laser") {{ - x = 12.25f; - y = -8.25f; - reload = 15f; - shootSound = Sounds.artillery; - bullet = new BasicBulletType(2.5f, 40) {{ - width = 9f; - height = 12f; - lifetime = 89.6f; - frontColor = OblivionPal.copreLight; - backColor = OblivionPal.copreMedium; - }}; - }} - ); - }}; - niboletra = new OblivionUnitType("niboletra") {{ - health = 20000; - armor = 10f; - speed = 0.7f; - flying = true; - constructor = UnitEntity::create; - engineDrawer = unit -> { - Draw.color(unit.team.color); - Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, 0f, -30f), unit.y + Angles.trnsy(unit.rotation - 90f, 0f, -30f), 10 + Mathf.absin(Time.time, 2f, 10f / 4f)); - Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, -16f, -18f), unit.y + Angles.trnsy(unit.rotation - 90f, -16f, -18f), 8 + Mathf.absin(Time.time, 2f, 10f / 4f)); - Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, 16f, -18f), unit.y + Angles.trnsy(unit.rotation - 90f, 16f, -18f), 8 + Mathf.absin(Time.time, 2f, 10f / 4f)); - Drawf.tri(unit.x + Angles.trnsx(unit.rotation - 90f, 0f, -35f), unit.y + Angles.trnsy(unit.rotation - 90f, 0f, -35f), 20 + Mathf.absin(Time.time, 2f, 13f / 2f), 20 + Mathf.absin(Time.time, 2f, 10f / 2f), unit.rotation - 180f); - - Draw.color(); - Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, 0f, -27f), unit.y + Angles.trnsy(unit.rotation - 90f, 0f, -27f), (10 + Mathf.absin(Time.time, 2f, 10f / 4f)) / 2f); - Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, -16f, -18f), unit.y + Angles.trnsy(unit.rotation - 90f, -16f, -18f), (8 + Mathf.absin(Time.time, 2f, 10f / 4f))/ 2f); - Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, 16f, -18f), unit.y + Angles.trnsy(unit.rotation - 90f, 16f, -18f), (8 + Mathf.absin(Time.time, 2f, 10f / 4f))/ 2f); - Drawf.tri(unit.x + Angles.trnsx(unit.rotation - 90f, 0f, -30f), unit.y + Angles.trnsy(unit.rotation - 90f, 0f, -30f), (20 + Mathf.absin(Time.time, 2f, 13f / 2f)) / 2f, (20 + Mathf.absin(Time.time, 2f, 10f / 2f)) / 2f, unit.rotation - 180f); - }; - range = 304f; - maxRange = range; - hitSize = 36f; - weapons.add( - new Weapon("oblivion-copremite-plasma-cannon") {{ - x = 0f; - y = 0.5f; - reload = 300f; - shootSound = Sounds.laserbig; - mirror = false; - continuous = true; - bullet = new ContinuousLaserBulletType() {{ - damage = 125f; - length = 304; - drawSize = 200f; - lifetime = 150f; - status = OblivionStatuses.infested; - shake = 1f; - width = 6f; - largeHit = true; - incendChance = 0f; - colors = new Color[]{OblivionPal.copreDark, OblivionPal.copreMedium, OblivionPal.copreLight}; - }}; - }} - ); - }}; - - - republic = new OblivionUnitType("republic") {{ - health = 67700; - speed = 0.2f; - constructor = MechUnit::create; - engineDrawer = unit -> { - Draw.color(Color.valueOf("E7885C")); - Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90, 0, -21) * unit.elevation, unit.y + Angles.trnsy(unit.rotation - 90, 0, -21) * unit.elevation, (6 + Mathf.absin(Time.time, 2, 10 / 4)) * unit.elevation); - Drawf.tri(unit.x + Angles.trnsx(unit.rotation - 90, 0, -24) * unit.elevation, unit.y + Angles.trnsy(unit.rotation - 90, 0, -24) * unit.elevation, (13 + Mathf.absin(Time.time, 2, 13 / 2)) * unit.elevation, (15 + Mathf.absin(Time.time, 2, 10 / 2)) * unit.elevation, unit.rotation - 180); - Draw.color(Color.white); - Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90, 0, -20), unit.y + Angles.trnsy(unit.rotation - 90, 0, -20), (6 + Mathf.absin(Time.time, 2, 10 / 4)) / 2 * unit.elevation); - Drawf.tri(unit.x + Angles.trnsx(unit.rotation - 90, 0, -20 - unit.elevation), unit.y + Angles.trnsy(unit.rotation - 90, 0, -20 - unit.elevation), (14 + Mathf.absin(Time.time, 2, 13 / 2)) / 2 * unit.elevation, (15 + Mathf.absin(Time.time, 2, 10 / 2)) / 2 * unit.elevation, unit.rotation - 180); - }; - rotateSpeed = 1.4f; - armor = 20f; - mechStepParticles = true; - mechStepShake = 0.75f; - canBoost = true; - drownTimeMultiplier = 10f; - mechFrontSway = 0.2f; - mechSideSway = 0.7f; - range = 400f; - maxRange = range; - hitSize = 58f; - weapons.add( - new Weapon("oblivion-republic-weapon"){{ - x = 30f; - y = 0f; - reload = 45f; - recoil = 10f; - shootY = 12f; - shootSound = Sounds.shootBig; - shots = 3; - shotDelay = 5f; - shake = 5f; - top = false; - bullet = new BasicBulletType(8f, 150) {{ - pierce = true; - pierceCap = 7; - lifetime = 40f; - width = height = 15f; - hitEffect = Fx.flakExplosion; - splashDamage = 20f; - splashDamageRadius = 10f; - shootEffect = OblivionFx.bigFlameShoot; - }}; - }}, - new Weapon("oblivion-republic-laser") {{ - x = 0f; - y = -7f; - reload = 30f; - recoil = 3f; - shootY = 5f; - shootSound = Sounds.laser; - shake = 1f; - mirror = false; - bullet = new LaserBulletType(50) {{ - width = 20f; - length = 200f; - colors = new Color[]{Color.valueOf("ec7458aa"), Color.valueOf("ff9c5a"), Color.white}; - }}; - }}, - new Weapon("oblivion-republic-laser") {{ - x = 13.25f; - y = 5f; - reload = 60f; - recoil = 3f; - shootY = 5f; - shootSound = Sounds.artillery; - shake = 3f; - rotate = alternate = true; - bullet = new ArtilleryBulletType(6f, 80) {{ - collides = true; - homingPower = 0.08f; - lifetime = 45f; - splashDamageRadius = 40f; - splashDamage = 20f; - width = height = 16f; - }}; - }} - ); - }}; - giga = new UnitType("giga") {{ - health = 45000f; - 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; - hovering = true; - visualElevation = 0.2f; - groundLayer = Layer.legUnit; - range = 400f; - weapons.add( - new Weapon("oblivion-giga-laser") {{ - x = 7.75f; - y = -8.25f; - reload = 60f; - recoil = 3f; - shootY = 6f; - shootSound = Sounds.laser; - bullet = new LaserBulletType(80) {{ - healPercent = 0.2f; - width = 50f; - length = 400f; - colors = new Color[]{Pal.heal.cpy().a(0.4f), Pal.heal, Color.white}; - }}; - }}, - new Weapon("oblivion-giga-missile") {{ - x = 25.25f; - y = -3f; - reload = 30f; - recoil = 3f; - shootY = 2f; - shootSound = Sounds.missile; - alternate = true; - shots = 6; - inaccuracy = 7f; - bullet = new MissileBulletType(4f, 40) {{ - healPercent = 0.1f; - width = height = 8f; - lifetime = 100f; - collidesTeam = true; - backColor = trailColor = hitColor = lightColor = lightningColor = Pal.heal; - frontColor = Color.white; - }}; - }}, - new Weapon() {{ - x = 0f; - y = 6.5f; - reload = 350f; - recoil = 0f; - shake = 20f; - shootSound = Sounds.laserblast; - chargeSound = Sounds.lasercharge; - firstShotDelay = Fx.greenLaserCharge.lifetime; - top = false; - mirror = false; - continuous = true; - bullet = new ContinuousLaserBulletType(210) {{ - healPercent = 0.4f; - lifetime = 60f; - incendAmount = 0; - incendSpread = 0; - incendChance = 0f; - colors = new Color[]{Pal.heal.cpy().a(0.4f), Pal.heal, Color.white}; - }}; - }} - ); - }}; - archaranid = new UnitType("archaranid") {{ - health = 63500; - armor = 18f; - speed = 0.3f; - legCount = 8; - legMoveSpace = 1.2f; - legPairOffset = 3; - 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; - maxRange = range; - weapons.add( - new Weapon("oblivion-archanid-cannon") {{ - x = 0f; - y = -15.25f; - reload = 120f; - recoil = 5f; - mirror = false; - rotate = true; - rotateSpeed = 1f; - shootY = 28f; - shake = 10f; - shootSound = Sounds.artillery; - bullet = new ArtilleryBulletType(2f, 200) {{ - width = height = 35f; - collides = collidesTiles = true; - lifetime = 180f; - frontColor = Pal.sapBullet; - backColor = Pal.sapBulletBack; - hitShake = 10f; - lightRadius = 40f; - lightColor = Pal.sap; - lightOpacity = 0.6f; - status = StatusEffects.sapped; - statusDuration = 60f * 20; - splashDamage = 200; - splashDamageRadius = 16f; - fragBullets = 5; - fragBullet = new LaserBulletType(120) {{ - width = 10f; - length = 80f; - collides = collidesTiles = true; - shootEffect = OblivionFx.instSapShoot; - hitEffect = OblivionFx.instSapHit; - colors = new Color[]{Pal.sapBullet, Pal.sapBullet, Pal.sapBulletBack}; - }}; - }}; - }}, - new Weapon("oblivion-archanid-point") {{ - x = 19f; - y = -5.5f; - reload = 30f; - recoil = 2f; - shootSound = Sounds.railgun; - bullet = new LaserBulletType(175) {{ - length = 180f; - width = 12f; - shootEffect = OblivionFx.instSapShoot; - hitEffect = OblivionFx.instSapHit; - colors = new Color[]{Pal.sapBullet, Pal.sapBullet, Pal.sapBulletBack}; - }}; - }} - ); - }}; - bloodmoon = new OblivionUnitType("bloodmoon") {{ - health = 65000; - armor = 18f; - speed = 0.2f; - flying = lowAltitude = true; - constructor = UnitEntity::create; - hitSize = 56f; - range = 50f * 8f; - engineDrawer = unit -> { - DrawEx.circleEngine(unit, -20, -30, 10); - DrawEx.circleEngine(unit, 20, -30, 10); - DrawEx.circleEngine(unit, -25, 35, 10); - DrawEx.circleEngine(unit, 25, 35, 10); - }; - maxRange = range; - weapons.add( - new Weapon("oblivion-bloodmoon-cannon") {{ - x = y = 0f; - reload = 60f; - recoil = 5f; - shootY = 25f; - shootSound = Sounds.artillery; - mirror = false; - bullet = new ArtilleryBulletType(1.25f, 250) {{ - width = height = 20; - lifetime = 320f; - splashDamageRadius = 60f; - splashDamage = 80f; - collides = collidesTiles = collidesAir = collidesGround = true; - hitSound = despawnSound = Sounds.plasmaboom; - hitEffect = despawnEffect = OblivionFx.bloodmoonHit; - fragBullets = 3; - fragBullet = new BasicBulletType(1f, 60) {{ - homingPower = 0.03f; - homingRange = 400f; - lifetime = 300f; - splashDamageRadius = 40f; - splashDamage = 30f; - hitSound = despawnSound = Sounds.plasmaboom; - hitEffect = despawnEffect = OblivionFx.bloodmoonHit; - trailChance = 5f; - trailWidth = 1.8f; - trailLength = 8; - }}; - }}; - }} - ); - }}; - - yetinus = new OblivionUnitType("yetinus") {{ - health = 65000; - speed = 0.3f; - drag = 0.18f; - hitSize = 58f; - armor = 25f; - accel = 0.19f; - rotateSpeed = 0.3f; - rotateShooting = true; - constructor = UnitWaterMove::create; - trailLength = 70; - trailX = 23f; - trailY = -32f; - trailScl = 3.5f; - range = 600f; - maxRange = range; - weapons.add( - new Weapon("oblivion-yetinus-railgun") {{ - x = 0f; - y = 41.25f; - reload = 90f; - mirror = false; - recoil = 5f; - shootY = 12f; - shake = 8f; - shootCone = 45f; - shootSound = Sounds.railgun; - bullet = new BasicBulletType(6f, 800) {{ - shootEffect = Fx.railShoot; - lifetime = 100; - splashDamageRadius = 180f; - splashDamage =400f; - width = height = 40; - homingRange = 600f; - homingPower = 0.1f; - hitEffect = Fx.impactShockwave; - hitColor = Pal.bulletYellow; - smokeEffect = Fx.shootBig2; - }}; - }}, - new Weapon("oblivion-yetinus-laser") {{ - x = 0f; - y = 0f; - reload = 45f; - rotate = true; - rotateSpeed = 1.5f; - mirror = false; - rotate = true; - recoil = 2f; - shootY = 4f; - shootSound = Sounds.laser; - bullet = new LaserBulletType(100) {{ - width = 20f; - length = 300f; - }}; - }} - ); - }}; - - phi = new OblivionUnitType("phi") {{ - health = 450; - speed = 2.5f; - flying = true; - constructor = UnitEntity::create; - outlineColor = Color.valueOf("3F424D"); - engineDrawer = unit -> { - DrawEx.circleEngine(unit, 2.5f, -5.5f, 2f); - DrawEx.circleEngine(unit, -2.5f, -5.5f, 2f); - }; - hitSize = 7f; - range = 18f * 8f; - maxRange = range; - weapons.add( - new Weapon("oblivion-phi-weapon") {{ - x = 5.25f; - y = 0.5f; - reload = 30f; - top = false; - bullet = new BasicBulletType(2.5f, 15) {{ - lifetime = 18 * 4f; - hitEffect = OblivionFx.carmaniteHit; - frontColor = Color.white; - backColor = Color.valueOf("DCDCDC"); - }}; - }} - ); - }}; - root = new OblivionUnitType("root") {{ - health = 920; - armor = 2f; - speed = 2f; - flying = true; - constructor = UnitEntity::create; - outlineColor = Color.valueOf("3F424D"); - engineDrawer = unit -> { - DrawEx.circleEngine(unit, 0f, -5.5f, 4f); - }; - hitSize = 13f; - range = 23 * 8f; - maxRange = range; - weapons.add( - new Weapon("oblivion-root-weapon") {{ - x = 8f; - y = -0.75f; - reload = 60f; - top = false; - shootSound = Sounds.artillery; - bullet = new ArtilleryBulletType(3f, 40) {{ - lifetime = 23 * 8f; - despawnEffect = hitEffect = OblivionFx.carmaniteHit; - width = height = 12f; - frontColor = Color.white; - backColor = Color.valueOf("DCDCDC"); - homingRange = 80f; - homingPower = 0.05f; - collides = collidesTiles = collidesGround = collidesAir = true; - }}; - }} - ); - }}; - multi = new OblivionUnitType("multi") {{ - health = 1200; - armor = 5f; - speed = 1.65f; - flying = lowAltitude = true; - constructor = UnitEntity::create; - outlineColor = Color.valueOf("3F424D"); - engineDrawer = unit -> { - DrawEx.circleEngine(unit, 8f, 7f, 4f); - DrawEx.circleEngine(unit, -8f, 7f, 4f); - DrawEx.circleEngine(unit, 6f, -11f, 4f); - DrawEx.circleEngine(unit, -8f, -11f, 4f); - }; - hitSize = 20f; - range = 26f * 8f; - maxRange = range; - weapons.add( - new Weapon("oblivion-multi-weapon") {{ - x = 15.75f; - y = 0f; - reload = 90f; - shots = 3; - shotDelay = 5f; - shake = 3f; - top = false; - shootY = 12f; - shootSound = Sounds.shootBig; - bullet = new BasicBulletType(4f, 45) {{ - width = height = 13f; - lifetime = 6.6f * 8f; - despawnEffect = hitEffect = OblivionFx.carmaniteHit; - frontColor = Color.white; - backColor = Color.valueOf("DCDCDC"); - }}; - }}, - new Weapon("oblivion-multi-cannon") {{ - x = y = 0f; - reload = 120f; - mirror = false; - shake = 2; - shootSound = Sounds.plasmadrop; - bullet = new ArtilleryBulletType(2f, 80) {{ - lifetime = 13 * 8; - width = height = 16f; - despawnEffect = hitEffect = OblivionFx.carmaniteHit; - collidesAir = collidesGround = collidesTiles = collides = true; - frontColor = Color.white; - backColor = Color.valueOf("DCDCDC"); - }}; - }} - ); - }}; - pow = new OblivionUnitType("pow") {{ - health = 6500; - armor = 7f; - speed = 1.05f; - flying = lowAltitude = true; - constructor = UnitEntity::create; - outlineColor = Color.valueOf("3F424D"); - engineDrawer = unit -> { - for (int i = -1; i <= 2; i += 2) { - DrawEx.circleEngine(unit, i * 10f, 11f, 4f); - DrawEx.circleEngine(unit, i * 10f, 0f, 4f); - DrawEx.circleEngine(unit, i * 10f, -15f, 4f); - } - }; - hitSize = 25f; - range = 33 * 8f; - maxRange = range; - weapons.add( - new Weapon("oblivion-pow-weapon") {{ - x = 18f; - y = 0f; - reload = 50f; - shots = 5; - shotDelay = 5f; - shake = 5f; - shootY = 18f; - shootCone = 15f; - top = false; - shootSound = Sounds.shootBig; - bullet = new BasicBulletType(6f, 65) {{ - lifetime = 5.5f * 8f; - width = height = 16f; - despawnEffect = hitEffect = OblivionFx.carmaniteHit; - frontColor = Color.white; - backColor = Color.valueOf("DCDCDC"); - }}; - }}, - new Weapon("oblivion-pow-artillery") {{ - x = 8.25f; - y = -6.5f; - reload = 90f; - shots = 3; - inaccuracy = 10; - shake = 7f; - velocityRnd = 0.1f; - shootSound = Sounds.artillery; - bullet = new ArtilleryBulletType(2f, 40) {{ - lifetime = 12 * 8f; - width = height = 22f; - splashDamage = 70f; - splashDamageRadius = 30f; - despawnEffect = hitEffect = OblivionFx.carmaniteHit; - collidesAir = collidesGround = collidesTiles = collides = true; - frontColor = Color.white; - backColor = Color.valueOf("DCDCDC"); - }}; - }}, - new Weapon("oblivion-pow-artillery") {{ - x = -8f; - y = 7.75f; - flipSprite = true; - reload = 90f; - shots = 3; - inaccuracy = 10; - shake = 7f; - velocityRnd = 0.1f; - shootSound = Sounds.artillery; - bullet = new ArtilleryBulletType(2f, 40) {{ - lifetime = 12 * 8f; - width = height = 22f; - splashDamage = 70f; - splashDamageRadius = 30f; - despawnEffect = hitEffect = OblivionFx.carmaniteHit; - collidesAir = collidesGround = collidesTiles = collides = true; - frontColor = Color.white; - backColor = Color.valueOf("DCDCDC"); - }}; - }} - ); - }}; - expo = new OblivionUnitType("expo") {{ - health = 22000; - speed = 1.05f; - armor = 12f; - flying = lowAltitude = true; - constructor = UnitEntity::create; - outlineColor = Color.valueOf("3F424D"); - engineDrawer = unit -> { - for (int i = -1; i <= 2; i += 2) { - DrawEx.circleEngine(unit, i * 12f, 14f, 4f); - DrawEx.circleEngine(unit, i * 9f, -11f, 4f); - } - DrawEx.circleEngine(unit, 0f, -13f, 8f); - }; - hitSize = 28f; - range = 33 * 8f; - maxRange = range; - weapons.add( - new Weapon("oblivion-pow-weapon") {{ - x = 24.25f; - y = 0f; - reload = 10f; - shake = 5f; - shootY = 18f; - shootCone = 15f; - top = false; - shootSound = Sounds.shootBig; - bullet = new BasicBulletType(6f, 100) {{ - lifetime = 5.5f * 8f; - width = height = 22f; - despawnEffect = hitEffect = OblivionFx.carmaniteHit; - frontColor = Color.white; - backColor = Color.valueOf("DCDCDC"); - }}; - }} - ); - }}; - } -} diff --git a/src/oblivion/planets/LamoniPlanetGenerator.java b/src/oblivion/planets/LamoniPlanetGenerator.java deleted file mode 100644 index ba88b5d..0000000 --- a/src/oblivion/planets/LamoniPlanetGenerator.java +++ /dev/null @@ -1,417 +0,0 @@ -package oblivion.planets; - -import arc.math.*; -import arc.util.*; -import arc.struct.*; -import arc.graphics.*; -import arc.math.geom.*; -import arc.util.noise.*; -import mindustry.ai.*; -import mindustry.game.*; -import mindustry.type.*; -import mindustry.world.*; -import mindustry.content.*; -import mindustry.maps.planet.*; -import mindustry.ai.BaseRegistry.*; -import mindustry.maps.generators.*; -import mindustry.graphics.g3d.PlanetGrid.*; -import mindustry.world.blocks.environment.*; -import oblivion.content.*; - -import static mindustry.Vars.*; - -public class LamoniPlanetGenerator extends PlanetGenerator { - //alternate, le direct generation (wip) - public static boolean alt = false; - public static final int seed = 1; - - BaseGenerator basegen = new BaseGenerator(); - float scl = 5f; - float waterOffset = 0.07f; - - public Block[][] arr = - { -{OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime}, -{OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime}, -{OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.malenatite, OblivionEnvironment.paletolime, OblivionEnvironment.malenatite, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.goletenira, OblivionEnvironment.paletolime, OblivionEnvironment.malenatite, OblivionEnvironment.paletolime}, -{OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, Blocks.grass}, -{OblivionEnvironment.goletenira, OblivionEnvironment.argeletine, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.argeletine, OblivionEnvironment.goletenira, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.argeletine, OblivionEnvironment.goletenira}, -{OblivionEnvironment.mudone, OblivionEnvironment.argeletine, OblivionEnvironment.goletenira, OblivionEnvironment.argeletine, OblivionEnvironment.mudone, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine}, -{OblivionEnvironment.mudone, OblivionEnvironment.argeletine, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.argeletine, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.argeletine}, -{Blocks.grass, Blocks.grass, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, Blocks.grass, OblivionEnvironment.mudone, Blocks.grass, Blocks.grass, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone}, -{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, OblivionEnvironment.mudone, Blocks.grass, Blocks.grass, Blocks.grass, OblivionEnvironment.mudone}, -{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass}, -{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass}, -{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass}, -{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass} - }; - - float water = 0; - - float rawHeight(Vec3 position){ - position = Tmp.v33.set(position).scl(scl); - return (Mathf.pow(Simplex.noise3d(seed, 7, 0.5f, 1f/3f, position.x, position.y, position.z), 2.3f) + waterOffset) / (1f + waterOffset); - } - - @Override - public void generateSector(Sector sector){ - sector.generateEnemyBase = false; - } - - @Override - public float getHeight(Vec3 position){ - float height = rawHeight(position); - return Math.max(height, water); - } - - @Override - public Color getColor(Vec3 position){ - Block block = getBlock(position); - //replace salt with sand color - if(block == Blocks.salt) return Blocks.sand.mapColor; - return Tmp.c1.set(block.mapColor).a(1f - block.albedo); - } - - @Override - public void genTile(Vec3 position, TileGen tile){ - tile.floor = getBlock(position); - tile.block = tile.floor.asFloor().wall; - - if(Ridged.noise3d(1, position.x, position.y, position.z, 2, 22) > 0.31){ - tile.block = Blocks.air; - } - } - - Block getBlock(Vec3 position){ - float height = rawHeight(position); - Tmp.v31.set(position); - position = Tmp.v33.set(position).scl(scl); - float rad = scl; - float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad)); - float tnoise = Simplex.noise3d(seed, 7, 0.56, 1f/3f, position.x, position.y + 999f, position.z); - temp = Mathf.lerp(temp, tnoise, 0.5f); - height *= 1.2f; - height = Mathf.clamp(height); - - float tar = Simplex.noise3d(seed, 4, 0.55f, 1f/2f, position.x, position.y + 999f, position.z) * 0.3f + Tmp.v31.dst(0, 0, 1f) * 0.2f; - - Block res = arr[Mathf.clamp((int)(temp * arr.length), 0, arr[0].length - 1)][Mathf.clamp((int)(height * arr[0].length), 0, arr[0].length - 1)]; - return res; - } - - @Override - protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){ - Vec3 v = sector.rect.project(x, y).scl(5f); - return Simplex.noise3d(seed, octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag; - } - - @Override - protected void generate(){ - - class Room{ - int x, y, radius; - ObjectSet connected = new ObjectSet<>(); - - Room(int x, int y, int radius){ - this.x = x; - this.y = y; - this.radius = radius; - connected.add(this); - } - - void join(int x1, int y1, int x2, int y2){ - float nscl = rand.random(100f, 140f) * 6f; - int stroke = rand.random(3, 9); - brush(pathfind(x1, y1, x2, y2, tile -> (tile.solid() ? 50f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan), stroke); - } - - void connect(Room to){ - if(!connected.add(to) || to == this) return; - - Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f); - rand.nextFloat(); - - if(alt){ - midpoint.add(Tmp.v2.set(1, 0f).setAngle(Angles.angle(to.x, to.y, x, y) + 90f * (rand.chance(0.5) ? 1f : -1f)).scl(Tmp.v1.dst(x, y) * 2f)); - }else{ - //add randomized offset to avoid straight lines - midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y))); - } - - midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f); - - int mx = (int)midpoint.x, my = (int)midpoint.y; - - join(x, y, mx, my); - join(mx, my, to.x, to.y); - } - - void joinLiquid(int x1, int y1, int x2, int y2){ - float nscl = rand.random(100f, 140f) * 6f; - int rad = rand.random(5, 10); - int avoid = 2 + rad; - var path = pathfind(x1, y1, x2, y2, tile -> (tile.solid() || !tile.floor().isLiquid ? 70f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan); - path.each(t -> { - //don't place liquid paths near the core - if(Mathf.dst2(t.x, t.y, x2, y2) <= avoid * avoid){ - return; - } - - for(int x = -rad; x <= rad; x++){ - for(int y = -rad; y <= rad; y++){ - int wx = t.x + x, wy = t.y + y; - if(Structs.inBounds(wx, wy, width, height) && Mathf.within(x, y, rad)){ - Tile other = tiles.getn(wx, wy); - other.setBlock(Blocks.air); - if(Mathf.within(x, y, rad - 1) && !other.floor().isLiquid){ - Floor floor = other.floor(); - //TODO does not respect tainted floors - other.setFloor((Floor)(floor == Blocks.sand || floor == Blocks.salt ? Blocks.sandWater : Blocks.darksandTaintedWater)); - } - } - } - } - }); - } - - void connectLiquid(Room to){ - if(to == this) return; - - Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f); - rand.nextFloat(); - - //add randomized offset to avoid straight lines - midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y))); - midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f); - - int mx = (int)midpoint.x, my = (int)midpoint.y; - - joinLiquid(x, y, mx, my); - joinLiquid(mx, my, to.x, to.y); - } - } - - cells(4); - distort(10f, 12f); - - float constraint = 1.3f; - float radius = width / 2f / Mathf.sqrt3; - int rooms = rand.random(2, 5); - Seq roomseq = new Seq<>(); - - for(int i = 0; i < rooms; i++){ - Tmp.v1.trns(rand.random(360f), rand.random(radius / constraint)); - float rx = (width/2f + Tmp.v1.x); - float ry = (height/2f + Tmp.v1.y); - float maxrad = radius - Tmp.v1.len(); - float rrad = Math.min(rand.random(9f, maxrad / 2f), 30f); - roomseq.add(new Room((int)rx, (int)ry, (int)rrad)); - } - - //check positions on the map to place the player spawn. this needs to be in the corner of the map - Room spawn = null; - Seq enemies = new Seq<>(); - int enemySpawns = rand.random(1, Math.max((int)(sector.threat * 4), 1)); - int offset = rand.nextInt(360); - float length = width/2.55f - rand.random(13, 23); - int angleStep = 5; - int waterCheckRad = 5; - for(int i = 0; i < 360; i+= angleStep){ - int angle = offset + i; - int cx = (int)(width/2 + Angles.trnsx(angle, length)); - int cy = (int)(height/2 + Angles.trnsy(angle, length)); - - int waterTiles = 0; - - //check for water presence - for(int rx = -waterCheckRad; rx <= waterCheckRad; rx++){ - for(int ry = -waterCheckRad; ry <= waterCheckRad; ry++){ - Tile tile = tiles.get(cx + rx, cy + ry); - if(tile == null || tile.floor().liquidDrop != null){ - waterTiles ++; - } - } - } - - if(waterTiles <= 4 || (i + angleStep >= 360)){ - roomseq.add(spawn = new Room(cx, cy, rand.random(8, 15))); - - for(int j = 0; j < enemySpawns; j++){ - float enemyOffset = rand.range(60f); - Tmp.v1.set(cx - width/2, cy - height/2).rotate(180f + enemyOffset).add(width/2, height/2); - Room espawn = new Room((int)Tmp.v1.x, (int)Tmp.v1.y, rand.random(8, 16)); - roomseq.add(espawn); - enemies.add(espawn); - } - - break; - } - } - - //clear radius around each room - for(Room room : roomseq){ - erase(room.x, room.y, room.radius); - } - - //randomly connect rooms together - int connections = rand.random(Math.max(rooms - 1, 1), rooms + 3); - for(int i = 0; i < connections; i++){ - roomseq.random(rand).connect(roomseq.random(rand)); - } - - for(Room room : roomseq){ - spawn.connect(room); - } - - Room fspawn = spawn; - - cells(1); - - distort(10f, 6f); - - Seq ores = Seq.with(OblivionEnvironment.oreNiobium); - float poles = Math.abs(sector.tile.v.y); - float nmag = 0.5f; - float scl = 1f; - float addscl = 1.3f; - - FloatSeq frequencies = new FloatSeq(); - for(int i = 0; i < ores.size; i++){ - frequencies.add(rand.random(-0.1f, 0.01f) - i * 0.01f + poles * 0.04f); - } - - pass((x, y) -> { - if(!floor.asFloor().hasSurface()) return; - - int offsetX = x - 4, offsetY = y + 23; - for(int i = ores.size - 1; i >= 0; i--){ - Block entry = ores.get(i); - float freq = frequencies.get(i); - if(Math.abs(0.5f - noise(offsetX, offsetY + i*999, 2, 0.7, (40 + i * 2))) > 0.22f + i*0.01 && - Math.abs(0.5f - noise(offsetX, offsetY - i*999, 1, 1, (30 + i * 4))) > 0.37f + freq){ - ore = entry; - break; - } - } - }); - - trimDark(); - - median(2); - - inverseFloodFill(tiles.getn(spawn.x, spawn.y)); - - float difficulty = sector.threat; - ints.clear(); - ints.ensureCapacity(width * height / 4); - - int ruinCount = rand.random(-2, 4); - if(ruinCount > 0){ - int padding = 25; - - //create list of potential positions - for(int x = padding; x < width - padding; x++){ - for(int y = padding; y < height - padding; y++){ - Tile tile = tiles.getn(x, y); - if(!tile.solid() && (tile.drop() != null || tile.floor().liquidDrop != null)){ - ints.add(tile.pos()); - } - } - } - - ints.shuffle(rand); - - int placed = 0; - float diffRange = 0.4f; - //try each position - for(int i = 0; i < ints.size && placed < ruinCount; i++){ - int val = ints.items[i]; - int x = Point2.x(val), y = Point2.y(val); - - //do not overwrite player spawn - if(Mathf.within(x, y, spawn.x, spawn.y, 18f)){ - continue; - } - - float range = difficulty + rand.random(diffRange); - - Tile tile = tiles.getn(x, y); - BasePart part = null; - if(tile.overlay().itemDrop != null){ - part = bases.forResource(tile.drop()).getFrac(range); - }else if(tile.floor().liquidDrop != null && rand.chance(0.05)){ - part = bases.forResource(tile.floor().liquidDrop).getFrac(range); - }else if(rand.chance(0.05)){ //ore-less parts are less likely to occur. - part = bases.parts.getFrac(range); - } - - //actually place the part - if(part != null && BaseGenerator.tryPlace(part, x, y, Team.derelict, (cx, cy) -> { - Tile other = tiles.getn(cx, cy); - if(other.floor().hasSurface()){ - other.setOverlay(Blocks.oreScrap); - for(int j = 1; j <= 2; j++){ - for(Point2 p : Geometry.d8){ - Tile t = tiles.get(cx + p.x*j, cy + p.y*j); - if(t != null && t.floor().hasSurface() && rand.chance(j == 1 ? 0.4 : 0.2)){ - t.setOverlay(Blocks.oreScrap); - } - } - } - } - })){ - placed ++; - - int debrisRadius = Math.max(part.schematic.width, part.schematic.height)/2 + 3; - Geometry.circle(x, y, tiles.width, tiles.height, debrisRadius, (cx, cy) -> { - float dst = Mathf.dst(cx, cy, x, y); - float removeChance = Mathf.lerp(0.05f, 0.5f, dst / debrisRadius); - - Tile other = tiles.getn(cx, cy); - if(other.build != null && other.isCenter()){ - if(other.team() == Team.derelict && rand.chance(removeChance)){ - other.remove(); - }else if(rand.chance(0.5)){ - other.build.health = other.build.health - rand.random(other.build.health * 0.9f); - } - } - }); - } - } - } - - //remove invalid ores - for(Tile tile : tiles){ - if(tile.overlay().needsSurface && !tile.floor().hasSurface()){ - tile.setOverlay(Blocks.air); - } - } - - Schematics.placeLaunchLoadout(spawn.x, spawn.y); - - for(Room espawn : enemies){ - tiles.getn(espawn.x, espawn.y).setOverlay(Blocks.spawn); - } - - if(sector.hasEnemyBase()){ - basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector, difficulty); - - state.rules.attackMode = sector.info.attack = true; - }else{ - state.rules.winWave = sector.info.winWave = 10 + 5 * (int)Math.max(difficulty * 10, 1); - } - - float waveTimeDec = 0.4f; - - state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f)); - state.rules.waves = sector.info.waves = true; - state.rules.enemyCoreBuildRadius = 600f; - - //spawn air only when spawn is blocked - state.rules.spawns = Waves.generate(difficulty, new Rand(sector.id), state.rules.attackMode, state.rules.attackMode && spawner.countGroundSpawns() == 0, false); - } - - @Override - public void postGenerate(Tiles tiles){ - } -} \ No newline at end of file diff --git a/src/oblivion/planets/LonelaPlanetGenerator.java b/src/oblivion/planets/LonelaPlanetGenerator.java deleted file mode 100644 index 308d8bc..0000000 --- a/src/oblivion/planets/LonelaPlanetGenerator.java +++ /dev/null @@ -1,655 +0,0 @@ -package oblivion.planets; - -import arc.math.*; -import arc.util.*; -import arc.struct.*; -import arc.graphics.*; -import arc.math.geom.*; -import arc.util.noise.*; -import mindustry.ai.*; -import mindustry.game.*; -import mindustry.type.*; -import mindustry.world.*; -import mindustry.content.*; -import mindustry.maps.planet.*; -import mindustry.ai.BaseRegistry.*; -import mindustry.maps.generators.*; -import mindustry.graphics.g3d.PlanetGrid.*; -import mindustry.world.blocks.environment.*; -import oblivion.content.*; - -import static mindustry.Vars.*; - -public class LonelaPlanetGenerator extends PlanetGenerator { - //alternate, less direct generation (wip) - public static boolean alt = false; - public static final int seed = 1; - - BaseGenerator basegen = new BaseGenerator(); - float scl = 5f; - float waterOffset = 0.07f; - boolean genLakes = false; - - public Block[][] arr = - { - {OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.powderite}, - {OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite}, - {OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite, OblivionEnvironment.powderite}, - {OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite}, - {OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite}, - {OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.powderite}, - {OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise}, - {OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder}, - {OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise}, - {OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite}, - {OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.baletise}, - {OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite}, - {OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.baletise} - }; - - ObjectMap dec = ObjectMap.of( - Blocks.sporeMoss, Blocks.sporeCluster, - Blocks.moss, Blocks.sporeCluster, - Blocks.taintedWater, Blocks.water, - Blocks.darksandTaintedWater, Blocks.darksandWater - ); - - ObjectMap tars = ObjectMap.of( - Blocks.sporeMoss, Blocks.shale, - Blocks.moss, Blocks.shale - ); - - float water = 0; - - float rawHeight(Vec3 position){ - position = Tmp.v33.set(position).scl(scl); - return (Mathf.pow(Simplex.noise3d(seed, 7, 0.5f, 1f/3f, position.x, position.y, position.z), 2.3f) + waterOffset) / (1f + waterOffset); - } - - @Override - public void generateSector(Sector sector){ - - //these always have bases - if(sector.id == 154 || sector.id == 0){ - sector.generateEnemyBase = true; - return; - } - - Ptile tile = sector.tile; - - boolean any = false; - float poles = Math.abs(tile.v.y); - float noise = Noise.snoise3(tile.v.x, tile.v.y, tile.v.z, 0.001f, 0.58f); - - if(noise + poles/7.1 > 0.12 && poles > 0.23){ - any = true; - } - - if(noise < 0.16){ - for(Ptile other : tile.tiles){ - var osec = sector.planet.getSector(other); - - //no sectors near start sector! - if( - osec.id == sector.planet.startSector || //near starting sector - osec.generateEnemyBase && poles < 0.85 || //near other base - (sector.preset != null && noise < 0.11) //near preset - ){ - return; - } - } - } - - sector.generateEnemyBase = any; - } - - @Override - public float getHeight(Vec3 position){ - float height = rawHeight(position); - return Math.max(height, water); - } - - @Override - public Color getColor(Vec3 position){ - Block block = getBlock(position); - //replace salt with sand color - if(block == Blocks.salt) return Blocks.sand.mapColor; - return Tmp.c1.set(block.mapColor).a(1f - block.albedo); - } - - @Override - public void genTile(Vec3 position, TileGen tile){ - tile.floor = getBlock(position); - tile.block = tile.floor.asFloor().wall; - - if(Ridged.noise3d(1, position.x, position.y, position.z, 2, 22) > 0.31){ - tile.block = Blocks.air; - } - } - - Block getBlock(Vec3 position){ - float height = rawHeight(position); - Tmp.v31.set(position); - position = Tmp.v33.set(position).scl(scl); - float rad = scl; - float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad)); - float tnoise = Simplex.noise3d(seed, 7, 0.56, 1f/3f, position.x, position.y + 999f, position.z); - temp = Mathf.lerp(temp, tnoise, 0.5f); - height *= 1.2f; - height = Mathf.clamp(height); - - float tar = Simplex.noise3d(seed, 4, 0.55f, 1f/2f, position.x, position.y + 999f, position.z) * 0.3f + Tmp.v31.dst(0, 0, 1f) * 0.2f; - - Block res = arr[Mathf.clamp((int)(temp * arr.length), 0, arr[0].length - 1)][Mathf.clamp((int)(height * arr[0].length), 0, arr[0].length - 1)]; - return res; - } - - @Override - protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){ - Vec3 v = sector.rect.project(x, y).scl(5f); - return Simplex.noise3d(seed, octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag; - } - - @Override - protected void generate(){ - - class Room{ - int x, y, radius; - ObjectSet connected = new ObjectSet<>(); - - Room(int x, int y, int radius){ - this.x = x; - this.y = y; - this.radius = radius; - connected.add(this); - } - - void join(int x1, int y1, int x2, int y2){ - float nscl = rand.random(100f, 140f) * 6f; - int stroke = rand.random(3, 9); - brush(pathfind(x1, y1, x2, y2, tile -> (tile.solid() ? 50f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan), stroke); - } - - void connect(Room to){ - if(!connected.add(to) || to == this) return; - - Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f); - rand.nextFloat(); - - if(alt){ - midpoint.add(Tmp.v2.set(1, 0f).setAngle(Angles.angle(to.x, to.y, x, y) + 90f * (rand.chance(0.5) ? 1f : -1f)).scl(Tmp.v1.dst(x, y) * 2f)); - }else{ - //add randomized offset to avoid straight lines - midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y))); - } - - midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f); - - int mx = (int)midpoint.x, my = (int)midpoint.y; - - join(x, y, mx, my); - join(mx, my, to.x, to.y); - } - - void joinLiquid(int x1, int y1, int x2, int y2){ - float nscl = rand.random(100f, 140f) * 6f; - int rad = rand.random(5, 10); - int avoid = 2 + rad; - var path = pathfind(x1, y1, x2, y2, tile -> (tile.solid() || !tile.floor().isLiquid ? 70f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan); - path.each(t -> { - //don't place liquid paths near the core - if(Mathf.dst2(t.x, t.y, x2, y2) <= avoid * avoid){ - return; - } - - for(int x = -rad; x <= rad; x++){ - for(int y = -rad; y <= rad; y++){ - int wx = t.x + x, wy = t.y + y; - if(Structs.inBounds(wx, wy, width, height) && Mathf.within(x, y, rad)){ - Tile other = tiles.getn(wx, wy); - other.setBlock(Blocks.air); - if(Mathf.within(x, y, rad - 1) && !other.floor().isLiquid){ - Floor floor = other.floor(); - //TODO does not respect tainted floors - other.setFloor((Floor)(floor == Blocks.sand || floor == Blocks.salt ? Blocks.sandWater : Blocks.darksandTaintedWater)); - } - } - } - } - }); - } - - void connectLiquid(Room to){ - if(to == this) return; - - Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f); - rand.nextFloat(); - - //add randomized offset to avoid straight lines - midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y))); - midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f); - - int mx = (int)midpoint.x, my = (int)midpoint.y; - - joinLiquid(x, y, mx, my); - joinLiquid(mx, my, to.x, to.y); - } - } - - cells(4); - distort(10f, 12f); - - float constraint = 1.3f; - float radius = width / 2f / Mathf.sqrt3; - int rooms = rand.random(2, 5); - Seq roomseq = new Seq<>(); - - for(int i = 0; i < rooms; i++){ - Tmp.v1.trns(rand.random(360f), rand.random(radius / constraint)); - float rx = (width/2f + Tmp.v1.x); - float ry = (height/2f + Tmp.v1.y); - float maxrad = radius - Tmp.v1.len(); - float rrad = Math.min(rand.random(9f, maxrad / 2f), 30f); - roomseq.add(new Room((int)rx, (int)ry, (int)rrad)); - } - - //check positions on the map to place the player spawn. this needs to be in the corner of the map - Room spawn = null; - Seq enemies = new Seq<>(); - int enemySpawns = rand.random(1, Math.max((int)(sector.threat * 4), 1)); - int offset = rand.nextInt(360); - float length = width/2.55f - rand.random(13, 23); - int angleStep = 5; - int waterCheckRad = 5; - for(int i = 0; i < 360; i+= angleStep){ - int angle = offset + i; - int cx = (int)(width/2 + Angles.trnsx(angle, length)); - int cy = (int)(height/2 + Angles.trnsy(angle, length)); - - int waterTiles = 0; - - //check for water presence - for(int rx = -waterCheckRad; rx <= waterCheckRad; rx++){ - for(int ry = -waterCheckRad; ry <= waterCheckRad; ry++){ - Tile tile = tiles.get(cx + rx, cy + ry); - if(tile == null || tile.floor().liquidDrop != null){ - waterTiles ++; - } - } - } - - if(waterTiles <= 4 || (i + angleStep >= 360)){ - roomseq.add(spawn = new Room(cx, cy, rand.random(8, 15))); - - for(int j = 0; j < enemySpawns; j++){ - float enemyOffset = rand.range(60f); - Tmp.v1.set(cx - width/2, cy - height/2).rotate(180f + enemyOffset).add(width/2, height/2); - Room espawn = new Room((int)Tmp.v1.x, (int)Tmp.v1.y, rand.random(8, 16)); - roomseq.add(espawn); - enemies.add(espawn); - } - - break; - } - } - - //clear radius around each room - for(Room room : roomseq){ - erase(room.x, room.y, room.radius); - } - - //randomly connect rooms together - int connections = rand.random(Math.max(rooms - 1, 1), rooms + 3); - for(int i = 0; i < connections; i++){ - roomseq.random(rand).connect(roomseq.random(rand)); - } - - for(Room room : roomseq){ - spawn.connect(room); - } - - Room fspawn = spawn; - - cells(1); - - int tlen = tiles.width * tiles.height; - int total = 0, waters = 0; - - for(int i = 0; i < tlen; i++){ - Tile tile = tiles.geti(i); - if(tile.block() == Blocks.air){ - total ++; - if(tile.floor().liquidDrop == Liquids.water){ - waters ++; - } - } - } - - boolean naval = (float)waters / total >= 0.19f; - - //create water pathway if the map is flooded - if(naval){ - for(Room room : enemies){ - room.connectLiquid(spawn); - } - } - - distort(10f, 6f); - - //rivers - pass((x, y) -> { - if(block.solid) return; - - Vec3 v = sector.rect.project(x, y); - - float rr = Simplex.noise2d(sector.id, (float)2, 0.6f, 1f / 7f, x, y) * 0.1f; - float value = Ridged.noise3d(2, v.x, v.y, v.z, 1, 1f / 55f) + rr - rawHeight(v) * 0f; - float rrscl = rr * 44 - 2; - - if(value > 0.17f && !Mathf.within(x, y, fspawn.x, fspawn.y, 12 + rrscl)){ - boolean deep = value > 0.17f + 0.1f && !Mathf.within(x, y, fspawn.x, fspawn.y, 15 + rrscl); - boolean spore = floor != Blocks.sand && floor != Blocks.salt; - //do not place rivers on ice, they're frozen - //ignore pre-existing liquids - if(!(floor == Blocks.ice || floor == Blocks.iceSnow || floor == Blocks.snow || floor.asFloor().isLiquid)){ - floor = spore ? - (deep ? Blocks.taintedWater : Blocks.darksandTaintedWater) : - (deep ? Blocks.water : - (floor == Blocks.sand || floor == Blocks.salt ? Blocks.sandWater : Blocks.darksandWater)); - } - } - }); - - //shoreline setup - pass((x, y) -> { - int deepRadius = 3; - - if(floor.asFloor().isLiquid && floor.asFloor().shallow){ - - for(int cx = -deepRadius; cx <= deepRadius; cx++){ - for(int cy = -deepRadius; cy <= deepRadius; cy++){ - if((cx) * (cx) + (cy) * (cy) <= deepRadius * deepRadius){ - int wx = cx + x, wy = cy + y; - - Tile tile = tiles.get(wx, wy); - if(tile != null && (!tile.floor().isLiquid || tile.block() != Blocks.air)){ - //found something solid, skip replacing anything - return; - } - } - } - } - - floor = floor == Blocks.darksandTaintedWater ? Blocks.taintedWater : Blocks.water; - } - }); - - if(naval){ - int deepRadius = 2; - - //TODO code is very similar, but annoying to extract into a separate function - pass((x, y) -> { - if(floor.asFloor().isLiquid && !floor.asFloor().isDeep() && !floor.asFloor().shallow){ - - for(int cx = -deepRadius; cx <= deepRadius; cx++){ - for(int cy = -deepRadius; cy <= deepRadius; cy++){ - if((cx) * (cx) + (cy) * (cy) <= deepRadius * deepRadius){ - int wx = cx + x, wy = cy + y; - - Tile tile = tiles.get(wx, wy); - if(tile != null && (tile.floor().shallow || !tile.floor().isLiquid)){ - //found something shallow, skip replacing anything - return; - } - } - } - } - - floor = floor == Blocks.water ? Blocks.deepwater : Blocks.taintedWater; - } - }); - } - - Seq ores = Seq.with(Blocks.oreCopper, Blocks.oreLead); - float poles = Math.abs(sector.tile.v.y); - float nmag = 0.5f; - float scl = 1f; - float addscl = 1.3f; - - if(Simplex.noise3d(seed, 2, 0.5, scl, sector.tile.v.x, sector.tile.v.y, sector.tile.v.z)*nmag + poles > 0.25f*addscl){ - ores.add(Blocks.oreCoal); - } - - if(Simplex.noise3d(seed, 2, 0.5, scl, sector.tile.v.x + 1, sector.tile.v.y, sector.tile.v.z)*nmag + poles > 0.5f*addscl){ - ores.add(Blocks.oreTitanium); - } - - if(Simplex.noise3d(seed, 2, 0.5, scl, sector.tile.v.x + 2, sector.tile.v.y, sector.tile.v.z)*nmag + poles > 0.7f*addscl){ - ores.add(Blocks.oreThorium); - } - - FloatSeq frequencies = new FloatSeq(); - for(int i = 0; i < ores.size; i++){ - frequencies.add(rand.random(-0.1f, 0.01f) - i * 0.01f + poles * 0.04f); - } - - pass((x, y) -> { - if(!floor.asFloor().hasSurface()) return; - - int offsetX = x - 4, offsetY = y + 23; - for(int i = ores.size - 1; i >= 0; i--){ - Block entry = ores.get(i); - float freq = frequencies.get(i); - if(Math.abs(0.5f - noise(offsetX, offsetY + i*999, 2, 0.7, (40 + i * 2))) > 0.22f + i*0.01 && - Math.abs(0.5f - noise(offsetX, offsetY - i*999, 1, 1, (30 + i * 4))) > 0.37f + freq){ - ore = entry; - break; - } - } - - if(ore == Blocks.oreScrap && rand.chance(0.33)){ - floor = Blocks.metalFloorDamaged; - } - }); - - trimDark(); - - median(2); - - inverseFloodFill(tiles.getn(spawn.x, spawn.y)); - - tech(); - - pass((x, y) -> { - //random moss - if(floor == Blocks.sporeMoss){ - if(Math.abs(0.5f - noise(x - 90, y, 4, 0.8, 65)) > 0.02){ - floor = Blocks.moss; - } - } - - //tar - if(floor == Blocks.darksand){ - if(Math.abs(0.5f - noise(x - 40, y, 2, 0.7, 80)) > 0.25f && - Math.abs(0.5f - noise(x, y + sector.id*10, 1, 1, 60)) > 0.41f && !(roomseq.contains(r -> Mathf.within(x, y, r.x, r.y, 15)))){ - floor = Blocks.tar; - } - } - - //hotrock tweaks - if(floor == Blocks.hotrock){ - if(Math.abs(0.5f - noise(x - 90, y, 4, 0.8, 80)) > 0.035){ - floor = Blocks.basalt; - }else{ - ore = Blocks.air; - boolean all = true; - for(Point2 p : Geometry.d4){ - Tile other = tiles.get(x + p.x, y + p.y); - if(other == null || (other.floor() != Blocks.hotrock && other.floor() != Blocks.magmarock)){ - all = false; - } - } - if(all){ - floor = Blocks.magmarock; - } - } - }else if(genLakes && floor != Blocks.basalt && floor != Blocks.ice && floor.asFloor().hasSurface()){ - float noise = noise(x + 782, y, 5, 0.75f, 260f, 1f); - if(noise > 0.67f && !roomseq.contains(e -> Mathf.within(x, y, e.x, e.y, 14))){ - if(noise > 0.72f){ - floor = noise > 0.78f ? Blocks.taintedWater : (floor == Blocks.sand ? Blocks.sandWater : Blocks.darksandTaintedWater); - }else{ - floor = (floor == Blocks.sand ? floor : Blocks.darksand); - } - } - } - - if(rand.chance(0.0075)){ - //random spore trees - boolean any = false; - boolean all = true; - for(Point2 p : Geometry.d4){ - Tile other = tiles.get(x + p.x, y + p.y); - if(other != null && other.block() == Blocks.air){ - any = true; - }else{ - all = false; - } - } - if(any && ((block == Blocks.snowWall || block == Blocks.iceWall) || (all && block == Blocks.air && floor == Blocks.snow && rand.chance(0.03)))){ - block = rand.chance(0.5) ? Blocks.whiteTree : Blocks.whiteTreeDead; - } - } - - //random stuff - dec: { - for(int i = 0; i < 4; i++){ - Tile near = world.tile(x + Geometry.d4[i].x, y + Geometry.d4[i].y); - if(near != null && near.block() != Blocks.air){ - break dec; - } - } - - if(rand.chance(0.01) && floor.asFloor().hasSurface() && block == Blocks.air){ - block = dec.get(floor, floor.asFloor().decoration); - } - } - }); - - float difficulty = sector.threat; - ints.clear(); - ints.ensureCapacity(width * height / 4); - - int ruinCount = rand.random(-2, 4); - if(ruinCount > 0){ - int padding = 25; - - //create list of potential positions - for(int x = padding; x < width - padding; x++){ - for(int y = padding; y < height - padding; y++){ - Tile tile = tiles.getn(x, y); - if(!tile.solid() && (tile.drop() != null || tile.floor().liquidDrop != null)){ - ints.add(tile.pos()); - } - } - } - - ints.shuffle(rand); - - int placed = 0; - float diffRange = 0.4f; - //try each position - for(int i = 0; i < ints.size && placed < ruinCount; i++){ - int val = ints.items[i]; - int x = Point2.x(val), y = Point2.y(val); - - //do not overwrite player spawn - if(Mathf.within(x, y, spawn.x, spawn.y, 18f)){ - continue; - } - - float range = difficulty + rand.random(diffRange); - - Tile tile = tiles.getn(x, y); - BasePart part = null; - if(tile.overlay().itemDrop != null){ - part = bases.forResource(tile.drop()).getFrac(range); - }else if(tile.floor().liquidDrop != null && rand.chance(0.05)){ - part = bases.forResource(tile.floor().liquidDrop).getFrac(range); - }else if(rand.chance(0.05)){ //ore-less parts are less likely to occur. - part = bases.parts.getFrac(range); - } - - //actually place the part - if(part != null && BaseGenerator.tryPlace(part, x, y, Team.derelict, (cx, cy) -> { - Tile other = tiles.getn(cx, cy); - if(other.floor().hasSurface()){ - other.setOverlay(Blocks.oreScrap); - for(int j = 1; j <= 2; j++){ - for(Point2 p : Geometry.d8){ - Tile t = tiles.get(cx + p.x*j, cy + p.y*j); - if(t != null && t.floor().hasSurface() && rand.chance(j == 1 ? 0.4 : 0.2)){ - t.setOverlay(Blocks.oreScrap); - } - } - } - } - })){ - placed ++; - - int debrisRadius = Math.max(part.schematic.width, part.schematic.height)/2 + 3; - Geometry.circle(x, y, tiles.width, tiles.height, debrisRadius, (cx, cy) -> { - float dst = Mathf.dst(cx, cy, x, y); - float removeChance = Mathf.lerp(0.05f, 0.5f, dst / debrisRadius); - - Tile other = tiles.getn(cx, cy); - if(other.build != null && other.isCenter()){ - if(other.team() == Team.derelict && rand.chance(removeChance)){ - other.remove(); - }else if(rand.chance(0.5)){ - other.build.health = other.build.health - rand.random(other.build.health * 0.9f); - } - } - }); - } - } - } - - //remove invalid ores - for(Tile tile : tiles){ - if(tile.overlay().needsSurface && !tile.floor().hasSurface()){ - tile.setOverlay(Blocks.air); - } - } - - Schematics.placeLaunchLoadout(spawn.x, spawn.y); - - for(Room espawn : enemies){ - tiles.getn(espawn.x, espawn.y).setOverlay(Blocks.spawn); - } - - if(sector.hasEnemyBase()){ - basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector, difficulty); - - state.rules.attackMode = sector.info.attack = true; - }else{ - state.rules.winWave = sector.info.winWave = 10 + 5 * (int)Math.max(difficulty * 10, 1); - } - - float waveTimeDec = 0.4f; - - state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f)); - state.rules.waves = sector.info.waves = true; - state.rules.enemyCoreBuildRadius = 600f; - - //spawn air only when spawn is blocked - state.rules.spawns = Waves.generate(difficulty, new Rand(sector.id), state.rules.attackMode, state.rules.attackMode && spawner.countGroundSpawns() == 0, naval); - } - - @Override - public void postGenerate(Tiles tiles){ - if(sector.hasEnemyBase()){ - basegen.postGenerate(); - } - } -} \ No newline at end of file diff --git a/src/oblivion/type/OblivionUnitType.java b/src/oblivion/type/OblivionUnitType.java deleted file mode 100644 index b21fe40..0000000 --- a/src/oblivion/type/OblivionUnitType.java +++ /dev/null @@ -1,28 +0,0 @@ -package oblivion.type; - -import arc.func.*; -import arc.math.*; -import arc.util.*; -import arc.math.geom.*; -import arc.graphics.g2d.*; -import mindustry.gen.*; -import mindustry.type.*; -import mindustry.entities.abilities.*; -import mindustry.graphics.*; - -import mindustry.Vars; - -// engineSize and engineOffset is now useless {: -public class OblivionUnitType extends UnitType { - private static final Vec2 legOffset = new Vec2(); - public Cons engineDrawer = unit -> {}, topDrawer = unit -> {}; - - public OblivionUnitType(String name) { - super(name); - } - - @Override - public void drawEngine(Unit unit) { - engineDrawer.get(unit); - } -} \ No newline at end of file From 466b786a961f3e169cff1002a124b2c0b1d561ee Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 14:47:33 -0300 Subject: [PATCH 08/61] forgot i deleted the crafter --- src/oblivion/ProjectOblivion.java | 10 +++++----- src/oblivion/content/OblivionBlocks.java | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/oblivion/ProjectOblivion.java b/src/oblivion/ProjectOblivion.java index a026509..fc730ee 100644 --- a/src/oblivion/ProjectOblivion.java +++ b/src/oblivion/ProjectOblivion.java @@ -30,11 +30,11 @@ public ProjectOblivion(){ public void loadContent(){ new OblivionStatuses().load(); new OblivionResources().load(); - new OblivionUnits().load(); - new OblivionEnvironment().load(); + // new OblivionUnits().load(); + // new OblivionEnvironment().load(); new OblivionBlocks().load(); - new OblivionPlanets().load(); - new OblivionSectors().load(); - new OblivionTechTree().load(); + // new OblivionPlanets().load(); + // new OblivionSectors().load(); + // new OblivionTechTree().load(); } } diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index ad82b4c..8321c9d 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -62,7 +62,7 @@ public void load() { alwaysUnlocked = true; }}; - mesoForge = new DrawableCrafter("meso-forge") {{ + mesoForge = new GenericCrafter("meso-forge") {{ requirements(Category.crafting, with( Items.silicon, 40, Items.graphite, 60, @@ -72,6 +72,7 @@ public void load() { size = 3; health = 200; craftTime = 30f; + /* draw = bu -> { Draw.rect(Core.atlas.find("oblivion-meso-forge"), bu.x, bu.y, 0f); Draw.alpha(bu.warmup); @@ -99,6 +100,7 @@ public void load() { Draw.reset(); Fill.circle(bu.x, bu.y, (5f + Mathf.absin(5f, 1f)) /2f * bu.warmup); }; + */ consumesItems(with( Items.copper, 2, Items.lead, 2 From 79bd48280db50f45c20ce4c7ea471382ead8d361 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 14:58:49 -0300 Subject: [PATCH 09/61] wait --- mod.hjson | 2 +- src/oblivion/ProjectOblivion.java | 4 ++-- src/oblivion/content/OblivionBlocks.java | 5 ++--- src/oblivion/content/OblivionEnvironment.java | 4 +--- src/oblivion/content/OblivionResources.java | 4 +--- 5 files changed, 7 insertions(+), 12 deletions(-) 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/ProjectOblivion.java b/src/oblivion/ProjectOblivion.java index fc730ee..05a2a85 100644 --- a/src/oblivion/ProjectOblivion.java +++ b/src/oblivion/ProjectOblivion.java @@ -28,10 +28,10 @@ public ProjectOblivion(){ @Override public void loadContent(){ - new OblivionStatuses().load(); + // new OblivionStatuses().load(); new OblivionResources().load(); // new OblivionUnits().load(); - // new OblivionEnvironment().load(); + new OblivionEnvironment().load(); new OblivionBlocks().load(); // new OblivionPlanets().load(); // new OblivionSectors().load(); diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 8321c9d..060dbea 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -8,7 +8,6 @@ import arc.graphics.g2d.*; import mindustry.gen.*; import mindustry.type.*; -import mindustry.ctype.*; import mindustry.world.*; import mindustry.content.*; import mindustry.graphics.*; @@ -22,8 +21,8 @@ import mindustry.world.blocks.distribution.*; import mindustry.world.blocks.defense.turrets.*; import oblivion.graphics.*; -import oblivion.blocks.defense.*; -import oblivion.blocks.production.*; +// import oblivion.blocks.defense.*; +// import oblivion.blocks.production.*; import static mindustry.type.ItemStack.*; 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/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;}}; From 2a7ff62f19759f568b57cef8b9f77775a50bb785 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 15:00:42 -0300 Subject: [PATCH 10/61] s --- src/oblivion/content/OblivionBlocks.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 060dbea..f991d5e 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -100,11 +100,11 @@ public void load() { Fill.circle(bu.x, bu.y, (5f + Mathf.absin(5f, 1f)) /2f * bu.warmup); }; */ - consumesItems(with( + consumeItems(with( Items.copper, 2, Items.lead, 2 )); - consumesPower(1f); + consumePower(1f); outputItem = new ItemStack(OblivionResources.mesulfate, 1); }}; From fe8b043a71f6525ad27184caf2e61bf5190c1da7 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 17:50:50 -0300 Subject: [PATCH 11/61] more crafters --- .../blocks/production/DrawableCrafter.java | 31 ++++++++ src/oblivion/content/OblivionBlocks.java | 79 +++++++++---------- 2 files changed, 68 insertions(+), 42 deletions(-) create mode 100644 src/oblivion/blocks/production/DrawableCrafter.java diff --git a/src/oblivion/blocks/production/DrawableCrafter.java b/src/oblivion/blocks/production/DrawableCrafter.java new file mode 100644 index 0000000..a326d79 --- /dev/null +++ b/src/oblivion/blocks/production/DrawableCrafter.java @@ -0,0 +1,31 @@ +package oblivion.blocks.production; + +import arc.*; +import arc.func.*; +import arc.graphics.g2d.*; +import mindustry.gen.*; +import mindustry.world.blocks.production.*; +// a crafter that inutilizes drawers +public class DrawableCrafter extends GenericCrafter { + public Cons draw; + public DrawableCrafter(String name, Cons draw) { + super(name); + this.draw = draw; + } + public DrawableCrafter(String name) { + super(name); + this.draw = b -> {Draw.rect(region, b.x, b.y, rotate ? b.rotdeg() : 0f);}; + } + + @Override + public TextureRegion[] icons() { + return new TextureRegion[]{Core.atlas.find(name + "-full", name)}; + } + + public class DrawableCrafterBuild extends GenericCrafterBuild { + @Override + public void draw() { + draw.get(this); + } + } +} \ No newline at end of file diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index f991d5e..494fb57 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -61,7 +61,7 @@ public void load() { alwaysUnlocked = true; }}; - mesoForge = new GenericCrafter("meso-forge") {{ + mesoForge = new DrawableCrafter("meso-forge") {{ requirements(Category.crafting, with( Items.silicon, 40, Items.graphite, 60, @@ -71,7 +71,6 @@ public void load() { size = 3; health = 200; craftTime = 30f; - /* draw = bu -> { Draw.rect(Core.atlas.find("oblivion-meso-forge"), bu.x, bu.y, 0f); Draw.alpha(bu.warmup); @@ -99,7 +98,6 @@ public void load() { Draw.reset(); Fill.circle(bu.x, bu.y, (5f + Mathf.absin(5f, 1f)) /2f * bu.warmup); }; - */ consumeItems(with( Items.copper, 2, Items.lead, 2 @@ -107,9 +105,6 @@ public void load() { consumePower(1f); outputItem = new ItemStack(OblivionResources.mesulfate, 1); }}; - - /* - stuff that is broken(most) carbonicInfuser = new DrawableCrafter("carbonic-infuser") {{ requirements(Category.crafting, with( OblivionResources.mesulfate, 80, @@ -142,11 +137,11 @@ stuff that is broken(most) 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") {{ @@ -172,11 +167,11 @@ stuff that is broken(most) 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") {{ @@ -215,11 +210,11 @@ stuff that is broken(most) 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") {{ @@ -254,15 +249,15 @@ stuff that is broken(most) 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, @@ -513,8 +508,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); + consumesLiquid(new LiquidStack(Liquids.water, 0.06f)).boost(); }}; alomeriConveyor = new Conveyor("alomeri-conveyor") {{ @@ -537,7 +532,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)) ); @@ -550,7 +545,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)) ); @@ -563,7 +558,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)) ); @@ -575,8 +570,8 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 3; - consumes.power(3f); - consumes.items(with(Items.silicon, 40, Items.graphite, 40)); + consumePower(3f); + consumeItems(with(Items.silicon, 40, Items.graphite, 40)); constructTime = 60f * 10f; @@ -594,8 +589,8 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ )); size = 5; - consumes.power(6f); - consumes.items(with(Items.silicon, 130, Items.titanium, 80, Items.metaglass, 40)); + consumePower(6f); + consumeItems(with(Items.silicon, 130, Items.titanium, 80, Items.metaglass, 40)); constructTime = 60f * 30f; @@ -613,9 +608,9 @@ 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); + consumePower(13f); + consumeItems(with(Items.silicon, 850, Items.titanium, 750, Items.plastanium, 650)); + consumesLiquid(Liquids.cryofluid, 1f); constructTime = 60f * 60f * 1.5f; liquidCapacity = 60f; @@ -634,9 +629,9 @@ 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); + consumePower(25f); + consumeItems(with(Items.silicon, 1000, Items.plastanium, 600, Items.surgeAlloy, 500, Items.phaseFabric, 350)); + consumesLiquid(Liquids.cryofluid, 3f); constructTime = 60f * 60f * 4; liquidCapacity = 180f; @@ -655,9 +650,9 @@ 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); + consumePower(30f); + consumeItems(with(Items.silicon, 2500, Items.plastanium, 1800, Items.surgeAlloy, 1000, OblivionResources.mothalate, 450)); + consumesLiquid(Liquids.cryofluid, 9f); constructTime = 60f * 60f * 10; liquidCapacity = 360f; @@ -687,11 +682,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( @@ -710,10 +705,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( @@ -733,11 +728,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") {{ @@ -756,10 +751,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 @@ -785,7 +780,7 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ size = 3; craftTime = 10f; updateEffect = LamoniFx.imperialSmelt; - consumes.power(0.5f); + consumePower(0.5f); outputItem = new ItemStack(Items.sand, 1); }}; From b8c5b7b4aeb2bb516463d3df844a01b89b82f962 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 19:18:21 -0300 Subject: [PATCH 12/61] forgot to do the commentn't --- .../sprites/blocks/turrets/mesulfate/uno-base.png | Bin 0 -> 313 bytes .../{uno.png => mesulfate/uno-preview.png} | Bin .../blocks/turrets/mesulfate/uno-shoot.png | Bin 0 -> 228 bytes src/oblivion/content/OblivionBlocks.java | 11 ++++++++--- 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 assets/sprites/blocks/turrets/mesulfate/uno-base.png rename assets/sprites/blocks/turrets/{uno.png => mesulfate/uno-preview.png} (100%) create mode 100644 assets/sprites/blocks/turrets/mesulfate/uno-shoot.png diff --git a/assets/sprites/blocks/turrets/mesulfate/uno-base.png b/assets/sprites/blocks/turrets/mesulfate/uno-base.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e5c52fe787d5aa750c66cdcc04afd493bf7c5e GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNDEQjb z#W5tJH90|ob#a17Pg9@)R~u8s#QFdKyVm`yPrACkwEX}6Yj@{reC;_B(RXJ03=6^a zawXl(SX4b`3oCqb zK{3VB&fx;%51GK&*uVF$>o?_`?kr<4bN6}nuyM2a2JT6zmY#eLWh|SXzUWgpS~N+v z;dD`nd%#h~mQVVc4DmM`%~@7F=E(Cp+&oJLa)ZtcqEL#fXpjp1=zW?t=CQJ>8qnsh@ive%ZwL@|I1q YzbnlgONDG60bR)8>FVdQ&MBb@06!p8_W%F@ literal 0 HcmV?d00001 diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 494fb57..69a10ae 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -22,7 +22,7 @@ import mindustry.world.blocks.defense.turrets.*; import oblivion.graphics.*; // import oblivion.blocks.defense.*; -// import oblivion.blocks.production.*; +import oblivion.blocks.production.*; import static mindustry.type.ItemStack.*; @@ -257,7 +257,7 @@ public void load() { consumePower(2.5f); outputItem = new ItemStack(OblivionResources.mothalate, 1); }}; - /* + uno = new ItemTurret("uno") {{ requirements(Category.turret, with( OblivionResources.mesulfate, 10, @@ -266,9 +266,13 @@ public void load() { )); size = 1; health = 160; - reloadTime = 60f; + reload = 60f; range = 120f; rotateSpeed = 10f; + drawer = new DrawTurret("meso-") {{ + parts.add(new RegionPart("-base")); + parts.add(new RegionPart("-shoot") {{moveY = -1f;}}); + }}; ammo( OblivionResources.mesulfate, new BasicBulletType(2f, 15) {{ lifetime = 60f; @@ -287,6 +291,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ }} ); }}; + /* rain = new ItemTurret("rain") {{ requirements(Category.turret, with( OblivionResources.mesulfate, 75, From 8c1187e7453c55208992fbe5d64f42c1a7fb0e4b Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 19:59:07 -0300 Subject: [PATCH 13/61] import --- src/oblivion/content/OblivionBlocks.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 69a10ae..8365fd9 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -13,6 +13,7 @@ import mindustry.graphics.*; import mindustry.world.meta.*; import mindustry.world.draw.*; +import mindustry.entities.part.*; import mindustry.entities.bullet.*; import mindustry.world.blocks.units.*; import mindustry.world.blocks.defense.*; From b3c9cdefec6dee8ee3aafffdbf27c63a16b2f05f Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 20:42:44 -0300 Subject: [PATCH 14/61] all --- assets/sprites/blocks/turrets/base/mesobase-1.png | Bin 0 -> 515 bytes build.gradle | 4 ++-- src/oblivion/content/OblivionBlocks.java | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 assets/sprites/blocks/turrets/base/mesobase-1.png diff --git a/assets/sprites/blocks/turrets/base/mesobase-1.png b/assets/sprites/blocks/turrets/base/mesobase-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2477cfff03ab81e171fa8d489565dd5ee894b3aa GIT binary patch literal 515 zcmV+e0{s1nP)*Mx*9RvP6(Dg3 z=t`8^9hO3{CR&ch-c_vuxDeJ+OmHg=f(1y^zUnX}xDTTBJ)NHEK%QloA5N^X%@Lot z2>`%svqqj}7h~)Se03h8gG;tEET;7ORGRb)pakkR&6?1?>gaqf_(XRaJDKMsr3Qi&HL?j4r z9pJtT%p<>?#gUmMvE{xy{=65sD{+@*L?NO}@hu<#;0FQE(6IDWiNXK?002ovPDHLk FV1lVa+P(k) literal 0 HcmV?d00001 diff --git a/build.gradle b/build.gradle index b7320b7..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:master-SNAPSHOT" + compileOnly "com.github.Anuken.Arc:arc-core:dfcb21ce56" + compileOnly "com.github.Anuken.MindustryJitpack:core:935b478139" annotationProcessor "com.github.Anuken:jabel:$jabelVersion" } diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 8365fd9..3c49b16 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -270,9 +270,13 @@ public void load() { reload = 60f; range = 120f; rotateSpeed = 10f; - drawer = new DrawTurret("meso-") {{ - parts.add(new RegionPart("-base")); - parts.add(new RegionPart("-shoot") {{moveY = -1f;}}); + drawer = new DrawTurret("mesobase-") {{ + parts.addAll(new RegionPart("-base")); + parts.addAll( + new RegionPart("-shoot") {{ + moveY = -1f; + }} + ); }}; ammo( OblivionResources.mesulfate, new BasicBulletType(2f, 15) {{ From ba89a15551c02d15f6ac9badf4f6a37aadf51461 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Thu, 12 May 2022 20:46:51 -0300 Subject: [PATCH 15/61] maybe --- src/oblivion/content/OblivionBlocks.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 3c49b16..65c37d6 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -271,10 +271,16 @@ public void load() { range = 120f; rotateSpeed = 10f; drawer = new DrawTurret("mesobase-") {{ - parts.addAll(new RegionPart("-base")); + parts.addAll( + new RegionPart("-base") {{ + moveY = -0.2f; + progress = PartProgress.reload; + }} + ); parts.addAll( new RegionPart("-shoot") {{ moveY = -1f; + progress = PartProgress.reload; }} ); }}; From 10406861fff83b084ae8bf6078866ab0458b3168 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 13:29:24 -0300 Subject: [PATCH 16/61] rain --- .../blocks/turrets/base/mesobase-1.png | Bin 515 -> 0 bytes .../blocks/turrets/base/mesobase-block-1.png | Bin 0 -> 511 bytes .../blocks/turrets/base/mesobase-block-2.png | Bin 0 -> 1478 bytes .../blocks/turrets/mesulfate/rain-base.png | Bin 0 -> 571 bytes .../blocks/turrets/mesulfate/rain-cannon.png | Bin 0 -> 504 bytes .../blocks/turrets/mesulfate/rain-lock-l.png | Bin 0 -> 271 bytes .../blocks/turrets/mesulfate/rain-lock-r.png | Bin 0 -> 280 bytes .../blocks/turrets/mesulfate/rain-preview.png | Bin 0 -> 910 bytes assets/sprites/blocks/turrets/rain.png | Bin 870 -> 0 bytes src/oblivion/content/OblivionBlocks.java | 31 +++++++++++++++++- 10 files changed, 30 insertions(+), 1 deletion(-) delete mode 100644 assets/sprites/blocks/turrets/base/mesobase-1.png create mode 100644 assets/sprites/blocks/turrets/base/mesobase-block-1.png create mode 100644 assets/sprites/blocks/turrets/base/mesobase-block-2.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/rain-base.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/rain-cannon.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/rain-preview.png delete mode 100644 assets/sprites/blocks/turrets/rain.png diff --git a/assets/sprites/blocks/turrets/base/mesobase-1.png b/assets/sprites/blocks/turrets/base/mesobase-1.png deleted file mode 100644 index 2477cfff03ab81e171fa8d489565dd5ee894b3aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515 zcmV+e0{s1nP)*Mx*9RvP6(Dg3 z=t`8^9hO3{CR&ch-c_vuxDeJ+OmHg=f(1y^zUnX}xDTTBJ)NHEK%QloA5N^X%@Lot z2>`%svqqj}7h~)Se03h8gG;tEET;7ORGRb)pakkR&6?1?>gaqf_(XRaJDKMsr3Qi&HL?j4r z9pJtT%p<>?#gUmMvE{xy{=65sD{+@*L?NO}@hu<#;0FQE(6IDWiNXK?002ovPDHLk FV1lVa+P(k) diff --git a/assets/sprites/blocks/turrets/base/mesobase-block-1.png b/assets/sprites/blocks/turrets/base/mesobase-block-1.png new file mode 100644 index 0000000000000000000000000000000000000000..189b920f4670b45b905fb1cdb7c3dc6a50cfcd11 GIT binary patch literal 511 zcmVAI>3`a$1_0AmxeX%tT&)IupvZG6yLUIlmdB7$G(>C=8#^s1~ z1uxG}1NA^Tpb8Zi(G-LUYR)Gf0VU~9yB?7jz@>Eqa0ZaNC!d=zd%b@+88A~N)l$Vt zItoVpis~}+Kw-3PPI-WGI0ZtIcm$iOa_*A!j5%K{tyPo-&@19O5P)3DNdT%GyFgI3 z90Zw)xs0YNB-bz4o>Otdwq)GoQ$*Qv*O!d}9m2&q^^Vl?i?^U{YA@$Hgjxs(Va)^7 zcR~C8McZ1M59+()-)n)n6IUrlI)ryBz61mS`~pDs(N!Ru=8pgX002ovPDHLkV1k1g B)Y1R| literal 0 HcmV?d00001 diff --git a/assets/sprites/blocks/turrets/base/mesobase-block-2.png b/assets/sprites/blocks/turrets/base/mesobase-block-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0aef35a1c85c380174b5b44a3b7c4ac1ede327cb GIT binary patch literal 1478 zcmV;%1v&bOP)xe%{OK4@7iX`ngEA!r77tE!c5+|fQDa2qLv*=Q(cDiDKk zxIR12fCz+C{J{i4dP`j(NM-369DE4`8dq%nda(bQew=RaY}_5ugq0Pyj{`_{D=`v+o~$jbsY2UQzw04JUsyyO@K4}1+MB7QHoAw47F z8wZn)C|ix-{PaW(J|c23bsUI6knSN{R`4VXf;60Nb%UB#jG~nVz`3JORx9yZP9~%_ zquQ;ia8Dq1gQR2kbUY3@5K)OO?tG2qnQs%4!g#`G^H! z>(Bf5TW!F-$waI_pPIh`0FT*dPOFnv*ORMgn?R#aX#zFf-VuFOGa#MkQ}6)r{9WAv59z4;N1)yY2zYBzt;B$Qp1F#IwMniMsq6C5!{DajybDW<8Aq2n+p41lv zYwp0;2Ks>D0YaD{LDkSY5ku48` z3Lt&+90CPzElzq6q<`AI+EE#7uoklL~!sQUuaq9`E032SN0nkGj?Adj1-wN)oQ zS9_iokD39}N~)HIrJ3M~mrYljHR#gwwBP}!4d4*0ItcU+K`KKKyxk#Q)(Rd7^aAyA z;Ra9Y3xaiTbZh>_{(&1j5I7-{yR-YUuGKdbamcd`*oQf}W}~6IKWJt^$+k8iXF|?# zcj?~LW;7E*r^O}BZ{2o{TjCCvob~5rw5k<_V0EKnH^_tcPKkK3Hc%q623#cTqzVTl zZPmGrV3#9vU4xI>&@v&C9ihok34}g^&#{$4h#r#*pA#HcRk%7FjrRa$Hs`I|YqPkc z@t)fqmsHnQ228hiR6~(Wpsg!u0u|Y`knSN{UCtUvC)v50MU3QYQ5Ep%uL?@q-Lyz{X#kHBJaGib|QFohGf9i(bDnn~jF* zK_|(F)K@DL!rh?uFipLGHD)OFORCb^1S*^XeSQUY*~<9_Dg@v<1y71XZ~!PxcGf#H!_K*7%68!5)fRDrdE&QxrFDH8oGHxutC$6!ypY0XX67G4j zK$h4lZXcZ!HD;Dp+waP{yv;EYciSpC;nPZQ*J8C591_Mhi&Yh)9eO|Xw6*9knjSXZ zDKv?-<z{x9x(-8 z`9pl?J<^ya?rU*m@@h@b@(|$m;C#<#A~LT~)nk3Gu}hOjgImSR%c@plp+Qa|2W~u^ zxlx6M^$OSd9>s;>4qiW2pMB>4V9tjg-Gzp2a{A}@z70}kDG#;dT=>Co-SW$ei}Qc) zT`~9c;ot4w_vF_syqo+%v>>~}^5NEr=UQ%Dv)sk8spY@OyiU&vS9o3KAKaIfclLwN ze3s0MPkgGB@3YPq?|!x0QK@q0UH5BcKg#y%{fk#Tb~J0MY1^A74`0rm4?CxLC7G&Z zw5SK^boFUEYTHcwRNrW*lF_EF^&xr55|+0g7#MyrPJhG2x?5I#7ATfHUHx3vIVCg! E0FVUhtpET3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5d11938b470641031b44d7d9c52e2c1ae9721638 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|VnK zPZ!6KiaBp*Sr;905O5KXZlDjXb*Mhn4mG0;_HC@cxKgo?J zfJ?DOz==cgiT$RFVtj`U{N~TszrOo=ef_?x$Ir#Q_YN+xn0IXHcbmK$PEV?m7_Yvk#ZBoyqkQlIzzM z(s}4zxPxWc>`N`|Qk>U5EVcOB@cC&L7r%;-&7tX&?yzjOci1{XEkW;3-S)YA*BPts z;HVH|vEk-lA~fyV<)%-Ha5n;Q4ybA%7RwimiEj_FGT6lq<7t>%FG!9zRwTR!GTZsIJMAnFlgD z%$#pO7k?CppU25>B%R#F;8`(2RWYVP&E~`e0j&cId;;l%+C?MU@{Bb~P?_B&5}1x6)mdKI;Vst0LbXTPyhe` literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3fa238632017dce3b2de81f1d29fd088f1aef1e4 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wkQ1GCq zi(^Q|oVV8;1)Cj2njdb_(qiNn-N2-kvQ>eF(c%!RZDE6?S9QiGzW?b8vl$M10rh~v zfyAubxlz%R(|0Uw>OUI)S;o>^<;$Cu>TVm@S&&qD z(!}BFr=TC^GxYQ&*B|nJzx#GV>!&jB_pb{%V6I5`%x0o$;&Dzu4(u>bS3j3^P6i>L2fAGT&@W zwq^qA1OtsXTet1K_DtsRS<#xgKa%I^CU0!{7IrtV$>ziDY2niqc%!{C1qIJ%O4Tjb zaTF`@`!{7Ni|2{bPs@2!@BEiF_;k-Ky~d@3t72_-x$0fj6J-w9gqG}gI41NY-C>)M zPJ6;Kp`7gw(}dPsPiPZb!|KxG9k8LTe%C&+yGJ8*mTtMXSrX=uKW`Wo&vO4@&B*;7 OB;@Jp=d#Wzp$Pz-^<(e= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fb0c65e698309616033ded0638396db3054d9c6b GIT binary patch literal 910 zcmV;919AL`P)W=ukCkO}Jnf)Y{^SW=kD0T%B8 zjB|mKk{0CvWuAhBgk(ZnRAN%(qOYTsC4Iju+3CK>8AmHU&uX>$F~F25Q~u}7v<17a z+lGHXKD`XS|MvB>`r0+?d#5RMb$zp?{wHp*C1chn7Qkr?#zVr`^@#*X8iTP&s8OHl z5qL|P1ZWG!qi~qzV$Qn8)%DGm+hslKOU2X!QjL%91CP;2u)+g4 zjRB8OFD7`5M1luAK;=QO_5_NPY64R5%f&qTT-TJ~A|MBX$-!f!5~%tlF$Hw8hg0wvsf2@D4wv9DTnPua9Ol4dY7UHS0bedJ z)k{>(q{ecGf8O1(+sYDv@E`yD7B>drH3u9T3AdXK0PrP{0^&O_kr3Z`&PGQpN+JQ_ zF&qg+0l99^k&x^5B?-A+!jTZeV<-t(0n{^pe|nt#j(X-(5~xR{B;kC$F4k9)kQ6|{ zzdt(zfV2eefEP;Ojt?mb2><>0xmY$QVMhQL9urECj`m&GZKVgGp@jI(Ya|Q=NZ~Q} zr^i({F_w#Yw%bc3u;&3ecmRM;ufMpLam$a3i|lulgfJ`t`v#BkkU$F9S9pw7LQ#Mg zez};l-`(6fMQMz&NXQDXz^6XP2`4Tk2_g6x5|RQu;7du(+PG6}ZwWgBTEJskNEit4 zhL0Osg2%)XxYrINk-&NldcaFok+CRm31J2TPFAa(otWD2n6V^$cz75v?(~3ALMwQT zw}coTAoB>EtX4A({P}u40JgwmLJ7BM9 z<6NMmq(wPEnWrEjA(_$^m6#N{=*?(ly?@fv$~)DE+OfS)zi+i#X|)09bUK~?n3LQe z4#Thy|Nr#-I{N(E*U#CAG>t(#B-E~F5@2ZzQX*lB zdTIflUAi_FaVi0G3XfXFk=a8sSUoNfJl_+HM~< zs%H3-dYpu;c|gq5^XnwxYt(ZQFlV{|?HAYUH96N_Ef?%4?Tu8=vMx{wkisKVNYK{P zN)QET!)qE3cY)RoXiXQ;x&f`p7BGk9u!f=@ zFo)%^MDZmshvhIwUk+=(_~rWgsGshJ{JOvQeJG0IKmPq=ZVYzWoag&FXZdco0|31Q zQ9yj=EfV5EOLJCZQ5Fdp9??i(1yJ2yBZ0bYaT2IrqLC1XMkAxDe&jE&E z*jw)qp@jI%=SUa{u!ct-&QB+QCP;OAs|58tfC>))@agAo?P1*badkz0CP@fU2{^X! zh=&AGz_Er$N+qxYa>K8d3-!HQJE!2rm=X!3fRga3f5(Iq7fwPLyoQ9N0FUq-saczL zitR1oKtPM|NDB!g0p8)`hH~MNSc3N0Ar=X$+n`5y%PKM!Bi<(asPxvQ9~A?qZ>MYpkV&((nLIdxI?`c!URVd_iJL w30~m=oZk?cLV{;_fC{h3)Rf>IzSHTzKO{i;vV#dhSO5S307*qoM6N<$f?rL5%m4rY diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 65c37d6..c2554c8 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -302,7 +302,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ }} ); }}; - /* + rain = new ItemTurret("rain") {{ requirements(Category.turret, with( OblivionResources.mesulfate, 75, @@ -318,6 +318,34 @@ Items.silicon, new MissileBulletType(2f, 7) {{ alternate = true; range = 184f; rotateSpeed = 7.5f; + shoot = new ShootAlternate() {{ + spread = 7f; + }}; + drawer = new DrawTurret("mesobase-") {{ + part.addAll( + new RegionPart("-cannon") {{ + x = 3.5f; + y = 2f; + moveY = -2f; + progress = PartProgress.reload; + }} + ); + parts.addAll( + new RegionPart("-base") {{ + moveY = -0.5f; + progress = PartProgress.reload; + children.addAll( + new RegionPart("-lock") {{ + x = 5.5f; + y = -8f; + moveRot = -45f; + progress = PartProgress.warmup; + mirror = true; + }} + ); + }} + ); + }}; ammo( OblivionResources.mesulfate, new BasicBulletType(5f, 20) {{ lifetime = 36.8f; @@ -390,6 +418,7 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ }} ); }}; + /* toxic = new ItemTurret("toxic") {{ requirements(Category.turret, with( Items.graphite, 20, From 4d2347731742d18ecb978c30ea419ff1b4927ab6 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 13:40:40 -0300 Subject: [PATCH 17/61] fixes --- src/oblivion/content/OblivionBlocks.java | 26 ++++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index c2554c8..854e75b 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -15,6 +15,7 @@ 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.*; @@ -312,17 +313,14 @@ 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; shoot = new ShootAlternate() {{ spread = 7f; }}; drawer = new DrawTurret("mesobase-") {{ - part.addAll( + parts.addAll( new RegionPart("-cannon") {{ x = 3.5f; y = 2f; @@ -377,12 +375,14 @@ Items.silicon, new MissileBulletType(2f, 17) {{ )); size = 3; health = 1440; - reloadTime = 90f; + reload = 90f; range = 240f; - shots = 4; - burstSpacing = 9f; inaccuracy = 8f; + velocityInaccuracy = 0.8f; rotateSpeed = 5f; + shoot = new ShootPattern() {{ + shots = 4; + }}; ammo( OblivionResources.mesulfate, new ArtilleryBulletType(3f, 35) {{ lifetime = 80f; @@ -426,7 +426,7 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ )); size = 1; health = 180; - reloadTime = 45f; + reload = 45f; spread = 4f; shots = 2; alternate = true; @@ -453,7 +453,7 @@ OblivionResources.copremite, new BasicBulletType(1.5f, 8) {{ )); size = 2; health = 180 * 4; - reloadTime = 30f; + reload = 30f; range = 18f * 8f; rotateSpeed = 6f; ammo( @@ -478,7 +478,7 @@ OblivionResources.copremite, new BasicBulletType(2f, 13) {{ )); size = 3; health = 180 * 9; - reloadTime = 75f; + reload = 75f; range = 27f * 8f; rotateSpeed = 4.5f; ammo( @@ -502,7 +502,7 @@ OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ )); size = 2; health = 200 * 4; - reloadTime = 45f; + reload = 45f; range = 20f * 8f; rotateSpeed = 4.5f; ammo( @@ -524,7 +524,7 @@ OblivionResources.calenmite, new BasicBulletType(2f, 35) {{ )); size = 3; health = 200 * 9; - reloadTime = 85f; + reload = 85f; range = 30f * 8f; shots = 3; inaccuracy = 3f; From 847f0919c7a3e5e14a4e468be634e1a2dbcef2dd Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 13:52:09 -0300 Subject: [PATCH 18/61] ae --- src/oblivion/content/OblivionBlocks.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 854e75b..7f28aa7 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -378,7 +378,6 @@ Items.silicon, new MissileBulletType(2f, 17) {{ reload = 90f; range = 240f; inaccuracy = 8f; - velocityInaccuracy = 0.8f; rotateSpeed = 5f; shoot = new ShootPattern() {{ shots = 4; From 8530308a717d964086bfd5d755949d37f32cd4a3 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 16:16:35 -0300 Subject: [PATCH 19/61] granite stuff --- .../blocks/turrets/base/mesobase-block-3.png | Bin 0 -> 2383 bytes .../blocks/turrets/mesulfate/granite-base.png | Bin 0 -> 1043 bytes .../turrets/mesulfate/granite-preview.png | Bin 0 -> 1671 bytes .../turrets/mesulfate/granite-shoot.png | Bin 0 -> 528 bytes .../turrets/mesulfate/granite-wing-l.png | Bin 0 -> 760 bytes .../turrets/mesulfate/granite-wing-r.png | Bin 0 -> 751 bytes src/oblivion/content/OblivionBlocks.java | 22 ++++++++++++++++++ 7 files changed, 22 insertions(+) create mode 100644 assets/sprites/blocks/turrets/base/mesobase-block-3.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-base.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-preview.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-shoot.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-wing-l.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png diff --git a/assets/sprites/blocks/turrets/base/mesobase-block-3.png b/assets/sprites/blocks/turrets/base/mesobase-block-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2be2a08693b61993353ec6d950336f4c190256be GIT binary patch literal 2383 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 RPzaiz% zLPe*N2Ghsvnoh0_s?+C0D;;5vDBinY(W#~(JH279 zWJ3B!#%p`}&F|><@iUxOGU?%0WPE1hx8>`8HM#!d9qu!fm=2T)&N|k3Dk+!v-Cv z!#@Iq7|wNHFtQV2ZKwp9wTYp?3TW0O6;JHw%41pMm(yk%txB2-jA8~)S3j3^P6(%}O*p z!@dBR7z&NTtU-a;8c2ni(?(^6c4CCPsxJj@o7WRif;3VN`bOCc{3EvGH0U5&w69HMn2Ll0_!v}Ez*~156 z0ZYSw`QrJhOF1i&0(uD_1O@aIK8OkEEqo9X&|~-@BB0msK|nyy;X|;1-ouAL0Tuou zAp$D=e}rEHTFDqb7zxNq2?(YH1XBWnDFMNx6R=*dZB|4;G68PkLm~l=;X@JuuHi!x z0nUU7a9TQeZbE~Y+mzea4{|*Xg%{ns1c`!smLOAXtAyK|YXCl6UQTY~B*E$~Xb2zR z{lmlLcB|FOW=W%sfbH-HGDxrx@b=fw$=BQ^$O{<4zu#;YyL;eNB>?&2!CjFTXJ1WbjTC43MU0RM-bDSR+F1!W6;8~G#P z5Vtqid&dImSPN)vO(Hd z)`Zm&kg+vkB>?iZCS(N6S*&$;arO7%j*I~4bH$vL063on)mbq)0nnEONdeH01X%&l zhXjj@-ki0gElU>%6qYcC7tl(Jgxwakg9PbQ&>WV|4@94iQV2M9ejrkUy?~bafiGXb z9o$cp1Zx3v<_B6NL|`pojD7P1iW1TZfJX^alQU`(tOYEc9~hGmbvtS^4uI*g!1lFZ zPK$c@v0vm^z)Ap|{x9vLTi|vA;B*qA!v|9VaJ&SC@WEIBESI1XK9~!D`4W`EFN&fl qilQirq9}@@D2k#eilQir{QLo+W((i`-f~?40000Ru46j0+g$V8aV;#)kBS(fH_pEhZ;En>eWMyoB+_S9%^Lo15~Sr8p#<@P^=zm zqy>Op^-v?b1WoA)J;D$2kYEP%5G8yFETH$N$d`x|J_HqTD&a#w0jCr`1QT#-;X|OU zi7nx;-FgVI!-pUO)`VYZkq|w62(Se8gb%v?f6Y(mj!N7u6|6dcXjGJ3_vh@Eo!)Cy-hpb Date: Fri, 13 May 2022 16:27:28 -0300 Subject: [PATCH 20/61] skill issue --- .../{granite-wing-l.png => granite-base-wing-l.png} | Bin .../{granite-wing-r.png => granite-base-wing-r.png} | Bin .../{rain-lock-l.png => rain-base-lock-l.png} | Bin .../{rain-lock-r.png => rain-base-lock-r.png} | Bin src/oblivion/content/OblivionBlocks.java | 11 ++++------- 5 files changed, 4 insertions(+), 7 deletions(-) rename assets/sprites/blocks/turrets/mesulfate/{granite-wing-l.png => granite-base-wing-l.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{granite-wing-r.png => granite-base-wing-r.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{rain-lock-l.png => rain-base-lock-l.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{rain-lock-r.png => rain-base-lock-r.png} (100%) diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-wing-l.png b/assets/sprites/blocks/turrets/mesulfate/granite-base-wing-l.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/granite-wing-l.png rename to assets/sprites/blocks/turrets/mesulfate/granite-base-wing-l.png diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png b/assets/sprites/blocks/turrets/mesulfate/granite-base-wing-r.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png rename to assets/sprites/blocks/turrets/mesulfate/granite-base-wing-r.png diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png b/assets/sprites/blocks/turrets/mesulfate/rain-base-lock-l.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png rename to assets/sprites/blocks/turrets/mesulfate/rain-base-lock-l.png diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png b/assets/sprites/blocks/turrets/mesulfate/rain-base-lock-r.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png rename to assets/sprites/blocks/turrets/mesulfate/rain-base-lock-r.png diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 58f0081..50a1feb 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -322,7 +322,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ drawer = new DrawTurret("mesobase-") {{ parts.addAll( new RegionPart("-cannon") {{ - x = 3.5f; + x = 0f; y = 2f; moveY = -2f; progress = PartProgress.reload; @@ -354,8 +354,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; @@ -391,8 +389,9 @@ Items.silicon, new MissileBulletType(2f, 17) {{ new RegionPart("-wing") {{ x = 6.6f; y = -4f; - moveRot = 15f; + moveRot = -15f; progress = PartProgress.warmup; + mirror = true; }} ); }} @@ -400,7 +399,7 @@ Items.silicon, new MissileBulletType(2f, 17) {{ parts.addAll( new RegionPart("-shoot") {{ moveY = -3f; - progress = PartProgress.warmup; + progress = PartProgress.reload; }} ); }}; @@ -424,8 +423,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; From 8e94840611497693f87285fb8094a45425d466fc Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 21:22:01 -0300 Subject: [PATCH 21/61] more turrets --- .../blocks/turrets/base/poisobase-block-1.png | Bin 0 -> 523 bytes .../blocks/turrets/base/poisobase-block-2.png | Bin 0 -> 1494 bytes .../blocks/turrets/base/poisobase-block-3.png | Bin 0 -> 2416 bytes .../turrets/copremite/corrosive-base.png | Bin 0 -> 840 bytes .../turrets/copremite/corrosive-blade-l.png | Bin 0 -> 383 bytes .../turrets/copremite/corrosive-blade-r.png | Bin 0 -> 370 bytes .../turrets/copremite/corrosive-preview.png | Bin 0 -> 952 bytes .../blocks/turrets/copremite/toxic-base.png | Bin 0 -> 304 bytes .../turrets/copremite/toxic-preview.png | Bin 0 -> 372 bytes .../blocks/turrets/copremite/toxic-shoot.png | Bin 0 -> 285 bytes assets/sprites/blocks/turrets/granite.png | Bin 1512 -> 0 bytes assets/sprites/blocks/turrets/toxic.png | Bin 362 -> 0 bytes src/oblivion/content/OblivionBlocks.java | 25 +++++++++++++----- 13 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 assets/sprites/blocks/turrets/base/poisobase-block-1.png create mode 100644 assets/sprites/blocks/turrets/base/poisobase-block-2.png create mode 100644 assets/sprites/blocks/turrets/base/poisobase-block-3.png create mode 100644 assets/sprites/blocks/turrets/copremite/corrosive-base.png create mode 100644 assets/sprites/blocks/turrets/copremite/corrosive-blade-l.png create mode 100644 assets/sprites/blocks/turrets/copremite/corrosive-blade-r.png create mode 100644 assets/sprites/blocks/turrets/copremite/corrosive-preview.png create mode 100644 assets/sprites/blocks/turrets/copremite/toxic-base.png create mode 100644 assets/sprites/blocks/turrets/copremite/toxic-preview.png create mode 100644 assets/sprites/blocks/turrets/copremite/toxic-shoot.png delete mode 100644 assets/sprites/blocks/turrets/granite.png delete mode 100644 assets/sprites/blocks/turrets/toxic.png diff --git a/assets/sprites/blocks/turrets/base/poisobase-block-1.png b/assets/sprites/blocks/turrets/base/poisobase-block-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfaebe0f9b37eb02253d246ca2537962412a0d9 GIT binary patch literal 523 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 Ssp|*;0000wn14>;Xy z(9mqt!DKV}|LwnFx=ZaECfkUx7ffzH#L)LCVFPcIpBxX-&cRQsgB@j!+DDC30&LmWCy3r*>ve5>rsr?(Zow`kQvSe?D&81UZ?pWLY|vW8^=AFOGanod7-o1&2!Hrj zR9A3j3WmyHl@-em-28lwho42Jd0R_I)`cko!MssIi&i;0JH?n<=qhfKnlt4>)`fqJ z(M@^`|GXlum%h2C;lxnmJ;O)N=@(zopr0K5Q=KL7v# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fc737488163c4cfd827f2c883d7041031b619af1 GIT binary patch literal 952 zcmV;p14sOcP)ra7Ir3>KSDX}MaH=Xk0a0EsaUC@(bupc&Ox5UK;PT+%HdR0Tkp zKP>ie{^n2dJ8DCy27qIJN}?l#DgY$rr$jnIa0j3i~2s1BfHes+HWj}MpG<1HXm1wffc^@LCj0M|UK7lbMRq~=jQAgBQ>SLH5dsT9 zP4iPCogk0^O6Fg`dYKHQUCyKsmaFwK?kb1kKqvyB%%=ib*K#g|FgFW?EC8-~b|A-U zFqNAYLK1+~JQc{Z8Z70ef$$Fi>w}3Hkfp&9Lns;KC{a9Qpw@-vFS8AO;YRd)OmZqlZKc<}7~)=LoQhFf>2)uMx#Coe-jyClP2UpZRE(aL z9!F{b<2as4-tDjTmY6h;SSkSHI8FgM!E3!GCe0%yF@P{AC%ETx0ZSe^i2$U6mV$de z7qH|}5*t7%Xev0TR}hO+^Goxf!~(zx8V09EJ_UiQ`45Y|I1kQwBmm8Q_38ar@_#}I zlz9MvySE?2d2oOg0a%t7E`(a;hX)`v@%H9s)R$YE{TZIHpT>u{_9ht90q3KBdEj8E>Xy`3T&d-uzK zGh@M->2gVY-~V2(PAk6^l)kHD2RkF9X`$FcrW@KRY`Q@#TY929cmxF9J6IMR{eAnA z>~EVekwZ1C!H>k6*sdIjY~f1y@@9c+SHrYI?um>_k2oeWC_R<}Do|2-|L`ea>1*}x zu`YL-8yaR=bO$iL5jAQS(`1S|rt8Ai(V^_Z)X|g8@k-K-k5$6_dF%J%(;rW@N@iMi x#Fm3&MdxM?(F1Xc#u*cp7NpK`{PX<}!&cAe?cWnW*Z_UY;OXk;vd$@?2>`bganAq% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1b49fa5c8e0870deb2e4da71750bfae4c8321033 GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZI!z`&^H z>Eaj?(fan9Hs2u!0k#LM&H{6oc)5CAO#)6^a^wlSm_F3wU=izOI;$zb;vA^DW$y9) zn?nR7cJ}|=|5kZz@&8}XKHYnM`KC?(%ZqMey8PWy9pC?%x+z}LX-v>^;O=+rV9<)$ z^+d$Sc>_b1a?yTGmQn%11m5imSqxtuZWL+NVBGQH+&*tJo4NXV7B40j_b2l^t;lZ_ zi3`zSVpDjykwdKE#l=T_hnVan*C}Q-s2x&u;k=My(cWO^_Wfk9On(2mM>0WL44fT~ z9SswXg|ToyF!SQIWHCR-r1LP$g;zj0&v6QaqT;nxN(-)EuzbF4bu4%6Zn^viTLl(m zbSOAob82{%x#XB)wjx8h=1LIVu=g;wr=^PKHD QFc=v;UHx3vIVCg!0IGMR)&9{&IP*X|$wosvFNBKVSnA8~AwX~?l$+NW@n@rTZ#X9laR8YJQ; zz2aCT>)<6Y87M8RxRt?`Z%4^bz2P1fK6 zUxLxkGaoMh{e8fq;p7wJIli6BCyE$0J)L6Jl)|2{d5)0#geMF&(v+%deP4`YfL>$pboFyt=akR{02JMCW&i*H literal 0 HcmV?d00001 diff --git a/assets/sprites/blocks/turrets/granite.png b/assets/sprites/blocks/turrets/granite.png deleted file mode 100644 index 7d1516b9427b0c432dc1e7fc4aafee62181c9b83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1512 zcmVP)iwm>3iYs;f>WGdjB;_g}w#&;I}J_9jH$UW`rvM{nP~&zeuE1Z*}<4?tr+DguP50koKpnjONl04&T$ z%?x2m0G8&XW`!^%fajzz07~7>oX$><9aCbfFaQ8}5F(im5DWkS4I!HO00992QXJP#W&f zIt@UnG#z3+O=1S1W^yD5HIpqNm;e}M?%C4qvj9Aeni+!UoK`99CjfdFG$Vu_ z6N+y>Vgf`|F290ZGv08Ic&8NR=`V25D^!P9&IfR8_ZveP1w8bB?> zJt2%TKbID%o@_Mbj7%jN=2S;-PEG)zp3&B{q-nx`AG?=?f#W!`17mR z}gFVC15rPQOpNmyue|^_Hjw0OpPfd z;d-fgL1u)sC1E!6IdTQil4&UfFY~>7fo=dW(>)+~o9_vMbpxQZ9k9MoNxKeg4PP1_ z=e9^z36NaXSW0B>`|G1a);=Jw^8x3(U3R2hicgXb?p2-aDu@H2mg(j1OXIB}aLvzs zuEoPihvc4A@g=0C>PS*NOOsfd#rf0_srgGu#xtdOq?go+8{tw(;69<+1r<&_E#`CM zr{dAv5UlD2X(3?dsZFt32(9MhfUXw5rTG92-B2lnH1oBc$u(KNKOh}VmmpZ14`A>v zNlu%28<=aa~fmFG1XLG z_WLg8qwX&**bDGskEu%5imj%zC6Y`hOU{!?WKuTnJVRFsavc`PsJ5T;6ku4KldMw5mE>}%m*+S2`^=_fN%Yps8kmB#96+U%RI9! z5WLMtwLq|bCz?x!H4u84kJ3Q!cp;rzrX>)1n~#z}i263bRjXF5BJ>x-s5d{afVq(X O0000V!1|ZtNk23Zzr_C%WsPW zDD6MF0Q*07*qo IM6N<$g3DfxDgXcg diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 50a1feb..92788aa 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -377,7 +377,7 @@ Items.silicon, new MissileBulletType(2f, 17) {{ range = 240f; inaccuracy = 8f; rotateSpeed = 5f; - shoot = new ShootPattern() {{ + shoot = new ShootAlternate() {{ shots = 4; }}; drawer = new DrawTurret("mesobase-") {{ @@ -394,9 +394,7 @@ Items.silicon, new MissileBulletType(2f, 17) {{ mirror = true; }} ); - }} - ); - parts.addAll( + }}, new RegionPart("-shoot") {{ moveY = -3f; progress = PartProgress.reload; @@ -436,7 +434,7 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ }} ); }}; - /* + toxic = new ItemTurret("toxic") {{ requirements(Category.turret, with( Items.graphite, 20, @@ -447,9 +445,23 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ reload = 45f; spread = 4f; shots = 2; - alternate = true; range = 13f * 8f; rotateSpeed = 7f; + shoot = new ShootPattern() {{ + spread = 4f; + }}; + drawer = new DrawTurret("poisobase-") {{ + parts.addAll( + new RegionPart("-base") {{ + moveY = -0.2f; + progress = PartProgress.reload; + }}, + new RegionPart("-shoot") {{ + moveY = -1f; + progress = PartProgress.reload; + }}, + ); + }}; ammo( OblivionResources.copremite, new BasicBulletType(1.5f, 8) {{ lifetime = range/speed; @@ -512,6 +524,7 @@ OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ }} ); }}; + /* hammer = new ItemTurret("hammer") {{ requirements(Category.turret, with( OblivionResources.calenmite, 40, From 33e60bf2f183c3298f183c491375d0424713b9a9 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 21:24:34 -0300 Subject: [PATCH 22/61] , --- src/oblivion/content/OblivionBlocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 92788aa..72e77ac 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -459,7 +459,7 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ new RegionPart("-shoot") {{ moveY = -1f; progress = PartProgress.reload; - }}, + }} ); }}; ammo( From 56319432e2dae4de4335ed31208dc5d25bc5f378 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 21:29:33 -0300 Subject: [PATCH 23/61] fixes --- src/oblivion/content/OblivionBlocks.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 72e77ac..8700986 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -377,7 +377,7 @@ Items.silicon, new MissileBulletType(2f, 17) {{ range = 240f; inaccuracy = 8f; rotateSpeed = 5f; - shoot = new ShootAlternate() {{ + shoot = new ShootPattern() {{ shots = 4; }}; drawer = new DrawTurret("mesobase-") {{ @@ -443,13 +443,8 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ size = 1; health = 180; reload = 45f; - spread = 4f; - shots = 2; range = 13f * 8f; rotateSpeed = 7f; - shoot = new ShootPattern() {{ - spread = 4f; - }}; drawer = new DrawTurret("poisobase-") {{ parts.addAll( new RegionPart("-base") {{ @@ -469,8 +464,8 @@ OblivionResources.copremite, new BasicBulletType(1.5f, 8) {{ frontColor = Color.valueOf("74C272"); backColor = Color.valueOf("4F824B"); shootEffect = OblivionFx.poisonShoot; - status = OblivionStatuses.infested; - statusDuration = 60f * 4.5f; + // status = OblivionStatuses.infested; + // statusDuration = 60f * 4.5f; }} ); }}; @@ -493,8 +488,8 @@ OblivionResources.copremite, new BasicBulletType(2f, 13) {{ frontColor = Color.valueOf("74C272"); backColor = Color.valueOf("4F824B"); shootEffect = OblivionFx.poisonShoot; - status = OblivionStatuses.infested; - statusDuration = 60f * 6f; + // status = OblivionStatuses.infested; + // statusDuration = 60f * 6f; }} ); }}; @@ -519,8 +514,8 @@ OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ backColor = Color.valueOf("4F824B"); shootEffect = OblivionFx.poisonShoot; shootSound = Sounds.artillery; - status = OblivionStatuses.infested; - statusDuration = 60f * 12f; + // status = OblivionStatuses.infested; + // statusDuration = 60f * 12f; }} ); }}; From e9504f4a445c431cc394c0cc546dc58db920d423 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 22:21:58 -0300 Subject: [PATCH 24/61] animation learning moment --- ...{poisobase-block-3.png => acidic-base.png} | Bin ...isobase-block-2.png => corrosive-base.png} | Bin ...{mesobase-block-3.png => granite-base.png} | Bin .../{mesobase-block-2.png => rain-base.png} | Bin .../{poisobase-block-1.png => toxic-base.png} | Bin .../{mesobase-block-1.png => uno-base.png} | Bin ...ite-base-wing-l.png => granite-wing-1.png} | Bin ...ite-base-wing-r.png => granite-wing-2.png} | Bin .../{granite-base.png => granite.png} | Bin .../{rain-base-lock-l.png => rain-lock-l.png} | Bin .../{rain-base-lock-r.png => rain-lock-r.png} | Bin .../mesulfate/{rain-base.png => rain.png} | Bin .../mesulfate/{uno-base.png => uno.png} | Bin src/oblivion/content/OblivionBlocks.java | 45 ++++++------------ 14 files changed, 15 insertions(+), 30 deletions(-) rename assets/sprites/blocks/turrets/base/{poisobase-block-3.png => acidic-base.png} (100%) rename assets/sprites/blocks/turrets/base/{poisobase-block-2.png => corrosive-base.png} (100%) rename assets/sprites/blocks/turrets/base/{mesobase-block-3.png => granite-base.png} (100%) rename assets/sprites/blocks/turrets/base/{mesobase-block-2.png => rain-base.png} (100%) rename assets/sprites/blocks/turrets/base/{poisobase-block-1.png => toxic-base.png} (100%) rename assets/sprites/blocks/turrets/base/{mesobase-block-1.png => uno-base.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{granite-base-wing-l.png => granite-wing-1.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{granite-base-wing-r.png => granite-wing-2.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{granite-base.png => granite.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{rain-base-lock-l.png => rain-lock-l.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{rain-base-lock-r.png => rain-lock-r.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{rain-base.png => rain.png} (100%) rename assets/sprites/blocks/turrets/mesulfate/{uno-base.png => uno.png} (100%) diff --git a/assets/sprites/blocks/turrets/base/poisobase-block-3.png b/assets/sprites/blocks/turrets/base/acidic-base.png similarity index 100% rename from assets/sprites/blocks/turrets/base/poisobase-block-3.png rename to assets/sprites/blocks/turrets/base/acidic-base.png diff --git a/assets/sprites/blocks/turrets/base/poisobase-block-2.png b/assets/sprites/blocks/turrets/base/corrosive-base.png similarity index 100% rename from assets/sprites/blocks/turrets/base/poisobase-block-2.png rename to assets/sprites/blocks/turrets/base/corrosive-base.png diff --git a/assets/sprites/blocks/turrets/base/mesobase-block-3.png b/assets/sprites/blocks/turrets/base/granite-base.png similarity index 100% rename from assets/sprites/blocks/turrets/base/mesobase-block-3.png rename to assets/sprites/blocks/turrets/base/granite-base.png diff --git a/assets/sprites/blocks/turrets/base/mesobase-block-2.png b/assets/sprites/blocks/turrets/base/rain-base.png similarity index 100% rename from assets/sprites/blocks/turrets/base/mesobase-block-2.png rename to assets/sprites/blocks/turrets/base/rain-base.png diff --git a/assets/sprites/blocks/turrets/base/poisobase-block-1.png b/assets/sprites/blocks/turrets/base/toxic-base.png similarity index 100% rename from assets/sprites/blocks/turrets/base/poisobase-block-1.png rename to assets/sprites/blocks/turrets/base/toxic-base.png diff --git a/assets/sprites/blocks/turrets/base/mesobase-block-1.png b/assets/sprites/blocks/turrets/base/uno-base.png similarity index 100% rename from assets/sprites/blocks/turrets/base/mesobase-block-1.png rename to assets/sprites/blocks/turrets/base/uno-base.png diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-base-wing-l.png b/assets/sprites/blocks/turrets/mesulfate/granite-wing-1.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/granite-base-wing-l.png rename to assets/sprites/blocks/turrets/mesulfate/granite-wing-1.png diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-base-wing-r.png b/assets/sprites/blocks/turrets/mesulfate/granite-wing-2.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/granite-base-wing-r.png rename to assets/sprites/blocks/turrets/mesulfate/granite-wing-2.png diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-base.png b/assets/sprites/blocks/turrets/mesulfate/granite.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/granite-base.png rename to assets/sprites/blocks/turrets/mesulfate/granite.png diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-base-lock-l.png b/assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/rain-base-lock-l.png rename to assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-base-lock-r.png b/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/rain-base-lock-r.png rename to assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-base.png b/assets/sprites/blocks/turrets/mesulfate/rain.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/rain-base.png rename to assets/sprites/blocks/turrets/mesulfate/rain.png diff --git a/assets/sprites/blocks/turrets/mesulfate/uno-base.png b/assets/sprites/blocks/turrets/mesulfate/uno.png similarity index 100% rename from assets/sprites/blocks/turrets/mesulfate/uno-base.png rename to assets/sprites/blocks/turrets/mesulfate/uno.png diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 8700986..6f86dae 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -270,14 +270,9 @@ public void load() { health = 160; reload = 60f; range = 120f; + recoilAmount = 0.2f; rotateSpeed = 10f; drawer = new DrawTurret("mesobase-") {{ - parts.addAll( - new RegionPart("-base") {{ - moveY = -0.2f; - progress = PartProgress.reload; - }} - ); parts.addAll( new RegionPart("-shoot") {{ moveY = -1f; @@ -316,6 +311,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ reload = 10f; range = 184f; rotateSpeed = 7.5f; + recoilAmount = 0.7f; shoot = new ShootAlternate() {{ spread = 7f; }}; @@ -329,18 +325,12 @@ Items.silicon, new MissileBulletType(2f, 7) {{ }} ); parts.addAll( - new RegionPart("-base") {{ - moveY = -0.5f; - progress = PartProgress.reload; - children.addAll( - new RegionPart("-lock") {{ - x = 5.5f; - y = -8f; - moveRot = -45f; - progress = PartProgress.warmup; - mirror = true; - }} - ); + new RegionPart("-lock") {{ + x = 5.5f; + y = -8f; + moveRot = -45f; + progress = PartProgress.warmup; + mirror = true; }} ); }}; @@ -377,23 +367,18 @@ Items.silicon, new MissileBulletType(2f, 17) {{ range = 240f; inaccuracy = 8f; rotateSpeed = 5f; + recoilAmount = 1f; shoot = new ShootPattern() {{ shots = 4; }}; drawer = new DrawTurret("mesobase-") {{ parts.addAll( - new RegionPart("-base") {{ - moveY = -1f; - progress = PartProgress.reload; - children.addAll( - new RegionPart("-wing") {{ - x = 6.6f; - y = -4f; - moveRot = -15f; - progress = PartProgress.warmup; - mirror = true; - }} - ); + new RegionPart("-wing") {{ + x = 6.6f; + y = -4f; + moveRot = -15f; + progress = PartProgress.warmup; + mirror = true; }}, new RegionPart("-shoot") {{ moveY = -3f; From 657c265d0217ef78d15465e63b3b2a7903dc1888 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 22:24:40 -0300 Subject: [PATCH 25/61] wha --- src/oblivion/content/OblivionBlocks.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 6f86dae..0bc4f43 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -270,7 +270,7 @@ public void load() { health = 160; reload = 60f; range = 120f; - recoilAmount = 0.2f; + recoil = 0.2f; rotateSpeed = 10f; drawer = new DrawTurret("mesobase-") {{ parts.addAll( @@ -311,7 +311,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ reload = 10f; range = 184f; rotateSpeed = 7.5f; - recoilAmount = 0.7f; + recoil = 0.7f; shoot = new ShootAlternate() {{ spread = 7f; }}; @@ -367,7 +367,7 @@ Items.silicon, new MissileBulletType(2f, 17) {{ range = 240f; inaccuracy = 8f; rotateSpeed = 5f; - recoilAmount = 1f; + recoil = 1f; shoot = new ShootPattern() {{ shots = 4; }}; From 6515fd0c15b1f8b9883a68cfe4461be99590bca9 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 22:41:34 -0300 Subject: [PATCH 26/61] why --- .../blocks/turrets/mesulfate/granite-wing-2.png | Bin 751 -> 0 bytes .../{granite-wing-1.png => granite-wing-l.png} | Bin .../blocks/turrets/mesulfate/granite-wing-r.png | Bin 0 -> 758 bytes .../blocks/turrets/mesulfate/rain-lock-r.png | Bin 280 -> 271 bytes src/oblivion/content/OblivionBlocks.java | 7 ++++--- 5 files changed, 4 insertions(+), 3 deletions(-) delete mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-wing-2.png rename assets/sprites/blocks/turrets/mesulfate/{granite-wing-1.png => granite-wing-l.png} (100%) create mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-wing-2.png b/assets/sprites/blocks/turrets/mesulfate/granite-wing-2.png deleted file mode 100644 index 12a4dacd6c713b6b3d72c6641da74a57fce9cccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmVRu46j0+g$V8aV;#)kBS(fH_pEhZ;En>eWMyoB+_S9%^Lo15~Sr8p#<@P^=zm zqy>Op^-v?b1WoA)J;D$2kYEP%5G8yFETH$N$d`x|J_HqTD&a#w0jCr`1QT#-;X|OU zi7nx;-FgVI!-pUO)`VYZkq|w62(Se8gb%v?f6Y(mj!N7u6|6dcXjGJ3_vh@Eo!)Cy-hpbpGyUAJ>d86T&9HYgq477;e(NYjNyZcfUMzzfq=~6gSddD z;eY?}bL&#BhOB@V!Us_St%MJP0$K_m#00b!J_reDF?UzF+_`>`<1!>saLW>8ifvVbRH0KP+#Zhre0u(3^ffLL?CyfP@B!Zc z{x$l#H*eor9BH%?&=0@EU4o5(4-XHc&pAu55YUBxzuPVPdu0jo0#5()ha`NvySw;4 zsuJV{4AGY`C46O`MHjG?``wO@H#gB`tVaF{7z;T=_+TIa{tY`z_+YdIWeUBI#T9Ug z+vD-0EMgc_Ct*0v^;uoJLVYeEG(0Yf;qCT#WrmvC)O z*j)kHS`&5xAXjTbZg9QT&(jQ@nou0n%UuDjotTpo0N0bCI2Dr=0PRSS6##8WkQM;> zCD?r7&AB_8a&)mH`p(Ek08Eo`+M-sMAio67Vd;Dzayd#PVC{S$Nl{QNq}8MoEIbfTi<+Aqf$;qgML>7~c!@zYFHf z2fDU()Ly_&0Brx0_K_`cO98N*gy{K$tpHdrAv%087XZs8D1;9Q1i*X=D&ZGJQ4~c{ o6h%=KMNt$*Q4~c{6h(gi0uCJ&B$tvHwg3PC07*qoM6N<$f>Yr^(*OVf literal 0 HcmV?d00001 diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png b/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png index 99b0712c13b3497063eaa9b9505dcc3c26064e4e..dd4c10ecfe304366394b18f769d528dc37126bf5 100644 GIT binary patch delta 222 zcmbQi)Xy}*vi_i_i(^Q|oVV8;1)Cj2njdb_dX>Q%aw5x-gGnHO-{SzQZDE6?S9QiG zzW?b8vl$M1F+jnA#Fw?PRq>P4cPwq{KPrD%z|vdg%bS(zZX4L+_I`RNxF#|DY5Zp$ z&nmykZ)3JC$UmJQqa5K>r@Ozfr{I72fvKB6>0M;B3!hqE%e0YEYsz#d<`7MNR<;!( zaYpklPo@4lVT`l&2A`*k4)%oz!v*)~}Oe3;?i Q&I%IpboFyt=akR{0GqT~Z~y=R delta 231 zcmeBYn!z-|vi_8(i(^Q|oVV8;c@G;1xLnK)6mhZ;Xi>L2fAGT&@Wwq|000*yCYx9z?5Oy=-e(VDqGlIQ6rZ*2J%b~mue=ELo2;nNj( zqrEZ(1)MPJ6;Kp`7gw(}dPsPiPZb!|KxG9k8LTe%C&+yGJ8*mTtMXSrX=w aKW`Wo&vO4@&B*;7B;@Jp=d#Wzp$Pz5>0RCc diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 0bc4f43..952d025 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -276,7 +276,7 @@ public void load() { parts.addAll( new RegionPart("-shoot") {{ moveY = -1f; - progress = PartProgress.reload; + progress = PartProgress.reload.curve(Interp.pow2In); }} ); }}; @@ -321,13 +321,14 @@ Items.silicon, new MissileBulletType(2f, 7) {{ x = 0f; y = 2f; moveY = -2f; - progress = PartProgress.reload; + progress = PartProgress.reload.curve(Interp.pow2In); + under = true; }} ); parts.addAll( new RegionPart("-lock") {{ x = 5.5f; - y = -8f; + y = -2f; moveRot = -45f; progress = PartProgress.warmup; mirror = true; From c73b6092a6540a3676774c7b91969b951c4bac92 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Fri, 13 May 2022 23:14:21 -0300 Subject: [PATCH 27/61] w h y --- .../turrets/mesulfate/granite-preview.png | Bin 1671 -> 0 bytes .../blocks/turrets/mesulfate/rain-lock-l.png | Bin 271 -> 271 bytes .../blocks/turrets/mesulfate/rain-lock-r.png | Bin 271 -> 271 bytes .../blocks/turrets/mesulfate/rain-preview.png | Bin 910 -> 0 bytes .../blocks/turrets/mesulfate/uno-preview.png | Bin 385 -> 0 bytes src/oblivion/content/OblivionBlocks.java | 8 ++++---- 6 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-preview.png delete mode 100644 assets/sprites/blocks/turrets/mesulfate/rain-preview.png delete mode 100644 assets/sprites/blocks/turrets/mesulfate/uno-preview.png diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-preview.png b/assets/sprites/blocks/turrets/mesulfate/granite-preview.png deleted file mode 100644 index 6dca76588b8821654c1f29c59a14538422042dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1671 zcmV;226*|2P)I~)-2&$<`(=*dO-90;#++U?Go6YY3x6{+pGdl-x(n%+sw3wbO zeF0KkUS9sOB!wfY9@O_NMpY@gqq2o5L^I6J>fZV9dA@i$jJ+W z8NdkUqh^F)0?^z15oLwY3?RzAfI?1IRt`>F3mZlm~=d*hwMe%Xp%(ME$3xZR zXb6jDLEGa2Zua}?aV-!e9qz??U3~zebq_$#MYL%Ms6n_|t<)1TAD=xh9&@o?|NXfq z1iHBQpBA8n(2|#PonQ{a)oN8eU+#Kx5K{9|IS8JwL~$#t*$@;7p_B$v2&wtG^VP0{ zLg36tQ3%oI15~!F(H5&}=9J7&b+KNv=I72U(e`*KnxE=wwd!I%K&2Dbw1n&PvtlgO zT=e_zKg7pMb+_4wk1d(MJsw0IJgW9Whf5ZeW+^2I5)&|Fc-CwXzNA%^;HNEE1EC}{ z04_yrg+SxA2L#&kN)V*xqdXv(0F+|77D6s#iI@@NAZX1;SyR|%0C-W7ffT0{LM>;H zm=Q}MwDvjJsaqgaJ6SFh;+_baVZ8tTqf33>S}KrE^3ZU@WmH_t>e2}V+;0gHS&mOAY7lHsiq}g-`-};YBe7kJ;TADyn2&wTB2&wTDf_2pGQF@?q0YIM^4uWQM zj1V}(OAxrH9zWBV&lL;l=+_HESQcb0O_Yr0epiamEwMYQ^gtE5EahguZ!%wESPDUV zyi|9aO{n<*P5?Yh6KJNSFOhCph96Tk-j6QU4CLw>z2mNX{Z*0bbdg(Tt&Kly>|IYOa0%npS1Z& zmZYdOWJZ`D7^(hG6$&6~en6wq>i<+>03`DR(cg+> zJ%2>~pDF}^W`1DFtpm{fp7npKZf{AJ<_DI5K%e|x^?$0auc?;i2YN!tg`FPtf2t4w zt@8sMgxzlUq-Efj`#a6Db;;*enE~X?X`LTPA*4CB214%dq#e4n{_pXHK5iui@9n>G zhSUE;P0g9&y-A?gw<)=WAkX?x>0G7Xl}z#c`YF$Ix%L4b5G3c|j**z+VcgK)BL-lD zp!wVMSdA$b1HH`$aO?x9w0%PF88>a85Me$*AOHY4gr%lCr4XXbKk1~CeghshoGn8G RSvnZ&G#yUHRME=BL|Z}0Kdn9iILKpFKc6~;wPu?SlZNoRQ|AlrMJqLH!IcM zHn7L-{q#<7O=9@d_|H0?ReqBv&UMpC&fa}Hq4iT)a`x*&4hASl_{_G+BH+Ue|8`c8 Nh^MQc%Q~loCIE2cEXx1@ delta 114 zcmeBY>SvnZ&8Nl4FS>zAD`l$!3!}xMiILKpS-Eqgq9>>CSlZNoH2$-UrMJqLH!IcM zHn7L-{q#<7O=9@d`G*xet9lksoa?6J{eJiDgw{`G-tS)*axg$a!e=%URTGbM0&-p; N5l>e?mvv4FO#uIKD?k7M diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png b/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png index dd4c10ecfe304366394b18f769d528dc37126bf5..3fa238632017dce3b2de81f1d29fd088f1aef1e4 100644 GIT binary patch delta 114 zcmeBY>SvnZ&8Nl4FS>zAD`l$!3!}xMiILKpS-Eqgq9>>CSlZNoH2$-UrMJqLH!IcM zHn7L-{q#<7O=9@d`G*xet9lksoa?6J{eJiDgw{`G-tS)*axg$a!e=%URTGbM0&-p; N5l>e?mvv4FO#uIKD?k7M delta 114 zcmeBY>SvnZ&G#yUHRME=BL|Z}0Kdn9iILKpFKc6~;wPu?SlZNoRQ|AlrMJqLH!IcM zHn7L-{q#<7O=9@d_|H0?ReqBv&UMpC&fa}Hq4iT)a`x*&4hASl_{_G+BH+Ue|8`c8 Nh^MQc%Q~loCIE2cEXx1@ diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-preview.png b/assets/sprites/blocks/turrets/mesulfate/rain-preview.png deleted file mode 100644 index fb0c65e698309616033ded0638396db3054d9c6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmV;919AL`P)W=ukCkO}Jnf)Y{^SW=kD0T%B8 zjB|mKk{0CvWuAhBgk(ZnRAN%(qOYTsC4Iju+3CK>8AmHU&uX>$F~F25Q~u}7v<17a z+lGHXKD`XS|MvB>`r0+?d#5RMb$zp?{wHp*C1chn7Qkr?#zVr`^@#*X8iTP&s8OHl z5qL|P1ZWG!qi~qzV$Qn8)%DGm+hslKOU2X!QjL%91CP;2u)+g4 zjRB8OFD7`5M1luAK;=QO_5_NPY64R5%f&qTT-TJ~A|MBX$-!f!5~%tlF$Hw8hg0wvsf2@D4wv9DTnPua9Ol4dY7UHS0bedJ z)k{>(q{ecGf8O1(+sYDv@E`yD7B>drH3u9T3AdXK0PrP{0^&O_kr3Z`&PGQpN+JQ_ zF&qg+0l99^k&x^5B?-A+!jTZeV<-t(0n{^pe|nt#j(X-(5~xR{B;kC$F4k9)kQ6|{ zzdt(zfV2eefEP;Ojt?mb2><>0xmY$QVMhQL9urECj`m&GZKVgGp@jI(Ya|Q=NZ~Q} zr^i({F_w#Yw%bc3u;&3ecmRM;ufMpLam$a3i|lulgfJ`t`v#BkkU$F9S9pw7LQ#Mg zez};l-`(6fMQMz&NXQDXz^6XP2`4Tk2_g6x5|RQu;7du(+PG6}ZwWgBTEJskNEit4 zhL0Osg2%)XxYrINk-&NldcaFok+CRm31J2TPFAa(otWD2n6V^$cz75v?(~3ALMwQT zw}coTAoB>EtX4A({P}u40JgwmLJ7Brd# z7%db{Jb;a)g<|I|Fv0Hd{yFE~JDnR}x`XX}Kkn{e0F3$Pq-ol2cZb$w#?+*|Tbm%X z0BpG_f((!q@nBW~n5U#7&;ZI7QxMvR&{nhnkLT;-THw3i0}K(mV1^mQBGM?5zS%IPY{-W&%Q9iX?Rp{ame%K(htMfE fj*TCaF+a~6o@{hEm)_Ts00000NkvXXu0mjfq%553 diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 952d025..7e95a98 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -272,7 +272,7 @@ public void load() { range = 120f; recoil = 0.2f; rotateSpeed = 10f; - drawer = new DrawTurret("mesobase-") {{ + drawer = new DrawTurret() {{ parts.addAll( new RegionPart("-shoot") {{ moveY = -1f; @@ -315,7 +315,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ shoot = new ShootAlternate() {{ spread = 7f; }}; - drawer = new DrawTurret("mesobase-") {{ + drawer = new DrawTurret() {{ parts.addAll( new RegionPart("-cannon") {{ x = 0f; @@ -329,7 +329,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ new RegionPart("-lock") {{ x = 5.5f; y = -2f; - moveRot = -45f; + moveRot = 45f; progress = PartProgress.warmup; mirror = true; }} @@ -372,7 +372,7 @@ Items.silicon, new MissileBulletType(2f, 17) {{ shoot = new ShootPattern() {{ shots = 4; }}; - drawer = new DrawTurret("mesobase-") {{ + drawer = new DrawTurret() {{ parts.addAll( new RegionPart("-wing") {{ x = 6.6f; From bb6a2264f882abbc13abaf29ac290c9f0fab401b Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 11:51:36 -0300 Subject: [PATCH 28/61] how there isnt any add() in seq --- .../blocks/turrets/mesulfate/granite-preview.png | Bin 0 -> 1671 bytes .../blocks/turrets/mesulfate/rain-preview.png | Bin 0 -> 910 bytes .../blocks/turrets/mesulfate/uno-preview.png | Bin 0 -> 385 bytes src/oblivion/content/OblivionBlocks.java | 6 +++--- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 assets/sprites/blocks/turrets/mesulfate/granite-preview.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/rain-preview.png create mode 100644 assets/sprites/blocks/turrets/mesulfate/uno-preview.png 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 0000000000000000000000000000000000000000..6dca76588b8821654c1f29c59a14538422042dcb GIT binary patch literal 1671 zcmV;226*|2P)I~)-2&$<`(=*dO-90;#++U?Go6YY3x6{+pGdl-x(n%+sw3wbO zeF0KkUS9sOB!wfY9@O_NMpY@gqq2o5L^I6J>fZV9dA@i$jJ+W z8NdkUqh^F)0?^z15oLwY3?RzAfI?1IRt`>F3mZlm~=d*hwMe%Xp%(ME$3xZR zXb6jDLEGa2Zua}?aV-!e9qz??U3~zebq_$#MYL%Ms6n_|t<)1TAD=xh9&@o?|NXfq z1iHBQpBA8n(2|#PonQ{a)oN8eU+#Kx5K{9|IS8JwL~$#t*$@;7p_B$v2&wtG^VP0{ zLg36tQ3%oI15~!F(H5&}=9J7&b+KNv=I72U(e`*KnxE=wwd!I%K&2Dbw1n&PvtlgO zT=e_zKg7pMb+_4wk1d(MJsw0IJgW9Whf5ZeW+^2I5)&|Fc-CwXzNA%^;HNEE1EC}{ z04_yrg+SxA2L#&kN)V*xqdXv(0F+|77D6s#iI@@NAZX1;SyR|%0C-W7ffT0{LM>;H zm=Q}MwDvjJsaqgaJ6SFh;+_baVZ8tTqf33>S}KrE^3ZU@WmH_t>e2}V+;0gHS&mOAY7lHsiq}g-`-};YBe7kJ;TADyn2&wTB2&wTDf_2pGQF@?q0YIM^4uWQM zj1V}(OAxrH9zWBV&lL;l=+_HESQcb0O_Yr0epiamEwMYQ^gtE5EahguZ!%wESPDUV zyi|9aO{n<*P5?Yh6KJNSFOhCph96Tk-j6QU4CLw>z2mNX{Z*0bbdg(Tt&Kly>|IYOa0%npS1Z& zmZYdOWJZ`D7^(hG6$&6~en6wq>i<+>03`DR(cg+> zJ%2>~pDF}^W`1DFtpm{fp7npKZf{AJ<_DI5K%e|x^?$0auc?;i2YN!tg`FPtf2t4w zt@8sMgxzlUq-Efj`#a6Db;;*enE~X?X`LTPA*4CB214%dq#e4n{_pXHK5iui@9n>G zhSUE;P0g9&y-A?gw<)=WAkX?x>0G7Xl}z#c`YF$Ix%L4b5G3c|j**z+VcgK)BL-lD zp!wVMSdA$b1HH`$aO?x9w0%PF88>a85Me$*AOHY4gr%lCr4XXbKk1~CeghshoGn8G RW=ukCkO}Jnf)Y{^SW=kD0T%B8 zjB|mKk{0CvWuAhBgk(ZnRAN%(qOYTsC4Iju+3CK>8AmHU&uX>$F~F25Q~u}7v<17a z+lGHXKD`XS|MvB>`r0+?d#5RMb$zp?{wHp*C1chn7Qkr?#zVr`^@#*X8iTP&s8OHl z5qL|P1ZWG!qi~qzV$Qn8)%DGm+hslKOU2X!QjL%91CP;2u)+g4 zjRB8OFD7`5M1luAK;=QO_5_NPY64R5%f&qTT-TJ~A|MBX$-!f!5~%tlF$Hw8hg0wvsf2@D4wv9DTnPua9Ol4dY7UHS0bedJ z)k{>(q{ecGf8O1(+sYDv@E`yD7B>drH3u9T3AdXK0PrP{0^&O_kr3Z`&PGQpN+JQ_ zF&qg+0l99^k&x^5B?-A+!jTZeV<-t(0n{^pe|nt#j(X-(5~xR{B;kC$F4k9)kQ6|{ zzdt(zfV2eefEP;Ojt?mb2><>0xmY$QVMhQL9urECj`m&GZKVgGp@jI(Ya|Q=NZ~Q} zr^i({F_w#Yw%bc3u;&3ecmRM;ufMpLam$a3i|lulgfJ`t`v#BkkU$F9S9pw7LQ#Mg zez};l-`(6fMQMz&NXQDXz^6XP2`4Tk2_g6x5|RQu;7du(+PG6}ZwWgBTEJskNEit4 zhL0Osg2%)XxYrINk-&NldcaFok+CRm31J2TPFAa(otWD2n6V^$cz75v?(~3ALMwQT zw}coTAoB>EtX4A({P}u40JgwmLJ7Brd# z7%db{Jb;a)g<|I|Fv0Hd{yFE~JDnR}x`XX}Kkn{e0F3$Pq-ol2cZb$w#?+*|Tbm%X z0BpG_f((!q@nBW~n5U#7&;ZI7QxMvR&{nhnkLT;-THw3i0}K(mV1^mQBGM?5zS%IPY{-W&%Q9iX?Rp{ame%K(htMfE fj*TCaF+a~6o@{hEm)_Ts00000NkvXXu0mjfq%553 literal 0 HcmV?d00001 diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 7e95a98..bde7651 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -276,7 +276,7 @@ public void load() { parts.addAll( new RegionPart("-shoot") {{ moveY = -1f; - progress = PartProgress.reload.curve(Interp.pow2In); + progress = PartProgress.reload; }} ); }}; @@ -298,7 +298,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ }} ); }}; - + /* rain = new ItemTurret("rain") {{ requirements(Category.turret, with( OblivionResources.mesulfate, 75, @@ -505,7 +505,7 @@ OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ }} ); }}; - /* + hammer = new ItemTurret("hammer") {{ requirements(Category.turret, with( OblivionResources.calenmite, 40, From 2aa51a4bb98e5c800a6c291176dac838d89da8fa Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 12:12:29 -0300 Subject: [PATCH 29/61] rain --- src/oblivion/content/OblivionBlocks.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index bde7651..58851a0 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -276,7 +276,7 @@ public void load() { parts.addAll( new RegionPart("-shoot") {{ moveY = -1f; - progress = PartProgress.reload; + progress = PartProgress.reload.curve(Interp.pow2In); }} ); }}; @@ -298,7 +298,7 @@ Items.silicon, new MissileBulletType(2f, 7) {{ }} ); }}; - /* + rain = new ItemTurret("rain") {{ requirements(Category.turret, with( OblivionResources.mesulfate, 75, @@ -354,6 +354,7 @@ Items.silicon, new MissileBulletType(2f, 17) {{ }} ); }}; + /* granite = new ItemTurret("granite") {{ requirements(Category.turret, with( OblivionResources.mesulfate, 160, From 20f2efbecd94725db7b363a8eae3968be15fbf3a Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 13:10:53 -0300 Subject: [PATCH 30/61] granite --- .../blocks/turrets/mesulfate/rain-lock-l.png | Bin 271 -> 280 bytes .../blocks/turrets/mesulfate/rain-lock-r.png | Bin 271 -> 280 bytes src/oblivion/content/OblivionBlocks.java | 10 +++++----- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png b/assets/sprites/blocks/turrets/mesulfate/rain-lock-l.png index dd4c10ecfe304366394b18f769d528dc37126bf5..99b0712c13b3497063eaa9b9505dcc3c26064e4e 100644 GIT binary patch delta 231 zcmeBYn!z-|vi_8(i(^Q|oVV8;c@G;1xLnK)6mhZ;Xi>L2fAGT&@Wwq|000*yCYx9z?5Oy=-e(VDqGlIQ6rZ*2J%b~mue=ELo2;nNj( zqrEZ(1)MPJ6;Kp`7gw(}dPsPiPZb!|KxG9k8LTe%C&+yGJ8*mTtMXSrX=w aKW`Wo&vO4@&B*;7B;@Jp=d#Wzp$Pz5>0RCc delta 222 zcmbQi)Xy}*vi_i_i(^Q|oVV8;1)Cj2njdb_dX>Q%aw5x-gGnHO-{SzQZDE6?S9QiG zzW?b8vl$M1F+jnA#Fw?PRq>P4cPwq{KPrD%z|vdg%bS(zZX4L+_I`RNxF#|DY5Zp$ z&nmykZ)3JC$UmJQqa5K>r@Ozfr{I72fvKB6>0M;B3!hqE%e0YEYsz#d<`7MNR<;!( zaYpklPo@4lVT`l&2A`*k4)%oz!v*)~}Oe3;?i Q&I%IpboFyt=akR{0GqT~Z~y=R diff --git a/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png b/assets/sprites/blocks/turrets/mesulfate/rain-lock-r.png index 3fa238632017dce3b2de81f1d29fd088f1aef1e4..b0a788f649e2f2b2249158874665153241a850a4 100644 GIT binary patch delta 231 zcmeBYn!z-|vi_8(i(^Q|oVV8;c@G;1xLnK)6mhZ;Xi>L2fAGT&@Wwq|000u7y|Tb53FCUf|#XwBRo*|ECG8(Y4G-3@HA`EYw$_;dx{ z+u6B-g70&s>z3;{ik0~No3fO}^F-;VvJCN|>XTUgOfiRdJ@cT=lN%i86<4 zLQD2L920ty?yyZrr#)erP|kLTX+mqRC$tHzVRh;84%pCEziXe^-J=n2wr;z(SrX=w aKW`W&FSYd$Y5ijc67qEQb6Mw<&;$VOv|Yde delta 222 zcmbQi)Xy}*vi_i_i(^Q|oVV8;1)Cj2njdb_(qiNn-N2-kvQ>eF(c%!RZDE6?S9QiG zzW?b8vl$M1F+jnA#H`%8QPGprcPwq{KN|m8#?o8m%bS(zZX4L+_I`RNxF#|D>HNbA zo>e`I-^OfPkbgQqMmfT%PIrG{Pr?8415-DD(!0oL7e2MTmT4oS)|BZ^%pscktZXYn z;*9tM*6vA>S&&qD(!}BFr=TC^GxYQ&*B|nJzx#GV>!&jB_pb{%V9rSR%x0o$;&Dzu P4(u{dS3j3^P6 Date: Sat, 14 May 2022 13:35:21 -0300 Subject: [PATCH 31/61] toxic and acidic --- .../turrets/copremite/corrosive-blade-l.png | Bin 383 -> 376 bytes .../{corrosive-base.png => corrosive.png} | Bin .../turrets/mesulfate/granite-wing-l.png | Bin 760 -> 752 bytes .../turrets/mesulfate/granite-wing-r.png | Bin 758 -> 751 bytes src/oblivion/content/OblivionBlocks.java | 23 +++++++++++++----- 5 files changed, 17 insertions(+), 6 deletions(-) rename assets/sprites/blocks/turrets/copremite/{corrosive-base.png => corrosive.png} (100%) diff --git a/assets/sprites/blocks/turrets/copremite/corrosive-blade-l.png b/assets/sprites/blocks/turrets/copremite/corrosive-blade-l.png index b86befbdc0e0cfc282ebc316bd837ce904706917..74f1d915d6812094dc7531e3c175ee9456d25b68 100644 GIT binary patch delta 328 zcmV-O0k{7D0{8-uIe#iiL_t(|ob8%13IZ_@MV}&wg}3nzR$6W<-7L$1-6DA3S5JCtcgb+dx8B_&on&$rb-L`F6>@J3?z~4et$OHf^ zmMgggsQ}PRkP85-A3$Ha!7jcf?01{8TO$hr@Rm@SJeZsZyr@ndjLrkL z>x1O7)Z#oql|eihoCheA2N1*Noscb>EfP4( zA@yVg+phofuH{>;+HbsR>#d^#P8^CYK!Q7EY1{#a>!s5_zTfxW``Wg35}$fj)~J4B z$bT`3nB0Ddp|Ac^!Uolc zgakdO&)*q?j|tA&&%fh%VSSwLFFS@;c5O2bD>1xKy1~Nmc5*`Nr^z#6-t~UK6|I_V*Bm0 z)6(nh>;6S;T|e=)rz&d-r#uU53YYv57M<4mQVWKH%IfP|)^j{;zTmk-wWi^G{{27G zKjyTyG+g_@?Im=GJ3_kd;pO+g>y75E<{v8G>p+j65od0idZf}Y2&{JH~ z5VlO{)dx`vY1;)_ccJdQhq^ahL}?kYCjhx%*3hQIrt zeJF<2SMy=|8z75wMg7m4zy8k(NWF6>Q9by7ym1PfO!diME5GmF^yR;)^ZKc$Pga~g zU3z(@f%v{twhSyg1aJR3{|V>>2BrjS&a8*d0*p2vYB;+dIx8?<(04Sg;ZS3^<{iLy jUn053@EC%a@#ha~w64mvU-|bu7=Xaj)z4*}Q$iB}9o92D delta 715 zcmV;+0yO>b1^5M!Ie)52L_t(|ob8;gk`qx7Mh_HKYu2nIg_-2eB&q(szJ01h+u7 zyU%_8^wI9~*cA-p;Sab;uqqbzhdL;eNB>?&2!CjFTXJ1bR1bCZA~a+D`0MGLKRB^OIs6)*a)pICg#@Qi8pJ zmid7%U%wsPPm}~}0dwXDS|mhZEntj&^8<9N4}wO~$*dib$lr diff --git a/assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png b/assets/sprites/blocks/turrets/mesulfate/granite-wing-r.png index 1c67d364ee4466ebe2711444ebb185c757bfbda8..12a4dacd6c713b6b3d72c6641da74a57fce9cccd 100644 GIT binary patch delta 706 zcmV;z0zLiq1@8rrIe(!^L_t(|ob8-3ZreZ81BA}ILuSWA3vvP=mjp=xkVk^70LURhT0jOYV8Vzk zjnY&2=F8XF@_+2=)5WUy8nvHPRzQaEK~zAN@Ig?(Quwz|4*=Znc1`a!I(!hj2)Bd} z@cHiUUBUO7zgDNY8-V zrw5rEt~q1{s8$a(k^+>ghZ;En>eWMyoPar0s)rgm0qWI5jhq0`t{!S+?*mk;hZ@Nl zP*AKMYNQ2#UiDBTy97V&q(D&I5x+^_1%P!vTG#*^p**0A62|C~N{ zI2^1#lU1>OhQjY~l3-J4pL5}NxJY;!UBFzXgztovfNbG|k$-@U;e&~Qtl@)!fXv~8 zxPYbMfB*4w>r$?Utbi862T=j7gb#uOS_&V;1hf`D2nlF0d=L@PYWN@^pylu(SU~IH zL!f{P|B>(|Xb#!J2QvW~DFMNhfM7~MFeMUzF+_`>`<1!>saLW>8ifvVbRH0KP+#Zhre0u(3^ffLL?CyfP z@B!Zc{x$l#H*eor9BH%?&=0@EU4o5(4-XHc&pAu55YUBxzuPVPdu0jo0#5()ha`Nv zySw;4suJV{4AGY`C46O`MHjG?``wO@H#gB`tVaF{7=H^nL-=4I0R9a-OZZ^41Z4`n zkHr;miQD7x>|Q__djV5h6RKDXnA@6A#8$x4)`S|C0@k)Bl&}-9Rck^8I{`yDw~3f3IS8* z1Fv7by!bv566^)cnGZ~n@V~JaFvPj}fSQDq0^m`?*lc|C9ESEpST#u$_eH`9g!O09Y>}I(#q}0LvvPgbxV>z Date: Sat, 14 May 2022 14:20:07 -0300 Subject: [PATCH 32/61] acidic test --- .../copremite/acidic-cannon-blade-l.png | Bin 0 -> 303 bytes .../copremite/acidic-cannon-blade-r.png | Bin 0 -> 303 bytes .../turrets/copremite/acidic-cannon.png | Bin 0 -> 527 bytes .../turrets/copremite/acidic-preview.png | Bin 0 -> 1756 bytes .../blocks/turrets/copremite/acidic.png | Bin 0 -> 949 bytes .../copremite/{toxic-base.png => toxic.png} | Bin assets/sprites/blocks/turrets/corrosive.png | Bin 928 -> 0 bytes src/oblivion/content/OblivionBlocks.java | 21 ++++++++++++++++-- 8 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-l.png create mode 100644 assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-r.png create mode 100644 assets/sprites/blocks/turrets/copremite/acidic-cannon.png create mode 100644 assets/sprites/blocks/turrets/copremite/acidic-preview.png create mode 100644 assets/sprites/blocks/turrets/copremite/acidic.png rename assets/sprites/blocks/turrets/copremite/{toxic-base.png => toxic.png} (100%) delete mode 100644 assets/sprites/blocks/turrets/corrosive.png diff --git a/assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-l.png b/assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-l.png new file mode 100644 index 0000000000000000000000000000000000000000..e630d7129215cdb23ad048bfed51f2b40140a57f GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F3${@^GvDCf{DEQFR z#WAE}&fA+CbDbCkTn=vKE@o!=k|b!Y;P$Td0PhaN6^##yZ(a6b)!thm3{(#T4dy%l z)Y~sJmw8xRbwJz9Z3WkaH{Ai^3O7X;8aZrIcgk%@ac_CW;90b9-YVrQ>>j(6*Kkbu z;uayS@Umxvmcu3S#Mp)<+J{at__9c-9WY>Q<23MTNMzy>PME=PIE(4dzB-WM3)LJp z89RkGq{O%EVmP^uV=Ch$Tfr=56>Fssc8^KF&&QXx{9^DdZxLmjbdMvONoB9#wai~F fj4($sFf`QpFA~)2(>~(10wn0^>gTe~DWM4f%Ijk2 literal 0 HcmV?d00001 diff --git a/assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-r.png b/assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-r.png new file mode 100644 index 0000000000000000000000000000000000000000..82ae47c805e8fbee0669c8a5dfe468a6e7837fc1 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F3${@^GvDCf{DEQFR z#WAE}&fA+CbDbCkTn=vKE@o!=k|b!Y;P$Td0PhaN6^##yZ(a6b)!thm3{(#T4d#~d z{{1g`-G9uH`_R=ZxQa>Tx6&0>k22R4JQLn@21qO16kKTKFe&EW{?*D?*gbYBui=>R z#VtZu;bqSTEr(0uiLnh!v=5zP@MV!uJ7B=r#%bWwkjTU%oG^poa2C^@`hRxI%w-m; zIczd^3T;SdnnUcqab hzgie!j$~kHsPlguV_;Oa^{fg=(9_k=Wt~$(69DTRW3m7M literal 0 HcmV?d00001 diff --git a/assets/sprites/blocks/turrets/copremite/acidic-cannon.png b/assets/sprites/blocks/turrets/copremite/acidic-cannon.png new file mode 100644 index 0000000000000000000000000000000000000000..932eda2699d21194bd15558247c2eb1c9b744fc2 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F3${@^GvDChdfr0U$ zr;B4q#hkZy6#bYTCE6a&muh+-5~0BHE`W8`?lp189WN}{!OSJXbedJbmv@0$XD0q)I(FyIy}wKP_4UuW<$wS6&G6UGhdcMZcdlD2 z{gqY5NM`@Eb+1?5Pv?Eew8pSb$k1sA!+&1JBOD5D42Db{f(|_lNh|`&4HEc;bV3?T z=TDmCQk~^BgF)`G`b4D`4g=GF&wic$c02ZC?YX(#LXL6?d4HCuIKA7+A-IIG=(vB8 z(v*3@?h{xwWbJ246~DAhW$|oS`dGdFSWJ~(plbnt!0YXEAI`9R{5-&=fOmrNzwf6r zzx{o?efOe|{qz0P@*m3{)O9#nUgy~oWBFKpo?r}GJw&1x;PL>07moqqC&_57|oZ90s#dunqRIQgd~8`d_7?hq5wwo^_7Bf34ql6 z*>uw7sRM1@yZ`VEJBx%V=FbHHCFWy=P<62LNt%?bJBvTWX?=gRAQVSKW2e?65G>3G zNg%{-PALRmMF6lPgB%E$`O6!}Zn1g7s~9022Ld)SltK^#z|03xAmq#kaUf9BQ6Nx; zMAPNL-It&75PLx7m1K^mCiEBOxGgF$bWMcLufzaes#Ody8@;%H% zP|QqeI?&3SE7|llWDWo`pCjK)iun|^fM5!MVm=4ZV)KM$KE+^b2xb5{#%lEvUmRmC zA(#M=7^(?DVyG2_=BJ}EX+UT-xl+|N0O!ge^lrX$0|4NhEKa1gwy!NQfW_vCC`Ka{ z2ZE*f%Nxf<%U}@z-}v4jSeqYv&B}wDAZB!v#IUItf`MIz{%y0<=7656i#ku+r zTAL5zjtFD`Q0V)&2jaqOLFmQ&-~U{9&M`yhq>F+=dxFrL`5-EUEPzy@y+F{CruiV! z{zdi*L?sZ0B#HUtymJ@ix;O@*wr10b%Eq`OF65rRLAwSb^uzH^Kr$QlCH z?PGHY20?o`)H2^W<{V)4DHF_(LE!#+7MO1}CvoFe>`AybgwS;VZ_4V)hY*@x8-gTg zC|U*8*s*dhJ?t!R9J7|Ld;5n;vui<+hQ7tiP;Cggr5^WSmgN$;WZ$9aa{vZ`Td7oD z{)87Acl7zITU)z!;eS5J6a=lhN%9I+yde{-T&_~76-$^`Y_$Opjy``q{~thz^`a0$ zs&2U&6Xl-|@ZAqT)t`?i`=atg`e}7B9 zcm3n-1-J+GyxzD75ES+=7W3)($6hc5Q=`T z#zF@>pV09=rRyJWyR{ovE7V9=gE*G*GfNGC^s7WelXg2*07$<|G&I#{XE6ZjSBZwE zTJ0RFJb%rB@a5Kr^Vg*i zYPVAafO7&&S~=f*5Cwv7K1d3|qMd92THP8`%zO|AA!a_Pb-hz!0gyC;8#kdeA_f67 zAH=P{WY2>OfegUHd`_45Kjj`B{YOs69V%)=AOR>fpAuK0oIMTmUb}Ji+xM#uu- z6iPXk;X}xc`91{BeB#$RcZkY|Kna_3!rPQOlX?K>8}5`w%%&6ag!}&OfoKQnba$0} zaCWhILaw)Sy5G1b4?!4&@IB2t>2!Bhw4pPbPRJ&3d#-c1!JHe0H3!5Xq`+uE@bl(C z@XgAZAu%7zo4xdAUF|NKk{gY)=@eyO}A zL#6m=B6V_3ndU!rB7}hDO?`ZAsL&k$=@=;p)P3QVH&^VBCUO*-7JK9eK%jt)L7ZxDB?Lv?OI%3?bYyV%JCK0BVCRR}7r8EGJQFS*h!ilW?xV*2^_& ynU>~L%f#N#RyH;XwlIGPicQQdZirE%hNJHS5s+sR$a^RN0000fF|hDCzyKyO_Bj?s_nN!^Y5! z9?#i56gzzXf1!x{P16s$ccVZTqV@_hEB1#Snv{@e8V$Fs2S z|L;G2(6!ln%{sd|7HQpIJTunp3~xW=-m3Q2IH#xHCwjDXyXejN z%B}O0P3G)j4e@oHG3^1j{DF`k49lXLdNVmg_y2iV5OMm82ahLf%entQP6;ynsrrAs zI`3)8;cC4tZv)~A)bY6ku!d)ZjnFa91dVtDrT1g369V z<{48L_%(>^JE-c&b$>x%lNRHpMLv?%Q=&!055B*=MS@vlRu6Y1yTJ|P+25oJrXILZ z%BXNRC1#V@ho6_(--~OptLv(J9rV0>BXwnvx5rL{$y-=i8V{7a8>pV-q$ z6RJXWei|Q`77%Kb!)f?>$F`PLMQPqAHmc0bE&uZE_Va_;ESKi&+oG(u#69&!?XP!b zZ~OlJc;#n MPgg&ebxsLQ06b=$aR2}S literal 0 HcmV?d00001 diff --git a/assets/sprites/blocks/turrets/copremite/toxic-base.png b/assets/sprites/blocks/turrets/copremite/toxic.png similarity index 100% rename from assets/sprites/blocks/turrets/copremite/toxic-base.png rename to assets/sprites/blocks/turrets/copremite/toxic.png diff --git a/assets/sprites/blocks/turrets/corrosive.png b/assets/sprites/blocks/turrets/corrosive.png deleted file mode 100644 index 17809880cce8ce2d82152c95fd65fc9af5c7ff29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmV;R17G}!P)X{;1}0a|3a0YpI^xl0j2+B^qJcM?UU z>#RIST0kk%Mbs`3q_Lv3c>xNP#->1H?VV?L=ilbeaG!+apu4&KeY+mt`FsEa1OGK6 zk0PfRC!6Vfw*CA5cC~#yozGx#bg4Q{sk$Kt)&i#&C!5?h=ifeNw|TC*ZA=0_KwtzIu8K2 zO2`V(yssJuU`X%|k8ma~DZm2H&cr1Jc!rnU)A#%_R8B%v zK#7^>NGS13u#^N+fHi#TgeoN=72f(adrZQP0I!*sN+=l~p(Hc}NWw3UE=OO#TqSQp zawS;8*L6LT+zf3?P@M{g4=PwCSi|FMiG&cb0O~0Xi-Z`G@Q6l&NI>cl6;BD8@Q73b zTL9WBb0=n(#RgZu&W`Mf};uK+^;0000 Date: Sat, 14 May 2022 14:46:34 -0300 Subject: [PATCH 33/61] acidic wings --- .../turrets/copremite/acidic-preview.png | Bin 1756 -> 1757 bytes .../turrets/copremite/acidic-wing-l.png | Bin 0 -> 754 bytes .../turrets/copremite/acidic-wing-r.png | Bin 0 -> 756 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/sprites/blocks/turrets/copremite/acidic-wing-l.png create mode 100644 assets/sprites/blocks/turrets/copremite/acidic-wing-r.png diff --git a/assets/sprites/blocks/turrets/copremite/acidic-preview.png b/assets/sprites/blocks/turrets/copremite/acidic-preview.png index 818b8016ec5b15199bdad1a3ca6504a510bb7673..68d372713c264e8aa9ad680547f34050e0d73c8f 100644 GIT binary patch delta 1456 zcmV;h1yB0i4c!fpIa7~GL_t(|ob8>zYgI`U$0uPSS_D=>1A^~vt0u~Fe3;q+^*s56AiFJx4*(OK|5rinHkRtn<#Oj2}ICJKlGiT1sjggES1O9_Y zk*X_y4#3Z*t^jPkeO&zxefamEUG;))09cq0>Ip&@04&W1^#Y+efEMP1dVtUrKuhyM ztsyi6(1ZD)mJpf%Xnohk)ar&X2hgMWpcW8J0rYG>$Qr^gC5gkZ!OIuVk^!$Fm=D@| z`}l0mHfeoN$v~uW@KwtqF&CiPq zfec_YpDqpr5`fWszNiqg07moWqCh|ajOLds2O$YyG+$2`geZW~e0`-L`~W~|{%ktw z^3;L0?mu{RhMh&i6!Yf-fD-euLZ~{}`6x|F*6)iy#A$thv>+5mLu04bBoHjj2T354 z&jC6#SR<+CgD4QV>7?}wC56BSz%d^a*L)CWrZip2#OzA~p~F#RsJxtjL7_cC=*@f(6+#w3s?c5_ zXi3w25NZD+dj+Br2t$&@d~)8o3vyi?gHT(u=|p8?T&kS;lw~ui2lNQRAI4fh&@kUQ z#t>u;0qgd$IRt~CJsfJ8?;LXuu=zxmd4($8kcm|;SEE{+J2t_|vW1)kckLdWG(v1&y+}h1+6>6lbK^#lD%u)k?ApI)Q(4^f?6#&w&5)Dl? z+F1-h`ciz|046>o3{!;6fk+urQy~<^4~&M@L`C>9|8hZ3rX)rRG!ODwMOQVcu&u zubrDuF^Y3`(~n=(gpdWGb?0LcIA>3>UWFOOIlCDP9@c`O9t*+@ib3F|58!;mozjTebV8nR z-@Q2y?LeLGu96SVE;did^>$A88~5ZP2!jy5r+Fux?yib9bY{~D*#vISbq+U}bHlLa zfEa`n7!3%1-W&+NSvfN#=3{xYm)@+a-9=M!LsQPQ`Fy_g{K>26!w+J4bA}0DDN}at zK3&3p9y*cAFO|1ss1zSfq)yH$)BLASgb=X2sgJJ>6`JEeAtMEWx-Y!)`l|iWM2T9T z`l0d*JwR$=&2h6N@0xe9H19Co4?_^Q!4{L2qzsE8gj+`J`sf@$ZLsBvfm4>{BuXtS zbzO22&NbM2xkfG1(tK)}*!$Va#wNiQ<_|%!iMhoMF>2Is^c~tslxL<_%~SvY002n` KMNUMnLSTY@m9jSg delta 1434 zcmV;L1!el(4crZoIa7{FL_t(|ob8>zYgI`U$0uPSYY|ul4G3cKSkm|&TcnolQY>m~ z<3Azk0v5vSg8#%ewkj5OVx3}1wh59#1R)CRLW=mB#OlP!Wai8{XU?3NE0K&F1K$0I zk*X_y3c%L8$JGsb@bs^)Aan!3!hBFq5V`F#RsJ@05_vzD%V z`-e%hYeA5PzQxN>Z3wxg9`|6DTf27Qe?G_* z1g*MB@(NYFArq@yu2QKLOPE(|wE+;0K7T#`A3%upq7Xu=Zn+_UPSQ?_RCdJt%1O-+ z^TL*TzWJcAC-?#gxw>&6Xl-|@ZAqT)t`?i`=atg`e}7B9cm3n-1-J+GyxzD75ES+=7W3)($6hc5Q=`T#zF@>pV09=rRyJWyR{ov zE7V9=gE*G*GfNGBfb^?GLz8wpRRBo8N;EXpXlF41=~sz{rdsVR0-$+3Bc=7No9?$q zzp~SPx%I*QyYi1p9cs2y450KYK@_cT-8_HIf$-(lhx6B^5Nfwm1b}k_Oj?vhPiy6f^yNN|^YaB+%0^k%%IhNr=$c_0v1kQZo z*Ex5H%7;LI37d1m+mt$!dI0Ae?vzH%rW5jn`~K~LXb0+aca?l_cCmRvuD5f#-?%3a zK^TPaJp);FK$R==mu5-A-oEwHU2gD$xz-U15^X5SC&B~b}F(1pDz4T^X z?Jk;<8=7*a&FAx_7f)VCAAS(an=?%KN|~~A_t{c^>Y)=@eyO}AL#6m=B6V_3ndU!r zB7}hDO?`ZAsL&k$=@=;p)P3QVH&^VBCUO*-7JK9eK%jt)L7^{#$?*lB^K8Qo10Kg9+8~}JBgaiN|gs=eMfe;!1^bx`XfHuNe0DvyS z*#Lkh!dU@;9)jI}-An8B`T^kE_g}MqUgc{Gi9@tj#xFS|*!>FHA0Ob=^@|=yStKif zvGGf;2sQvybS?opmjInhfX*dA=MtcEVE}fk zExXmW_c59a0Wcii4M85@*!MtVgF7Ke1I!t}bn)iT;^%pcWC2bY|L2!Gzym=NV2SZd z>IiZGOO9VsMvw!TYR>rTSpgjC*!VAZub=27?b!o3j}PVm?&E_wz*G+7Lr?&h@gX3< z{q0rnBQzBXz-@dm1GxPB{NUd?jt_zWo6TnO#_||~>-ZoD0Bs1)A~cLY0tv8Q6r2vz_QuA%H_15k6>$`Qc= zpyj5U8-fKuYd-cI0hVYEg2MO^1OVC)RK|xu08odZG(H3afN2D^@gX1pj3X$H kpJiE=Wm%SGS(bI^FEj)O=aV%ttN;K207*qoM6N<$g1K5eH2?qr literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f032e684e8157bbdcce1931ac666b7520041a2b8 GIT binary patch literal 756 zcmVJdOfq=WWMkB|8@ukjlV~Vgm<)%Wm%SGS(as4mOW}udLQ7F zHk-};@Xy=r*6#DHdLLlP_CXv91ps~s;Q+u3AtV6!AcO?~4}{PFppOt90JIU#0swRo z&ISN95zYz#^bqX+>t4Ek|KT3s^{eNzeqQBk3yDLtR>m(mBiQ{4+8-a_`;T8ejbS?opmjInhfX*dA=fVK2 z);m_~UGHNw7Xn~7yc>c%z_IUv#s+snkOr7De(CPr?c(Qoh-3jy8UMxGE5HLm5@3n( zOX>)6085TvQbv#im}<`W>RACC>e%={KmC5BleA|K;5Rzi-;f%Fm_Eb8iFjq)E&_| z2&zc})V!SI<=va=e^2?rjT}JD_~i{*HNz^84`Ki< Date: Sat, 14 May 2022 17:47:59 -0300 Subject: [PATCH 34/61] where wings --- src/oblivion/content/OblivionBlocks.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index aca871a..b0f9be6 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -503,7 +503,7 @@ OblivionResources.copremite, new BasicBulletType(2f, 13) {{ reload = 75f; range = 27f * 8f; rotateSpeed = 4.5f; - recoil = -1.5f; + recoil = 1.5f; drawer = new DrawTurret() {{ parts.addAll( new RegionPart("-cannon") {{ @@ -516,10 +516,19 @@ OblivionResources.copremite, new BasicBulletType(2f, 13) {{ moveX = -1.25f; moveY = 1f; progress = PartProgress.warmup; + mirror = true; }} ); }} ); + parts.addAll( + new RegionPart("-wing") {{ + x = 7.75f; + y = -1.75f; + moveRot = -30f; + under = mirror = true; + }} + ); }}; ammo( OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ From 7ba7bfbb98ca7c8114aef8876bed5a442859791e Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 20:22:59 -0300 Subject: [PATCH 35/61] hammer and press --- assets/sprites/blocks/turrets/acidic.png | Bin 1423 -> 0 bytes .../blocks/turrets/base/hammer-base.png | Bin 0 -> 1484 bytes .../blocks/turrets/base/press-base.png | Bin 0 -> 2357 bytes .../turrets/calenmite/hammer-cannon.png | Bin 0 -> 420 bytes .../turrets/calenmite/hammer-preview.png | Bin 0 -> 1089 bytes .../turrets/calenmite/hammer-support.png | Bin 0 -> 558 bytes .../blocks/turrets/calenmite/hammer.png | Bin 0 -> 801 bytes .../blocks/turrets/calenmite/press-cannon.png | Bin 0 -> 417 bytes .../turrets/calenmite/press-preview.png | Bin 0 -> 1539 bytes .../blocks/turrets/calenmite/press-wing-l.png | Bin 0 -> 604 bytes .../blocks/turrets/calenmite/press-wing-r.png | Bin 0 -> 579 bytes .../blocks/turrets/calenmite/press.png | Bin 0 -> 1324 bytes .../copremite/acidic-cannon-blade-l.png | Bin 303 -> 0 bytes .../copremite/acidic-cannon-blade-r.png | Bin 303 -> 0 bytes .../turrets/copremite/acidic-cannon.png | Bin 527 -> 0 bytes .../turrets/copremite/acidic-preview.png | Bin 1757 -> 1759 bytes .../turrets/copremite/acidic-wing-l.png | Bin 754 -> 760 bytes .../turrets/copremite/acidic-wing-r.png | Bin 756 -> 763 bytes .../blocks/turrets/copremite/acidic.png | Bin 949 -> 1272 bytes assets/sprites/blocks/turrets/hammer.png | Bin 1197 -> 0 bytes src/oblivion/content/OblivionBlocks.java | 61 ++++++++++++------ 21 files changed, 40 insertions(+), 21 deletions(-) delete mode 100644 assets/sprites/blocks/turrets/acidic.png create mode 100644 assets/sprites/blocks/turrets/base/hammer-base.png create mode 100644 assets/sprites/blocks/turrets/base/press-base.png create mode 100644 assets/sprites/blocks/turrets/calenmite/hammer-cannon.png create mode 100644 assets/sprites/blocks/turrets/calenmite/hammer-preview.png create mode 100644 assets/sprites/blocks/turrets/calenmite/hammer-support.png create mode 100644 assets/sprites/blocks/turrets/calenmite/hammer.png create mode 100644 assets/sprites/blocks/turrets/calenmite/press-cannon.png create mode 100644 assets/sprites/blocks/turrets/calenmite/press-preview.png create mode 100644 assets/sprites/blocks/turrets/calenmite/press-wing-l.png create mode 100644 assets/sprites/blocks/turrets/calenmite/press-wing-r.png create mode 100644 assets/sprites/blocks/turrets/calenmite/press.png delete mode 100644 assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-l.png delete mode 100644 assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-r.png delete mode 100644 assets/sprites/blocks/turrets/copremite/acidic-cannon.png delete mode 100644 assets/sprites/blocks/turrets/hammer.png diff --git a/assets/sprites/blocks/turrets/acidic.png b/assets/sprites/blocks/turrets/acidic.png deleted file mode 100644 index 020e3761bfc3a3f2ffe6b24683826ceb07d8541e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1423 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 bpos84*P*D#ZRO%I00000NkvXXu0mjfb{ksR literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8c400efed65a0d858654b10d12fa87a78eafc309 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9FlS3sCCF7+t~0|R52 zr;B4q#hkY{4D${-2(&&_+$t?);c&}gu3hPZv#m93Qt}F=J6wJ(QP=g=`X0a=rC7bO zGu>_D|MgCX?%n;K61`fKQ7!kG<;}~leqMRH>-~EF?WH??ubA%nq;)WL(!PgN-8r8L z-;s`soStCy~do2PHO%R!58!%h6V?$Hg?<`uE2Xo zeUBIOf7O~mk(bP0l+XkKR1B~X literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..091a3ceed16887a9eba29ad295cff67b4f45897b GIT binary patch literal 1089 zcmV-H1it%;P)Xu0mzqpAzi{UaIq&H3b7OTimIyV^Y6?OlNxbG+O+d(=Ak{o8H-xOgA1ppPBO*FE z`I>b7!^QhVM6|QBldaBdf!RFE3xUnEazV%vv}~S*LMWSO<$zFoK*_wM+Y7f`@#}_g zxz1o0Q5}G`3us#%fHsp4`aLR&Nt-3K2Vl_eO@Fru;fm+v)6>)G6gM|FmpmPX=2=BC zp~2u1bNpy}R>pZEz0=%~w&(Jgcsr5W=to0jSG-lR_bw04}0=76L&9;OR<# ztE>hT0W@KLX?c|n4)$`VQ6WSDSmt+kcdOP!OUtX%-*rIP-`iG?OAuxNG;N;M7KC#E z+A_~-0|LAbK+F$^D`(m~zcJb}V~odR@mNtzXgFLk$0iFxC1i^YrL|(*75M}^)Mo_7+6!R=E1SwZc zF$m`Xc+9iPg?S2UBUc$hEpLRlu$<;|Ip4n9MPDCWHP1oKYl|`#)B_L* z+6pd|1_3coge|HN^F)qYK!YHem&TMB1j)QKdTS6+^F+=uAO^u|c?5#jJSzslW1c8s z5DX!p-Cl!`YMvEB@R}z|oCS(v0-I-frdaP|_r_=|$vjaafahcU$u88}H!sX{*49Qz zu~Tbu14vE8(jcUoXQkBU0-z=EblVsNk9qBO@!;Y%Q-rkj%3*2-b8h z0?^E_uRk-3B8o%M9%Nz=&^)hSy%djY5TXDq^WNfE$WvSh!5cpX!VCb^JS(*)SW1oS zg>Y^sMeNHEzs8E0w~AqDW^!CdMD+N{QzD8#Xob65plQ%DPb3$Mw4@}-B+{d_o)F3e zfS6~Mx3N|+&nlb!@ctdV{|A9k`NIf{3u6d%m}fDBat=hU4>jRAyCwdE@_nCE`=YExBwKUojr1Qivpe}P&AXGJn99IWH zsd%rc6bRmNL^|J!V@`wR;!|7Hb6x5nTD~slKU;O`^pEHd60010f6oZz00000NkvXX Hu0mjfIws|q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..739eae5a816821498a788dfb8544b451395b7013 GIT binary patch literal 558 zcmV+}0@3}6P)3$NCjU-6O=iUhFb4W%Mv4f%&@_{M(@dNaK6!&LLTLOxs0FYm zCQUL%-XKK?jo+6_V-VMb+ICR^Zuzs*BLKijeJGAQ8jY%$@rN*YfY7ILb$ufqH}VEo zgz5Cwd;Osi2K}>^yrD#d-fKWee*5_)9(TzDz{mDmJYLu1L38oZJAkixA9+Kc2u1Dy z*M(j38b}d_t^tD|gZ2bc${Xwm8czY0eL&kTsu=mV_wYHch0vz1$13tbfvvDFLX5mN zNdr9G--*Yi2rl{ge6BjDza+l{Vj`512QqyHd=W~@0~yxz!xF6JW%K-F)2a`c|bA1>&tVejfowhtNd&>Q`rOoN={`KLw-+K2hm! wDdm9-k3l;^%&l&plUkk-LI@#*5JLVfKfgB8|JgNE)c^nh07*qoM6N<$g6bOWi2wiq literal 0 HcmV?d00001 diff --git a/assets/sprites/blocks/turrets/calenmite/hammer.png b/assets/sprites/blocks/turrets/calenmite/hammer.png new file mode 100644 index 0000000000000000000000000000000000000000..375c1fa6a5495669ab40ebbe47b310b2cb5b48d3 GIT binary patch literal 801 zcmV++1K#|JP)hfk}g9sgU2c3 zQ4wlNXsO`|7~TMAc>p)5+?#5hlXAQJ?@5-WWWUN8-JSOTbUIyZ5d}dI1VIo4K@bE% z5Iis*c^Ypvn=OByOeU_r`{w7bzq{Jrp1guH5A%rIq1X$s#s@hLAE%qMp#t@$INPq;4 zDLjKpFa?Y;JcCG31(dF=Lt?pHs_U94;68+BGznP&NO;R^pG;?Svlgk|I|4jceh3nf z@Jz1Wnt+mNe@F?Q@JzE_cpu;yv=2(c=P(7V*Ei5WeM&&XA3b|&wt;2rnDxvfFXuwN@{Zn&`!|jzs=f?)hhuOfQ0X3GsK&qt|UML zJXhW$VLF>{z3tP#yO3ZCD4F(1s5FeXeM(yissL@bW!>{ys9YFt`xH%r^|%%VXyMP! zKG5$!|I~qr@}aaa-uBF!*DvYom(SvHO+r?H6`t`*@P2cHhG$A7)LtZ*&gR=@_!q~w zJFGOkRD^^iOX`crmHM8(d%yeq{OC#TSXEWDTCH}uYXWk=46y(yyj2X59%di?h;Ah` z1rXKWZh;7lTIz7cHx<3*dO1&!SDYd5<2@~gbQN{ zU4&;?Lh~F5*5kS+Abq>4Bs}9Ou#a=35}I$fWe4$mmvP1ANehdN~VTFl3)S{P(VCd{JaBQ_jwm+d_$_fBgQt@9fo>*$gLt z3NGuNZ^Aucj$GoSAD)L9PM%lxk+sjPlim9?DCyG=&&%}(9to*Gn|s`U7Q4r}?hCbl zQXCqdY~c_-=HJHRQ74vo>c`0i3@5j7Oa=VKp cgCExW7{%siwjckmEC!PEboFyt=akR{0RH){761SM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a99161af6c6ea490160b70113146ab5bc50307a7 GIT binary patch literal 1539 zcmV+e2K@PnP)L^l@HWF__s);Pem$5xJqy4KDc+chke0;`p#%BR`+G(eq%(Q2H0N2;o zPXGYx^}2X0*e=%3Uw@MAzkL2w+}_#w#S^8Sv|d>5JZEYwG|S7jIb{Yw!=M=;m;lf; z#ybRc02YRLhM)?-(g?2*)Bt!ez{4@bQUT!U#62AgfC2#OiD>pZDgL7QPvRH0nB7R$`S%AfEmq4SwUa}KsEp2e#^B>b}iq& zBemm%z*3a-_1kaKtgvK$uD~kP(cuB)1?Tng_ zvVtH2fW!Rl-7QN-^5k?$&c<3mU>b4&zr zBIaryAZdQ>f3Zrvo#WvU=as+$fW!RDs~h8!+&<&us=a(Ra{|h1X3=1KIFk~$m+&jA+fzXvq;uv<~UYY|_OFz_R&eY+IBehU_ z<4a0r^MKIsocWaeP)Vh{PiVMhos!uVP*Z$`q$X6G%?5t{`jZ^<O$=qAoMH<8G*n8pk;{39jsFdL$2}HWQAYR3QYa`A3Hbqz5j`x9^&^3Gja>YJo7C1RMrH zDYnWzCTukdp#0P;d|KAC?NAg591r@%mnc!n!%IpTl!B0YR5?1dl_0oVqLhLlVLmE^ zP-Bo?&Fh!dSpkWBo`q|gsD}l>=4z=v3=^o$}!mQ>4blil!L73TmfX*n$6NH*Pn-4G$hRy)N zyZHcv^8n8fW-uRsVIt-c!Yt+kFwKNLL72&W0H(JlYAc*5g;9`}`J6JZj_y(FN|@37 p>2-E~@ucyi%RB9~(@xJ+e*sg+Q8dB4R7wB<002ovPDHLkV1iC$(<%S} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..747b0094262633e008787872c418e67172a85143 GIT binary patch literal 604 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9FlS3sCCF7+t~0|OJE zr;B4q#hkadHu?o8O0<7m{_4ib)~PL#!iQ`n#AY_SojQDJ}PE3EbQTDWVSi_ zW1_uv3)hD!{eM;nI6-0bclz98?z8NnddisFi0-?pt2 zT;w6VAoI`C9-#6WXVbR+-#ynyZSDGrx=t$?K9sjS{lWfwH;}98w1eS;^`XP=b<;T_ zTmJ51JCL+-MeX)aKTrEU{%g0Ve*4E;f%{eoeUjYZdD(d3*&h>^@GyK8+|moba_O%Ru{ZqU z2o3%F%d)sd;C<`us5-p}+4`&3^Y2H;s-H?{XaE|pp!;IRmomHg>-W~CKUdveZZEZ7 z5ExRQgtq8jJl4+0+F@bGqvCMoVXJF9|0K+I**+j8I5}Nkz>m< csIrbJbA7L;1+!ZtFu5>zy85}Sb4q9e083{JTmS$7 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0d295409ab3ed6b56a4e5f48f3e92c10b743c6e8 GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9FlS3sCCF7+t~0|Vn% zPZ!6KiaBp@+4@NbO1M3Ao-+4>P?^9+rl531Ps3SLBJ>hCS2|~9EGp@^<)pO5+goJ_;a&PP1-WJ4wUvxolI zKID&hwbZ}%3&%qK@T{x4>P0R5$?^}@8r^-rdkNo!+8Pg;1#KS{GaI6gwYM;4Ny$%Q zz48Ck)>R)B0~@4{x2rH_$;u0{tf;KvkX!KWqhdjWW)Ht3vrlRbheX1QAHJ6_nE1Xo zo%p|;L-c{^<-aSF@z^X>?b)6!Lp$(7Y?Yr0Oa*8_6 zVsJjTf3hM_>2me`*7dvpe*1fTS^p-(g-i$j3%)xRA9IJNZvD@iebbEhE-zqwpm^xB z|GxN?Fg|#CJJ7R5=dtqxhT30BDL@CaHN4}vd93{iD@%o(am&-2xcBzW7J>%##TuteN4_u;TGy z7A6-tc`bf{+L{#>4s9P7USfzm*3QM8A{CDuH1yazC6&YU?PH(l4QyRKVn zU-$6nczt+utbW~oK3iVg0(?K#63hg6fKRcMU?RX1e2SF>bpamXQ!FH?3h)e{qAfv9 zKnw6Gni5n5v;?1`C84?i>uFv|G#XA-0bKYO7Z){eBbu}GOV)9gen4B zfKRcOATFRK_!LVCq5@ikPqC69CV&fn|6n0?N%7o$`^q{_Qi6zp_W+-wEkSK1+yZBiURRwV2FPF=jw-L?l%@ymo+7hY>@C={gK|&P)Ex@N( zOAr^(5`2oK1W^Gk!lzhC5EHL8WK{~ zOG^pW1Wbibk(9tG9a~ALBA^sL@UI%VTCIvDJU+dyxz$(;3E~2z;8RK@JU+et|6Q*V zK1rN}{!s2}GL@k^{Km#c*1d-C!$_<}Xbq5iPqB#gfST}uyq+)wACTD`lI#g0JwW1t zNvr9--Oc22W34U)KRmw##Ov#8KRuu%VJYL+??1_7Q!|>eh7ij2@@kB^fLI-ANCLIm zm;{19G!({qmIn!@0#Zf1zJ&ge5lZN{{Jw~>(y$t9vbsW!q_tf zu$5pUAm>eqA^0J*q4VX;%&a7+3&?>#G-r>&8ai)IRntO(s(@PX$IkCrf{1{hKfa5s zCn!_kQzRsCBC!Sl1bYBS0%uIVy}63kjB;9LOv29g7HjdvIYtUTAUp(>N(es-B}^F> zLJ47kEd^K`J|I+z=!a99=(o}#F=H>uj;)-z!?&e_c z34vR|2P*XdN=cEf-$P;xs^xNt=a;wWnBPCXr1(|~K2UiYI(2r$sSkxfIi-iG)61Ih z0fluyt^`hfDAt-erH5Pzwc!Iw3o*%cLTWxQ`R1Jld_Zv}%$2~IrpDF@G}SDfW&(Qf z0p(IeiG=>oLJ9qi^cZN5@BxEj+!P5zy<-1hF}P01on`|1@PW$H&{RtIk^6hdrF*;< z@BzaOnUV){Y^GFF#k7JC7;i~Vk&v3EPLW^orb-X(mo zzJZcF+~48$#y8-xxb6WGtvA(+JjDHmOo;>zeCx`nc@L;1p#}JW0|9`%gjV1KP6PmQ z5?X=}I1&JqOK1%~;7kB8T|$fS0fz#Bd2Mphgv1psjgEy8a;heyY2 i>pk5$bLPxxIDY{fpqw(w6%}s)0000>j(6*Kkbu z;uayS@Umxvmcu3S#Mp)<+J{at__9c-9WY>Q<23MTNMzy>PME=PIE(4dzB-WM3)LJp z89RkGq{O%EVmP^uV=Ch$Tfr=56>Fssc8^KF&&QXx{9^DdZxLmjbdMvONoB9#wai~F fj4($sFf`QpFA~)2(>~(10wn0^>gTe~DWM4f%Ijk2 diff --git a/assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-r.png b/assets/sprites/blocks/turrets/copremite/acidic-cannon-blade-r.png deleted file mode 100644 index 82ae47c805e8fbee0669c8a5dfe468a6e7837fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F3${@^GvDCf{DEQFR z#WAE}&fA+CbDbCkTn=vKE@o!=k|b!Y;P$Td0PhaN6^##yZ(a6b)!thm3{(#T4d#~d z{{1g`-G9uH`_R=ZxQa>Tx6&0>k22R4JQLn@21qO16kKTKFe&EW{?*D?*gbYBui=>R z#VtZu;bqSTEr(0uiLnh!v=5zP@MV!uJ7B=r#%bWwkjTU%oG^poa2C^@`hRxI%w-m; zIczd^3T;SdnnUcqab hzgie!j$~kHsPlguV_;Oa^{fg=(9_k=Wt~$(69DTRW3m7M diff --git a/assets/sprites/blocks/turrets/copremite/acidic-cannon.png b/assets/sprites/blocks/turrets/copremite/acidic-cannon.png deleted file mode 100644 index 932eda2699d21194bd15558247c2eb1c9b744fc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F3${@^GvDChdfr0U$ zr;B4q#hkZy6#bYTCE6a&muh+-5~0BHE`W8`?lp189WN}{!OSJXbedJbmv@0$XD0q)I(FyIy}wKP_4UuW<$wS6&G6UGhdcMZcdlD2 z{gqY5NM`@Eb+1?5Pv?Eew8pSb$k1sA!+&1JBOD5D42Db{f(|_lNh|`&4HEc;bV3?T z=TDmCQk~^BgF)`G`b4D`4g=GF&wic$c02ZC?YX(#LXL6?d4HCuIKA7+A-IIG=(vB8 z(v*3@?h{xwWbJ246~DAhW$|oS`dGdFSWJ~(plbnt!0YXEAI`9R{5-&=fOmrNzwf6r zzx{o?efOe|{qz0P@*m3{)O9#nUgy~oWBFKpo?r}sXT@8Iw_d4J5mZa$xP+1Az80mS5+ zuch7HUG*|G)E$7GKc7`Is%F_zbp^n}pxz*K1HjUlo*;AqpoJm5Kxhu2r4c48W7;51X40Y8gut06m!xY88_?fF8{UwTR6WK+oobtYb6-Fa+~Kma$$dxj4+( zym|d9n(!Ku`G24%&mUg={@WkX_Jnz*l0={Q38;}U8>&hYeIfv(`Bx={zy>gypOypy z3&3c8UR(%d0HgVIaUhTYjOO!2g^&d>nlBdx0t#R>zg#&8NdTkydcq(?0gUGBD+S>S z0IB)2=|pAg$I;%W(jt;tdwadOj7N{3USNBXFva}21b?8!e5?|xYMKu!f#Cb21)(?_ z8r!udfnZ@iNCF{tb4nrjDguCQ8RS5~%wOF)b&KsYUSNdlI1sR&p%j7`0A@aj0wHHU zhy#Io9R&iVTP}eh0zfezgh8O1528TeUWY;8jEPbRYycedF`e(PCy&KU1Yu@Muls57 zbMhER5`PFyc11|d2gS^kUI)^Gz?C@w%zTb~Gb!d%)B=Jj0E+n>K#T1&mid%H*BXKu z0FJR*Pl+$iw9^uT2>^+qnh+#kysRKJ-yMxf1A<2Wr>43F;9MDm-pzMz005km<%wEN zE4dN_SZtq(ax_wLAeauKTc<_SU=aY{_}(B`n|~ks%qoL>LCo+R1g-Rib2tP|^K)s1 znBfu#ECAA6i*xlMv^F2a?GeZTpwjp6j>MJMg3yck_kY=R&M{Nxq?3Y5dxFrL`5-EU zEPzy{y+F{CruiV!`bG8(L?sZ0B#HUtvU4Zo9&rppZOx_=m4$Jsa^_Q}&7>!wM+km5 z)_($mhWXAhx*%%^*kd0XLof*1-JzEG&N0UTvlQ+B=Eop#|9TdfZ#5=y^H%IZxHg2) zbpPL!*^>_;G`%(iNzza>3#zeVIO55OPyJ?#3+3 zDRRlWL(%sD3<5W(R9XIj7aDi+`K#O5_h*zAPNNEe2^4^MLXF5v>t0rG4nwfgqZoD z)^VrA0w8GwH*Z2|L<|CEK8PE?WX*#MfegUHe9j~9f6F~N`G3_^HJ^G-V7Ul%Rt%%&5v3EU^w zIox2*4Z|7(Vh~bbG$8n8bAKTCX64L~n2(jso_e#+c9%`bbxk?b=JWYV>Lm%WvN_#^ zuaqf!4_>UKUOIu5mnvJ*Rf@MJQU~XhY5rR$LI_yd)YsRB3eDMj@M2kK3IcUqclx_g{H+``2i3pU}F#{W`Rk*`JfPj)uO!lwiN7rE2-`XE6+KeS${F}K>*>q+m-^N zyzC~|C;K`$JZ71tUB8CR0B{;s!vxNojx1k)ZUR7Js3ru7p;i#oHfGhhYu~(nwNm<* z+)IqauGM-+{iP>BYGTcPv!v{rcd@kW@VYBq5Vye=gO;QYi!Ov)N9_FQ7(i{X<&1$- zm*pTztt)k2auCin*fV;%My=D*d}^K8@occML9m7SLr`pBZgE458Z{h!1KiA$^WTZN Q`v3p{07*qoM6N<$f`m~q4FCWD delta 1720 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 RF{}Up002ovPDHLkV1j^OET{kg diff --git a/assets/sprites/blocks/turrets/copremite/acidic-wing-r.png b/assets/sprites/blocks/turrets/copremite/acidic-wing-r.png index f032e684e8157bbdcce1931ac666b7520041a2b8..752feff47cdfb2b7ed1eaf88add7e4fd0637b269 100644 GIT binary patch delta 666 zcmV;L0%iU51^We%IRUMaIvsx%)EtD)wL1<%4OQ+y1r-G?7jS{n5ULTDS+8f->&*B4 z`@dZjC7OJX6e-!!LY8G&mStI%Wm)#1J?edcbJ}b+_xm4jw_CfPXVv=vb9M;gP$&TK zLkI@|UI-xpzy~2L0C*sT1^|78@BpBVum}LqMOX{~Xd)~M0Q3;-{&Y+)y?yuo9^mDR zr<1;3<=++(hiI*gUvfsU`xSIJKESu{KYJWymaG7V#xJ=d*Z_=;UvfmS0H_(i2|*fQ%J^Xpflkt%J%IE0U=H9uK9~cH zs!UiUsiQ=tId#s@QiKVKgo{hZ_YAO!H`^QWqt%0mc$uH%Cc08B%0 z9v{R2pbf!&d=LbHdV~l`0>E+*WC4~^0(8z6V71;!KWM4V5@7$qj5~rIz|d1MX9O#N z2-i>!vjM2NY~_ex0nl>O%?-fn#s?t)IF3;JR>Z5@Ypd}=3;_N|nEFaem*fE8 zA42r;K@yS7(sFTEX%Si%d#xXvaCaY0Vr$ZtdK)jUH||907*qoM6N<$g7VBH AmjD0& delta 686 zcmV;f0#W_@1@r}wIRU1TIvsyis5uCoYj+%k8mioZ3MvX(F5n_cL#Rfq%z8bu-ekV- z_y2YX1&zN)iiCHxkY!nxWm%SGS(ZI&PkJBVls22q{qWD*?bhz|ta=|{$@W1U3Izau z2;l(03n3%`_#lJ@01t%F0HBW$9sslv&H?~*5zYnxG!f1U0Q3;-{_B5Ux_ z=d*rZA~6U^u)Rf;_;n?}5e! zcS4W`m@|Iq?%nO;=XrmKWC2bY|Ha!Yzym=NV2SZd>IiZGOO9VsMvw!TYR>rTSpgjC z*!Vv`{eGmAv}X_CJU*BMxQ`F!08=@P4?zK3#)p6a7dMx^kI+;o0JrhM4B*eVrw9Me zaeNR2`1Rzi-;f%Fm_Eb8iFjq)E&_|2&zc})V!SI<=va=e^2?rjT}JD z_~i{*HNz^84`P1+E#sG_238**gaGD@Um6?QVSEq*IQHoA*o*mwgS(6mLI7|Wq4uqa z7dMwyEij zSfV)y3gbf%0BA!{86N@xKple8_z(;LrV-S}hkyVuj-VnqewJlfmStI%Wm(ptzZ#0) UtR*IdcmMzZ07*qoM6N<$f?(|~l>h($ diff --git a/assets/sprites/blocks/turrets/copremite/acidic.png b/assets/sprites/blocks/turrets/copremite/acidic.png index e36ed967b3216b0348da24924a08afdfb8d37e9c..70fa27a18358e914a98dd675580b122cb33b6a4e 100644 GIT binary patch delta 1232 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 LNkvXXu0mjftA86V diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index b0f9be6..bca33bb 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -503,29 +503,13 @@ OblivionResources.copremite, new BasicBulletType(2f, 13) {{ reload = 75f; range = 27f * 8f; rotateSpeed = 4.5f; - recoil = 1.5f; + recoil = 2.25f; drawer = new DrawTurret() {{ - parts.addAll( - new RegionPart("-cannon") {{ - moveY = -3f; - progress = PartProgress.reload.curve(Interp.pow2In); - children.addAll( - new RegionPart("-blade") {{ - x = 4.5f; - y = 0.75f; - moveX = -1.25f; - moveY = 1f; - progress = PartProgress.warmup; - mirror = true; - }} - ); - }} - ); parts.addAll( new RegionPart("-wing") {{ x = 7.75f; y = -1.75f; - moveRot = -30f; + moveRot = -45f; under = mirror = true; }} ); @@ -543,7 +527,7 @@ OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ }} ); }}; - /* + hammer = new ItemTurret("hammer") {{ requirements(Category.turret, with( OblivionResources.calenmite, 40, @@ -555,6 +539,21 @@ OblivionResources.copremite, new BasicBulletType(2.5f, 25) {{ reload = 45f; range = 20f * 8f; rotateSpeed = 4.5f; + recoil = 10f; + 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; @@ -578,8 +577,28 @@ OblivionResources.calenmite, new BasicBulletType(2f, 35) {{ range = 30f * 8f; shots = 3; inaccuracy = 3f; - velocityInaccuracy = 0.9f; rotateSpeed = 4.5f; + recoil = 1.5f; + shoot = new ShootPattern() {{ + shots = 4f; + }}; + 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; @@ -591,7 +610,7 @@ OblivionResources.calenmite, new BasicBulletType(2.5f, 35) {{ }} ); }}; - + /* inductionDrill = new Drill("induction-drill") {{ requirements(Category.production, with( Items.silicon, 25, From a689a7c32540d10d1cc54f4caa6b06331012aa1d Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 20:28:01 -0300 Subject: [PATCH 36/61] fix --- src/oblivion/content/OblivionBlocks.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index bca33bb..a75d591 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -575,12 +575,11 @@ OblivionResources.calenmite, new BasicBulletType(2f, 35) {{ health = 200 * 9; reload = 85f; range = 30f * 8f; - shots = 3; inaccuracy = 3f; rotateSpeed = 4.5f; recoil = 1.5f; shoot = new ShootPattern() {{ - shots = 4f; + shots = 3; }}; drawer = new DrawTurret() {{ parts.addAll( From c33e889113886bd69a76e0c3ee07dc850c69693c Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 21:21:09 -0300 Subject: [PATCH 37/61] everything else(almost) --- .../production/mantle-pulverizer-bottom.png | Bin 0 -> 316 bytes .../production/mantle-pulverizer-light.png | Bin 7652 -> 5133 bytes .../blocks/production/mantle-pulverizer.png | Bin 2317 -> 2319 bytes .../turrets/calenmite/hammer-cannon.png | Bin 420 -> 382 bytes .../blocks/turrets/calenmite/hammer.png | Bin 801 -> 808 bytes src/oblivion/content/OblivionBlocks.java | 99 ++++++++++-------- 6 files changed, 54 insertions(+), 45 deletions(-) create mode 100644 assets/sprites/blocks/production/mantle-pulverizer-bottom.png 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 0000000000000000000000000000000000000000..7c48b6880fcc584b890b89eadf20c10c6a2dd9f8 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9GU0wBydB{NVGDEQ9P z#WAE}&fANIybOvA2OJ!Dm4!a!znWNh_`8V7%RA5Ol+RpZtiR5%hB1P916u;`0jUO4 ghHQpwLsP)kBY`R0cUS8apwAgRUHx3vIVCg!03NMeC;$Ke literal 0 HcmV?d00001 diff --git a/assets/sprites/blocks/production/mantle-pulverizer-light.png b/assets/sprites/blocks/production/mantle-pulverizer-light.png index d12af3b7779a0f49f2805e7c0c670eb6be511cca..9ab555c0f329a3d910661464f7b06ad7d3b812bc 100644 GIT binary patch delta 5123 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 literal 7652 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 SS6&bR0000k2QpRQ> z2n#F7%8HE^yTL*miMR+B3u2j+A_!`+*>dfyOd{lAgas?R#qMpfd!F;=ojE^q&&<7% zd=SWcckcXr-#v5Z&N=tI-uFNLIs^bXId=-Wgyq$hTge%)M5k^yx zMug?nm0|z72A(x-t+4C#I_{-xn^P~Sy z&YenD=&`c!ntyiMY@-Q3Ur}G~54J}l965R}dGe8?=iv1p4;5YfjMLv;R+aNyHa>a0 znItJ5pXYd%S69Sw^iv1+2iv2{U%vP-aU8$X5}GPY)m>uEPSr`ZoiiS)9)vUOVI?a^{>nr)d6xPj=mNTAQ5y*SM?0<=CW1r{FeIs^=GhOXf_0Qj1 zs&Y-iO{*bt#S#`A;yFN zyL;;sg}5omi~L&Ck7rv}5mZwUz_(Ns8}hGYn<;2TNG&dsQ_$|-dS}VcIp)!J z3X%xi%72br1tE^l%#$}FE%{TuCHDBS*@3DagqC2dZ{z*$414_3@R_Qf6jxk-#G7zT zcGtMiyYjK_wr+&k`(f72x`vHTK5cW%3cVMQ{@U z9pVd%)1(LofqX!PYZMYS)mutVEfVm&P{=Ndz;4D}xO88v;OV2Q>c%K%f9S+c z5fppr{(QdKqsql&q5Rtb09S6GVf$%`%zw~0__=2xbyy08CgcOam?dymXLxRk{PBZSiiLa$S8kt4 zZs3K`l5Z(1S%L+zB~bA}lqHN=0C%NQ(GnI=b;noW%NHNU#I}&mL9z(S5}HQnX@3KP zM;1_$e5wv=(4i%Gk*}#MwgivxNNs3*@9g=NVQKP1%$~R=&b_C?7PSu!x5I7Bm#`C@hQ5!Aktb>}rVWD-T_ zQ_DgPvAJQ3A=)G#!ENqop%H;9bN9xYe`w+%Y&aC4WgH67G7bf38HWP2jDJ2AWSSfP zVa2U`8!FFLNpL=KEi7qtLR`P||0*aHp-K3M1ZpYPrU+7|7!52js9{+QY938N7y@Di zcaHYS^7Y4IbrC4vfcD87Y?L<(ncU zP#5yIrN&z#ji)+SL=6$TKz}|W9&au30ffLTZ=eXNw`yukLn*&7E<|dQ4*<~Td;ldx zklw8-DT3sb=Q8i+LUhUl@QxTy5wI>PAgY82uRjilT<{l0YIshKn%JPx6jWM-xQ?14 zU|p#Qyf{q8Lj-ML)Dm^b$=Kino3=kbV(vK z37a%w>sn~zGc6V&l|@U?imyQ&oLf9$lSKr{*{>1d$>UAcw#BV`8$->N%e^Fm?P-yE zM?jOXsnr)WVx+FfxbrDjW-L%@9u5VMUlO6(sNGpdxHS#QW#@PFIJhPtd}I=XvfEh`@!z~{VjVF*ZSs>A8XO1=kNECAtY2~@O( z_9>MTOnLy^-CI|uRS3y1Y5~^7d|sBYySHu*lH$tj54Oeju$J^mY+1$AR!Z+yS?&p4LD*+%7qw}sGK5=T)|Vs#)z?r2FY*DLBjdgV5x71sEKa+U z4^SX9@gR#J^?$9zYpmu6G41-+`^H>)8R|to#Z{x5aJ=@{rZMxjgpwhXCCH~fQ^?+o z(^`Vm39EZkvIHyn(uSkQIEy4~^7?fot9#QL2I<*$3esK~8y7@<8E#m0RRm4SO3yY^ z&~8+!Bjc>UBi5D(U1-a?OWf#p#A=9ekl;0DQ?7`dUw_m)$UpMdr0;HFDKScku(S29 zNGxg$O*Tk?Jo0z8-X(tkH7hKIBP86MYPwX52`Q1W1wj8Jr8(n?#}L+??Gx5mg5^q~ z%2HQj2}{r}E^@|0)f4i=`I%V@K%@xqxKeAROe@_6$4~t8@G(>ZP>py_6IOy!Ps7x+ zK&_m39A`hA2?yRJ+k+qwre5` zryz|8D{HIO2B0BdbDzR8lMo??pI-QZ6CteFdjOUzpA#WI)>4FAex|- z&z@{1Ns7nkIi8iZRdF1>)PaNk&am=VF9&1C@jES{sj^hvHP-A@omAU7wS?ppWP$a@^(lZGGbcif zF#-1WH^vHaQ;-+=t)?H(wyYwkrXYY(5xPkJ+ub+hU(GgC(29^+TqLKUz5R{OlAm+T zqwN$V5r4Rq9k~iZoSr>T-iWm1Pfsng$4|}mRrMgW1Y3O@@Aqce;~x%RsOm{^#q~$L z3CCo2oqTIqO<$z3Aab}8Eg%QpFV1cUucOI;>H|{Qzk7zA| zn*it#UtF3YMK}uNBU*~!B0wCC5Q}h>$Vapifq(P|Sda<@!A&X8C)`@g&=gM1_1PQq z^we_pjTvDQz`8m0{MTD>diJ~vA=YJRD-lYblK>1;kd^%Ju3Q0t{~S9Kd6F|bCsKnu z$Lc({PN5dAR08CZkKja*oY^H|GSs=b&huI#hys+7kDx@L2nfHU2t4TTuzxYaI;8d_ z)PE3x6~K#pL?{9`@RhaIB>56jB1r9N;VpvObAUuX;-J4Hx&$BJdp)+y(~zGkJ3X}w zkMF%^T_2NwafBzaa|Poh{dHDSMm{B5xk?aQ$P`Vt;k16+qbKiF1fdfkVMeD zgJy*!0vi|P4RrFS23nJRL`np_FlxLb$B7_D#(5!*u;|izyYYBiilB-OEk!E4r3)gY z#@kAS5dm_^=i-N`W1+VSJJn+PL4V*h6pmNg%C;Qi5Q{Jr;KSjItU#<1@)0e`M^N{I z79zaeeKT?o>;a6fOe`W;1*6FS{kLCCb$Ei>+OY1t=7vn72t8_9s3A5tY%#rP0n`vddbg^k2vT?omw7iA zQg})afOo`rihy-V0Z}zX*xcG;gTF9R!*goX#0CwgpxPqDb+i-#>qJHHcq2sh+UOB7)@X*NE`!$);-C;_9^-Sw<|Z~!0k%7q~ysi_X9BP;nHaIpY{rzKF)8rr8+ zN-*gGaBqJ@omL?vzp4dT6Z3gl!ruOdIY^2tbI{)r+rx5F8`djd;!u^cjC4;Spr4ACbML5%Cc6LK#@`6`lQa4+Qai=OMmdb@)4$_eUv3|$*L`u zAi-)09zJWd1de>l0%Gzx3np!yn$;6*-wb7b77AOhFN#ibcn@&PJ@ zCLU!Gq`uX7jephrAf{d4df%99FGIb^r?@J*3CC-HZ5lIgOQ;z#S%ZA)GllHUIISf} zov^w$B}=f9FKsw_j5BL9PDmX()6w6mE$c3E(eH@05aB4nYs{ux5jnr8cYlOuV$k+m)|B=$1@x)^Y>(2HGYb?QXrBG$5 ztFeY9XcrebRF&w zPCSkuPGto3GF0Qt&V?m3-jbiFWkN!ZpYXznrz5omw17mI#V6c48>9x5C3GrPf!9kS zT_hiXwuDXz0KgNZ`Ry*Q%p}Q2#3FP~0DycEx=ubK6yaaUn!v1Tg`Nrk0000cTAAlMz zK@WXs({Kf+8f2|(w2nOc6!CwR3wvhYQ+_@9xvDKH4ex4| zP-V&7@UBJ);R~(}@1jcx9lmc4y_wnR^nKO$FU_-=nYC>jc7M*W!5-etEy2UPs1ibk z=HXpw33+%IQNrQ_r@~Kp+}+QbzjO(AOAfn56retU8U-kqZ#Qc@pMR7`&=s)Vtbd=C zB}fVwhIgtGsuwU8-YH7pPf&dTH40E4Kuuae*Bw_~cdU9ZnUfVT46ZCeQovYXRSDG# z_$#QQgsL|}??-R1Mf*}pqu<}ejgZSrC=KuO5+W}~!|a{IQ-mo|90~tA|hp3nt!d+Y+wzq`j(*Kl~oBQ zgI+IHi^aY6IO9(BXs&=!g+PR!cwUrQ7 zKpH%ejU@mh$#@R{U1w{La#2XcMfoP%YuiL&^0l6|x3x zA9_?3SqYfp@#ATc<&4%#C1&Q?6IJdAKY005(Zk_Ty|E>yDWmG)e-ngk9?o0_G;Tp5 z2dC=8;u%cWUPr%hsr7O=Jm01=XIrBigHqzg2!-XZT28Od-pngB??fSYhR`pb^BF=H zKDeB-R8W5?@NniF7XOMxO`Zl*3r>9S(K;wSZ^Z}A4RQDRlx&JCOJhamtq3^qyVaKS zt8b=n9-}kQ`T8kWo(V08U2uN>*;`##wHd`4THYrc9_e1NPQ`)A#`gV0gSlt7-~0CR zeyoQ9>lB`9l@O_8x9yg$WeIKAc5BnSO5G5>p6#_=Y6q)gx|z0o5Ep;{;`;mjuR1$F zE!<*o@7tN5H#KX2{_(uC-tz?4hC{}2oE{SSzdvuje7CH#{dtXY&0!TvJ0q5;t1g*vqT_O2yGSsD&^*s}vB2FQe2m|G&yRojzFvTH?p}$9 zha#NBA4*QUu!pVb^-+&srJzopr07&g=m;e9( delta 756 zcmVup4YMqmEyZi4+mZfCB${F3A_WyJ`U2G8rK@bE%5ClOG z1VIoyFdlgtZ#J7Pf1XSxuD<)`=dZuJ+TNbLf@^z>HcZ10oqtq@1tefh;TcqdDPWA@ z8AO6Az%!M`iYVYAgeMXNSmCRx+D|nt_;h_$)bEafF@|SKB-8|qIXvT)0Ph3F5T5Z! zfCP*wJcCLw1&lE~gGf*Xl&-8pV!2$Z>zXLwK7?m930VP1c*|^`OlNbm7OCDl0z6lK z2ojL+Os?LVfPa!{e@F?Q@JzE_cpu;yv=2(c=P(7V*Ei5WeM&&XA3b|&wt;2rnDxvfFXuwN@{Zn(0@+Q=fBO`j@2sx7J!8BV>85? zpspl90z6mVBVjt5Z@ul)zq^oN3MiTONT@W7w|z=m390~Xw`JY)TBuwYZ~GKYg7vr- z1!&>V&OXrZKmXK$iSnVeFy8jeo7XSt>zB{saZN&2fEAwcO7MPjgNA2HB-CCcn9k90=Cqx+WlfyQ(BS<0-I@b8Vy&ns2vd2l0I4s!d7nV@yH|>)A@@ z#>w6S=zV6j^W3iz)|EzQg49l21G);=MncTMl#2I;Dv{t_N2K=FIOb!pS$ydg m_4F%UM4SEgu^0!zJ>x%!YjN Date: Sat, 14 May 2022 21:24:49 -0300 Subject: [PATCH 38/61] , --- src/oblivion/content/OblivionBlocks.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 7c6992d..a3b53aa 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -900,10 +900,15 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ size = 3; craftTime = 10f; updateEffect = LamoniFx.imperialSmelt; - drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawArcSmelt() {{ - flameColor = Color.valueOf("D1EFFF"); - midColor = Color.valueOf("8CA9E8"); - }}, new DrawDefault(), new DrawGlowRegion("-light")) + 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); }}; From 3528a184aa4222de4e2e53c9b5ce5f89ba2a158e Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 21:30:43 -0300 Subject: [PATCH 39/61] liquid fixes --- src/oblivion/content/OblivionBlocks.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index a3b53aa..09e86a0 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -624,7 +624,7 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ drillTime = 280f; hasPower = true; consumePower(1f); - consumesLiquid(new LiquidStack(Liquids.water, 0.06f)).boost(); + consumeLiquid(Liquids.water, 0.06f).boost(); }}; alomeriConveyor = new Conveyor("alomeri-conveyor") {{ @@ -728,7 +728,7 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ health = 3035; consumePower(13f); consumeItems(with(Items.silicon, 850, Items.titanium, 750, Items.plastanium, 650)); - consumesLiquid(Liquids.cryofluid, 1f); + consumeLiquid(Liquids.cryofluid, 1f); constructTime = 60f * 60f * 1.5f; liquidCapacity = 60f; @@ -750,7 +750,7 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ health = 5830; consumePower(25f); consumeItems(with(Items.silicon, 1000, Items.plastanium, 600, Items.surgeAlloy, 500, Items.phaseFabric, 350)); - consumesLiquid(Liquids.cryofluid, 3f); + consumeLiquid(Liquids.cryofluid, 3f); constructTime = 60f * 60f * 4; liquidCapacity = 180f; @@ -772,7 +772,7 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ health = 7840; consumePower(30f); consumeItems(with(Items.silicon, 2500, Items.plastanium, 1800, Items.surgeAlloy, 1000, OblivionResources.mothalate, 450)); - consumesLiquid(Liquids.cryofluid, 9f); + consumeLiquid(Liquids.cryofluid, 9f); constructTime = 60f * 60f * 10; liquidCapacity = 360f; From 95f8b780a0243450d5f310db2340c46a27ae112c Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 21:40:38 -0300 Subject: [PATCH 40/61] fixes --- src/oblivion/ProjectOblivion.java | 2 +- src/oblivion/blocks/defense/StatusBomb.java | 116 ++++++++++++++++++++ src/oblivion/content/OblivionBlocks.java | 20 ++-- src/oblivion/content/OblivionStatuses.java | 33 ++++++ 4 files changed, 160 insertions(+), 11 deletions(-) create mode 100644 src/oblivion/blocks/defense/StatusBomb.java create mode 100644 src/oblivion/content/OblivionStatuses.java diff --git a/src/oblivion/ProjectOblivion.java b/src/oblivion/ProjectOblivion.java index 05a2a85..c419b7c 100644 --- a/src/oblivion/ProjectOblivion.java +++ b/src/oblivion/ProjectOblivion.java @@ -28,7 +28,7 @@ public ProjectOblivion(){ @Override public void loadContent(){ - // new OblivionStatuses().load(); + new OblivionStatuses().load(); new OblivionResources().load(); // new OblivionUnits().load(); new OblivionEnvironment().load(); diff --git a/src/oblivion/blocks/defense/StatusBomb.java b/src/oblivion/blocks/defense/StatusBomb.java new file mode 100644 index 0000000..a503cd7 --- /dev/null +++ b/src/oblivion/blocks/defense/StatusBomb.java @@ -0,0 +1,116 @@ +package oblivion.blocks.defense; + +import arc.*; +import arc.util.*; +import arc.util.io.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.scene.ui.layout.*; +import mindustry.ui.*; +import mindustry.gen.*; +import mindustry.type.*; +import mindustry.world.*; +import mindustry.content.*; +import mindustry.entities.*; +import mindustry.graphics.*; +import mindustry.world.meta.*; +import oblivion.blocks.meta.*; +// aka status field block with funky lore +public class StatusBomb extends Block { + public StatusEffect status; + public float statusDuration = 60f; + public Effect craftEffect = Fx.none, shootEffect = Fx.none; + public TextureRegion rotator; + public float range = 80f, craftTime = 60f, cooldownTime = 60f; + public int bombCapacity = 10; + + public StatusBomb(String name) { + super(name); + solid = destructible = true; + sync = update = true; + configurable = true; + } + + @Override + public TextureRegion[] icons() { + return new TextureRegion[]{region, rotator}; + } + + @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))); + } + + @Override + public void load() { + super.load(); + rotator = Core.atlas.find(name + "-rotator"); + } + + @Override + public void setStats() { + super.setStats(); + stats.add(Stat.range, range/8, StatUnit.blocks); + stats.add(Stat.productionTime, craftTime/60, StatUnit.seconds); + stats.add(Stat.abilities, OblivionStatValues.displayStatus(status, statusDuration)); + } + + public class StatusBombBuild extends Building { + public int shots = 0; + public float reload = 0f, craftReload = 0f; + + @Override + public void buildConfiguration(Table table) { + table.button(Icon.upload, () -> {shoot();}); + } + + @Override + public void updateTile() { + if (cons.valid() && shots < bombCapacity) { + craftReload += Time.delta; + if (craftReload >= craftTime) { + craftEffect.at(x, y); + craftReload = 0f; + consume(); + shots++; + } + } + if (reload >= 0) reload -= Time.delta; + } + + @Override + public void draw() { + super.draw(); + Draw.rect(rotator, x, y, Time.time); + } + + public void shoot() { + if (shots > 0 && reload <= 0) { + shootEffect.at(x, y); + Damage.status(team, x, y, range, status, statusDuration, true, true); + reload = cooldownTime; + shots--; + } + } + + @Override + public void write(Writes write){ + super.write(write); + write.f(reload); + write.f(craftReload); + write.i(shots); + + } + + @Override + public void read(Reads read, byte revision){ + super.read(read, revision); + reload = read.f(); + craftReload = read.f(); + shots = read.i(); + } + } +} \ No newline at end of file diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 09e86a0..a2590dc 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -23,7 +23,7 @@ import mindustry.world.blocks.distribution.*; import mindustry.world.blocks.defense.turrets.*; import oblivion.graphics.*; -// import oblivion.blocks.defense.*; +import oblivion.blocks.defense.*; import oblivion.blocks.production.*; import static mindustry.type.ItemStack.*; @@ -443,13 +443,13 @@ Items.silicon, new ArtilleryBulletType(3f, 20) {{ }}; 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"); shootEffect = OblivionFx.poisonShoot; - // status = OblivionStatuses.infested; - // statusDuration = 60f * 4.5f; + status = OblivionStatuses.infested; + statusDuration = 60f * 4.5f; }} ); }}; @@ -480,13 +480,13 @@ OblivionResources.copremite, new BasicBulletType(1.5f, 8) {{ }}; ammo( OblivionResources.copremite, new BasicBulletType(2f, 13) {{ - lifetime = range/speed; + lifetime = 72f; width = height = 10f; frontColor = Color.valueOf("74C272"); backColor = Color.valueOf("4F824B"); shootEffect = OblivionFx.poisonShoot; - // status = OblivionStatuses.infested; - // statusDuration = 60f * 6f; + status = OblivionStatuses.infested; + statusDuration = 60f * 6f; }} ); }}; @@ -516,14 +516,14 @@ OblivionResources.copremite, new BasicBulletType(2f, 13) {{ }}; 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"); shootEffect = OblivionFx.poisonShoot; shootSound = Sounds.artillery; - // status = OblivionStatuses.infested; - // statusDuration = 60f * 12f; + status = OblivionStatuses.infested; + statusDuration = 60f * 12f; }} ); }}; diff --git a/src/oblivion/content/OblivionStatuses.java b/src/oblivion/content/OblivionStatuses.java new file mode 100644 index 0000000..404990b --- /dev/null +++ b/src/oblivion/content/OblivionStatuses.java @@ -0,0 +1,33 @@ +package oblivion.content; + +import mindustry.type.*; +import mindustry.ctype.*; +import mindustry.content.*; + +public class OblivionStatuses implements ContentList { + public static StatusEffect infested, calamity, fear, abyss; + + @Override + public void load() { + infested = new StatusEffect("infested") {{ + damage = 0.06f; + init(() -> { + opposite(StatusEffects.burning, StatusEffects.melting); + }); + }}; + calamity = new StatusEffect("calamity") {{ + damage = 1.6f; + healthMultiplier = 2f; + }}; + fear = new StatusEffect("fear") {{ + speedMultiplier = 0.3f; + reloadMultiplier = 0.4f; + damageMultiplier = 0.5f; + }}; + abyss = new StatusEffect("abyss") {{ + disarm = true; + speedMultiplier = 0f; + dragMultiplier = 69420f; + }}; + } +} \ No newline at end of file From d7eee982ed6927f51d294353243c8c2e84e59422 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 21:48:30 -0300 Subject: [PATCH 41/61] some fixes --- src/oblivion/blocks/defense/StatusBomb.java | 2 +- .../blocks/meta/OblivionStatValues.java | 40 +++++++++++++++++++ src/oblivion/content/OblivionStatuses.java | 4 +- 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/oblivion/blocks/meta/OblivionStatValues.java diff --git a/src/oblivion/blocks/defense/StatusBomb.java b/src/oblivion/blocks/defense/StatusBomb.java index a503cd7..017f750 100644 --- a/src/oblivion/blocks/defense/StatusBomb.java +++ b/src/oblivion/blocks/defense/StatusBomb.java @@ -69,7 +69,7 @@ public void buildConfiguration(Table table) { @Override public void updateTile() { - if (cons.valid() && shots < bombCapacity) { + if (consValid() && shots < bombCapacity) { craftReload += Time.delta; if (craftReload >= craftTime) { craftEffect.at(x, y); diff --git a/src/oblivion/blocks/meta/OblivionStatValues.java b/src/oblivion/blocks/meta/OblivionStatValues.java new file mode 100644 index 0000000..41b603b --- /dev/null +++ b/src/oblivion/blocks/meta/OblivionStatValues.java @@ -0,0 +1,40 @@ +package oblivion.blocks.meta; + +import arc.*; +import arc.scene.ui.*; +import mindustry.gen.*; +import mindustry.type.*; +import mindustry.world.meta.*; +// custom ui moment +public class OblivionStatValues { + + public static StatValue displayStatus(StatusEffect status, float duration) { + return table -> { + table.row(); + table.table(Tex.underline, bt -> { + bt.add(new Image(status.uiIcon)).size(30f); + bt.row(); + bt.add(status.localizedName); + bt.row(); + bt.add(Core.bundle.get("stat.duration") + ": " + duration/60f + " " + Core.bundle.get("unit.seconds")); + }); + }; + } + + public static StatValue chargeDrill(float hold, float decay) { + return table -> { + table.row(); + table.add(new Image(Icon.settings)).size(30f); + table.row(); + table.table(Tex.underline, bt -> { + bt.add(Core.bundle.get("stat.manualDrill")); + }); + table.row(); + table.table(bt -> { + bt.add(Core.bundle.get("stat.hold") + ": " + hold/60f + " " + Core.bundle.get("unit.seconds")); + bt.row(); + bt.add(Core.bundle.get("stat.decay") + ": " + decay/60f + " " + Core.bundle.get("unit.seconds")); + }); + }; + } +} \ No newline at end of file diff --git a/src/oblivion/content/OblivionStatuses.java b/src/oblivion/content/OblivionStatuses.java index 404990b..d8ceaa1 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 implements{ public static StatusEffect infested, calamity, fear, abyss; - @Override public void load() { infested = new StatusEffect("infested") {{ damage = 0.06f; From 8088de083f8ae475cf5b8c04e62afe1badd9219f Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 21:50:34 -0300 Subject: [PATCH 42/61] implements --- src/oblivion/content/OblivionStatuses.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/oblivion/content/OblivionStatuses.java b/src/oblivion/content/OblivionStatuses.java index d8ceaa1..eb04940 100644 --- a/src/oblivion/content/OblivionStatuses.java +++ b/src/oblivion/content/OblivionStatuses.java @@ -3,7 +3,7 @@ import mindustry.type.*; import mindustry.content.*; -public class OblivionStatuses implements{ +public class OblivionStatuses { public static StatusEffect infested, calamity, fear, abyss; public void load() { From 4b3100ba36f335d79c7d22d3748c1e299cccae4f Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 22:05:56 -0300 Subject: [PATCH 43/61] api changes moment --- src/oblivion/blocks/defense/StatusBomb.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/oblivion/blocks/defense/StatusBomb.java b/src/oblivion/blocks/defense/StatusBomb.java index 017f750..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 (consValid() && shots < bombCapacity) { + if (efficiency > 0f && shots < bombCapacity) { craftReload += Time.delta; if (craftReload >= craftTime) { craftEffect.at(x, y); From edec26954415ddb6623b7b61ac3696fa83632e3c Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 22:24:42 -0300 Subject: [PATCH 44/61] probably failing units --- src/oblivion/content/OblivionUnits.java | 1016 +++++++++++++++++++++++ src/oblivion/type/OblivionUnitType.java | 28 + 2 files changed, 1044 insertions(+) create mode 100644 src/oblivion/content/OblivionUnits.java create mode 100644 src/oblivion/type/OblivionUnitType.java diff --git a/src/oblivion/content/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java new file mode 100644 index 0000000..149b3f6 --- /dev/null +++ b/src/oblivion/content/OblivionUnits.java @@ -0,0 +1,1016 @@ +package oblivion.content; + +import arc.*; +import arc.util.*; +import arc.math.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import mindustry.gen.*; +import mindustry.type.*; +import mindustry.content.*; +import mindustry.graphics.*; +import mindustry.entities.bullet.*; +import mindustry.entities.abilities.*; +import oblivion.type.*; +import oblivion.graphics.*; + +public class OblivionUnits{ + public static UnitType + slop, detra, tedri, taleni, kolete, + pioli, taneki, notremite, dopretile, niboletra, + phi, root, multi, pow, expo, + + republic, giga, archaranid, bloodmoon, yetinus; + + @Override + public void load() { + slop = new UnitType("slop") {{ + health = 240; + armor = 1f; + speed = 2f; + flying = true; + constructor = UnitEntity::create; + range = 104f; + maxRange = range; + weapons.add( + new Weapon("oblivion-mesulfate-missile") {{ + x = 0f; + y = -1.25f; + mirror = false; + reload = 30f; + shootSound = Sounds.missile; + bullet = new MissileBulletType(2f, 15) {{ + lifetime = 52f; + status = StatusEffects.burning; + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + trailColor = OblivionPal.mesoLight; + }}; + }} + ); + }}; + detra = new UnitType("detra") {{ + health = 450; + armor = 3f; + speed = 1.7f; + flying = true; + constructor = UnitEntity::create; + hitSize = 8f; + range = 152f; + maxRange = range; + engineOffset = 2f; + weapons.add( + new Weapon("oblivion-mesulfate-artillery") {{ + x = 4.5f; + y = -1.5f; + reload = 60f; + shootSound = Sounds.artillery; + bullet = new ArtilleryBulletType(1.5f, 30) {{ + hitEffect = Fx.blastExplosion; + lifetime = 101f; + knockback = 0.6f; + collides = true; + collidesTiles = true; + splashDamageRadius = 35f; + splashDamage = 20f; + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + }}; + }} + ); + }}; + tedri = new UnitType("tedri") {{ + health = 740; + armor = 5f; + speed = 1.5f; + flying = true; + constructor = UnitEntity::create; + hitSize = 14f; + range = 200f; + maxRange = range; + engineSize = 5f; + engineOffset = 4.5f; + weapons.add( + new Weapon("oblivion-mesulfate-laser") {{ + x = 5.75f; + y = -3.5f; + reload = 120f; + shootSound = Sounds.laser; + bullet = new LaserBulletType(50) {{ + width = 8f; + length = 200; + colors = new Color[]{OblivionPal.mesoDark, OblivionPal.mesoMedium, OblivionPal.mesoLight}; + }}; + }}, + new Weapon("oblivion-mesulfate-cannon") {{ + x = 0f; + y = 6f; + mirror = false; + reload = 150f; + shots = 5; + shotDelay = 10f; + shake = 3; + shootSound = Sounds.shootBig; + bullet = new BasicBulletType(3f, 34) {{ + width = height = 9f; + lifetime = 66.6f; //ohno ohfu- + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + }}; + }} + ); + }}; + taleni = new UnitType("taleni") {{ + health = 7500; + armor = 7f; + speed = 0.6f; + flying = true; + constructor = UnitEntity::create; + hitSize = 30f; + range = 256f; + engineSize = 7f; + engineOffset = 20f; + maxRange = range; + weapons.add( + new Weapon("oblivion-mesulfate-railgun") {{ + x = y = 0f; + reload = 180f; + shake = 3f; + shootSound = Sounds.plasmadrop; + mirror = false; + bullet = new LaserBulletType(175) {{ + width = 10f; + length = 256f; + colors = new Color[]{OblivionPal.mesoDark, OblivionPal.mesoMedium, OblivionPal.mesoLight}; + }}; + }}, + new Weapon("oblivion-mesulfate-big-mount") {{ + x = 15.25f; + y = 4f; + reload = 35f; + shots = 3; + shotDelay = 5f; + shootSound = Sounds.shootBig; + bullet = new BasicBulletType(6f, 40) {{ + width = height = 10f; + lifetime = 50f; + splashDamage = 50f; + splashDamageRadius = 10f; + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + }}; + }}, + new Weapon("oblivion-mesulfate-big-mount") {{ + x = 15f; + y = -14f; + reload = 35f; + shots = 3; + shotDelay = 5f; + shootSound = Sounds.shootBig; + bullet = new BasicBulletType(6f, 40) {{ + width = height = 10f; + lifetime = 50f; + splashDamage = 50f; + splashDamageRadius = 10f; + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + }}; + }} + ); + }}; + kolete = new UnitType("kolete") {{ + health = 22000; + armor = 13f; + speed = 0.7f; + flying = true; + constructor = UnitEntity::create; + hitSize = 40f; + range = 300f; + maxRange = range; + engineSize = 10f; + engineOffset = 27f; + abilities.add( + new EnergyFieldAbility(40f, 70f, 160f) {{ + hitBuildings = false; + color = Color.valueOf("E86F6F"); + x = 0f; + y = -4f; + }} + ); + weapons.add( + new Weapon("oblivion-mesulfate-big-laser") {{ + x = 26.5f; + y = 16.75f; + reload = 60f; + shootSound = Sounds.laser; + bullet = new LaserBulletType(70) {{ + width = 11f; + length = 300f; + colors = new Color[]{OblivionPal.mesoDark, OblivionPal.mesoMedium, OblivionPal.mesoLight}; + }}; + }}, + new Weapon("oblivion-mesulfate-mine") {{ + x = 24.25f; + y = -12f; + reload = 90f; + range = 300f; + shots = 4; + inaccuracy = 15f; + velocityRnd = 0.6f; + shootSound = Sounds.artillery; + bullet = new BasicBulletType(11f, 100) {{ + drag = 0.04f; + width = height = 12f; + lifetime = 300f; + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + fragBullets = 5; + fragBullet = new BasicBulletType(8f, 30) {{ + homingPower = 1f; + homingRange = 400f; + lifetime = 65f; + hitSound = despawnSound = Sounds.artillery; + hitEffect = despawnEffect = Fx.blastExplosion; + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + }}; + }}; + }} + ); + }}; + + pioli = new UnitType("pioli") {{ + health = 200; + armor = 0f; + speed = 2.5f; + flying = true; + constructor = UnitEntity::create; + range = 128f; + maxRange = range; + weapons.add( + new Weapon("oblivion-copremite-mount") {{ + x = 2f; + y = 2.5f; + reload = 30f; + shootSound = Sounds.lasershoot; + bullet = new LaserBoltBulletType(4f, 16) {{ + lifetime = 32f; + status = OblivionStatuses.infested; + frontColor = OblivionPal.copreLight; + backColor = OblivionPal.copreMedium; + }}; + }}, + new Weapon("oblivion-copremite-mount") {{ + x = -2.75f; + y = -3.5f; + reload = 30f; + shootSound = Sounds.lasershoot; + flipSprite = true; + bullet = new LaserBoltBulletType(4f, 16) {{ + lifetime = 32f; + status = OblivionStatuses.infested; + frontColor = OblivionPal.copreLight; + backColor = OblivionPal.copreMedium; + }}; + }} + ); + }}; + taneki = new UnitType("taneki") {{ + health = 530; + armor = 1f; + speed = 2f; + flying = true; + constructor = UnitEntity::create; + engineOffset = 8f; + range = 168f; + maxRange = range; + hitSize = 8f; + weapons.add( + new Weapon("oblivion-copremite-mount") {{ + x = 4.75f; + y = 0.5f; + reload = 30f; + shootSound = Sounds.lasershoot; + bullet = new LaserBoltBulletType(3f, 20) {{ + lifetime = 56f; + frontColor = OblivionPal.copreLight; + backColor = OblivionPal.copreMedium; + }}; + }}, + new Weapon("oblivion-copremite-artillery") {{ + x = 3.5f; + y = -4f; + reload = 60f; + shootSound = Sounds.plasmadrop; + bullet = new ArtilleryBulletType(3f, 20) {{ + width = 14f; + height = 14f; + lifetime = 56f; + status = OblivionStatuses.infested; + weaveMag = 5f; + weaveScale = 4f; + homingPower = 0.05f; + frontColor = OblivionPal.copreLight; + backColor = OblivionPal.copreMedium; + }}; + }} + ); + }}; + notremite = new UnitType("notremite") {{ + health = 920; + armor = 4f; + speed = 1.7f; + flying = true; + constructor = UnitEntity::create; + engineOffset = 14f; + engineSize = 4f; + range = 176f; + maxRange = range; + hitSize = 12f; + weapons.add( + new Weapon("oblivion-copremite-laser") {{ + x = 8.75f; + y = -2.25f; + reload = 60f; + shootSound = Sounds.laser; + bullet = new LaserBulletType(50) {{ + width = 7f; + length = 176f; + status = OblivionStatuses.infested; + colors = new Color[]{OblivionPal.copreDark, OblivionPal.copreMedium, OblivionPal.copreLight}; + }}; + }} + ); + }}; + dopretile = new UnitType("dopretile") {{ + health = 13000; + speed = 1.0f; + armor = 6f; + flying = true; + constructor = UnitEntity::create; + engineOffset = 27f; + engineSize = 6f; + range = 224f; + maxRange = range; + hitSize = 30f; + weapons.add( + new Weapon("oblivion-copremite-big-laser") {{ + x = 0f; + y = -4f; + reload = 60f; + shootSound = Sounds.plasmadrop; + mirror = false; + bullet = new LaserBulletType(160) {{ + width = 9f; + length = 224f; + status = OblivionStatuses.infested; + colors = new Color[]{OblivionPal.copreDark, OblivionPal.copreMedium, OblivionPal.copreLight}; + }}; + }}, + new Weapon("oblivion-copremite-laser") {{ + x = 6.25f; + y = 12.75f; + reload = 15f; + shootSound = Sounds.artillery; + bullet = new BasicBulletType(2.5f, 40) {{ + width = 9f; + height = 12f; + lifetime = 89.6f; + frontColor = OblivionPal.copreLight; + backColor = OblivionPal.copreMedium; + }}; + }}, + new Weapon("oblivion-copremite-laser") {{ + x = 12.25f; + y = -8.25f; + reload = 15f; + shootSound = Sounds.artillery; + bullet = new BasicBulletType(2.5f, 40) {{ + width = 9f; + height = 12f; + lifetime = 89.6f; + frontColor = OblivionPal.copreLight; + backColor = OblivionPal.copreMedium; + }}; + }} + ); + }}; + niboletra = new OblivionUnitType("niboletra") {{ + health = 20000; + armor = 10f; + speed = 0.7f; + flying = true; + constructor = UnitEntity::create; + engineDrawer = unit -> { + Draw.color(unit.team.color); + Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, 0f, -30f), unit.y + Angles.trnsy(unit.rotation - 90f, 0f, -30f), 10 + Mathf.absin(Time.time, 2f, 10f / 4f)); + Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, -16f, -18f), unit.y + Angles.trnsy(unit.rotation - 90f, -16f, -18f), 8 + Mathf.absin(Time.time, 2f, 10f / 4f)); + Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, 16f, -18f), unit.y + Angles.trnsy(unit.rotation - 90f, 16f, -18f), 8 + Mathf.absin(Time.time, 2f, 10f / 4f)); + Drawf.tri(unit.x + Angles.trnsx(unit.rotation - 90f, 0f, -35f), unit.y + Angles.trnsy(unit.rotation - 90f, 0f, -35f), 20 + Mathf.absin(Time.time, 2f, 13f / 2f), 20 + Mathf.absin(Time.time, 2f, 10f / 2f), unit.rotation - 180f); + + Draw.color(); + Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, 0f, -27f), unit.y + Angles.trnsy(unit.rotation - 90f, 0f, -27f), (10 + Mathf.absin(Time.time, 2f, 10f / 4f)) / 2f); + Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, -16f, -18f), unit.y + Angles.trnsy(unit.rotation - 90f, -16f, -18f), (8 + Mathf.absin(Time.time, 2f, 10f / 4f))/ 2f); + Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90f, 16f, -18f), unit.y + Angles.trnsy(unit.rotation - 90f, 16f, -18f), (8 + Mathf.absin(Time.time, 2f, 10f / 4f))/ 2f); + Drawf.tri(unit.x + Angles.trnsx(unit.rotation - 90f, 0f, -30f), unit.y + Angles.trnsy(unit.rotation - 90f, 0f, -30f), (20 + Mathf.absin(Time.time, 2f, 13f / 2f)) / 2f, (20 + Mathf.absin(Time.time, 2f, 10f / 2f)) / 2f, unit.rotation - 180f); + }; + range = 304f; + maxRange = range; + hitSize = 36f; + weapons.add( + new Weapon("oblivion-copremite-plasma-cannon") {{ + x = 0f; + y = 0.5f; + reload = 300f; + shootSound = Sounds.laserbig; + mirror = false; + continuous = true; + bullet = new ContinuousLaserBulletType() {{ + damage = 125f; + length = 304; + drawSize = 200f; + lifetime = 150f; + status = OblivionStatuses.infested; + shake = 1f; + width = 6f; + largeHit = true; + incendChance = 0f; + colors = new Color[]{OblivionPal.copreDark, OblivionPal.copreMedium, OblivionPal.copreLight}; + }}; + }} + ); + }}; + + + republic = new OblivionUnitType("republic") {{ + health = 67700; + speed = 0.2f; + constructor = MechUnit::create; + engineDrawer = unit -> { + Draw.color(Color.valueOf("E7885C")); + Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90, 0, -21) * unit.elevation, unit.y + Angles.trnsy(unit.rotation - 90, 0, -21) * unit.elevation, (6 + Mathf.absin(Time.time, 2, 10 / 4)) * unit.elevation); + Drawf.tri(unit.x + Angles.trnsx(unit.rotation - 90, 0, -24) * unit.elevation, unit.y + Angles.trnsy(unit.rotation - 90, 0, -24) * unit.elevation, (13 + Mathf.absin(Time.time, 2, 13 / 2)) * unit.elevation, (15 + Mathf.absin(Time.time, 2, 10 / 2)) * unit.elevation, unit.rotation - 180); + Draw.color(Color.white); + Fill.circle(unit.x + Angles.trnsx(unit.rotation - 90, 0, -20), unit.y + Angles.trnsy(unit.rotation - 90, 0, -20), (6 + Mathf.absin(Time.time, 2, 10 / 4)) / 2 * unit.elevation); + Drawf.tri(unit.x + Angles.trnsx(unit.rotation - 90, 0, -20 - unit.elevation), unit.y + Angles.trnsy(unit.rotation - 90, 0, -20 - unit.elevation), (14 + Mathf.absin(Time.time, 2, 13 / 2)) / 2 * unit.elevation, (15 + Mathf.absin(Time.time, 2, 10 / 2)) / 2 * unit.elevation, unit.rotation - 180); + }; + rotateSpeed = 1.4f; + armor = 20f; + mechStepParticles = true; + mechStepShake = 0.75f; + canBoost = true; + drownTimeMultiplier = 10f; + mechFrontSway = 0.2f; + mechSideSway = 0.7f; + range = 400f; + maxRange = range; + hitSize = 58f; + weapons.add( + new Weapon("oblivion-republic-weapon"){{ + x = 30f; + y = 0f; + reload = 45f; + recoil = 10f; + shootY = 12f; + shootSound = Sounds.shootBig; + shots = 3; + shotDelay = 5f; + shake = 5f; + top = false; + bullet = new BasicBulletType(8f, 150) {{ + pierce = true; + pierceCap = 7; + lifetime = 40f; + width = height = 15f; + hitEffect = Fx.flakExplosion; + splashDamage = 20f; + splashDamageRadius = 10f; + shootEffect = OblivionFx.bigFlameShoot; + }}; + }}, + new Weapon("oblivion-republic-laser") {{ + x = 0f; + y = -7f; + reload = 30f; + recoil = 3f; + shootY = 5f; + shootSound = Sounds.laser; + shake = 1f; + mirror = false; + bullet = new LaserBulletType(50) {{ + width = 20f; + length = 200f; + colors = new Color[]{Color.valueOf("ec7458aa"), Color.valueOf("ff9c5a"), Color.white}; + }}; + }}, + new Weapon("oblivion-republic-laser") {{ + x = 13.25f; + y = 5f; + reload = 60f; + recoil = 3f; + shootY = 5f; + shootSound = Sounds.artillery; + shake = 3f; + rotate = alternate = true; + bullet = new ArtilleryBulletType(6f, 80) {{ + collides = true; + homingPower = 0.08f; + lifetime = 45f; + splashDamageRadius = 40f; + splashDamage = 20f; + width = height = 16f; + }}; + }} + ); + }}; + giga = new UnitType("giga") {{ + health = 45000f; + 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; + hovering = true; + visualElevation = 0.2f; + groundLayer = Layer.legUnit; + range = 400f; + weapons.add( + new Weapon("oblivion-giga-laser") {{ + x = 7.75f; + y = -8.25f; + reload = 60f; + recoil = 3f; + shootY = 6f; + shootSound = Sounds.laser; + bullet = new LaserBulletType(80) {{ + healPercent = 0.2f; + width = 50f; + length = 400f; + colors = new Color[]{Pal.heal.cpy().a(0.4f), Pal.heal, Color.white}; + }}; + }}, + new Weapon("oblivion-giga-missile") {{ + x = 25.25f; + y = -3f; + reload = 30f; + recoil = 3f; + shootY = 2f; + shootSound = Sounds.missile; + alternate = true; + shots = 6; + inaccuracy = 7f; + bullet = new MissileBulletType(4f, 40) {{ + healPercent = 0.1f; + width = height = 8f; + lifetime = 100f; + collidesTeam = true; + backColor = trailColor = hitColor = lightColor = lightningColor = Pal.heal; + frontColor = Color.white; + }}; + }}, + new Weapon() {{ + x = 0f; + y = 6.5f; + reload = 350f; + recoil = 0f; + shake = 20f; + shootSound = Sounds.laserblast; + chargeSound = Sounds.lasercharge; + firstShotDelay = Fx.greenLaserCharge.lifetime; + top = false; + mirror = false; + continuous = true; + bullet = new ContinuousLaserBulletType(210) {{ + healPercent = 0.4f; + lifetime = 60f; + incendAmount = 0; + incendSpread = 0; + incendChance = 0f; + colors = new Color[]{Pal.heal.cpy().a(0.4f), Pal.heal, Color.white}; + }}; + }} + ); + }}; + archaranid = new UnitType("archaranid") {{ + health = 63500; + armor = 18f; + speed = 0.3f; + legCount = 8; + legMoveSpace = 1.2f; + legPairOffset = 3; + 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; + maxRange = range; + weapons.add( + new Weapon("oblivion-archanid-cannon") {{ + x = 0f; + y = -15.25f; + reload = 120f; + recoil = 5f; + mirror = false; + rotate = true; + rotateSpeed = 1f; + shootY = 28f; + shake = 10f; + shootSound = Sounds.artillery; + bullet = new ArtilleryBulletType(2f, 200) {{ + width = height = 35f; + collides = collidesTiles = true; + lifetime = 180f; + frontColor = Pal.sapBullet; + backColor = Pal.sapBulletBack; + hitShake = 10f; + lightRadius = 40f; + lightColor = Pal.sap; + lightOpacity = 0.6f; + status = StatusEffects.sapped; + statusDuration = 60f * 20; + splashDamage = 200; + splashDamageRadius = 16f; + fragBullets = 5; + fragBullet = new LaserBulletType(120) {{ + width = 10f; + length = 80f; + collides = collidesTiles = true; + shootEffect = OblivionFx.instSapShoot; + hitEffect = OblivionFx.instSapHit; + colors = new Color[]{Pal.sapBullet, Pal.sapBullet, Pal.sapBulletBack}; + }}; + }}; + }}, + new Weapon("oblivion-archanid-point") {{ + x = 19f; + y = -5.5f; + reload = 30f; + recoil = 2f; + shootSound = Sounds.railgun; + bullet = new LaserBulletType(175) {{ + length = 180f; + width = 12f; + shootEffect = OblivionFx.instSapShoot; + hitEffect = OblivionFx.instSapHit; + colors = new Color[]{Pal.sapBullet, Pal.sapBullet, Pal.sapBulletBack}; + }}; + }} + ); + }}; + bloodmoon = new OblivionUnitType("bloodmoon") {{ + health = 65000; + armor = 18f; + speed = 0.2f; + flying = lowAltitude = true; + constructor = UnitEntity::create; + hitSize = 56f; + range = 50f * 8f; + engineDrawer = unit -> { + DrawEx.circleEngine(unit, -20, -30, 10); + DrawEx.circleEngine(unit, 20, -30, 10); + DrawEx.circleEngine(unit, -25, 35, 10); + DrawEx.circleEngine(unit, 25, 35, 10); + }; + maxRange = range; + weapons.add( + new Weapon("oblivion-bloodmoon-cannon") {{ + x = y = 0f; + reload = 60f; + recoil = 5f; + shootY = 25f; + shootSound = Sounds.artillery; + mirror = false; + bullet = new ArtilleryBulletType(1.25f, 250) {{ + width = height = 20; + lifetime = 320f; + splashDamageRadius = 60f; + splashDamage = 80f; + collides = collidesTiles = collidesAir = collidesGround = true; + hitSound = despawnSound = Sounds.plasmaboom; + hitEffect = despawnEffect = OblivionFx.bloodmoonHit; + fragBullets = 3; + fragBullet = new BasicBulletType(1f, 60) {{ + homingPower = 0.03f; + homingRange = 400f; + lifetime = 300f; + splashDamageRadius = 40f; + splashDamage = 30f; + hitSound = despawnSound = Sounds.plasmaboom; + hitEffect = despawnEffect = OblivionFx.bloodmoonHit; + trailChance = 5f; + trailWidth = 1.8f; + trailLength = 8; + }}; + }}; + }} + ); + }}; + + yetinus = new OblivionUnitType("yetinus") {{ + health = 65000; + speed = 0.3f; + drag = 0.18f; + hitSize = 58f; + armor = 25f; + accel = 0.19f; + rotateSpeed = 0.3f; + rotateShooting = true; + constructor = UnitWaterMove::create; + trailLength = 70; + trailX = 23f; + trailY = -32f; + trailScl = 3.5f; + range = 600f; + maxRange = range; + weapons.add( + new Weapon("oblivion-yetinus-railgun") {{ + x = 0f; + y = 41.25f; + reload = 90f; + mirror = false; + recoil = 5f; + shootY = 12f; + shake = 8f; + shootCone = 45f; + shootSound = Sounds.railgun; + bullet = new BasicBulletType(6f, 800) {{ + shootEffect = Fx.railShoot; + lifetime = 100; + splashDamageRadius = 180f; + splashDamage =400f; + width = height = 40; + homingRange = 600f; + homingPower = 0.1f; + hitEffect = Fx.impactShockwave; + hitColor = Pal.bulletYellow; + smokeEffect = Fx.shootBig2; + }}; + }}, + new Weapon("oblivion-yetinus-laser") {{ + x = 0f; + y = 0f; + reload = 45f; + rotate = true; + rotateSpeed = 1.5f; + mirror = false; + rotate = true; + recoil = 2f; + shootY = 4f; + shootSound = Sounds.laser; + bullet = new LaserBulletType(100) {{ + width = 20f; + length = 300f; + }}; + }} + ); + }}; + + phi = new OblivionUnitType("phi") {{ + health = 450; + speed = 2.5f; + flying = true; + constructor = UnitEntity::create; + outlineColor = Color.valueOf("3F424D"); + engineDrawer = unit -> { + DrawEx.circleEngine(unit, 2.5f, -5.5f, 2f); + DrawEx.circleEngine(unit, -2.5f, -5.5f, 2f); + }; + hitSize = 7f; + range = 18f * 8f; + maxRange = range; + weapons.add( + new Weapon("oblivion-phi-weapon") {{ + x = 5.25f; + y = 0.5f; + reload = 30f; + top = false; + bullet = new BasicBulletType(2.5f, 15) {{ + lifetime = 18 * 4f; + hitEffect = OblivionFx.carmaniteHit; + frontColor = Color.white; + backColor = Color.valueOf("DCDCDC"); + }}; + }} + ); + }}; + root = new OblivionUnitType("root") {{ + health = 920; + armor = 2f; + speed = 2f; + flying = true; + constructor = UnitEntity::create; + outlineColor = Color.valueOf("3F424D"); + engineDrawer = unit -> { + DrawEx.circleEngine(unit, 0f, -5.5f, 4f); + }; + hitSize = 13f; + range = 23 * 8f; + maxRange = range; + weapons.add( + new Weapon("oblivion-root-weapon") {{ + x = 8f; + y = -0.75f; + reload = 60f; + top = false; + shootSound = Sounds.artillery; + bullet = new ArtilleryBulletType(3f, 40) {{ + lifetime = 23 * 8f; + despawnEffect = hitEffect = OblivionFx.carmaniteHit; + width = height = 12f; + frontColor = Color.white; + backColor = Color.valueOf("DCDCDC"); + homingRange = 80f; + homingPower = 0.05f; + collides = collidesTiles = collidesGround = collidesAir = true; + }}; + }} + ); + }}; + multi = new OblivionUnitType("multi") {{ + health = 1200; + armor = 5f; + speed = 1.65f; + flying = lowAltitude = true; + constructor = UnitEntity::create; + outlineColor = Color.valueOf("3F424D"); + engineDrawer = unit -> { + DrawEx.circleEngine(unit, 8f, 7f, 4f); + DrawEx.circleEngine(unit, -8f, 7f, 4f); + DrawEx.circleEngine(unit, 6f, -11f, 4f); + DrawEx.circleEngine(unit, -8f, -11f, 4f); + }; + hitSize = 20f; + range = 26f * 8f; + maxRange = range; + weapons.add( + new Weapon("oblivion-multi-weapon") {{ + x = 15.75f; + y = 0f; + reload = 90f; + shots = 3; + shotDelay = 5f; + shake = 3f; + top = false; + shootY = 12f; + shootSound = Sounds.shootBig; + bullet = new BasicBulletType(4f, 45) {{ + width = height = 13f; + lifetime = 6.6f * 8f; + despawnEffect = hitEffect = OblivionFx.carmaniteHit; + frontColor = Color.white; + backColor = Color.valueOf("DCDCDC"); + }}; + }}, + new Weapon("oblivion-multi-cannon") {{ + x = y = 0f; + reload = 120f; + mirror = false; + shake = 2; + shootSound = Sounds.plasmadrop; + bullet = new ArtilleryBulletType(2f, 80) {{ + lifetime = 13 * 8; + width = height = 16f; + despawnEffect = hitEffect = OblivionFx.carmaniteHit; + collidesAir = collidesGround = collidesTiles = collides = true; + frontColor = Color.white; + backColor = Color.valueOf("DCDCDC"); + }}; + }} + ); + }}; + pow = new OblivionUnitType("pow") {{ + health = 6500; + armor = 7f; + speed = 1.05f; + flying = lowAltitude = true; + constructor = UnitEntity::create; + outlineColor = Color.valueOf("3F424D"); + engineDrawer = unit -> { + for (int i = -1; i <= 2; i += 2) { + DrawEx.circleEngine(unit, i * 10f, 11f, 4f); + DrawEx.circleEngine(unit, i * 10f, 0f, 4f); + DrawEx.circleEngine(unit, i * 10f, -15f, 4f); + } + }; + hitSize = 25f; + range = 33 * 8f; + maxRange = range; + weapons.add( + new Weapon("oblivion-pow-weapon") {{ + x = 18f; + y = 0f; + reload = 50f; + shots = 5; + shotDelay = 5f; + shake = 5f; + shootY = 18f; + shootCone = 15f; + top = false; + shootSound = Sounds.shootBig; + bullet = new BasicBulletType(6f, 65) {{ + lifetime = 5.5f * 8f; + width = height = 16f; + despawnEffect = hitEffect = OblivionFx.carmaniteHit; + frontColor = Color.white; + backColor = Color.valueOf("DCDCDC"); + }}; + }}, + new Weapon("oblivion-pow-artillery") {{ + x = 8.25f; + y = -6.5f; + reload = 90f; + shots = 3; + inaccuracy = 10; + shake = 7f; + velocityRnd = 0.1f; + shootSound = Sounds.artillery; + bullet = new ArtilleryBulletType(2f, 40) {{ + lifetime = 12 * 8f; + width = height = 22f; + splashDamage = 70f; + splashDamageRadius = 30f; + despawnEffect = hitEffect = OblivionFx.carmaniteHit; + collidesAir = collidesGround = collidesTiles = collides = true; + frontColor = Color.white; + backColor = Color.valueOf("DCDCDC"); + }}; + }}, + new Weapon("oblivion-pow-artillery") {{ + x = -8f; + y = 7.75f; + flipSprite = true; + reload = 90f; + shots = 3; + inaccuracy = 10; + shake = 7f; + velocityRnd = 0.1f; + shootSound = Sounds.artillery; + bullet = new ArtilleryBulletType(2f, 40) {{ + lifetime = 12 * 8f; + width = height = 22f; + splashDamage = 70f; + splashDamageRadius = 30f; + despawnEffect = hitEffect = OblivionFx.carmaniteHit; + collidesAir = collidesGround = collidesTiles = collides = true; + frontColor = Color.white; + backColor = Color.valueOf("DCDCDC"); + }}; + }} + ); + }}; + expo = new OblivionUnitType("expo") {{ + health = 22000; + speed = 1.05f; + armor = 12f; + flying = lowAltitude = true; + constructor = UnitEntity::create; + outlineColor = Color.valueOf("3F424D"); + engineDrawer = unit -> { + for (int i = -1; i <= 2; i += 2) { + DrawEx.circleEngine(unit, i * 12f, 14f, 4f); + DrawEx.circleEngine(unit, i * 9f, -11f, 4f); + } + DrawEx.circleEngine(unit, 0f, -13f, 8f); + }; + hitSize = 28f; + range = 33 * 8f; + maxRange = range; + weapons.add( + new Weapon("oblivion-pow-weapon") {{ + x = 24.25f; + y = 0f; + reload = 10f; + shake = 5f; + shootY = 18f; + shootCone = 15f; + top = false; + shootSound = Sounds.shootBig; + bullet = new BasicBulletType(6f, 100) {{ + lifetime = 5.5f * 8f; + width = height = 22f; + despawnEffect = hitEffect = OblivionFx.carmaniteHit; + frontColor = Color.white; + backColor = Color.valueOf("DCDCDC"); + }}; + }} + ); + }}; + } +} diff --git a/src/oblivion/type/OblivionUnitType.java b/src/oblivion/type/OblivionUnitType.java new file mode 100644 index 0000000..b21fe40 --- /dev/null +++ b/src/oblivion/type/OblivionUnitType.java @@ -0,0 +1,28 @@ +package oblivion.type; + +import arc.func.*; +import arc.math.*; +import arc.util.*; +import arc.math.geom.*; +import arc.graphics.g2d.*; +import mindustry.gen.*; +import mindustry.type.*; +import mindustry.entities.abilities.*; +import mindustry.graphics.*; + +import mindustry.Vars; + +// engineSize and engineOffset is now useless {: +public class OblivionUnitType extends UnitType { + private static final Vec2 legOffset = new Vec2(); + public Cons engineDrawer = unit -> {}, topDrawer = unit -> {}; + + public OblivionUnitType(String name) { + super(name); + } + + @Override + public void drawEngine(Unit unit) { + engineDrawer.get(unit); + } +} \ No newline at end of file From 41ae64607a6a7e28860591515bbdebc611b35659 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 22:25:26 -0300 Subject: [PATCH 45/61] forgot to load the units in main class --- src/oblivion/ProjectOblivion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/oblivion/ProjectOblivion.java b/src/oblivion/ProjectOblivion.java index c419b7c..865095c 100644 --- a/src/oblivion/ProjectOblivion.java +++ b/src/oblivion/ProjectOblivion.java @@ -30,7 +30,7 @@ public ProjectOblivion(){ public void loadContent(){ new OblivionStatuses().load(); new OblivionResources().load(); - // new OblivionUnits().load(); + new OblivionUnits().load(); new OblivionEnvironment().load(); new OblivionBlocks().load(); // new OblivionPlanets().load(); From 0de3215897157a74afa1299c4642297288e9a229 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 22:56:27 -0300 Subject: [PATCH 46/61] tons of fixes --- src/oblivion/content/OblivionUnits.java | 80 ++++++++++++++++--------- src/oblivion/type/OblivionUnitType.java | 1 - 2 files changed, 51 insertions(+), 30 deletions(-) diff --git a/src/oblivion/content/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java index 149b3f6..d426d65 100644 --- a/src/oblivion/content/OblivionUnits.java +++ b/src/oblivion/content/OblivionUnits.java @@ -22,7 +22,6 @@ public class OblivionUnits{ republic, giga, archaranid, bloodmoon, yetinus; - @Override public void load() { slop = new UnitType("slop") {{ health = 240; @@ -107,8 +106,6 @@ public void load() { y = 6f; mirror = false; reload = 150f; - shots = 5; - shotDelay = 10f; shake = 3; shootSound = Sounds.shootBig; bullet = new BasicBulletType(3f, 34) {{ @@ -116,6 +113,17 @@ public void load() { lifetime = 66.6f; //ohno ohfu- frontColor = OblivionPal.mesoMedium; backColor = OblivionPal.mesoDark; + for (int i = 1; i <= 5; i++) { + float lifeFraction = lifetime / i; + spawnBullets.addAll( + new BasicBulletType(3f, 7) {{ + width = height = 5f; + lifetime = lifeFraction; + frontColor = OblivionPal.mesoMedium; + backColor = OblivionPal.mesoDark; + }} + ); + } }}; }} ); @@ -148,9 +156,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; @@ -164,9 +174,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; @@ -214,10 +226,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; @@ -457,7 +470,7 @@ public void load() { rotateSpeed = 1.4f; armor = 20f; mechStepParticles = true; - mechStepShake = 0.75f; + mechLandShake = 3f; canBoost = true; drownTimeMultiplier = 10f; mechFrontSway = 0.2f; @@ -473,10 +486,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; @@ -528,16 +543,14 @@ 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; + legFowardScl = 0.58f; hovering = true; visualElevation = 0.2f; groundLayer = Layer.legUnit; @@ -565,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; @@ -584,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 BulletPattern() {{ + firstShotDelay = Fx.greenLaserCharge.lifetime; + }}; bullet = new ContinuousLaserBulletType(210) {{ healPercent = 0.4f; lifetime = 60f; @@ -616,7 +633,6 @@ public void load() { legSplashRange = 60; hitSize = 32f; hovering = true; - visualElevation = 0.95f; groundLayer = Layer.legUnit; constructor = LegsUnit::create; range = 45f * 8f; @@ -734,9 +750,9 @@ public void load() { rotateShooting = true; constructor = UnitWaterMove::create; trailLength = 70; - trailX = 23f; - trailY = -32f; - trailScl = 3.5f; + waveTrailX = 23f; + waveTrailY = -32f; + waveTrailScl = 3.5f; range = 600f; maxRange = range; weapons.add( @@ -864,12 +880,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; @@ -917,8 +935,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; @@ -936,10 +956,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; @@ -957,10 +978,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..9d3f41c 100644 --- a/src/oblivion/type/OblivionUnitType.java +++ b/src/oblivion/type/OblivionUnitType.java @@ -14,7 +14,6 @@ // engineSize and engineOffset is now useless {: public class OblivionUnitType extends UnitType { - private static final Vec2 legOffset = new Vec2(); public Cons engineDrawer = unit -> {}, topDrawer = unit -> {}; public OblivionUnitType(String name) { From ac75877b1e2e8f0373084e0c50610cca60316f82 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 23:00:46 -0300 Subject: [PATCH 47/61] forgot to import lol --- src/oblivion/content/OblivionUnits.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/oblivion/content/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java index d426d65..9793855 100644 --- a/src/oblivion/content/OblivionUnits.java +++ b/src/oblivion/content/OblivionUnits.java @@ -10,6 +10,7 @@ import mindustry.content.*; import mindustry.graphics.*; import mindustry.entities.bullet.*; +import mindustry.entities.pattern.*; import mindustry.entities.abilities.*; import oblivion.type.*; import oblivion.graphics.*; @@ -552,7 +553,6 @@ public void load() { legMoveSpace = 1.5f; legFowardScl = 0.58f; hovering = true; - visualElevation = 0.2f; groundLayer = Layer.legUnit; range = 400f; weapons.add( @@ -626,7 +626,6 @@ public void load() { legLength = 100f; legExtension = -20; legBaseOffset = 10f; - landShake = 1f; legLengthScl = 0.93f; legSpeed = 0.19f; legSplashDamage = 80; @@ -752,7 +751,7 @@ public void load() { trailLength = 70; waveTrailX = 23f; waveTrailY = -32f; - waveTrailScl = 3.5f; + trailScl = 3.5f; range = 600f; maxRange = range; weapons.add( From a18f085892847ceb73a2de33d9bebc3a47037217 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 23:09:52 -0300 Subject: [PATCH 48/61] possibly final unit fix --- src/oblivion/content/OblivionUnits.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/oblivion/content/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java index 9793855..288380b 100644 --- a/src/oblivion/content/OblivionUnits.java +++ b/src/oblivion/content/OblivionUnits.java @@ -551,7 +551,7 @@ public void load() { legLength = 30f; legBaseOffset = 15f; legMoveSpace = 1.5f; - legFowardScl = 0.58f; + legForwardScl = 0.58f; hovering = true; groundLayer = Layer.legUnit; range = 400f; @@ -602,7 +602,7 @@ public void load() { top = false; mirror = false; continuous = true; - shoot = new BulletPattern() {{ + shoot = new ShootPattern() {{ firstShotDelay = Fx.greenLaserCharge.lifetime; }}; bullet = new ContinuousLaserBulletType(210) {{ @@ -738,7 +738,7 @@ public void load() { ); }}; - yetinus = new OblivionUnitType("yetinus") {{ + yetinus = new UnitType("yetinus") {{ health = 65000; speed = 0.3f; drag = 0.18f; @@ -746,12 +746,10 @@ public void load() { armor = 25f; accel = 0.19f; rotateSpeed = 0.3f; - rotateShooting = true; constructor = UnitWaterMove::create; trailLength = 70; waveTrailX = 23f; waveTrailY = -32f; - trailScl = 3.5f; range = 600f; maxRange = range; weapons.add( @@ -773,7 +771,6 @@ public void load() { width = height = 40; homingRange = 600f; homingPower = 0.1f; - hitEffect = Fx.impactShockwave; hitColor = Pal.bulletYellow; smokeEffect = Fx.shootBig2; }}; @@ -785,7 +782,6 @@ public void load() { rotate = true; rotateSpeed = 1.5f; mirror = false; - rotate = true; recoil = 2f; shootY = 4f; shootSound = Sounds.laser; From a22d597929f7a8934bce7c4edc3adb71b80edbf2 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 23:13:29 -0300 Subject: [PATCH 49/61] s --- src/oblivion/type/OblivionUnitType.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/oblivion/type/OblivionUnitType.java b/src/oblivion/type/OblivionUnitType.java index 9d3f41c..6a6490b 100644 --- a/src/oblivion/type/OblivionUnitType.java +++ b/src/oblivion/type/OblivionUnitType.java @@ -12,7 +12,7 @@ import mindustry.Vars; -// engineSize and engineOffset is now useless {: +// lazy to remove class and rework depending units public class OblivionUnitType extends UnitType { public Cons engineDrawer = unit -> {}, topDrawer = unit -> {}; @@ -21,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 From c0a403972b0dfd6c770e93b14c9396d8a15cf43b Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 23:20:35 -0300 Subject: [PATCH 50/61] reenable the units --- src/oblivion/content/OblivionBlocks.java | 70 ++++++++++++------------ src/oblivion/content/OblivionUnits.java | 2 +- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index a2590dc..f8c7f20 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -648,9 +648,9 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ size = 3; health = 200; consumePower(1.5f); - // plans = Seq.with( - // new UnitPlan(OblivionUnits.slop, 60f * 25f, with(Items.silicon, 10, OblivionResources.mesulfate, 15)) - // ); + plans = Seq.with( + new UnitPlan(OblivionUnits.slop, 60f * 25f, with(Items.silicon, 10, OblivionResources.mesulfate, 15)) + ); }}; infestromeniFactory = new UnitFactory("infestromeni-factory") {{ requirements(Category.units, with( @@ -661,9 +661,9 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ size = 3; health = 200; consumePower(2f); - // plans = Seq.with( - // new UnitPlan(OblivionUnits.pioli, 60f * 30f, with(Items.silicon, 6, OblivionResources.copremite, 20)) - // ); + plans = Seq.with( + new UnitPlan(OblivionUnits.pioli, 60f * 30f, with(Items.silicon, 6, OblivionResources.copremite, 20)) + ); }}; functiveFactory = new UnitFactory("functive-factory") {{ requirements(Category.units, with( @@ -674,9 +674,9 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ size = 3; health = 200; consumePower(2f); - // plans = Seq.with( - // new UnitPlan(OblivionUnits.phi, 60f * 27f, with(Items.silicon, 6, OblivionResources.carmanite, 20)) - // ); + plans = Seq.with( + new UnitPlan(OblivionUnits.phi, 60f * 27f, with(Items.silicon, 6, OblivionResources.carmanite, 20)) + ); }}; alphaReconstructor = new Reconstructor("alpha-reconstructor"){{ @@ -691,11 +691,11 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ constructTime = 60f * 10f; - // upgrades.addAll( - // new UnitType[]{OblivionUnits.slop, OblivionUnits.detra}, - // new UnitType[]{OblivionUnits.pioli, OblivionUnits.taneki}, - // new UnitType[]{OblivionUnits.phi, OblivionUnits.root} - // ); + upgrades.addAll( + new UnitType[]{OblivionUnits.slop, OblivionUnits.detra}, + new UnitType[]{OblivionUnits.pioli, OblivionUnits.taneki}, + new UnitType[]{OblivionUnits.phi, OblivionUnits.root} + ); }}; betaReconstructor = new Reconstructor("beta-reconstructor"){{ @@ -711,11 +711,11 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ constructTime = 60f * 30f; - // upgrades.addAll( - // new UnitType[]{OblivionUnits.detra, OblivionUnits.tedri}, - // new UnitType[]{OblivionUnits.taneki, OblivionUnits.notremite}, - // new UnitType[]{OblivionUnits.root, OblivionUnits.multi} - // ); + upgrades.addAll( + new UnitType[]{OblivionUnits.detra, OblivionUnits.tedri}, + new UnitType[]{OblivionUnits.taneki, OblivionUnits.notremite}, + new UnitType[]{OblivionUnits.root, OblivionUnits.multi} + ); }}; gammaReconstructor = new Reconstructor("gamma-reconstructor"){{ @@ -733,11 +733,11 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ constructTime = 60f * 60f * 1.5f; liquidCapacity = 60f; - // upgrades.addAll( - // new UnitType[]{OblivionUnits.tedri, OblivionUnits.taleni}, - // new UnitType[]{OblivionUnits.notremite, OblivionUnits.dopretile}, - // new UnitType[]{OblivionUnits.multi, OblivionUnits.pow} - // ); + upgrades.addAll( + new UnitType[]{OblivionUnits.tedri, OblivionUnits.taleni}, + new UnitType[]{OblivionUnits.notremite, OblivionUnits.dopretile}, + new UnitType[]{OblivionUnits.multi, OblivionUnits.pow} + ); }}; omegaReconstructor = new Reconstructor("omega-reconstructor"){{ @@ -755,11 +755,11 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ constructTime = 60f * 60f * 4; liquidCapacity = 180f; - // upgrades.addAll( - // new UnitType[]{OblivionUnits.taleni, OblivionUnits.kolete}, - // new UnitType[]{OblivionUnits.dopretile, OblivionUnits.niboletra}, - // new UnitType[]{OblivionUnits.pow, OblivionUnits.expo} - // ); + upgrades.addAll( + new UnitType[]{OblivionUnits.taleni, OblivionUnits.kolete}, + new UnitType[]{OblivionUnits.dopretile, OblivionUnits.niboletra}, + new UnitType[]{OblivionUnits.pow, OblivionUnits.expo} + ); }}; mandlebrotReconstructor = new Reconstructor("mandlebrot-reconstructor") {{ @@ -776,12 +776,12 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ constructTime = 60f * 60f * 10; liquidCapacity = 360f; - // upgrades.addAll( - // new UnitType[]{UnitTypes.reign, OblivionUnits.republic}, - // new UnitType[]{UnitTypes.corvus, OblivionUnits.giga}, - // new UnitType[]{UnitTypes.toxopid, OblivionUnits.archaranid}, - // new UnitType[]{UnitTypes.eclipse, OblivionUnits.bloodmoon} - // ); + upgrades.addAll( + new UnitType[]{UnitTypes.reign, OblivionUnits.republic}, + new UnitType[]{UnitTypes.corvus, OblivionUnits.giga}, + new UnitType[]{UnitTypes.toxopid, OblivionUnits.archaranid}, + new UnitType[]{UnitTypes.eclipse, OblivionUnits.bloodmoon} + ); }}; calamitySigil = new StatusBomb("calamity-sigil") {{ diff --git a/src/oblivion/content/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java index 288380b..b6fc87b 100644 --- a/src/oblivion/content/OblivionUnits.java +++ b/src/oblivion/content/OblivionUnits.java @@ -20,7 +20,7 @@ public class OblivionUnits{ slop, detra, tedri, taleni, kolete, pioli, taneki, notremite, dopretile, niboletra, phi, root, multi, pow, expo, - + republic, giga, archaranid, bloodmoon, yetinus; public void load() { From ad3f9b6bf75787d49b29e927f4e2d233415a5143 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 23:29:53 -0300 Subject: [PATCH 51/61] plantes --- src/oblivion/content/OblivionBlocks.java | 3 +- src/oblivion/content/OblivionPlanets.java | 58 ++ .../planets/LamoniPlanetGenerator.java | 417 +++++++++++ .../planets/LonelaPlanetGenerator.java | 655 ++++++++++++++++++ 4 files changed, 1132 insertions(+), 1 deletion(-) create mode 100644 src/oblivion/content/OblivionPlanets.java create mode 100644 src/oblivion/planets/LamoniPlanetGenerator.java create mode 100644 src/oblivion/planets/LonelaPlanetGenerator.java diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index f8c7f20..222d709 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -780,7 +780,8 @@ OblivionResources.calenmite, new ArtilleryBulletType(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} ); }}; diff --git a/src/oblivion/content/OblivionPlanets.java b/src/oblivion/content/OblivionPlanets.java new file mode 100644 index 0000000..d6a8907 --- /dev/null +++ b/src/oblivion/content/OblivionPlanets.java @@ -0,0 +1,58 @@ +package oblivion.content; + +import arc.graphics.*; +import mindustry.type.*; +import mindustry.ctype.*; +import mindustry.content.*; +import mindustry.graphics.*; +import mindustry.graphics.g3d.*; +import oblivion.planets.*; + +public class OblivionPlanets implements ContentList { + public static Planet + berenit, + lamoni, lonela; + + @Override + public void load() { + berenit = new Planet("berenit", Planets.sun, 0, 3f) {{ + bloom = true; + accessible = false; + orbitRadius = 750f; + meshLoader = () -> new SunMesh( + this, 6, + 5, 0.3, 1.7, 1.2, 1, + 1.1f, + Color.valueOf("FF4D0C"), + Color.valueOf("FF6625"), + Color.valueOf("FF8948"), + Color.valueOf("FFA564"), + Color.valueOf("FFBC7B"), + Color.valueOf("FFE3A2") + ); + }}; + lamoni = new Planet("lamoni", berenit, 3, 1f) {{ + generator = new LamoniPlanetGenerator(); + meshLoader = () -> new HexMesh(this, 6); + solarSystem = berenit; + startSector = 15; + accessible = true; + alwaysUnlocked = true; + }}; + lonela = new Planet("lonela", Planets.sun, 3, 1f) {{ + generator = new LonelaPlanetGenerator(); + meshLoader = () -> new HexMesh(this, 6); + cloudMeshLoader = () -> new MultiMesh( + new HexSkyMesh(this, 69, 0.1f, 0.16f, 5, Color.white.cpy().a(0.75f), 2, 0.45f, 1.1f, 0.45f), + new HexSkyMesh(this, 420, 0.1f, 0.13f, 5, Color.gray.cpy().a(0.75f), 2, 0.45f, 1.1f, 0.45f) + ); + atmosphereColor = Color.valueOf("ffffff"); + atmosphereRadIn = 0.02f; + atmosphereRadOut = 0.3f; + startSector = 15; + accessible = true; + alwaysUnlocked = true; + landCloudColor = Color.white.cpy().a(0.5f); + }}; + } +} diff --git a/src/oblivion/planets/LamoniPlanetGenerator.java b/src/oblivion/planets/LamoniPlanetGenerator.java new file mode 100644 index 0000000..ba88b5d --- /dev/null +++ b/src/oblivion/planets/LamoniPlanetGenerator.java @@ -0,0 +1,417 @@ +package oblivion.planets; + +import arc.math.*; +import arc.util.*; +import arc.struct.*; +import arc.graphics.*; +import arc.math.geom.*; +import arc.util.noise.*; +import mindustry.ai.*; +import mindustry.game.*; +import mindustry.type.*; +import mindustry.world.*; +import mindustry.content.*; +import mindustry.maps.planet.*; +import mindustry.ai.BaseRegistry.*; +import mindustry.maps.generators.*; +import mindustry.graphics.g3d.PlanetGrid.*; +import mindustry.world.blocks.environment.*; +import oblivion.content.*; + +import static mindustry.Vars.*; + +public class LamoniPlanetGenerator extends PlanetGenerator { + //alternate, le direct generation (wip) + public static boolean alt = false; + public static final int seed = 1; + + BaseGenerator basegen = new BaseGenerator(); + float scl = 5f; + float waterOffset = 0.07f; + + public Block[][] arr = + { +{OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime}, +{OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime}, +{OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.malenatite, OblivionEnvironment.paletolime, OblivionEnvironment.malenatite, OblivionEnvironment.paletolime, OblivionEnvironment.paletolime, OblivionEnvironment.goletenira, OblivionEnvironment.paletolime, OblivionEnvironment.malenatite, OblivionEnvironment.paletolime}, +{OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, Blocks.grass}, +{OblivionEnvironment.goletenira, OblivionEnvironment.argeletine, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.argeletine, OblivionEnvironment.goletenira, OblivionEnvironment.goletenira, OblivionEnvironment.malenatite, OblivionEnvironment.goletenira, OblivionEnvironment.argeletine, OblivionEnvironment.goletenira}, +{OblivionEnvironment.mudone, OblivionEnvironment.argeletine, OblivionEnvironment.goletenira, OblivionEnvironment.argeletine, OblivionEnvironment.mudone, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine, OblivionEnvironment.argeletine}, +{OblivionEnvironment.mudone, OblivionEnvironment.argeletine, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.argeletine, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.argeletine}, +{Blocks.grass, Blocks.grass, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, Blocks.grass, OblivionEnvironment.mudone, Blocks.grass, Blocks.grass, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone, OblivionEnvironment.mudone}, +{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, OblivionEnvironment.mudone, Blocks.grass, Blocks.grass, Blocks.grass, OblivionEnvironment.mudone}, +{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass}, +{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass}, +{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass}, +{Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass, Blocks.grass} + }; + + float water = 0; + + float rawHeight(Vec3 position){ + position = Tmp.v33.set(position).scl(scl); + return (Mathf.pow(Simplex.noise3d(seed, 7, 0.5f, 1f/3f, position.x, position.y, position.z), 2.3f) + waterOffset) / (1f + waterOffset); + } + + @Override + public void generateSector(Sector sector){ + sector.generateEnemyBase = false; + } + + @Override + public float getHeight(Vec3 position){ + float height = rawHeight(position); + return Math.max(height, water); + } + + @Override + public Color getColor(Vec3 position){ + Block block = getBlock(position); + //replace salt with sand color + if(block == Blocks.salt) return Blocks.sand.mapColor; + return Tmp.c1.set(block.mapColor).a(1f - block.albedo); + } + + @Override + public void genTile(Vec3 position, TileGen tile){ + tile.floor = getBlock(position); + tile.block = tile.floor.asFloor().wall; + + if(Ridged.noise3d(1, position.x, position.y, position.z, 2, 22) > 0.31){ + tile.block = Blocks.air; + } + } + + Block getBlock(Vec3 position){ + float height = rawHeight(position); + Tmp.v31.set(position); + position = Tmp.v33.set(position).scl(scl); + float rad = scl; + float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad)); + float tnoise = Simplex.noise3d(seed, 7, 0.56, 1f/3f, position.x, position.y + 999f, position.z); + temp = Mathf.lerp(temp, tnoise, 0.5f); + height *= 1.2f; + height = Mathf.clamp(height); + + float tar = Simplex.noise3d(seed, 4, 0.55f, 1f/2f, position.x, position.y + 999f, position.z) * 0.3f + Tmp.v31.dst(0, 0, 1f) * 0.2f; + + Block res = arr[Mathf.clamp((int)(temp * arr.length), 0, arr[0].length - 1)][Mathf.clamp((int)(height * arr[0].length), 0, arr[0].length - 1)]; + return res; + } + + @Override + protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){ + Vec3 v = sector.rect.project(x, y).scl(5f); + return Simplex.noise3d(seed, octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag; + } + + @Override + protected void generate(){ + + class Room{ + int x, y, radius; + ObjectSet connected = new ObjectSet<>(); + + Room(int x, int y, int radius){ + this.x = x; + this.y = y; + this.radius = radius; + connected.add(this); + } + + void join(int x1, int y1, int x2, int y2){ + float nscl = rand.random(100f, 140f) * 6f; + int stroke = rand.random(3, 9); + brush(pathfind(x1, y1, x2, y2, tile -> (tile.solid() ? 50f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan), stroke); + } + + void connect(Room to){ + if(!connected.add(to) || to == this) return; + + Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f); + rand.nextFloat(); + + if(alt){ + midpoint.add(Tmp.v2.set(1, 0f).setAngle(Angles.angle(to.x, to.y, x, y) + 90f * (rand.chance(0.5) ? 1f : -1f)).scl(Tmp.v1.dst(x, y) * 2f)); + }else{ + //add randomized offset to avoid straight lines + midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y))); + } + + midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f); + + int mx = (int)midpoint.x, my = (int)midpoint.y; + + join(x, y, mx, my); + join(mx, my, to.x, to.y); + } + + void joinLiquid(int x1, int y1, int x2, int y2){ + float nscl = rand.random(100f, 140f) * 6f; + int rad = rand.random(5, 10); + int avoid = 2 + rad; + var path = pathfind(x1, y1, x2, y2, tile -> (tile.solid() || !tile.floor().isLiquid ? 70f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan); + path.each(t -> { + //don't place liquid paths near the core + if(Mathf.dst2(t.x, t.y, x2, y2) <= avoid * avoid){ + return; + } + + for(int x = -rad; x <= rad; x++){ + for(int y = -rad; y <= rad; y++){ + int wx = t.x + x, wy = t.y + y; + if(Structs.inBounds(wx, wy, width, height) && Mathf.within(x, y, rad)){ + Tile other = tiles.getn(wx, wy); + other.setBlock(Blocks.air); + if(Mathf.within(x, y, rad - 1) && !other.floor().isLiquid){ + Floor floor = other.floor(); + //TODO does not respect tainted floors + other.setFloor((Floor)(floor == Blocks.sand || floor == Blocks.salt ? Blocks.sandWater : Blocks.darksandTaintedWater)); + } + } + } + } + }); + } + + void connectLiquid(Room to){ + if(to == this) return; + + Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f); + rand.nextFloat(); + + //add randomized offset to avoid straight lines + midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y))); + midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f); + + int mx = (int)midpoint.x, my = (int)midpoint.y; + + joinLiquid(x, y, mx, my); + joinLiquid(mx, my, to.x, to.y); + } + } + + cells(4); + distort(10f, 12f); + + float constraint = 1.3f; + float radius = width / 2f / Mathf.sqrt3; + int rooms = rand.random(2, 5); + Seq roomseq = new Seq<>(); + + for(int i = 0; i < rooms; i++){ + Tmp.v1.trns(rand.random(360f), rand.random(radius / constraint)); + float rx = (width/2f + Tmp.v1.x); + float ry = (height/2f + Tmp.v1.y); + float maxrad = radius - Tmp.v1.len(); + float rrad = Math.min(rand.random(9f, maxrad / 2f), 30f); + roomseq.add(new Room((int)rx, (int)ry, (int)rrad)); + } + + //check positions on the map to place the player spawn. this needs to be in the corner of the map + Room spawn = null; + Seq enemies = new Seq<>(); + int enemySpawns = rand.random(1, Math.max((int)(sector.threat * 4), 1)); + int offset = rand.nextInt(360); + float length = width/2.55f - rand.random(13, 23); + int angleStep = 5; + int waterCheckRad = 5; + for(int i = 0; i < 360; i+= angleStep){ + int angle = offset + i; + int cx = (int)(width/2 + Angles.trnsx(angle, length)); + int cy = (int)(height/2 + Angles.trnsy(angle, length)); + + int waterTiles = 0; + + //check for water presence + for(int rx = -waterCheckRad; rx <= waterCheckRad; rx++){ + for(int ry = -waterCheckRad; ry <= waterCheckRad; ry++){ + Tile tile = tiles.get(cx + rx, cy + ry); + if(tile == null || tile.floor().liquidDrop != null){ + waterTiles ++; + } + } + } + + if(waterTiles <= 4 || (i + angleStep >= 360)){ + roomseq.add(spawn = new Room(cx, cy, rand.random(8, 15))); + + for(int j = 0; j < enemySpawns; j++){ + float enemyOffset = rand.range(60f); + Tmp.v1.set(cx - width/2, cy - height/2).rotate(180f + enemyOffset).add(width/2, height/2); + Room espawn = new Room((int)Tmp.v1.x, (int)Tmp.v1.y, rand.random(8, 16)); + roomseq.add(espawn); + enemies.add(espawn); + } + + break; + } + } + + //clear radius around each room + for(Room room : roomseq){ + erase(room.x, room.y, room.radius); + } + + //randomly connect rooms together + int connections = rand.random(Math.max(rooms - 1, 1), rooms + 3); + for(int i = 0; i < connections; i++){ + roomseq.random(rand).connect(roomseq.random(rand)); + } + + for(Room room : roomseq){ + spawn.connect(room); + } + + Room fspawn = spawn; + + cells(1); + + distort(10f, 6f); + + Seq ores = Seq.with(OblivionEnvironment.oreNiobium); + float poles = Math.abs(sector.tile.v.y); + float nmag = 0.5f; + float scl = 1f; + float addscl = 1.3f; + + FloatSeq frequencies = new FloatSeq(); + for(int i = 0; i < ores.size; i++){ + frequencies.add(rand.random(-0.1f, 0.01f) - i * 0.01f + poles * 0.04f); + } + + pass((x, y) -> { + if(!floor.asFloor().hasSurface()) return; + + int offsetX = x - 4, offsetY = y + 23; + for(int i = ores.size - 1; i >= 0; i--){ + Block entry = ores.get(i); + float freq = frequencies.get(i); + if(Math.abs(0.5f - noise(offsetX, offsetY + i*999, 2, 0.7, (40 + i * 2))) > 0.22f + i*0.01 && + Math.abs(0.5f - noise(offsetX, offsetY - i*999, 1, 1, (30 + i * 4))) > 0.37f + freq){ + ore = entry; + break; + } + } + }); + + trimDark(); + + median(2); + + inverseFloodFill(tiles.getn(spawn.x, spawn.y)); + + float difficulty = sector.threat; + ints.clear(); + ints.ensureCapacity(width * height / 4); + + int ruinCount = rand.random(-2, 4); + if(ruinCount > 0){ + int padding = 25; + + //create list of potential positions + for(int x = padding; x < width - padding; x++){ + for(int y = padding; y < height - padding; y++){ + Tile tile = tiles.getn(x, y); + if(!tile.solid() && (tile.drop() != null || tile.floor().liquidDrop != null)){ + ints.add(tile.pos()); + } + } + } + + ints.shuffle(rand); + + int placed = 0; + float diffRange = 0.4f; + //try each position + for(int i = 0; i < ints.size && placed < ruinCount; i++){ + int val = ints.items[i]; + int x = Point2.x(val), y = Point2.y(val); + + //do not overwrite player spawn + if(Mathf.within(x, y, spawn.x, spawn.y, 18f)){ + continue; + } + + float range = difficulty + rand.random(diffRange); + + Tile tile = tiles.getn(x, y); + BasePart part = null; + if(tile.overlay().itemDrop != null){ + part = bases.forResource(tile.drop()).getFrac(range); + }else if(tile.floor().liquidDrop != null && rand.chance(0.05)){ + part = bases.forResource(tile.floor().liquidDrop).getFrac(range); + }else if(rand.chance(0.05)){ //ore-less parts are less likely to occur. + part = bases.parts.getFrac(range); + } + + //actually place the part + if(part != null && BaseGenerator.tryPlace(part, x, y, Team.derelict, (cx, cy) -> { + Tile other = tiles.getn(cx, cy); + if(other.floor().hasSurface()){ + other.setOverlay(Blocks.oreScrap); + for(int j = 1; j <= 2; j++){ + for(Point2 p : Geometry.d8){ + Tile t = tiles.get(cx + p.x*j, cy + p.y*j); + if(t != null && t.floor().hasSurface() && rand.chance(j == 1 ? 0.4 : 0.2)){ + t.setOverlay(Blocks.oreScrap); + } + } + } + } + })){ + placed ++; + + int debrisRadius = Math.max(part.schematic.width, part.schematic.height)/2 + 3; + Geometry.circle(x, y, tiles.width, tiles.height, debrisRadius, (cx, cy) -> { + float dst = Mathf.dst(cx, cy, x, y); + float removeChance = Mathf.lerp(0.05f, 0.5f, dst / debrisRadius); + + Tile other = tiles.getn(cx, cy); + if(other.build != null && other.isCenter()){ + if(other.team() == Team.derelict && rand.chance(removeChance)){ + other.remove(); + }else if(rand.chance(0.5)){ + other.build.health = other.build.health - rand.random(other.build.health * 0.9f); + } + } + }); + } + } + } + + //remove invalid ores + for(Tile tile : tiles){ + if(tile.overlay().needsSurface && !tile.floor().hasSurface()){ + tile.setOverlay(Blocks.air); + } + } + + Schematics.placeLaunchLoadout(spawn.x, spawn.y); + + for(Room espawn : enemies){ + tiles.getn(espawn.x, espawn.y).setOverlay(Blocks.spawn); + } + + if(sector.hasEnemyBase()){ + basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector, difficulty); + + state.rules.attackMode = sector.info.attack = true; + }else{ + state.rules.winWave = sector.info.winWave = 10 + 5 * (int)Math.max(difficulty * 10, 1); + } + + float waveTimeDec = 0.4f; + + state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f)); + state.rules.waves = sector.info.waves = true; + state.rules.enemyCoreBuildRadius = 600f; + + //spawn air only when spawn is blocked + state.rules.spawns = Waves.generate(difficulty, new Rand(sector.id), state.rules.attackMode, state.rules.attackMode && spawner.countGroundSpawns() == 0, false); + } + + @Override + public void postGenerate(Tiles tiles){ + } +} \ No newline at end of file diff --git a/src/oblivion/planets/LonelaPlanetGenerator.java b/src/oblivion/planets/LonelaPlanetGenerator.java new file mode 100644 index 0000000..308d8bc --- /dev/null +++ b/src/oblivion/planets/LonelaPlanetGenerator.java @@ -0,0 +1,655 @@ +package oblivion.planets; + +import arc.math.*; +import arc.util.*; +import arc.struct.*; +import arc.graphics.*; +import arc.math.geom.*; +import arc.util.noise.*; +import mindustry.ai.*; +import mindustry.game.*; +import mindustry.type.*; +import mindustry.world.*; +import mindustry.content.*; +import mindustry.maps.planet.*; +import mindustry.ai.BaseRegistry.*; +import mindustry.maps.generators.*; +import mindustry.graphics.g3d.PlanetGrid.*; +import mindustry.world.blocks.environment.*; +import oblivion.content.*; + +import static mindustry.Vars.*; + +public class LonelaPlanetGenerator extends PlanetGenerator { + //alternate, less direct generation (wip) + public static boolean alt = false; + public static final int seed = 1; + + BaseGenerator basegen = new BaseGenerator(); + float scl = 5f; + float waterOffset = 0.07f; + boolean genLakes = false; + + public Block[][] arr = + { + {OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.powderite}, + {OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite}, + {OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite, OblivionEnvironment.powderite}, + {OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite}, + {OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite}, + {OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.powderite}, + {OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise}, + {OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder}, + {OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.baletise}, + {OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite}, + {OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.baletise}, + {OblivionEnvironment.driedpowder, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.baletise, OblivionEnvironment.powderite}, + {OblivionEnvironment.baletise, OblivionEnvironment.driedpowder, OblivionEnvironment.tobolite, OblivionEnvironment.powderite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.tobolite, OblivionEnvironment.baletise, OblivionEnvironment.tobolite, OblivionEnvironment.driedpowder, OblivionEnvironment.powderite, OblivionEnvironment.baletise, OblivionEnvironment.baletise} + }; + + ObjectMap dec = ObjectMap.of( + Blocks.sporeMoss, Blocks.sporeCluster, + Blocks.moss, Blocks.sporeCluster, + Blocks.taintedWater, Blocks.water, + Blocks.darksandTaintedWater, Blocks.darksandWater + ); + + ObjectMap tars = ObjectMap.of( + Blocks.sporeMoss, Blocks.shale, + Blocks.moss, Blocks.shale + ); + + float water = 0; + + float rawHeight(Vec3 position){ + position = Tmp.v33.set(position).scl(scl); + return (Mathf.pow(Simplex.noise3d(seed, 7, 0.5f, 1f/3f, position.x, position.y, position.z), 2.3f) + waterOffset) / (1f + waterOffset); + } + + @Override + public void generateSector(Sector sector){ + + //these always have bases + if(sector.id == 154 || sector.id == 0){ + sector.generateEnemyBase = true; + return; + } + + Ptile tile = sector.tile; + + boolean any = false; + float poles = Math.abs(tile.v.y); + float noise = Noise.snoise3(tile.v.x, tile.v.y, tile.v.z, 0.001f, 0.58f); + + if(noise + poles/7.1 > 0.12 && poles > 0.23){ + any = true; + } + + if(noise < 0.16){ + for(Ptile other : tile.tiles){ + var osec = sector.planet.getSector(other); + + //no sectors near start sector! + if( + osec.id == sector.planet.startSector || //near starting sector + osec.generateEnemyBase && poles < 0.85 || //near other base + (sector.preset != null && noise < 0.11) //near preset + ){ + return; + } + } + } + + sector.generateEnemyBase = any; + } + + @Override + public float getHeight(Vec3 position){ + float height = rawHeight(position); + return Math.max(height, water); + } + + @Override + public Color getColor(Vec3 position){ + Block block = getBlock(position); + //replace salt with sand color + if(block == Blocks.salt) return Blocks.sand.mapColor; + return Tmp.c1.set(block.mapColor).a(1f - block.albedo); + } + + @Override + public void genTile(Vec3 position, TileGen tile){ + tile.floor = getBlock(position); + tile.block = tile.floor.asFloor().wall; + + if(Ridged.noise3d(1, position.x, position.y, position.z, 2, 22) > 0.31){ + tile.block = Blocks.air; + } + } + + Block getBlock(Vec3 position){ + float height = rawHeight(position); + Tmp.v31.set(position); + position = Tmp.v33.set(position).scl(scl); + float rad = scl; + float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad)); + float tnoise = Simplex.noise3d(seed, 7, 0.56, 1f/3f, position.x, position.y + 999f, position.z); + temp = Mathf.lerp(temp, tnoise, 0.5f); + height *= 1.2f; + height = Mathf.clamp(height); + + float tar = Simplex.noise3d(seed, 4, 0.55f, 1f/2f, position.x, position.y + 999f, position.z) * 0.3f + Tmp.v31.dst(0, 0, 1f) * 0.2f; + + Block res = arr[Mathf.clamp((int)(temp * arr.length), 0, arr[0].length - 1)][Mathf.clamp((int)(height * arr[0].length), 0, arr[0].length - 1)]; + return res; + } + + @Override + protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){ + Vec3 v = sector.rect.project(x, y).scl(5f); + return Simplex.noise3d(seed, octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag; + } + + @Override + protected void generate(){ + + class Room{ + int x, y, radius; + ObjectSet connected = new ObjectSet<>(); + + Room(int x, int y, int radius){ + this.x = x; + this.y = y; + this.radius = radius; + connected.add(this); + } + + void join(int x1, int y1, int x2, int y2){ + float nscl = rand.random(100f, 140f) * 6f; + int stroke = rand.random(3, 9); + brush(pathfind(x1, y1, x2, y2, tile -> (tile.solid() ? 50f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan), stroke); + } + + void connect(Room to){ + if(!connected.add(to) || to == this) return; + + Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f); + rand.nextFloat(); + + if(alt){ + midpoint.add(Tmp.v2.set(1, 0f).setAngle(Angles.angle(to.x, to.y, x, y) + 90f * (rand.chance(0.5) ? 1f : -1f)).scl(Tmp.v1.dst(x, y) * 2f)); + }else{ + //add randomized offset to avoid straight lines + midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y))); + } + + midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f); + + int mx = (int)midpoint.x, my = (int)midpoint.y; + + join(x, y, mx, my); + join(mx, my, to.x, to.y); + } + + void joinLiquid(int x1, int y1, int x2, int y2){ + float nscl = rand.random(100f, 140f) * 6f; + int rad = rand.random(5, 10); + int avoid = 2 + rad; + var path = pathfind(x1, y1, x2, y2, tile -> (tile.solid() || !tile.floor().isLiquid ? 70f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan); + path.each(t -> { + //don't place liquid paths near the core + if(Mathf.dst2(t.x, t.y, x2, y2) <= avoid * avoid){ + return; + } + + for(int x = -rad; x <= rad; x++){ + for(int y = -rad; y <= rad; y++){ + int wx = t.x + x, wy = t.y + y; + if(Structs.inBounds(wx, wy, width, height) && Mathf.within(x, y, rad)){ + Tile other = tiles.getn(wx, wy); + other.setBlock(Blocks.air); + if(Mathf.within(x, y, rad - 1) && !other.floor().isLiquid){ + Floor floor = other.floor(); + //TODO does not respect tainted floors + other.setFloor((Floor)(floor == Blocks.sand || floor == Blocks.salt ? Blocks.sandWater : Blocks.darksandTaintedWater)); + } + } + } + } + }); + } + + void connectLiquid(Room to){ + if(to == this) return; + + Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f); + rand.nextFloat(); + + //add randomized offset to avoid straight lines + midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y))); + midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f); + + int mx = (int)midpoint.x, my = (int)midpoint.y; + + joinLiquid(x, y, mx, my); + joinLiquid(mx, my, to.x, to.y); + } + } + + cells(4); + distort(10f, 12f); + + float constraint = 1.3f; + float radius = width / 2f / Mathf.sqrt3; + int rooms = rand.random(2, 5); + Seq roomseq = new Seq<>(); + + for(int i = 0; i < rooms; i++){ + Tmp.v1.trns(rand.random(360f), rand.random(radius / constraint)); + float rx = (width/2f + Tmp.v1.x); + float ry = (height/2f + Tmp.v1.y); + float maxrad = radius - Tmp.v1.len(); + float rrad = Math.min(rand.random(9f, maxrad / 2f), 30f); + roomseq.add(new Room((int)rx, (int)ry, (int)rrad)); + } + + //check positions on the map to place the player spawn. this needs to be in the corner of the map + Room spawn = null; + Seq enemies = new Seq<>(); + int enemySpawns = rand.random(1, Math.max((int)(sector.threat * 4), 1)); + int offset = rand.nextInt(360); + float length = width/2.55f - rand.random(13, 23); + int angleStep = 5; + int waterCheckRad = 5; + for(int i = 0; i < 360; i+= angleStep){ + int angle = offset + i; + int cx = (int)(width/2 + Angles.trnsx(angle, length)); + int cy = (int)(height/2 + Angles.trnsy(angle, length)); + + int waterTiles = 0; + + //check for water presence + for(int rx = -waterCheckRad; rx <= waterCheckRad; rx++){ + for(int ry = -waterCheckRad; ry <= waterCheckRad; ry++){ + Tile tile = tiles.get(cx + rx, cy + ry); + if(tile == null || tile.floor().liquidDrop != null){ + waterTiles ++; + } + } + } + + if(waterTiles <= 4 || (i + angleStep >= 360)){ + roomseq.add(spawn = new Room(cx, cy, rand.random(8, 15))); + + for(int j = 0; j < enemySpawns; j++){ + float enemyOffset = rand.range(60f); + Tmp.v1.set(cx - width/2, cy - height/2).rotate(180f + enemyOffset).add(width/2, height/2); + Room espawn = new Room((int)Tmp.v1.x, (int)Tmp.v1.y, rand.random(8, 16)); + roomseq.add(espawn); + enemies.add(espawn); + } + + break; + } + } + + //clear radius around each room + for(Room room : roomseq){ + erase(room.x, room.y, room.radius); + } + + //randomly connect rooms together + int connections = rand.random(Math.max(rooms - 1, 1), rooms + 3); + for(int i = 0; i < connections; i++){ + roomseq.random(rand).connect(roomseq.random(rand)); + } + + for(Room room : roomseq){ + spawn.connect(room); + } + + Room fspawn = spawn; + + cells(1); + + int tlen = tiles.width * tiles.height; + int total = 0, waters = 0; + + for(int i = 0; i < tlen; i++){ + Tile tile = tiles.geti(i); + if(tile.block() == Blocks.air){ + total ++; + if(tile.floor().liquidDrop == Liquids.water){ + waters ++; + } + } + } + + boolean naval = (float)waters / total >= 0.19f; + + //create water pathway if the map is flooded + if(naval){ + for(Room room : enemies){ + room.connectLiquid(spawn); + } + } + + distort(10f, 6f); + + //rivers + pass((x, y) -> { + if(block.solid) return; + + Vec3 v = sector.rect.project(x, y); + + float rr = Simplex.noise2d(sector.id, (float)2, 0.6f, 1f / 7f, x, y) * 0.1f; + float value = Ridged.noise3d(2, v.x, v.y, v.z, 1, 1f / 55f) + rr - rawHeight(v) * 0f; + float rrscl = rr * 44 - 2; + + if(value > 0.17f && !Mathf.within(x, y, fspawn.x, fspawn.y, 12 + rrscl)){ + boolean deep = value > 0.17f + 0.1f && !Mathf.within(x, y, fspawn.x, fspawn.y, 15 + rrscl); + boolean spore = floor != Blocks.sand && floor != Blocks.salt; + //do not place rivers on ice, they're frozen + //ignore pre-existing liquids + if(!(floor == Blocks.ice || floor == Blocks.iceSnow || floor == Blocks.snow || floor.asFloor().isLiquid)){ + floor = spore ? + (deep ? Blocks.taintedWater : Blocks.darksandTaintedWater) : + (deep ? Blocks.water : + (floor == Blocks.sand || floor == Blocks.salt ? Blocks.sandWater : Blocks.darksandWater)); + } + } + }); + + //shoreline setup + pass((x, y) -> { + int deepRadius = 3; + + if(floor.asFloor().isLiquid && floor.asFloor().shallow){ + + for(int cx = -deepRadius; cx <= deepRadius; cx++){ + for(int cy = -deepRadius; cy <= deepRadius; cy++){ + if((cx) * (cx) + (cy) * (cy) <= deepRadius * deepRadius){ + int wx = cx + x, wy = cy + y; + + Tile tile = tiles.get(wx, wy); + if(tile != null && (!tile.floor().isLiquid || tile.block() != Blocks.air)){ + //found something solid, skip replacing anything + return; + } + } + } + } + + floor = floor == Blocks.darksandTaintedWater ? Blocks.taintedWater : Blocks.water; + } + }); + + if(naval){ + int deepRadius = 2; + + //TODO code is very similar, but annoying to extract into a separate function + pass((x, y) -> { + if(floor.asFloor().isLiquid && !floor.asFloor().isDeep() && !floor.asFloor().shallow){ + + for(int cx = -deepRadius; cx <= deepRadius; cx++){ + for(int cy = -deepRadius; cy <= deepRadius; cy++){ + if((cx) * (cx) + (cy) * (cy) <= deepRadius * deepRadius){ + int wx = cx + x, wy = cy + y; + + Tile tile = tiles.get(wx, wy); + if(tile != null && (tile.floor().shallow || !tile.floor().isLiquid)){ + //found something shallow, skip replacing anything + return; + } + } + } + } + + floor = floor == Blocks.water ? Blocks.deepwater : Blocks.taintedWater; + } + }); + } + + Seq ores = Seq.with(Blocks.oreCopper, Blocks.oreLead); + float poles = Math.abs(sector.tile.v.y); + float nmag = 0.5f; + float scl = 1f; + float addscl = 1.3f; + + if(Simplex.noise3d(seed, 2, 0.5, scl, sector.tile.v.x, sector.tile.v.y, sector.tile.v.z)*nmag + poles > 0.25f*addscl){ + ores.add(Blocks.oreCoal); + } + + if(Simplex.noise3d(seed, 2, 0.5, scl, sector.tile.v.x + 1, sector.tile.v.y, sector.tile.v.z)*nmag + poles > 0.5f*addscl){ + ores.add(Blocks.oreTitanium); + } + + if(Simplex.noise3d(seed, 2, 0.5, scl, sector.tile.v.x + 2, sector.tile.v.y, sector.tile.v.z)*nmag + poles > 0.7f*addscl){ + ores.add(Blocks.oreThorium); + } + + FloatSeq frequencies = new FloatSeq(); + for(int i = 0; i < ores.size; i++){ + frequencies.add(rand.random(-0.1f, 0.01f) - i * 0.01f + poles * 0.04f); + } + + pass((x, y) -> { + if(!floor.asFloor().hasSurface()) return; + + int offsetX = x - 4, offsetY = y + 23; + for(int i = ores.size - 1; i >= 0; i--){ + Block entry = ores.get(i); + float freq = frequencies.get(i); + if(Math.abs(0.5f - noise(offsetX, offsetY + i*999, 2, 0.7, (40 + i * 2))) > 0.22f + i*0.01 && + Math.abs(0.5f - noise(offsetX, offsetY - i*999, 1, 1, (30 + i * 4))) > 0.37f + freq){ + ore = entry; + break; + } + } + + if(ore == Blocks.oreScrap && rand.chance(0.33)){ + floor = Blocks.metalFloorDamaged; + } + }); + + trimDark(); + + median(2); + + inverseFloodFill(tiles.getn(spawn.x, spawn.y)); + + tech(); + + pass((x, y) -> { + //random moss + if(floor == Blocks.sporeMoss){ + if(Math.abs(0.5f - noise(x - 90, y, 4, 0.8, 65)) > 0.02){ + floor = Blocks.moss; + } + } + + //tar + if(floor == Blocks.darksand){ + if(Math.abs(0.5f - noise(x - 40, y, 2, 0.7, 80)) > 0.25f && + Math.abs(0.5f - noise(x, y + sector.id*10, 1, 1, 60)) > 0.41f && !(roomseq.contains(r -> Mathf.within(x, y, r.x, r.y, 15)))){ + floor = Blocks.tar; + } + } + + //hotrock tweaks + if(floor == Blocks.hotrock){ + if(Math.abs(0.5f - noise(x - 90, y, 4, 0.8, 80)) > 0.035){ + floor = Blocks.basalt; + }else{ + ore = Blocks.air; + boolean all = true; + for(Point2 p : Geometry.d4){ + Tile other = tiles.get(x + p.x, y + p.y); + if(other == null || (other.floor() != Blocks.hotrock && other.floor() != Blocks.magmarock)){ + all = false; + } + } + if(all){ + floor = Blocks.magmarock; + } + } + }else if(genLakes && floor != Blocks.basalt && floor != Blocks.ice && floor.asFloor().hasSurface()){ + float noise = noise(x + 782, y, 5, 0.75f, 260f, 1f); + if(noise > 0.67f && !roomseq.contains(e -> Mathf.within(x, y, e.x, e.y, 14))){ + if(noise > 0.72f){ + floor = noise > 0.78f ? Blocks.taintedWater : (floor == Blocks.sand ? Blocks.sandWater : Blocks.darksandTaintedWater); + }else{ + floor = (floor == Blocks.sand ? floor : Blocks.darksand); + } + } + } + + if(rand.chance(0.0075)){ + //random spore trees + boolean any = false; + boolean all = true; + for(Point2 p : Geometry.d4){ + Tile other = tiles.get(x + p.x, y + p.y); + if(other != null && other.block() == Blocks.air){ + any = true; + }else{ + all = false; + } + } + if(any && ((block == Blocks.snowWall || block == Blocks.iceWall) || (all && block == Blocks.air && floor == Blocks.snow && rand.chance(0.03)))){ + block = rand.chance(0.5) ? Blocks.whiteTree : Blocks.whiteTreeDead; + } + } + + //random stuff + dec: { + for(int i = 0; i < 4; i++){ + Tile near = world.tile(x + Geometry.d4[i].x, y + Geometry.d4[i].y); + if(near != null && near.block() != Blocks.air){ + break dec; + } + } + + if(rand.chance(0.01) && floor.asFloor().hasSurface() && block == Blocks.air){ + block = dec.get(floor, floor.asFloor().decoration); + } + } + }); + + float difficulty = sector.threat; + ints.clear(); + ints.ensureCapacity(width * height / 4); + + int ruinCount = rand.random(-2, 4); + if(ruinCount > 0){ + int padding = 25; + + //create list of potential positions + for(int x = padding; x < width - padding; x++){ + for(int y = padding; y < height - padding; y++){ + Tile tile = tiles.getn(x, y); + if(!tile.solid() && (tile.drop() != null || tile.floor().liquidDrop != null)){ + ints.add(tile.pos()); + } + } + } + + ints.shuffle(rand); + + int placed = 0; + float diffRange = 0.4f; + //try each position + for(int i = 0; i < ints.size && placed < ruinCount; i++){ + int val = ints.items[i]; + int x = Point2.x(val), y = Point2.y(val); + + //do not overwrite player spawn + if(Mathf.within(x, y, spawn.x, spawn.y, 18f)){ + continue; + } + + float range = difficulty + rand.random(diffRange); + + Tile tile = tiles.getn(x, y); + BasePart part = null; + if(tile.overlay().itemDrop != null){ + part = bases.forResource(tile.drop()).getFrac(range); + }else if(tile.floor().liquidDrop != null && rand.chance(0.05)){ + part = bases.forResource(tile.floor().liquidDrop).getFrac(range); + }else if(rand.chance(0.05)){ //ore-less parts are less likely to occur. + part = bases.parts.getFrac(range); + } + + //actually place the part + if(part != null && BaseGenerator.tryPlace(part, x, y, Team.derelict, (cx, cy) -> { + Tile other = tiles.getn(cx, cy); + if(other.floor().hasSurface()){ + other.setOverlay(Blocks.oreScrap); + for(int j = 1; j <= 2; j++){ + for(Point2 p : Geometry.d8){ + Tile t = tiles.get(cx + p.x*j, cy + p.y*j); + if(t != null && t.floor().hasSurface() && rand.chance(j == 1 ? 0.4 : 0.2)){ + t.setOverlay(Blocks.oreScrap); + } + } + } + } + })){ + placed ++; + + int debrisRadius = Math.max(part.schematic.width, part.schematic.height)/2 + 3; + Geometry.circle(x, y, tiles.width, tiles.height, debrisRadius, (cx, cy) -> { + float dst = Mathf.dst(cx, cy, x, y); + float removeChance = Mathf.lerp(0.05f, 0.5f, dst / debrisRadius); + + Tile other = tiles.getn(cx, cy); + if(other.build != null && other.isCenter()){ + if(other.team() == Team.derelict && rand.chance(removeChance)){ + other.remove(); + }else if(rand.chance(0.5)){ + other.build.health = other.build.health - rand.random(other.build.health * 0.9f); + } + } + }); + } + } + } + + //remove invalid ores + for(Tile tile : tiles){ + if(tile.overlay().needsSurface && !tile.floor().hasSurface()){ + tile.setOverlay(Blocks.air); + } + } + + Schematics.placeLaunchLoadout(spawn.x, spawn.y); + + for(Room espawn : enemies){ + tiles.getn(espawn.x, espawn.y).setOverlay(Blocks.spawn); + } + + if(sector.hasEnemyBase()){ + basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector, difficulty); + + state.rules.attackMode = sector.info.attack = true; + }else{ + state.rules.winWave = sector.info.winWave = 10 + 5 * (int)Math.max(difficulty * 10, 1); + } + + float waveTimeDec = 0.4f; + + state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f)); + state.rules.waves = sector.info.waves = true; + state.rules.enemyCoreBuildRadius = 600f; + + //spawn air only when spawn is blocked + state.rules.spawns = Waves.generate(difficulty, new Rand(sector.id), state.rules.attackMode, state.rules.attackMode && spawner.countGroundSpawns() == 0, naval); + } + + @Override + public void postGenerate(Tiles tiles){ + if(sector.hasEnemyBase()){ + basegen.postGenerate(); + } + } +} \ No newline at end of file From 7520239fbf14070ed6be30f11b2b2cf32d50d1d1 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 23:34:57 -0300 Subject: [PATCH 52/61] why did anuke hav to swap these --- src/oblivion/ProjectOblivion.java | 2 +- src/oblivion/content/OblivionPlanets.java | 9 ++++----- src/oblivion/content/OblivionUnits.java | 6 +++--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/oblivion/ProjectOblivion.java b/src/oblivion/ProjectOblivion.java index 865095c..f298b91 100644 --- a/src/oblivion/ProjectOblivion.java +++ b/src/oblivion/ProjectOblivion.java @@ -33,7 +33,7 @@ public void loadContent(){ new OblivionUnits().load(); new OblivionEnvironment().load(); new OblivionBlocks().load(); - // new OblivionPlanets().load(); + new OblivionPlanets().load(); // new OblivionSectors().load(); // new OblivionTechTree().load(); } diff --git a/src/oblivion/content/OblivionPlanets.java b/src/oblivion/content/OblivionPlanets.java index d6a8907..bb60538 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 implements { 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/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java index b6fc87b..2a22a59 100644 --- a/src/oblivion/content/OblivionUnits.java +++ b/src/oblivion/content/OblivionUnits.java @@ -20,7 +20,7 @@ public class OblivionUnits{ slop, detra, tedri, taleni, kolete, pioli, taneki, notremite, dopretile, niboletra, phi, root, multi, pow, expo, - + republic, giga, archaranid, bloodmoon, yetinus; public void load() { @@ -115,9 +115,9 @@ public void load() { frontColor = OblivionPal.mesoMedium; backColor = OblivionPal.mesoDark; for (int i = 1; i <= 5; i++) { - float lifeFraction = lifetime / i; + float speedMultiplier 3f / i; spawnBullets.addAll( - new BasicBulletType(3f, 7) {{ + new BasicBulletType(speedMultiplier, 7) {{ width = height = 5f; lifetime = lifeFraction; frontColor = OblivionPal.mesoMedium; From 482c4af97ddb7259e763abd0d6185ed920fd769a Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 23:37:09 -0300 Subject: [PATCH 53/61] i forgot stuff --- src/oblivion/content/OblivionPlanets.java | 2 +- src/oblivion/content/OblivionUnits.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/oblivion/content/OblivionPlanets.java b/src/oblivion/content/OblivionPlanets.java index bb60538..ea8e8b6 100644 --- a/src/oblivion/content/OblivionPlanets.java +++ b/src/oblivion/content/OblivionPlanets.java @@ -8,7 +8,7 @@ import mindustry.graphics.g3d.*; import oblivion.planets.*; -public class OblivionPlanets implements { +public class OblivionPlanets { public static Planet berenit, lamoni, lonela; diff --git a/src/oblivion/content/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java index 2a22a59..19a79e0 100644 --- a/src/oblivion/content/OblivionUnits.java +++ b/src/oblivion/content/OblivionUnits.java @@ -115,7 +115,7 @@ public void load() { frontColor = OblivionPal.mesoMedium; backColor = OblivionPal.mesoDark; for (int i = 1; i <= 5; i++) { - float speedMultiplier 3f / i; + float speedMultiplier = 3f / i; spawnBullets.addAll( new BasicBulletType(speedMultiplier, 7) {{ width = height = 5f; From e6b6288319afc9a3e94832532ee3fea643910ec1 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sat, 14 May 2022 23:38:41 -0300 Subject: [PATCH 54/61] remove the stuff --- src/oblivion/content/OblivionUnits.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/oblivion/content/OblivionUnits.java b/src/oblivion/content/OblivionUnits.java index 19a79e0..ff2c344 100644 --- a/src/oblivion/content/OblivionUnits.java +++ b/src/oblivion/content/OblivionUnits.java @@ -119,7 +119,7 @@ public void load() { spawnBullets.addAll( new BasicBulletType(speedMultiplier, 7) {{ width = height = 5f; - lifetime = lifeFraction; + lifetime = 66.6f; frontColor = OblivionPal.mesoMedium; backColor = OblivionPal.mesoDark; }} From 1cfa089321893d9319c07931e74ca18e6dc36e7a Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sun, 15 May 2022 00:00:10 -0300 Subject: [PATCH 55/61] techtree --- src/oblivion/ProjectOblivion.java | 4 +- src/oblivion/content/OblivionSectors.java | 25 ++++ src/oblivion/content/OblivionTechTree.java | 133 +++++++++++++++++++++ 3 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 src/oblivion/content/OblivionSectors.java create mode 100644 src/oblivion/content/OblivionTechTree.java diff --git a/src/oblivion/ProjectOblivion.java b/src/oblivion/ProjectOblivion.java index f298b91..a026509 100644 --- a/src/oblivion/ProjectOblivion.java +++ b/src/oblivion/ProjectOblivion.java @@ -34,7 +34,7 @@ public void loadContent(){ new OblivionEnvironment().load(); new OblivionBlocks().load(); new OblivionPlanets().load(); - // new OblivionSectors().load(); - // new OblivionTechTree().load(); + new OblivionSectors().load(); + new OblivionTechTree().load(); } } diff --git a/src/oblivion/content/OblivionSectors.java b/src/oblivion/content/OblivionSectors.java new file mode 100644 index 0000000..6740423 --- /dev/null +++ b/src/oblivion/content/OblivionSectors.java @@ -0,0 +1,25 @@ +package oblivion.content; + +import mindustry.type.*; +import mindustry.ctype.*; +import oblivion.content.*; + +public class OblivionSectors { + public static SectorPreset + newWorld, oldTown; + + public void load(){ + newWorld = new SectorPreset("newWorld", OblivionPlanets.lonela, 15) {{ + alwaysUnlocked = true; + addStartingItems = true; + captureWave = 10; + difficulty = 1; + startWaveTimeMultiplier = 3f; + }}; + oldTown = new SectorPreset("oldTown", OblivionPlanets.lonela, 130) {{ + captureWave = 20; + difficulty = 2; + startWaveTimeMultiplier = 2f; + }}; + } +} diff --git a/src/oblivion/content/OblivionTechTree.java b/src/oblivion/content/OblivionTechTree.java new file mode 100644 index 0000000..356feae --- /dev/null +++ b/src/oblivion/content/OblivionTechTree.java @@ -0,0 +1,133 @@ +package oblivion.content; + +import arc.struct.*; +import arc.util.*; +import mindustry.entities.bullet.*; +import mindustry.game.Objectives.*; +import mindustry.type.*; +import mindustry.type.unit.*; +import mindustry.world.blocks.defense.turrets.*; + +import static mindustry.Vars.*; +import static mindustry.content.TechTree.*; + +public class OblivionTechtree { + + 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 SectorComplete(SectorPresets.stainedMountains))); + }); + nodeProduce(OblivionResources.copremite, Seq.with(new Produce(Items.sporePod)), () -> { + nodeProduce(OblivionResources.mothalate, Seq.with(new Produce(OblivionResources.carmanite))); + }); + }); + + // 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))); + }); + }); + + // turrets + 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))); + }); + }); + + // 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.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.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))); + }); + }); + }); + }); + + // sectors + 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) + )); + }); + + // skill issue + // t6 + extendNode(Blocks.tetrativeReconstructor, () -> { + node(OblivionBlocks.mandlebrotReconstructor, Seq.with(new Produce(OblivionResources.mothalate), new Research(UnitTypes.reign))); + }); + 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 From f99e72eef1e06640b6358a579852645a816226b0 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sun, 15 May 2022 00:02:44 -0300 Subject: [PATCH 56/61] , --- src/oblivion/content/OblivionTechTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/oblivion/content/OblivionTechTree.java b/src/oblivion/content/OblivionTechTree.java index 356feae..b11ce32 100644 --- a/src/oblivion/content/OblivionTechTree.java +++ b/src/oblivion/content/OblivionTechTree.java @@ -14,7 +14,7 @@ public class OblivionTechtree { public void load() { - OblivionPlanets.lonela.techTree = nodeRoot("lonela", OblivionBlocks.start, true () -> { + 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)), () -> { From d03c5744d2ebdcd6260933e0fecc608eee77e783 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sun, 15 May 2022 00:10:42 -0300 Subject: [PATCH 57/61] vanilla imports --- src/oblivion/content/OblivionTechTree.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/oblivion/content/OblivionTechTree.java b/src/oblivion/content/OblivionTechTree.java index b11ce32..3dbdc1c 100644 --- a/src/oblivion/content/OblivionTechTree.java +++ b/src/oblivion/content/OblivionTechTree.java @@ -2,6 +2,7 @@ import arc.struct.*; import arc.util.*; +import mindustry.content.*; import mindustry.entities.bullet.*; import mindustry.game.Objectives.*; import mindustry.type.*; @@ -11,7 +12,7 @@ import static mindustry.Vars.*; import static mindustry.content.TechTree.*; -public class OblivionTechtree { +public class OblivionTechTree { public void load() { OblivionPlanets.lonela.techTree = nodeRoot("lonela", OblivionBlocks.start, true, () -> { From 9828aa55bdfbba1f4e894e8cb46074bde9a83e2a Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sun, 15 May 2022 00:19:22 -0300 Subject: [PATCH 58/61] remove sector presets --- src/oblivion/content/OblivionTechTree.java | 46 +++++++--------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/src/oblivion/content/OblivionTechTree.java b/src/oblivion/content/OblivionTechTree.java index 3dbdc1c..5dcde25 100644 --- a/src/oblivion/content/OblivionTechTree.java +++ b/src/oblivion/content/OblivionTechTree.java @@ -19,7 +19,7 @@ public void load() { // 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 SectorComplete(SectorPresets.stainedMountains))); + 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))); @@ -38,20 +38,20 @@ public void load() { // turrets 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.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.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.corrosive, Seq.with(new Research(Blocks.salvo)), () -> { + node(OblivionBlocks.acidic, Seq.with(new Research(Blocks.scepter), new Research(Blocks.ripple))); }); }); node(OblivionBlocks.hammer, Seq.with(new Produce(OblivionResources.calenmite)), () -> { - node(OblivionBlocks.press, Seq.with(new SectorComplete(SectorPresets.craters))); + node(OblivionBlocks.press, Seq.with(new Research(Blocks.ripple))); }); }); @@ -99,36 +99,18 @@ public void load() { }); // sectors - 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) - )); + node(OblivionSectors.newWorld, Seq.with(new Research(OblivionBlocks.mesoForge)), () -> { + node(OblivionSectors.oldTown, Seq.with(new Research(OblivionBlocks.solfreniteFactory))); }); // skill issue // t6 - extendNode(Blocks.tetrativeReconstructor, () -> { - node(OblivionBlocks.mandlebrotReconstructor, Seq.with(new Produce(OblivionResources.mothalate), new Research(UnitTypes.reign))); - }); - 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))); - }); + 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))); }); } } \ No newline at end of file From f6c94672603d87741ea817a3f41c7f5a31ccb761 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sun, 15 May 2022 00:38:14 -0300 Subject: [PATCH 59/61] wha --- src/oblivion/content/OblivionTechTree.java | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/oblivion/content/OblivionTechTree.java b/src/oblivion/content/OblivionTechTree.java index 5dcde25..c1222a1 100644 --- a/src/oblivion/content/OblivionTechTree.java +++ b/src/oblivion/content/OblivionTechTree.java @@ -19,10 +19,10 @@ public void load() { // 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.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))); + nodeProduce(OblivionResources.mothalate, Seq.with(new Produce(OblivionResources.carmanite)), () -> {}); }); }); @@ -32,7 +32,7 @@ public void load() { node(OblivionBlocks.carbonicInfuser); }); node(OblivionBlocks.cloroSynthetizer, Seq.with(new Research(Blocks.cultivator)), () -> { - node(OblivionBlocks.moloniteSmelter, Seq.with(new Research(OblivionBlocks.carbonicInfuser))); + node(OblivionBlocks.moloniteSmelter, Seq.with(new Research(OblivionBlocks.carbonicInfuser)), () -> {}); }); }); @@ -41,13 +41,13 @@ public void load() { 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.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 Research(Blocks.salvo)), () -> { - node(OblivionBlocks.acidic, Seq.with(new Research(Blocks.scepter), new Research(Blocks.ripple))); + node(OblivionBlocks.acidic, Seq.with(new Research(Blocks.scepter), new Research(Blocks.ripple)), () -> {}); }); }); node(OblivionBlocks.hammer, Seq.with(new Produce(OblivionResources.calenmite)), () -> { @@ -72,7 +72,7 @@ public void load() { 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(OblivionUnits.niboletra, Seq.with(new Research(OblivionBlocks.omegaReconstructor)), () -> {}); }); }); }); @@ -83,7 +83,7 @@ public void load() { 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(OblivionUnits.expo, Seq.with(new Research(OblivionBlocks.omegaReconstructor)), () -> {}); }); }); }); @@ -92,7 +92,7 @@ public void load() { 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)), () -> {}); }); }); }); @@ -100,17 +100,17 @@ public void load() { // sectors node(OblivionSectors.newWorld, Seq.with(new Research(OblivionBlocks.mesoForge)), () -> { - node(OblivionSectors.oldTown, Seq.with(new Research(OblivionBlocks.solfreniteFactory))); + node(OblivionSectors.oldTown, Seq.with(new Research(OblivionBlocks.solfreniteFactory)), () -> {}); }); // 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))); + 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)), () -> {}); }); } } \ No newline at end of file From bf4b8a9f52f1c3960b10b63e4973a78fab4958b4 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sun, 15 May 2022 00:45:02 -0300 Subject: [PATCH 60/61] how --- src/oblivion/content/OblivionTechTree.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/oblivion/content/OblivionTechTree.java b/src/oblivion/content/OblivionTechTree.java index c1222a1..95e9046 100644 --- a/src/oblivion/content/OblivionTechTree.java +++ b/src/oblivion/content/OblivionTechTree.java @@ -40,18 +40,18 @@ public void load() { 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.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 Research(Blocks.salvo)), () -> { - node(OblivionBlocks.acidic, Seq.with(new Research(Blocks.scepter), new Research(Blocks.ripple)), () -> {}); + node(OblivionBlocks.acidic, Seq.with(new Research(Blocks.spectre), new Research(Blocks.ripple)), () -> {}); }); }); node(OblivionBlocks.hammer, Seq.with(new Produce(OblivionResources.calenmite)), () -> { - node(OblivionBlocks.press, Seq.with(new Research(Blocks.ripple))); + node(OblivionBlocks.press, Seq.with(new Research(Blocks.ripple)), () -> {}); }); }); @@ -62,7 +62,7 @@ public void load() { 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(OblivionUnits.kolete, Seq.with(new Research(OblivionBlocks.omegaReconstructor)), () -> {}); }); }); }); @@ -105,7 +105,7 @@ public void load() { // skill issue // t6 - node(OblivionBlocks.mandlebrotReconstructor, Seq.with(new Produce(OblivionResources.mothalate), new Research(UnitTypes.reign))); + 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)), () -> {}); From 474dcd7133bfd6aff63f7f2c6e04961153b85494 Mon Sep 17 00:00:00 2001 From: uujuju1 Date: Sun, 15 May 2022 01:03:58 -0300 Subject: [PATCH 61/61] start tha techtree --- src/oblivion/content/OblivionBlocks.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/oblivion/content/OblivionBlocks.java b/src/oblivion/content/OblivionBlocks.java index 222d709..217d1a4 100644 --- a/src/oblivion/content/OblivionBlocks.java +++ b/src/oblivion/content/OblivionBlocks.java @@ -70,6 +70,7 @@ public void load() { Items.copper, 50, Items.lead, 80 )); + alwaysUnlocked = true; size = 3; health = 200; craftTime = 30f; @@ -894,7 +895,7 @@ OblivionResources.calenmite, new ArtilleryBulletType(2.5f, 35) {{ }}; mantlePulverizer = new GenericCrafter("mantle-pulverizer") {{ - requirements(Category.production, with( + requirements(Category.crafting, with( OblivionResources.niobium, 200 )); health = 200;