From 858791de3b881b5304fafd0675fce4d5ce51451d Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 18 Nov 2017 20:40:04 -0500 Subject: [PATCH] Changed to use new effects system --- build.gradle | 2 +- core/assets-raw/sprites/blocks/block-2x2.png | Bin 201 -> 254 bytes core/assets-raw/sprites/chainbullet.png | Bin 0 -> 203 bytes core/assets-raw/sprites/shell.png | Bin 0 -> 221 bytes core/assets-raw/sprites/titanshell.png | Bin 0 -> 224 bytes core/assets/sprites/sprites.atlas | 241 +++++++------ core/assets/sprites/sprites.png | Bin 46644 -> 47014 bytes core/src/io/anuke/mindustry/Control.java | 16 +- .../src/io/anuke/mindustry/EffectCreator.java | 301 ---------------- core/src/io/anuke/mindustry/Fx.java | 332 ++++++++++++++++++ core/src/io/anuke/mindustry/Vars.java | 4 + core/src/io/anuke/mindustry/ai/Pathfind.java | 5 +- .../anuke/mindustry/entities/BulletType.java | 71 +++- .../io/anuke/mindustry/entities/Player.java | 3 +- .../anuke/mindustry/entities/TileEntity.java | 3 +- .../mindustry/entities/effect/DamageArea.java | 45 ++- .../anuke/mindustry/entities/effect/EMP.java | 3 +- .../mindustry/entities/effect/TeslaOrb.java | 3 +- .../mindustry/entities/enemies/Enemy.java | 3 +- .../io/anuke/mindustry/resource/Weapon.java | 11 +- core/src/io/anuke/mindustry/world/Block.java | 4 +- core/src/io/anuke/mindustry/world/World.java | 9 +- .../anuke/mindustry/world/blocks/Blocks.java | 7 +- .../world/blocks/ProductionBlocks.java | 5 +- .../mindustry/world/blocks/WeaponBlocks.java | 74 ++-- .../blocks/types/defense/LaserTurret.java | 4 +- .../world/blocks/types/defense/Turret.java | 6 +- .../blocks/types/production/Crafter.java | 3 +- .../world/blocks/types/production/Drill.java | 3 +- .../blocks/types/production/Generator.java | 9 +- .../types/production/ItemPowerGenerator.java | 3 +- .../types/production/LiquidCrafter.java | 4 +- .../production/LiquidPowerGenerator.java | 4 +- .../anuke/ucore/function/EffectProvider.java | 4 +- desktop/mindustry-saves/0.mins | Bin 4450 -> 1591 bytes desktop/mindustry-saves/1.mins | Bin 3159 -> 2375 bytes 36 files changed, 678 insertions(+), 504 deletions(-) create mode 100644 core/assets-raw/sprites/chainbullet.png create mode 100644 core/assets-raw/sprites/shell.png create mode 100644 core/assets-raw/sprites/titanshell.png delete mode 100644 core/src/io/anuke/mindustry/EffectCreator.java create mode 100644 core/src/io/anuke/mindustry/Fx.java diff --git a/build.gradle b/build.gradle index 8072bd94a8..9fc594f5f5 100644 --- a/build.gradle +++ b/build.gradle @@ -79,7 +79,7 @@ project(":core") { apply plugin: "java" dependencies { - compile 'com.github.anuken:ucore:ea3563b5e4' + compile 'com.github.anuken:ucore:e8865d2b26' compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-ai:1.8.1" } diff --git a/core/assets-raw/sprites/blocks/block-2x2.png b/core/assets-raw/sprites/blocks/block-2x2.png index b257fe47abf9969ebbe23ec355e22218d295b941..e8651c2bd8e54c35eb1e123f8e36a816f4d7855b 100644 GIT binary patch delta 161 zcmX@f_>Xad3O`$tx4R3&e-K=-clqRriV7TpEYiGj<~7qNdTLasdAc};Xq?|V@gVO3 z0}kfQBhzK~RFoyNi@j*>Z*`fvWbOPLCz^IYo0Fz?I;foefbzZmjwH?YOL_|*@!gzK zR9enco@dS@SonQv#y5G>Kl=j?lvW*Yj4b>Av#F$OmdKI;Vst0JbVd_y7O^ delta 136 zcmeyzc#?5~iYjM;M`SSr1Gg{;GcwGYBf-GHz+U3%>&pI+n^Q!XQ-b4N+r(&%2xm_h z#}JM4$#bmB_4M`inJ+dxJ=o07#l_{a>et*z`(%Z>FVdQ&MBb@0PCwP4*&oF diff --git a/core/assets-raw/sprites/chainbullet.png b/core/assets-raw/sprites/chainbullet.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf12283747638c5199f98ca718b8e1ac126718e GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2U|{E9V_;w~jpT`AU|?WN@^*J&_z!{$_AZ~y zz`(#+;1OBOz`!jG!i)^F=173_lz95OvOnY&WD#flZBoC1fq_A?#5JPCIX^cyHLrxh zxhOTUBsE2$JhLQ2!QIn0AiR-JoPmMC*we)^gyZ_!zKy&L20Vuf{_p4GTNG?n+N0jm z+OnnXE#Ee4+eufp?H4>SbHbBO6{Z_M%NWfS#UGd}uG-7Mz`)??>gTe~DWM4fgatcn literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/shell.png b/core/assets-raw/sprites/shell.png new file mode 100644 index 0000000000000000000000000000000000000000..747f735e656c9ad881d0223ad802edff182c9aeb GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4mJh`h9ms@x)~T4*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l<_tx1lU>kGxF|YU|^6eag8W(&d<$F%`0JW zE=o--Nlj5G&n(GMaQE~L2yf&QXJBA(^>lFzk+|I2@5pt)frrWWMfs=y^)uLg^?9ef zoi=y!3J$gf3wKXkva0LjI@KQ{#j}LhMQ!_e*leZnfwHF`r>tkc_0r<*9!A@|@HJvV ThyE}yFfe$!`njxgN@xNABCSWk literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/titanshell.png b/core/assets-raw/sprites/titanshell.png new file mode 100644 index 0000000000000000000000000000000000000000..7f90039999901045bd5c8cab807981449d3ce3e8 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4mJh`h9ms@x)~T4*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l<_txMA_IZZ>(R%z`!6`;u=xnoS&PUnpeW$ zT$GwvlA5AWo>`Ki;O^-g5Z=fq&cMLn;pyTSB5}F3e(583CUuWuWM|;i+bD3@*jN8JDb literal 0 HcmV?d00001 diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index e5969a0be7..f526adfc48 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -13,7 +13,7 @@ backgrounds/background index: -1 blank rotate: false - xy: 395, 231 + xy: 379, 256 size: 1, 1 orig: 1, 1 offset: 0, 0 @@ -55,98 +55,98 @@ blocks/chainturret-icon index: -1 blocks/coal1 rotate: false - xy: 502, 493 + xy: 498, 424 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coal2 rotate: false - xy: 498, 423 + xy: 395, 234 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coal3 rotate: false - xy: 395, 234 + xy: 432, 424 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coaldrill rotate: false - xy: 432, 424 + xy: 276, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coalgenerator rotate: false - xy: 276, 119 + xy: 286, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coalpurifier rotate: false - xy: 286, 119 + xy: 296, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/combustiongenerator rotate: false - xy: 296, 119 + xy: 306, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/compositewall rotate: false - xy: 306, 119 + xy: 316, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduit rotate: false - xy: 316, 119 + xy: 326, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduitbottom rotate: false - xy: 326, 119 + xy: 336, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduitliquid rotate: false - xy: 336, 119 + xy: 346, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduittop rotate: false - xy: 346, 116 + xy: 356, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conveyor rotate: false - xy: 356, 116 + xy: 366, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conveyormove rotate: false - xy: 366, 116 + xy: 474, 415 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -160,14 +160,14 @@ blocks/core index: -1 blocks/cross rotate: false - xy: 474, 415 + xy: 484, 415 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/crucible rotate: false - xy: 484, 415 + xy: 494, 414 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -181,28 +181,28 @@ blocks/deepwater index: -1 blocks/dirt1 rotate: false - xy: 494, 413 + xy: 228, 22 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt2 rotate: false - xy: 228, 22 + xy: 228, 12 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt3 rotate: false - xy: 228, 12 + xy: 226, 2 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirtblock rotate: false - xy: 226, 2 + xy: 375, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -223,14 +223,14 @@ blocks/doubleturret index: -1 blocks/drill rotate: false - xy: 375, 192 + xy: 375, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/duriumwall rotate: false - xy: 375, 182 + xy: 373, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -244,7 +244,7 @@ blocks/duriumwall-large index: -1 blocks/duriumwall-large-icon rotate: false - xy: 373, 172 + xy: 385, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -258,35 +258,35 @@ blocks/flameturret index: -1 blocks/grass1 rotate: false - xy: 388, 221 + xy: 395, 215 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass2 rotate: false - xy: 398, 224 + xy: 385, 210 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass3 rotate: false - xy: 405, 234 + xy: 395, 205 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock rotate: false - xy: 408, 224 + xy: 385, 200 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock2 rotate: false - xy: 398, 214 + xy: 385, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -300,42 +300,42 @@ blocks/grassedge index: -1 blocks/iron1 rotate: false - xy: 401, 298 + xy: 390, 160 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron2 rotate: false - xy: 401, 288 + xy: 390, 150 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron3 rotate: false - xy: 401, 278 + xy: 401, 358 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/irondrill rotate: false - xy: 401, 268 + xy: 401, 348 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/ironwall rotate: false - xy: 401, 258 + xy: 401, 338 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/junction rotate: false - xy: 411, 360 + xy: 401, 328 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -349,7 +349,7 @@ blocks/laserturret index: -1 blocks/lava rotate: false - xy: 411, 350 + xy: 401, 318 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -363,21 +363,21 @@ blocks/lavaedge index: -1 blocks/liquiditemjunction rotate: false - xy: 411, 340 + xy: 401, 308 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/liquidjunction rotate: false - xy: 411, 330 + xy: 401, 298 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/liquidrouter rotate: false - xy: 411, 320 + xy: 401, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -405,14 +405,14 @@ blocks/mortarturret index: -1 blocks/mossblock rotate: false - xy: 411, 300 + xy: 401, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/mossstone rotate: false - xy: 411, 300 + xy: 401, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -426,7 +426,7 @@ blocks/nuclearreactor index: -1 blocks/nuclearreactor-icon rotate: false - xy: 411, 280 + xy: 411, 360 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -440,7 +440,7 @@ blocks/nuclearreactor-small index: -1 blocks/oil rotate: false - xy: 411, 270 + xy: 411, 350 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -454,14 +454,14 @@ blocks/oiledge index: -1 blocks/oilrefinery rotate: false - xy: 411, 260 + xy: 411, 340 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/omnidrill rotate: false - xy: 230, 119 + xy: 411, 330 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -475,42 +475,42 @@ blocks/plasmaturret index: -1 blocks/powerbooster rotate: false - xy: 230, 109 + xy: 411, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/poweredconveyor rotate: false - xy: 240, 119 + xy: 411, 310 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/poweredconveyormove rotate: false - xy: 230, 99 + xy: 411, 300 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/powerlaser rotate: false - xy: 240, 109 + xy: 411, 290 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/powerlaserrouter rotate: false - xy: 230, 89 + xy: 411, 280 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pump rotate: false - xy: 240, 99 + xy: 411, 270 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -524,35 +524,35 @@ blocks/repairturret index: -1 blocks/rock rotate: false - xy: 240, 89 + xy: 405, 234 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rock2 rotate: false - xy: 230, 69 + xy: 405, 224 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rock2shadow rotate: false - xy: 240, 79 + xy: 405, 214 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rockshadow rotate: false - xy: 230, 59 + xy: 405, 204 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/router rotate: false - xy: 240, 69 + xy: 405, 194 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -566,70 +566,70 @@ blocks/shadow index: -1 blocks/shieldgenerator rotate: false - xy: 230, 49 + xy: 405, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/shotgunturret rotate: false - xy: 498, 481 + xy: 498, 482 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/shrub rotate: false - xy: 240, 49 + xy: 240, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/shrubshadow rotate: false - xy: 240, 39 + xy: 230, 99 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/smelter rotate: false - xy: 250, 115 + xy: 240, 109 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sniperturret rotate: false - xy: 498, 469 + xy: 498, 470 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/sorter rotate: false - xy: 260, 115 + xy: 230, 89 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelconveyor rotate: false - xy: 250, 105 + xy: 240, 99 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelconveyormove rotate: false - xy: 250, 95 + xy: 230, 79 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelwall rotate: false - xy: 260, 105 + xy: 240, 89 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -643,49 +643,49 @@ blocks/stone index: -1 blocks/stone1 rotate: false - xy: 250, 85 + xy: 230, 69 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone2 rotate: false - xy: 260, 95 + xy: 240, 79 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone3 rotate: false - xy: 250, 75 + xy: 230, 59 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock rotate: false - xy: 260, 85 + xy: 240, 69 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock2 rotate: false - xy: 250, 65 + xy: 230, 49 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock3 rotate: false - xy: 260, 75 + xy: 240, 59 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stonedrill rotate: false - xy: 250, 55 + xy: 230, 39 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -699,28 +699,28 @@ blocks/stoneedge index: -1 blocks/stonewall rotate: false - xy: 260, 65 + xy: 240, 49 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/teleporter rotate: false - xy: 250, 45 + xy: 240, 39 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/teleporter-top rotate: false - xy: 260, 55 + xy: 250, 115 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/thermalgenerator rotate: false - xy: 260, 45 + xy: 260, 115 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -734,56 +734,56 @@ blocks/titancannon index: -1 blocks/titancannon-icon rotate: false - xy: 498, 457 + xy: 498, 458 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/titanium1 rotate: false - xy: 250, 35 + xy: 250, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium2 rotate: false - xy: 260, 35 + xy: 250, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium3 rotate: false - xy: 270, 109 + xy: 260, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumdrill rotate: false - xy: 270, 99 + xy: 250, 85 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumpurifier rotate: false - xy: 280, 109 + xy: 260, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumshieldwall rotate: false - xy: 270, 89 + xy: 250, 75 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumwall rotate: false - xy: 280, 99 + xy: 260, 85 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -797,49 +797,49 @@ blocks/titaniumwall-large index: -1 blocks/titaniumwall-large-icon rotate: false - xy: 290, 109 + xy: 250, 65 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/turret rotate: false - xy: 498, 445 + xy: 498, 446 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/uranium1 rotate: false - xy: 280, 89 + xy: 260, 65 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium2 rotate: false - xy: 290, 99 + xy: 250, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium3 rotate: false - xy: 300, 109 + xy: 260, 55 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uraniumdrill rotate: false - xy: 270, 69 + xy: 260, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/water rotate: false - xy: 280, 79 + xy: 250, 35 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -853,7 +853,7 @@ blocks/wateredge index: -1 blocks/waveturret rotate: false - xy: 498, 433 + xy: 498, 434 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -865,6 +865,13 @@ bullet orig: 8, 8 offset: 0, 0 index: -1 +chainbullet + rotate: false + xy: 502, 494 + size: 8, 7 + orig: 8, 7 + offset: 0, 0 + index: -1 circle rotate: false xy: 359, 220 @@ -1098,56 +1105,56 @@ enemies/titanenemy-t3 index: -1 enemyarrow rotate: false - xy: 385, 231 + xy: 395, 225 size: 8, 7 orig: 8, 7 offset: 0, 0 index: -1 icon-coal rotate: false - xy: 408, 214 + xy: 395, 195 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-dirium rotate: false - xy: 401, 358 + xy: 385, 180 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-iron rotate: false - xy: 401, 348 + xy: 395, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-steel rotate: false - xy: 401, 338 + xy: 383, 170 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-stone rotate: false - xy: 401, 328 + xy: 380, 160 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-titanium rotate: false - xy: 401, 318 + xy: 380, 150 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-uranium rotate: false - xy: 401, 308 + xy: 395, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1173,16 +1180,30 @@ mechs/player orig: 12, 12 offset: 0, 0 index: -1 +shell + rotate: false + xy: 405, 184 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 shot rotate: false - xy: 240, 59 + xy: 230, 119 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shot-long rotate: false - xy: 230, 39 + xy: 230, 109 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +titanshell + rotate: false + xy: 260, 75 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1534,14 +1555,14 @@ ui/scroll-knob-vertical index: -1 ui/selection rotate: false - xy: 379, 256 + xy: 382, 256 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 ui/separator rotate: false - xy: 382, 256 + xy: 350, 170 size: 1, 1 orig: 1, 1 offset: 0, 0 @@ -1629,35 +1650,35 @@ weapons/blaster index: -1 weapons/flamer rotate: false - xy: 378, 221 + xy: 385, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/mortar rotate: false - xy: 411, 310 + xy: 401, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/multigun rotate: false - xy: 411, 290 + xy: 401, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/railgun rotate: false - xy: 230, 79 + xy: 411, 260 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/triblaster rotate: false - xy: 270, 79 + xy: 250, 55 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 8e09d1348ee3cd420f6bbc7698a2b54fd568da0f..ec1a0b28cefb0aee55b4eabd12f417cea9688b49 100644 GIT binary patch literal 47014 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%0A9#zRWOx|Ci#gCqC~FywWcM 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 literal 46644 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 QmCSU&i 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 rAjj|p#I`IP*Ilv?FjaC^>bP0l+XkK{?54( diff --git a/core/src/io/anuke/mindustry/Control.java b/core/src/io/anuke/mindustry/Control.java index 7937eafecc..d7cf48a26d 100644 --- a/core/src/io/anuke/mindustry/Control.java +++ b/core/src/io/anuke/mindustry/Control.java @@ -56,6 +56,8 @@ public class Control extends Module{ UCore.log("Total blocks loaded: " + Block.getAllBlocks().size); + Draw.setCircleVertices(14); + Gdx.input.setCatchBackKey(true); if(android){ @@ -237,14 +239,15 @@ public class Control extends Module{ for(int i = 0; i < spawnamount; i ++){ int index = i; + float range = 8f; Timers.run(index*50f, ()->{ try{ Constructor c = ClassReflection.getConstructor(spawn.type, int.class); Enemy enemy = (Enemy)c.newInstance(fl); - enemy.set(tile.worldx(), tile.worldy()); + enemy.set(tile.worldx() + Mathf.range(range), tile.worldy() + Mathf.range(range)); enemy.tier = spawn.tier(wave, fl); - Effects.effect("spawn", enemy); + Effects.effect(Fx.spawn, enemy); enemy.add(); enemies ++; @@ -294,10 +297,10 @@ public class Control extends Module{ Tile core = World.core; for(int i = 0; i < 16; i ++){ Timers.run(i*2, ()->{ - Effects.effect("explosion", core.worldx()+Mathf.range(40), core.worldy()+Mathf.range(40)); + Effects.effect(Fx.explosion, core.worldx()+Mathf.range(40), core.worldy()+Mathf.range(40)); }); } - Effects.effect("coreexplosion", core.worldx(), core.worldy()); + Effects.effect(Fx.coreexplosion, core.worldx(), core.worldy()); Timers.run(60, ()->{ ui.showRestart(); @@ -393,8 +396,6 @@ public class Control extends Module{ Entities.setCollider(tilesize, (x, y)->{ return World.solid(x, y); }); - - EffectCreator.create(); } @Override @@ -402,7 +403,8 @@ public class Control extends Module{ if(debug){ if(Inputs.keyUp(Keys.P)){ - Effects.effect("blockexplosion", player); + Effects.effect(Fx.shellsmoke, player); + Effects.effect(Fx.shellexplosion, player); } if(Inputs.keyUp(Keys.C)){ diff --git a/core/src/io/anuke/mindustry/EffectCreator.java b/core/src/io/anuke/mindustry/EffectCreator.java deleted file mode 100644 index c24be63794..0000000000 --- a/core/src/io/anuke/mindustry/EffectCreator.java +++ /dev/null @@ -1,301 +0,0 @@ -package io.anuke.mindustry; - -import static io.anuke.mindustry.Vars.respawnduration; - -import com.badlogic.gdx.graphics.Color; - -import io.anuke.ucore.core.Draw; -import io.anuke.ucore.core.Effects; -import io.anuke.ucore.graphics.Hue; -import io.anuke.ucore.util.Angles; -import io.anuke.ucore.util.Mathf; - -public class EffectCreator{ - static Color lightRed = Hue.mix(Color.WHITE, Color.FIREBRICK, 0.1f); - static Color lightOrange = Color.valueOf("f68021"); - - public static void create(){ - - Effects.create("generatorexplosion", 28, e -> { - Angles.randLenVectors(e.id, 16, 10f + e.ifract()*8f, (x, y)->{ - float size = e.fract()*12f + 1f; - Draw.color(Color.WHITE, lightOrange, e.ifract()); - Draw.rect("circle", e.x + x, e.y + y, size, size); - Draw.reset(); - }); - }); - - Effects.create("chainshot", 9f, e -> { - Draw.color(Color.WHITE, lightOrange, e.ifract()); - Draw.thick(e.fract()*4f); - Draw.lineAngle(e.x, e.y, e.rotation, e.fract()*7f); - Draw.thick(e.fract()*2f); - Draw.lineAngle(e.x, e.y, e.rotation, e.fract()*10f); - Draw.reset(); - }); - - Effects.create("shockwave", 10f, e -> { - Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.ifract()); - Draw.thick(e.fract()*2f + 0.2f); - Draw.circle(e.x, e.y, e.ifract()*28f); - Draw.reset(); - }); - - Effects.create("empshockwave", 7f, e -> { - Draw.color(Color.WHITE, Color.SKY, e.ifract()); - Draw.thick(e.fract()*2f); - Draw.circle(e.x, e.y, e.ifract()*40f); - Draw.reset(); - }); - - Effects.create("empspark", 13, e -> { - Angles.randLenVectors(e.id, 7, 1f + e.ifract()*12f, (x, y)->{ - float len = 1f+e.fract()*6f; - Draw.color(Color.SKY); - Draw.lineAngle(e.x + x, e.y + y, Mathf.atan2(x, y), len); - Draw.reset(); - }); - }); - - Effects.create("shellsmoke", 21, e -> { - Angles.randLenVectors(e.id, 8, 1f + e.ifract()*16f, (x, y)->{ - float size = 2f+e.fract()*5f; - Draw.color(Color.LIGHT_GRAY, Color.DARK_GRAY, e.ifract()); - Draw.rect("circle", e.x + x, e.y + y, size, size); - Draw.reset(); - }); - }); - - Effects.create("blastsmoke", 26, e -> { - Angles.randLenVectors(e.id, 12, 1f + e.ifract()*23f, (x, y)->{ - float size = 2f+e.fract()*6f; - Draw.color(Color.LIGHT_GRAY, Color.DARK_GRAY, e.ifract()); - Draw.rect("circle", e.x + x, e.y + y, size, size); - Draw.reset(); - }); - }); - - Effects.create("lava", 18, e -> { - Angles.randLenVectors(e.id, 3, 1f + e.ifract()*10f, (x, y)->{ - float size = e.sfract()*4f; - Draw.color(Color.ORANGE, Color.GRAY, e.ifract()); - Draw.rect("circle", e.x + x, e.y + y, size, size); - Draw.reset(); - }); - }); - - Effects.create("lavabubble", 45f, e -> { - Draw.color(Color.ORANGE); - float scl = 0.35f; - Draw.thick(1f - Mathf.clamp(e.ifract() - (1f-scl)) * (1f/scl)); - Draw.circle(e.x, e.y, e.ifract()*4f); - Draw.reset(); - }); - - Effects.create("oilbubble", 64f, e -> { - Draw.color(Color.DARK_GRAY); - float scl = 0.25f; - Draw.thick(1f - Mathf.clamp(e.ifract() - (1f-scl)) * (1f/scl)); - Draw.circle(e.x, e.y, e.ifract()*3f); - Draw.reset(); - }); - - Effects.create("shellexplosion", 15, e -> { - Draw.thickness(1.3f - e.ifract()); - Draw.color(Color.WHITE, Color.ORANGE, e.ifract()); - Draw.circle(e.x, e.y, 1f + e.ifract() * 7f); - Draw.reset(); - }); - - Effects.create("blastexplosion", 16, e -> { - Draw.thickness(1.2f - e.ifract()); - Draw.color(Color.WHITE, Color.SCARLET, e.ifract()); - Draw.circle(e.x, e.y, 1.5f + e.ifract() * 9f); - Draw.reset(); - }); - - Effects.create("place", 16, e -> { - Draw.thickness(3f - e.ifract() * 2f); - Draw.square(e.x, e.y, Vars.tilesize / 2f + e.ifract() * 3f); - Draw.reset(); - }); - - Effects.create("purify", 10, e -> { - Draw.color(Color.ROYAL, Color.GRAY, e.ifract()); - Draw.thickness(2f); - Draw.spikes(e.x, e.y, e.ifract() * 4f, 2, 6); - Draw.reset(); - }); - - Effects.create("purifyoil", 10, e -> { - Draw.color(Color.BLACK, Color.GRAY, e.ifract()); - Draw.thickness(2f); - Draw.spikes(e.x, e.y, e.ifract() * 4f, 2, 6); - Draw.reset(); - }); - - Effects.create("generate", 11, e -> { - Draw.color(Color.ORANGE, Color.YELLOW, e.ifract()); - Draw.thickness(1f); - Draw.spikes(e.x, e.y, e.ifract() * 5f, 2, 8); - Draw.reset(); - }); - - Effects.create("spark", 10, e -> { - Draw.thickness(1f); - Draw.color(Color.WHITE, Color.GRAY, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 5f, 2, 8); - Draw.reset(); - }); - - Effects.create("sparkbig", 11, e -> { - Draw.thickness(1f); - Draw.color(lightRed, Color.GRAY, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 5f, 2.3f, 8); - Draw.reset(); - }); - - Effects.create("smelt", 10, e -> { - Draw.thickness(1f); - Draw.color(Color.YELLOW, Color.RED, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 5f, 2, 8); - Draw.reset(); - }); - - Effects.create("break", 12, e -> { - Draw.thickness(2f); - Draw.color(Color.WHITE, Color.GRAY, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 5f, 2, 5); - Draw.reset(); - }); - - Effects.create("hit", 10, e -> { - Draw.thickness(1f); - Draw.color(Color.WHITE, Color.ORANGE, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 3f, 2, 8); - Draw.reset(); - }); - - Effects.create("laserhit", 10, e -> { - Draw.thickness(1f); - Draw.color(Color.WHITE, Color.SKY, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 2f, 2, 6); - Draw.reset(); - }); - - Effects.create("shoot", 8, e -> { - Draw.thickness(1f); - Draw.color(Color.WHITE, Color.GOLD, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 2f, 2, 5); - Draw.reset(); - }); - - Effects.create("shoot2", 8, e -> { - Draw.thickness(1f); - Draw.color(Color.WHITE, Color.SKY, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 2f, 1, 5); - Draw.reset(); - }); - - Effects.create("shoot3", 8, e -> { - Draw.thickness(1f); - Draw.color(Color.WHITE, Color.GOLD, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 2f, 1, 5); - Draw.reset(); - }); - - Effects.create("railshoot", 8, e -> { - Draw.thickness(2f - e.ifract()*2f); - Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.ifract()); - Draw.spikes(e.x, e.y, 1f + e.ifract() * 4f, 1, 5); - Draw.reset(); - }); - - Effects.create("mortarshoot", 9, e -> { - Draw.thickness(1.3f - e.ifract()); - Draw.color(Color.WHITE, Color.ORANGE, e.ifract()); - Draw.spikes(e.x, e.y, e.ifract() * 4f, 2, 6); - Draw.circle(e.x, e.y, e.ifract() * 5f + 1f); - Draw.reset(); - }); - - Effects.create("explosion", 11, e -> { - Draw.thickness(2f*e.fract()+0.5f); - Draw.color(Color.WHITE, Color.DARK_GRAY, e.powfract()); - Draw.circle(e.x, e.y, 5f + e.powfract() * 6f); - - Draw.color(e.ifract() < 0.5f ? Color.WHITE : Color.DARK_GRAY); - float rad = e.fract()*10f + 5f; - Angles.randLenVectors(e.id, 5, 8f, (x, y)->{ - Draw.rect("circle2", e.x + x, e.y + y, rad, rad); - }); - - Draw.reset(); - }); - - Effects.create("blockexplosion", 13, e -> { - Angles.randLenVectors(e.id+1, 8, 5f + e.ifract()*11f, (x, y)->{ - float size = 2f+e.fract()*8f; - Draw.color(Color.LIGHT_GRAY, Color.DARK_GRAY, e.ifract()); - Draw.rect("circle", e.x + x, e.y + y, size, size); - Draw.reset(); - }); - - Draw.thickness(2f*e.fract()+0.4f); - Draw.color(Color.WHITE, Color.ORANGE, e.powfract()); - Draw.circle(e.x, e.y, 2f + e.powfract() * 9f); - - Draw.color(e.ifract() < 0.5f ? Color.WHITE : Color.DARK_GRAY); - float rad = e.fract()*10f + 2f; - Angles.randLenVectors(e.id, 5, 8f, (x, y)->{ - Draw.rect("circle2", e.x + x, e.y + y, rad, rad); - }); - - Draw.reset(); - }); - - Effects.create("coreexplosion", 13, e -> { - Draw.thickness(3f-e.ifract()*2f); - Draw.color(Color.ORANGE, Color.WHITE, e.ifract()); - Draw.spikes(e.x, e.y, 5f + e.ifract() * 40f, 6, 6); - Draw.circle(e.x, e.y, 4f + e.ifract() * 40f); - Draw.reset(); - }); - - Effects.create("smoke", 100, e -> { - Draw.color(Color.GRAY, new Color(0.3f, 0.3f, 0.3f, 1f), e.ifract()); - float size = 7f-e.ifract()*7f; - Draw.rect("circle", e.x, e.y, size, size); - Draw.reset(); - }); - - Effects.create("railsmoke", 30, e -> { - Draw.color(Color.LIGHT_GRAY, Color.WHITE, e.ifract()); - float size = e.fract()*4f; - Draw.rect("circle", e.x, e.y, size, size); - Draw.reset(); - }); - - Effects.create("spawn", 23, e -> { - Draw.thickness(2f); - Draw.color(Color.DARK_GRAY, Color.SCARLET, e.ifract()); - Draw.circle(e.x, e.y, 7f - e.ifract() * 6f); - Draw.reset(); - }); - - Effects.create("ind", 100, e -> { - Draw.thickness(3f); - Draw.color("royal"); - Draw.circle(e.x, e.y, 3); - Draw.reset(); - }); - - Effects.create("respawn", respawnduration, e -> { - Draw.tcolor(Color.SCARLET); - Draw.tscl(0.25f); - Draw.text("Respawning in " + (int)((e.lifetime-e.time)/60), e.x, e.y); - Draw.tscl(0.5f); - Draw.reset(); - }); - } -} diff --git a/core/src/io/anuke/mindustry/Fx.java b/core/src/io/anuke/mindustry/Fx.java new file mode 100644 index 0000000000..7e97243ccd --- /dev/null +++ b/core/src/io/anuke/mindustry/Fx.java @@ -0,0 +1,332 @@ +package io.anuke.mindustry; + +import com.badlogic.gdx.graphics.Color; + +import io.anuke.ucore.core.Draw; +import io.anuke.ucore.core.Effects.Effect; +import io.anuke.ucore.graphics.Hue; +import io.anuke.ucore.util.Angles; +import io.anuke.ucore.util.Mathf; + +public class Fx{ + static Color lightRed = Hue.mix(Color.WHITE, Color.FIREBRICK, 0.1f); + static Color lightOrange = Color.valueOf("f68021"); + static Color whiteOrange = Hue.mix(lightOrange, Color.WHITE, 0.6f); + + public static final Effect + + generatorexplosion = new Effect(28, e -> { + Angles.randLenVectors(e.id, 16, 10f + e.ifract()*8f, (x, y)->{ + float size = e.fract()*12f + 1f; + Draw.color(Color.WHITE, lightOrange, e.ifract()); + Draw.rect("circle", e.x + x, e.y + y, size, size); + Draw.reset(); + }); + }), + + chainshot = new Effect(9f, e -> { + Draw.color(Color.WHITE, lightOrange, e.ifract()); + Draw.thick(e.fract()*4f); + Draw.lineAngle(e.x, e.y, e.rotation, e.fract()*7f); + Draw.thick(e.fract()*2f); + Draw.lineAngle(e.x, e.y, e.rotation, e.fract()*10f); + Draw.reset(); + }), + + titanshot = new Effect(12f, e -> { + Draw.color(Color.WHITE, lightOrange, e.ifract()); + Draw.thick(e.fract()*7f); + Draw.lineAngle(e.x, e.y, e.rotation, e.fract()*12f); + Draw.thick(e.fract()*4f); + Draw.lineAngle(e.x, e.y, e.rotation, e.fract()*16f); + Draw.thick(e.fract()*2f); + Draw.lineAngle(e.x, e.y, e.rotation, e.fract()*18f); + Draw.reset(); + }), + + shockwave = new Effect(10f, e -> { + Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.ifract()); + Draw.thick(e.fract()*2f + 0.2f); + Draw.circle(e.x, e.y, e.ifract()*28f); + Draw.reset(); + }), + + shockwaveSmall = new Effect(10f, e -> { + Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.ifract()); + Draw.thick(e.fract()*2f + 0.1f); + Draw.circle(e.x, e.y, e.ifract()*15f); + Draw.reset(); + }), + + empshockwave = new Effect(7f, e -> { + Draw.color(Color.WHITE, Color.SKY, e.ifract()); + Draw.thick(e.fract()*2f); + Draw.circle(e.x, e.y, e.ifract()*40f); + Draw.reset(); + }), + + empspark = new Effect(13, e -> { + Angles.randLenVectors(e.id, 7, 1f + e.ifract()*12f, (x, y)->{ + float len = 1f+e.fract()*6f; + Draw.color(Color.SKY); + Draw.lineAngle(e.x + x, e.y + y, Mathf.atan2(x, y), len); + Draw.reset(); + }); + }), + + shellsmoke = new Effect(20, e -> { + Angles.randLenVectors(e.id, 8, 3f + e.ifract()*17f, (x, y)->{ + float size = 2f+e.fract()*5f; + Draw.color(Color.LIGHT_GRAY, Color.DARK_GRAY, e.ifract()); + Draw.rect("circle", e.x + x, e.y + y, size, size); + Draw.reset(); + }); + }), + + blastsmoke = new Effect(26, e -> { + Angles.randLenVectors(e.id, 12, 1f + e.ifract()*23f, (x, y)->{ + float size = 2f+e.fract()*6f; + Draw.color(Color.LIGHT_GRAY, Color.DARK_GRAY, e.ifract()); + Draw.rect("circle", e.x + x, e.y + y, size, size); + Draw.reset(); + }); + }), + + lava = new Effect(18, e -> { + Angles.randLenVectors(e.id, 3, 1f + e.ifract()*10f, (x, y)->{ + float size = e.sfract()*4f; + Draw.color(Color.ORANGE, Color.GRAY, e.ifract()); + Draw.rect("circle", e.x + x, e.y + y, size, size); + Draw.reset(); + }); + }), + + lavabubble = new Effect(45f, e -> { + Draw.color(Color.ORANGE); + float scl = 0.35f; + Draw.thick(1f - Mathf.clamp(e.ifract() - (1f-scl)) * (1f/scl)); + Draw.circle(e.x, e.y, e.ifract()*4f); + Draw.reset(); + }), + + oilbubble = new Effect(64f, e -> { + Draw.color(Color.DARK_GRAY); + float scl = 0.25f; + Draw.thick(1f - Mathf.clamp(e.ifract() - (1f-scl)) * (1f/scl)); + Draw.circle(e.x, e.y, e.ifract()*3f); + Draw.reset(); + }), + + shellexplosion = new Effect(9, e -> { + Draw.thickness(2f - e.ifract()*1.7f); + Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.ifract()); + Draw.circle(e.x, e.y, 3f + e.ifract() * 9f); + Draw.reset(); + }), + + blastexplosion = new Effect(16, e -> { + Draw.thickness(1.2f - e.ifract()); + Draw.color(Color.WHITE, Color.SCARLET, e.ifract()); + Draw.circle(e.x, e.y, 1.5f + e.ifract() * 9f); + Draw.reset(); + }), + + place = new Effect(16, e -> { + Draw.thickness(3f - e.ifract() * 2f); + Draw.square(e.x, e.y, Vars.tilesize / 2f + e.ifract() * 3f); + Draw.reset(); + }), + + purify = new Effect(10, e -> { + Draw.color(Color.ROYAL, Color.GRAY, e.ifract()); + Draw.thickness(2f); + Draw.spikes(e.x, e.y, e.ifract() * 4f, 2, 6); + Draw.reset(); + }), + + purifyoil = new Effect(10, e -> { + Draw.color(Color.BLACK, Color.GRAY, e.ifract()); + Draw.thickness(2f); + Draw.spikes(e.x, e.y, e.ifract() * 4f, 2, 6); + Draw.reset(); + }), + + generate = new Effect(11, e -> { + Draw.color(Color.ORANGE, Color.YELLOW, e.ifract()); + Draw.thickness(1f); + Draw.spikes(e.x, e.y, e.ifract() * 5f, 2, 8); + Draw.reset(); + }), + + spark = new Effect(10, e -> { + Draw.thickness(1f); + Draw.color(Color.WHITE, Color.GRAY, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 5f, 2, 8); + Draw.reset(); + }), + + sparkbig = new Effect(11, e -> { + Draw.thickness(1f); + Draw.color(lightRed, Color.GRAY, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 5f, 2.3f, 8); + Draw.reset(); + }), + + smelt = new Effect(10, e -> { + Draw.thickness(1f); + Draw.color(Color.YELLOW, Color.RED, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 5f, 2, 8); + Draw.reset(); + }), + + breakBlock = new Effect(12, e -> { + Draw.thickness(2f); + Draw.color(Color.WHITE, Color.GRAY, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 5f, 2, 5); + Draw.reset(); + }), + + hit = new Effect(10, e -> { + Draw.thickness(1f); + Draw.color(Color.WHITE, Color.ORANGE, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 3f, 2, 8); + Draw.reset(); + }), + + laserhit = new Effect(10, e -> { + Draw.thickness(1f); + Draw.color(Color.WHITE, Color.SKY, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 2f, 2, 6); + Draw.reset(); + }), + + shoot = new Effect(8, e -> { + Draw.thickness(1f); + Draw.color(Color.WHITE, Color.GOLD, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 2f, 2, 5); + Draw.reset(); + }), + + shoot2 = new Effect(8, e -> { + Draw.thickness(1f); + Draw.color(Color.WHITE, Color.SKY, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 2f, 1, 5); + Draw.reset(); + }), + + shoot3 = new Effect(8, e -> { + Draw.thickness(1f); + Draw.color(Color.WHITE, Color.GOLD, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 2f, 1, 5); + Draw.reset(); + }), + + railshoot = new Effect(8, e -> { + Draw.thickness(2f - e.ifract()*2f); + Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.ifract()); + Draw.spikes(e.x, e.y, 1f + e.ifract() * 4f, 1, 5); + Draw.reset(); + }), + + mortarshoot = new Effect(9, e -> { + Draw.thickness(1.3f - e.ifract()); + Draw.color(Color.WHITE, Color.ORANGE, e.ifract()); + Draw.spikes(e.x, e.y, e.ifract() * 4f, 2, 6); + Draw.circle(e.x, e.y, e.ifract() * 5f + 1f); + Draw.reset(); + }), + + titanExplosion = new Effect(11, e -> { + Draw.thickness(2f*e.fract()+0.5f); + Draw.color(Color.WHITE, Color.DARK_GRAY, e.powfract()); + Draw.circle(e.x, e.y, 5f + e.powfract() * 8f); + + Draw.color(e.ifract() < 0.5f ? whiteOrange : Color.DARK_GRAY); + float rad = e.fract()*10f + 5f; + Angles.randLenVectors(e.id, 5, 9f, (x, y)->{ + Draw.rect("circle2", e.x + x, e.y + y, rad, rad); + }); + + Draw.reset(); + }), + + explosion = new Effect(11, e -> { + Draw.thickness(2f*e.fract()+0.5f); + Draw.color(Color.WHITE, Color.DARK_GRAY, e.powfract()); + Draw.circle(e.x, e.y, 5f + e.powfract() * 6f); + + Draw.color(e.ifract() < 0.5f ? Color.WHITE : Color.DARK_GRAY); + float rad = e.fract()*10f + 5f; + Angles.randLenVectors(e.id, 5, 8f, (x, y)->{ + Draw.rect("circle2", e.x + x, e.y + y, rad, rad); + }); + + Draw.reset(); + }), + + + blockexplosion = new Effect(13, e -> { + Angles.randLenVectors(e.id+1, 8, 5f + e.ifract()*11f, (x, y)->{ + float size = 2f+e.fract()*8f; + Draw.color(Color.LIGHT_GRAY, Color.DARK_GRAY, e.ifract()); + Draw.rect("circle", e.x + x, e.y + y, size, size); + Draw.reset(); + }); + + Draw.thickness(2f*e.fract()+0.4f); + Draw.color(Color.WHITE, Color.ORANGE, e.powfract()); + Draw.circle(e.x, e.y, 2f + e.powfract() * 9f); + + Draw.color(e.ifract() < 0.5f ? Color.WHITE : Color.DARK_GRAY); + float rad = e.fract()*10f + 2f; + Angles.randLenVectors(e.id, 5, 8f, (x, y)->{ + Draw.rect("circle2", e.x + x, e.y + y, rad, rad); + }); + + Draw.reset(); + }), + + coreexplosion = new Effect(13, e -> { + Draw.thickness(3f-e.ifract()*2f); + Draw.color(Color.ORANGE, Color.WHITE, e.ifract()); + Draw.spikes(e.x, e.y, 5f + e.ifract() * 40f, 6, 6); + Draw.circle(e.x, e.y, 4f + e.ifract() * 40f); + Draw.reset(); + }), + + smoke = new Effect(100, e -> { + Draw.color(Color.GRAY, new Color(0.3f, 0.3f, 0.3f, 1f), e.ifract()); + float size = 7f-e.ifract()*7f; + Draw.rect("circle", e.x, e.y, size, size); + Draw.reset(); + }), + + railsmoke = new Effect(30, e -> { + Draw.color(Color.LIGHT_GRAY, Color.WHITE, e.ifract()); + float size = e.fract()*4f; + Draw.rect("circle", e.x, e.y, size, size); + Draw.reset(); + }), + + spawn = new Effect(23, e -> { + Draw.thickness(2f); + Draw.color(Color.DARK_GRAY, Color.SCARLET, e.ifract()); + Draw.circle(e.x, e.y, 7f - e.ifract() * 6f); + Draw.reset(); + }), + + ind = new Effect(100, e -> { + Draw.thickness(3f); + Draw.color("royal"); + Draw.circle(e.x, e.y, 3); + Draw.reset(); + }), + + respawn = new Effect(Vars.respawnduration, e -> { + Draw.tcolor(Color.SCARLET); + Draw.tscl(0.25f); + Draw.text("Respawning in " + (int)((e.lifetime-e.time)/60), e.x, e.y); + Draw.tscl(0.5f); + Draw.reset(); + }); +} diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 9571b03b0b..74336ade17 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -29,6 +29,10 @@ public class Vars{ public static boolean debug = false; //whether to debug openGL info public static boolean debugGL = false; + //whether turrets have infinite ammo (only with debug) + public static boolean infiniteAmmo = true; + //whether to show paths of enemies + public static boolean showPaths = false; //number of save slots-- increasing may lead to layout issues //TODO named save slots, possibly with a scroll dialog public static final int saveSlots = 4; diff --git a/core/src/io/anuke/mindustry/ai/Pathfind.java b/core/src/io/anuke/mindustry/ai/Pathfind.java index 564d9c53fe..918ddf426d 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfind.java +++ b/core/src/io/anuke/mindustry/ai/Pathfind.java @@ -6,6 +6,7 @@ import com.badlogic.gdx.ai.pfa.indexed.IndexedAStarPathFinder; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.world.Tile; @@ -85,9 +86,9 @@ public class Pathfind{ } - if(Vars.debug) + if(Vars.debug && Vars.showPaths) for(Tile tile : path){ - Effects.effect("ind", tile.worldx(), tile.worldy()); + Effects.effect(Fx.ind, tile.worldx(), tile.worldy()); } } diff --git a/core/src/io/anuke/mindustry/entities/BulletType.java b/core/src/io/anuke/mindustry/entities/BulletType.java index 326ddaafdc..b4477bc27d 100644 --- a/core/src/io/anuke/mindustry/entities/BulletType.java +++ b/core/src/io/anuke/mindustry/entities/BulletType.java @@ -2,7 +2,10 @@ package io.anuke.mindustry.entities; import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.Fx; +import io.anuke.mindustry.entities.effect.DamageArea; import io.anuke.mindustry.entities.effect.EMP; +import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; @@ -14,6 +17,9 @@ import io.anuke.ucore.util.Mathf; public abstract class BulletType extends BaseBulletType{ static Color glowy = Color.valueOf("fdc056"); static Color lightGold = Hue.mix(Color.GOLD, Color.WHITE, 0.4f); + static Color lightRed = Hue.mix(Color.WHITE, Color.FIREBRICK, 0.1f); + static Color lightOrange = Color.valueOf("f68021"); + static Color whiteOrange = Hue.mix(lightOrange, Color.WHITE, 0.6f); public static final BulletType @@ -36,8 +42,8 @@ public abstract class BulletType extends BaseBulletType{ }, chain = new BulletType(2f, 8){ public void draw(Bullet b){ - Draw.color("gray"); - Draw.rect("bullet", b.x, b.y, b.angle()); + Draw.color(whiteOrange); + Draw.rect("chainbullet", b.x, b.y, b.angle()); Draw.reset(); } }, @@ -51,7 +57,7 @@ public abstract class BulletType extends BaseBulletType{ public void update(Bullet b){ if(Timers.get(b, "smoke", 4)){ - Effects.effect("railsmoke", b.x, b.y); + Effects.effect(Fx.railsmoke, b.x, b.y); } } }, @@ -72,7 +78,7 @@ public abstract class BulletType extends BaseBulletType{ public void update(Bullet b){ if(Timers.get(b, "smoke", 2)){ - Effects.effect("empspark", b.x + Mathf.range(2), b.y + Mathf.range(2)); + Effects.effect(Fx.empspark, b.x + Mathf.range(2), b.y + Mathf.range(2)); } } @@ -84,19 +90,20 @@ public abstract class BulletType extends BaseBulletType{ Timers.run(5f, ()->{ new EMP(b.x, b.y, b.damage).add(); }); - Effects.effect("empshockwave", b); + Effects.effect(Fx.empshockwave, b); Effects.shake(3f, 3f, b); } }, - //TODO use DamageArea instead - shell = new BulletType(1.1f, 85){ + //TODO better visuals for shell + shell = new BulletType(1.1f, 60){ { lifetime = 110f; - hitsize = 8f; + hitsize = 11f; } public void draw(Bullet b){ float rad = 8f; + Draw.color(Color.ORANGE); Draw.color(Color.GRAY); Draw.rect("circle", b.x, b.y, rad, rad); rad += Mathf.sin(Timers.time(), 3f, 1f); @@ -107,7 +114,7 @@ public abstract class BulletType extends BaseBulletType{ public void update(Bullet b){ if(Timers.get(b, "smoke", 7)){ - Effects.effect("smoke", b.x + Mathf.range(2), b.y + Mathf.range(2)); + Effects.effect(Fx.smoke, b.x + Mathf.range(2), b.y + Mathf.range(2)); } } @@ -118,13 +125,41 @@ public abstract class BulletType extends BaseBulletType{ public void removed(Bullet b){ Effects.shake(3f, 3f, b); - Effects.effect("shellsmoke", b); - Effects.effect("shellexplosion", b); + Effects.effect(Fx.shellsmoke, b); + Effects.effect(Fx.shellexplosion, b); - Angles.circle(25, f->{ - Angles.translation(f, 5f); - new Bullet(shellshot, b.owner, b.x + Angles.x(), b.y + Angles.y(), f).add(); - }); + DamageArea.damage(b.owner instanceof Enemy, b.x, b.y, 25f, (int)(damage * 2f/3f)); + } + }, + titanshell = new BulletType(1.8f, 60){ + { + lifetime = 70f; + hitsize = 11f; + } + + public void draw(Bullet b){ + Draw.color(whiteOrange); + Draw.rect("titanshell", b.x, b.y, b.angle()); + Draw.reset(); + } + + public void update(Bullet b){ + if(Timers.get(b, "smoke", 4)){ + Effects.effect(Fx.smoke, b.x + Mathf.range(2), b.y + Mathf.range(2)); + } + } + + public void despawned(Bullet b){ + removed(b); + } + + public void removed(Bullet b){ + Effects.shake(3f, 3f, b); + + Effects.effect(Fx.shellsmoke, b); + Effects.effect(Fx.shockwaveSmall, b); + + DamageArea.damage(!(b.owner instanceof Enemy), b.x, b.y, 25f, (int)(damage * 2f/3f)); } }, blast = new BulletType(1.1f, 80){ @@ -141,8 +176,8 @@ public abstract class BulletType extends BaseBulletType{ public void removed(Bullet b){ Effects.shake(3f, 3f, b); - Effects.effect("blastsmoke", b); - Effects.effect("blastexplosion", b); + Effects.effect(Fx.blastsmoke, b); + Effects.effect(Fx.blastexplosion, b); Angles.circle(30, f->{ Angles.translation(f, 6f); @@ -239,6 +274,6 @@ public abstract class BulletType extends BaseBulletType{ @Override public void removed(Bullet b){ - Effects.effect("hit", b); + Effects.effect(Fx.hit, b); } } diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 0b75e011af..5ee14ac993 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -7,6 +7,7 @@ import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.resource.Weapon; @@ -35,7 +36,7 @@ public class Player extends DestructibleEntity{ @Override public void onDeath(){ remove(); - Effects.effect("explosion", this); + Effects.effect(Fx.explosion, this); Effects.shake(4f, 5f, this); Effects.sound("die", this); diff --git a/core/src/io/anuke/mindustry/entities/TileEntity.java b/core/src/io/anuke/mindustry/entities/TileEntity.java index f1d82d653b..887bdf65b2 100644 --- a/core/src/io/anuke/mindustry/entities/TileEntity.java +++ b/core/src/io/anuke/mindustry/entities/TileEntity.java @@ -6,6 +6,7 @@ import java.io.IOException; import com.badlogic.gdx.utils.ObjectMap; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.resource.Item; @@ -89,7 +90,7 @@ public class TileEntity extends Entity{ if(health != 0 && !(tile.block() instanceof Wall) && Mathf.chance(0.009f*Timers.delta()*(1f-(float)health/maxhealth))){ - Effects.effect("smoke", x+Mathf.range(4), y+Mathf.range(4)); + Effects.effect(Fx.smoke, x+Mathf.range(4), y+Mathf.range(4)); } tile.block().update(tile); diff --git a/core/src/io/anuke/mindustry/entities/effect/DamageArea.java b/core/src/io/anuke/mindustry/entities/effect/DamageArea.java index ffd229c4bb..e90673946d 100644 --- a/core/src/io/anuke/mindustry/entities/effect/DamageArea.java +++ b/core/src/io/anuke/mindustry/entities/effect/DamageArea.java @@ -1,8 +1,47 @@ package io.anuke.mindustry.entities.effect; -import io.anuke.ucore.entities.Entity; +import com.badlogic.gdx.math.Vector2; + +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.entities.enemies.Enemy; +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.World; +import io.anuke.ucore.entities.Entities; +import io.anuke.ucore.util.Mathf; //TODO -public class DamageArea extends Entity{ - +public class DamageArea{ + + public static void damage(boolean enemies, float x, float y, float radius, int damage){ + + if(enemies){ + Entities.getNearby(x, y, radius*2, entity->{ + if(entity instanceof Enemy){ + Enemy enemy = (Enemy)entity; + if(enemy.distanceTo(x, y) > radius){ + return; + } + int amount = calculateDamage(x, y, enemy.x, enemy.y, radius, damage); + enemy.damage(amount); + } + }); + }else{ + int trad = (int)(radius / Vars.tilesize); + for(int dx = -trad; dx <= trad; dx ++){ + for(int dy= -trad; dy <= trad; dy ++){ + Tile tile = World.tile(Mathf.scl2(x, Vars.tilesize) + dx, Mathf.scl2(y, Vars.tilesize) + dy); + if(tile != null && tile.entity != null && Vector2.dst(dx, dy, 0, 0) <= trad){ + int amount = calculateDamage(x, y, tile.worldx(), tile.worldy(), radius, damage); + tile.entity.damage(amount); + } + } + } + } + } + + static int calculateDamage(float x, float y, float tx, float ty, float radius, int damage){ + float dist = Vector2.dst(x, y, tx, ty); + float scaled = 1f - dist/radius; + return (int)(damage * scaled); + } } diff --git a/core/src/io/anuke/mindustry/entities/effect/EMP.java b/core/src/io/anuke/mindustry/entities/effect/EMP.java index 339222a2b1..e2d6a280f9 100644 --- a/core/src/io/anuke/mindustry/entities/effect/EMP.java +++ b/core/src/io/anuke/mindustry/entities/effect/EMP.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.World; @@ -57,7 +58,7 @@ public class EMP extends TimedEntity{ p.setPower(tile, 0f); } - Effects.effect("empspark", tile.entity); + Effects.effect(Fx.empspark, tile.entity); tile.entity.damage(damage); } } diff --git a/core/src/io/anuke/mindustry/entities/effect/TeslaOrb.java b/core/src/io/anuke/mindustry/entities/effect/TeslaOrb.java index 8b9074b82e..1572a21c50 100644 --- a/core/src/io/anuke/mindustry/entities/effect/TeslaOrb.java +++ b/core/src/io/anuke/mindustry/entities/effect/TeslaOrb.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectSet; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; @@ -64,7 +65,7 @@ public class TeslaOrb extends Entity{ void damageEnemy(Enemy enemy){ //TODO enemy.damage(damage); - Effects.effect("laserhit", enemy.x + Mathf.range(2f), enemy.y + Mathf.range(2f)); + Effects.effect(Fx.laserhit, enemy.x + Mathf.range(2f), enemy.y + Mathf.range(2f)); } @Override diff --git a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java index 6f7faafdb1..096bbe84d2 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.reflect.ClassReflection; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Shaders; import io.anuke.mindustry.Vars; import io.anuke.mindustry.ai.Pathfind; @@ -171,7 +172,7 @@ public class Enemy extends DestructibleEntity{ @Override public void onDeath(){ - Effects.effect("explosion", this); + Effects.effect(Fx.explosion, this); Effects.shake(3f, 4f, this); Effects.sound("explosion", this); remove(); diff --git a/core/src/io/anuke/mindustry/resource/Weapon.java b/core/src/io/anuke/mindustry/resource/Weapon.java index 80b472460d..5fe88c67eb 100644 --- a/core/src/io/anuke/mindustry/resource/Weapon.java +++ b/core/src/io/anuke/mindustry/resource/Weapon.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.Bullet; import io.anuke.mindustry.entities.BulletType; @@ -22,7 +23,7 @@ public enum Weapon{ @Override public void shoot(Player p){ super.shoot(p); - Effects.effect("shoot3", p.x + vector.x, p.y+vector.y); + Effects.effect(Fx.shoot3, p.x + vector.x, p.y+vector.y); } }, triblaster(13, BulletType.shot, "Shoots 3 bullets in a spread.", stack(Item.iron, 40)){ @@ -36,7 +37,7 @@ public enum Weapon{ bullet(p, p.x, p.y, ang+space); bullet(p, p.x, p.y, ang-space); - Effects.effect("shoot", p.x + vector.x, p.y+vector.y); + Effects.effect(Fx.shoot, p.x + vector.x, p.y+vector.y); } }, @@ -48,7 +49,7 @@ public enum Weapon{ bullet(p, p.x, p.y, ang + Mathf.range(8)); - Effects.effect("shoot2", p.x + vector.x, p.y+vector.y); + Effects.effect(Fx.shoot, p.x + vector.x, p.y+vector.y); } }, flamer(5, BulletType.flame, "Shoots a stream of fire.", stack(Item.steel, 60), stack(Item.coal, 60)){ @@ -73,7 +74,7 @@ public enum Weapon{ float ang = mouseAngle(p); bullet(p, p.x, p.y, ang); - Effects.effect("railshoot", p.x + vector.x, p.y+vector.y); + Effects.effect(Fx.railshoot, p.x + vector.x, p.y+vector.y); } }, mortar(100, BulletType.shell, "Shoots a slow, but damaging shell.", stack(Item.titanium, 40), stack(Item.steel, 60)){ @@ -82,7 +83,7 @@ public enum Weapon{ public void shoot(Player p){ float ang = mouseAngle(p); bullet(p, p.x, p.y, ang); - Effects.effect("mortarshoot", p.x + vector.x, p.y+vector.y); + Effects.effect(Fx.mortarshoot, p.x + vector.x, p.y+vector.y); Effects.shake(2f, 2f, Vars.player); } }; diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index ec5838c4ff..e22ae3baa1 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.GameState; import io.anuke.mindustry.GameState.State; import io.anuke.mindustry.Vars; @@ -13,6 +14,7 @@ import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Liquid; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.util.Tmp; public class Block{ private static int lastid; @@ -26,7 +28,7 @@ public class Block{ /**display name*/ public String formalName; /**played on destroy*/ - public String explosionEffect = "blockexplosion"; + public Effect explosionEffect = Fx.blockexplosion; /**played on destroy*/ public String explosionSound = "break"; /**whether this block has a tile entity that updates*/ diff --git a/core/src/io/anuke/mindustry/world/World.java b/core/src/io/anuke/mindustry/world/World.java index c78a1b2d1e..c0b2b5320a 100644 --- a/core/src/io/anuke/mindustry/world/World.java +++ b/core/src/io/anuke/mindustry/world/World.java @@ -8,6 +8,7 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.*; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.ai.Pathfind; import io.anuke.mindustry.entities.TileEntity; @@ -222,11 +223,11 @@ public class World{ toplace.setLinked((byte)(dx + offsetx), (byte)(dy + offsety)); } - Effects.effect("place", worldx * Vars.tilesize, worldy * Vars.tilesize); + Effects.effect(Fx.place, worldx * Vars.tilesize, worldy * Vars.tilesize); } } }else{ - Effects.effect("place", x * Vars.tilesize, y * Vars.tilesize); + Effects.effect(Fx.place, x * Vars.tilesize, y * Vars.tilesize); } Effects.shake(2f, 2f, player); @@ -307,14 +308,14 @@ public class World{ if(!tile.block().isMultiblock() && !tile.isLinked()){ tile.setBlock(Blocks.air); - Effects.effect("break", tile.worldx(), tile.worldy()); + Effects.effect(Fx.breakBlock, tile.worldx(), tile.worldy()); }else{ Tile target = tile.isLinked() ? tile.getLinked() : tile; Array removals = target.getLinkedTiles(); for(Tile toremove : removals){ //note that setting a new block automatically unlinks it toremove.setBlock(Blocks.air); - Effects.effect("break", toremove.worldx(), toremove.worldy()); + Effects.effect(Fx.breakBlock, toremove.worldx(), toremove.worldy()); } } } diff --git a/core/src/io/anuke/mindustry/world/blocks/Blocks.java b/core/src/io/anuke/mindustry/world/blocks/Blocks.java index db40495857..bfd48c6914 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Blocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/Blocks.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.world.blocks; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.GameState; import io.anuke.mindustry.GameState.State; import io.anuke.mindustry.resource.Item; @@ -51,11 +52,11 @@ public class Blocks{ @Override public void update(Tile tile){ if(Mathf.chance(0.001 * Timers.delta())){ - Effects.effect("lava", tile.worldx() + Mathf.range(5f), tile.worldy() + Mathf.range(5f)); + Effects.effect(Fx.lava, tile.worldx() + Mathf.range(5f), tile.worldy() + Mathf.range(5f)); } if(Mathf.chance(0.003 * Timers.delta())){ - Effects.effect("lavabubble", tile.worldx() + Mathf.range(3f), tile.worldy() + Mathf.range(3f)); + Effects.effect(Fx.lavabubble, tile.worldx() + Mathf.range(3f), tile.worldy() + Mathf.range(3f)); } } }, @@ -70,7 +71,7 @@ public class Blocks{ @Override public void update(Tile tile){ if(Mathf.chance(0.0025 * Timers.delta())){ - Effects.effect("oilbubble", tile.worldx() + Mathf.range(2f), tile.worldy() + Mathf.range(2f)); + Effects.effect(Fx.oilbubble, tile.worldx() + Mathf.range(2f), tile.worldy() + Mathf.range(2f)); } } }, diff --git a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java index a9249b2662..88b6fd87b7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.world.blocks; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Liquid; @@ -113,7 +114,7 @@ public class ProductionBlocks{ purifyTime = 70; output = Item.coal; health = 80; - craftEffect = "purifyoil"; + craftEffect = Fx.purifyoil; } @Override @@ -164,7 +165,7 @@ public class ProductionBlocks{ if(tile.floor().drops != null && Timers.get(tile, "drill", 60 * time)){ offloadNear(tile, tile.floor().drops.item); - Effects.effect("sparkbig", tile.worldx(), tile.worldy()); + Effects.effect(Fx.sparkbig, tile.worldx(), tile.worldy()); } if(Timers.get(tile, "dump", 30)){ diff --git a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java b/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java index 16ef70742c..174ea2b2d7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.world.blocks; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.BulletType; import io.anuke.mindustry.entities.effect.TeslaOrb; @@ -167,15 +168,49 @@ public class WeaponBlocks{ chainturret = new Turret("chainturret"){ { - inaccuracy = 7f; + inaccuracy = 8f; formalName = "chain turret"; - range = 60f; - reload = 10f; + range = 80f; + reload = 7f; bullet = BulletType.chain; - ammo = Item.stone; //TODO + ammo = Item.uranium; health = 430; - ammoMultiplier = 10; width = height = 2; + shootCone = 9f; + } + + //TODO specify turret shoot effect in turret instead of doing it manually + @Override + protected void shoot(Tile tile){ + TurretEntity entity = tile.entity(); + Vector2 offset = getPlaceOffset(); + + float len = 8; + float space = 3.5f; + + for(int i = -1; i < 1; i ++){ + Angles.vector.set(len, Mathf.sign(i) * space).rotate(entity.rotation); + bullet(tile, entity.rotation); + Effects.effect(Fx.chainshot, tile.worldx() + Angles.x() + offset.x, + tile.worldy()+ Angles.y() + offset.y, entity.rotation); + } + + Effects.shake(1f, 1f, tile.worldx(), tile.worldy()); + } + }, + + titanturret = new Turret("titancannon"){ + { + formalName = "titan cannon"; + range = 120f; + reload = 20f; + bullet = BulletType.titanshell; + ammo = Item.uranium; + health = 800; + ammoMultiplier = 5; + width = height = 3; + rotatespeed = 0.07f; + shootCone = 9f; } @Override @@ -183,31 +218,12 @@ public class WeaponBlocks{ TurretEntity entity = tile.entity(); Vector2 offset = getPlaceOffset(); - float len = 8; - float space = 4f; + Angles.translation(entity.rotation, 14f); + bullet(tile, entity.rotation); + Effects.effect(Fx.titanshot, tile.worldx() + Angles.x() + offset.x, + tile.worldy()+ Angles.y() + offset.y, entity.rotation); - Angles.vector.set(len, -space).rotate(entity.rotation); - bullet(tile, entity.rotation); - Effects.effect("chainshot", tile.worldx() + Angles.x() + offset.x, tile.worldy()+ Angles.y() + offset.y, entity.rotation); - - Angles.vector.set(len, space).rotate(entity.rotation); - bullet(tile, entity.rotation); - Effects.effect("chainshot", tile.worldx() + Angles.x() + offset.x, tile.worldy()+ Angles.y() + offset.y, entity.rotation); - } - }, - - titanturret = new Turret("titancannon"){ - { - inaccuracy = 7f; - formalName = "titan cannon"; - range = 120f; - reload = 40f; - bullet = BulletType.shell; - ammo = Item.coal; - health = 800; - ammoMultiplier = 10; - width = height = 3; - rotatespeed = 0.08f; + Effects.shake(3f, 3f, tile.worldx(), tile.worldy()); } }; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/LaserTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/LaserTurret.java index 57727c298a..18f5585ce6 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/LaserTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/LaserTurret.java @@ -3,10 +3,12 @@ package io.anuke.mindustry.world.blocks.types.defense; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.MathUtils; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Angles; import io.anuke.ucore.util.Mathf; @@ -14,7 +16,7 @@ import io.anuke.ucore.util.Tmp; public class LaserTurret extends PowerTurret{ protected Color beamColor = Color.WHITE.cpy(); - protected String hiteffect = "laserhit"; + protected Effect hiteffect = Fx.laserhit; protected int damage = 4; protected float cone = 15f; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java index ae609d80df..8c498abdff 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java @@ -7,6 +7,7 @@ import java.io.IOException; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.Bullet; import io.anuke.mindustry.entities.BulletType; @@ -188,7 +189,7 @@ public class Turret extends Block{ if(Timers.getTime(tile, "reload") <= 0){ Timers.run(hittime, ()->{ - Effects.effect("spawn", predictX, predictY); + Effects.effect(Fx.spawn, predictX, predictY); }); } } @@ -206,7 +207,8 @@ public class Turret extends Block{ } protected void bullet(Tile tile, float angle){ - Bullet out = new Bullet(bullet, tile.entity, tile.worldx() + Angles.x(), tile.worldy() + Angles.y(), angle).add(); + Vector2 offset = getPlaceOffset(); + Bullet out = new Bullet(bullet, tile.entity, tile.worldx() + Angles.x() + offset.x, tile.worldy() + Angles.y() + offset.y, angle).add(); out.damage = (int)(bullet.damage*Vars.multiplier); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Crafter.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Crafter.java index 3a451eec56..9648b5d805 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Crafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Crafter.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.world.blocks.types.production; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -34,7 +35,7 @@ public class Crafter extends Block{ } offloadNear(tile, result); - Effects.effect("smelt", tile.entity); + Effects.effect(Fx.smelt, tile.entity); } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java index ece8d267a4..6e16f4196b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.world.blocks.types.production; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -25,7 +26,7 @@ public class Drill extends Block{ if(tile.floor() == resource && Timers.get(tile, "drill", 60 * time) && tile.entity.totalItems() < capacity){ offloadNear(tile, result); - Effects.effect("spark", tile.worldx(), tile.worldy()); + Effects.effect(Fx.spark, tile.worldx(), tile.worldy()); } if(Timers.get(tile, "dump", 30)){ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java index 65c09d2649..9a332f83a0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.GridPoint2; import com.badlogic.gdx.math.Vector2; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.World; @@ -35,13 +36,13 @@ public class Generator extends PowerBlock{ if(explosive){ float x = tile.worldx(), y = tile.worldy(); - Effects.effect("shellsmoke", x, y); - Effects.effect("blastsmoke", x, y); + Effects.effect(Fx.shellsmoke, x, y); + Effects.effect(Fx.blastsmoke, x, y); Timers.run(Mathf.random(8f + Mathf.random(6f)), () -> { Effects.shake(6f, 8f, x, y); - Effects.effect("generatorexplosion", x, y); - Effects.effect("shockwave", x, y); + Effects.effect(Fx.generatorexplosion, x, y); + Effects.effect(Fx.shockwave, x, y); Timers.run(12f + Mathf.random(20f), () -> { tile.damageNearby(3, 40, 0f); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/ItemPowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/ItemPowerGenerator.java index a0be1e9a6f..15795421b8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/ItemPowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/ItemPowerGenerator.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; @@ -37,7 +38,7 @@ public class ItemPowerGenerator extends Generator{ PowerEntity entity = tile.entity(); if(entity.hasItem(generateItem) && tryAddPower(tile, generateAmount)){ - Effects.effect("generate", tile.entity); + Effects.effect(Fx.generate, tile.entity); entity.removeItem(generateItem, 1); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidCrafter.java b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidCrafter.java index 6fcd3552a5..2b74722d8f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidCrafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidCrafter.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; @@ -10,6 +11,7 @@ import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.LiquidBlock; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Timers; public class LiquidCrafter extends LiquidBlock{ @@ -21,7 +23,7 @@ public class LiquidCrafter extends LiquidBlock{ public Item output = null; public int itemCapacity = 90; public int purifyTime = 80; - public String craftEffect = "purify"; + public Effect craftEffect = Fx.purify; public LiquidCrafter(String name) { super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java index 4edc0d5274..f12f119e22 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java @@ -6,12 +6,14 @@ import java.io.IOException; import com.badlogic.gdx.math.Vector2; +import io.anuke.mindustry.Fx; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.LiquidAcceptor; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Timers; public class LiquidPowerGenerator extends Generator implements LiquidAcceptor{ @@ -22,7 +24,7 @@ public class LiquidPowerGenerator extends Generator implements LiquidAcceptor{ /**How much liquid to consume to get one generatePower.*/ public float inputLiquid = 5f; public float liquidCapacity = 30f; - public String generateEffect = "generate"; + public Effect generateEffect = Fx.generate; public LiquidPowerGenerator(String name) { super(name); diff --git a/core/src/io/anuke/ucore/function/EffectProvider.java b/core/src/io/anuke/ucore/function/EffectProvider.java index 141601399b..4f40ffe705 100644 --- a/core/src/io/anuke/ucore/function/EffectProvider.java +++ b/core/src/io/anuke/ucore/function/EffectProvider.java @@ -2,6 +2,8 @@ package io.anuke.ucore.function; import com.badlogic.gdx.graphics.Color; +import io.anuke.ucore.core.Effects.Effect; + public interface EffectProvider{ - public void createEffect(String name, Color color, float x, float y, float rotation); + public void createEffect(Effect effect, Color color, float x, float y, float rotation); } diff --git a/desktop/mindustry-saves/0.mins b/desktop/mindustry-saves/0.mins index 45bc7ffc0ea3409eac81f02a4610fc7ce40292e6..e7e476f70ce95ac01e0416f0cbc320225bec44c0 100644 GIT binary patch literal 1591 zcmZQzVBln6V2r=;(Ik?Afq~JLVc8t#my<8JaM>_1FfgPru(L79wKT9W$hBCpGRU=< zGJ?3w400`H3=DEDZA>680|NsC7X!oT%M1(*RSXQ$Dj)#{Ed~b32Q85s2RVJyuJU>3-Z zjWCvuA&kXm0%mD5FbKn0l3QV7DyDE2Tud7xrp3S@Vg{2{hp@C57^Jp?#k3e0_;>#+{?hoz`y|Z zjRpe)gOY7INJ^Z6L1}LVl%;H231jUAF&MNN7>sSfEG-5GiG47ZtR2`aQ4k+wmh3)M zz8spoB19fxw_Q6(E68q$j3WaB1G56ieIRiLeg+0*yG{^OoPj~Y9>f4823dQsHB2CN zAZtP5vis4*K$3eH804U8L2AHinHU%x4l?xFcQ7!>LG*|+GcYiK#ls^EALj?y|9O^;zYcVhwz)d%X zh-ou0a2*7h28v-GI7<-Dl5>RE2=XP^Mg|53xr3Nu@{X{Wl!wUjF)%PNMKCZhC^*6* zP|gXW4^$k0%>udpFav|U6D*YE55Yo7!3h>hYKLI%({%!~v=|s<4#QZo&JZ(^-6wk( zO$;O%$G{*5RSUNtloVbu6xoY0Fvvmlh=P=Y+$IlI3*&?AlZU85O$rcom`Op_1?&h! z);NO7mqU}+Z~<8XiUuxs7)#It#!`f^Kwduy7Sm#2(Dj6|)V#nfZ3YINQ(%@B0|VC? z7)u<&(q>@LgtO$%!DMwIEKu;Vhm2u$UGDgVF^s3uGRIrNzL& ndl4+A#lWB%2xDuO_6L2axD$4406qH z85rc+co-SvnjKgeb$%yy@pG2p6v` zBTSYVq*#s-r1vjOuN+*K37ae{s$N!*-hXhtOfXrHs~B0BK(arfvWzS&Fj)>p1_s7B z7Le>$m~0#qlM4p}D~tMr~j0;kX@GoN=3rH~=T$X_m8X909*)YPm3}7!XFu1V) z{|!|P4l9UJ>>ybiMvyGR3vj&DRtofjyw5<`UWg+>AqjRfvKPSK=Y;ua z3D}WXJP3Cr#3+c5F#XH^A1U@>9t4M^9Gb~2ps<2j#25z;c8DWcko7XgVOj)n2Ha!_ z7or!RbC?1gZ_7X5*RBzmNv*$d7oC`pC= zKN1%dI9Ngwt3|9J#R$D{i@2|{8g`60$>4iBGocAGKz@-@5@* z6@zlwG-gow3@`eoq4@|i0ki*yB{K#aaEe8WGFZtE@h><{!b}DyLgb(WCqhKY4^Apz z#b7UheT3k`>m!KCnD!!@j22e#`UsphKvfJPZ7{|$FfeqBGcYi0VPG(w%m4zK3=BHc zK@0{>1_mt&FiV4h!C)qgB`*bLX)-XVN`qM%3=CRumgQ`inAtoqON)WQYyp_1$-uz3 z5X{nGU=UD(vBVa`Sdws-v@%Rg8ZIWc6fCC6z#yjvW@#}n=tEc<3=Fa>U}DlM!7L31 z1~~{zi-AFQHB3w%!UFjX!qQ@3uz;{YVr#(aG#MDAbiphQ1_o(3OKvSpj9(ANk~4s@ z1Poy;ej^x53eM8o3>MR5U@$cXvoshO#7tl;@hvcxs0Ez06U@?LU@)+elYv3V1uUz{z#!rRF&UJhRltG_3?fGmVsP7B+Cj1)+aR*M3=9lR5ey6rVlJIf z8Sx_^2FMR0t`HMIzJr_K3eFlJ6OPURDHLO15OW1*4KW4=LsyUx$i2dD5WOH5!So6r z!xR&NszbIz1fos^rdJfI2F7P#XQ*#rh>m8kJUR zH?Wu{1B0+T*m^`lIF8B}L6X;EU|^6q4%Vr~z@P(RX)-YA!&xF8VBO$^na5z)v3VB* zgUAVp7|5Y{40dz%4l*!^dw@;RWMEK&u(TK$lp!ol1_r|uFj)~#uwHPZQG>xz0VFPR z5-er|HSfut#|#XjP<4<1gQ`1)qE6w6IRk^RH(1OQq&Es=7%1tV#uO95qE6&ASc4V= zgRl=+2Oo&9!NAPLz#x1EECMDp7??R37(^gyz?oW;!AUl^o>`WGK@=j&33aD@s{#Xq zybs76aPsg48-VJ%vzTHcSky`T!c37l2V;qy2eUL87(@fWEG-5G$%|l?CIf?IAeg1a zz@QccW`PRg%V3rk1A_{LrOCjc76KE~hOjgl7<8|I#WWchtRP~b_zQ)J$%bRPS@t@n znEZ8^4yg#REVzXWix;UI2(fsOLLR322BtKBCa+aY<{eCm8<_aFFn!Kvy0e7oSOe3# zQ%utvm>QxP7^IQRih=7(J;CHx$7Jrnq%fC>a~0F)WlWFGF&&Lz+E~vteH~N7A_fL& zh<)JVT7wZ3Ln2O6PJbB~WFZFHg3Rh+a0J&{vJk~6QKbtiG8jN*gj6KN=^#U3-jRif zq3Dpk308+9CKUx1V}a{sWKwKkV33EH1FC|e(G)N+Fi1nhPz;j34OR!uix6kaU{R+R z4e}V+*)d=p2&+LRL&Q)`z5`Z=A|``HonS27a8)sPrxU|>*50xQ&DU=Vx^W@#}n z$UFhFG#D5xQ@|`x_JN3LF)$cBg^7ti1G7MmP6M+v7#NfwVj2t#`k7!cO$G*I2uq8B r!TcpmOg9V0GI|ALS-u9dv=|sTb6_l^w_uhg0|QSUm<2NBD})6A3BJQC diff --git a/desktop/mindustry-saves/1.mins b/desktop/mindustry-saves/1.mins index 501a5cb3188c41e0d1db8f6f35490b295ad32fd9..ac5303ac6ab70377624e4bfbd146b5725d0bb9b6 100644 GIT binary patch literal 2375 zcmZQzVBln6V2r<*`s^G70|S%uLXC9iFGs$*@I94dU|>jLU}t5JYx>W|AlK5s%plh^ zjgdjFIfDtrWnhqNS<1p7*Q~_Az`(%8z;OC90|Ucq1_o&rkN|@g1B2vpFiV?(K}sFW z(qdpx)P%95R>4>b5SBIrgO(OdOlviarK$^NX)`bwtp&5R7#IxKfmzxN40`%7mgWX9 z3uMPe7)!?x#^N&pv$Po)gyAg7tuQeaQ#cDQrVSC(Vqg$4gUPBxSXvAWQrp2|S_};Q zJ76p!3m8ik!qR47(6EGw8N*q!RxmLoD+Wde1_mDxKMF)JFfb_X0*irNt^tw-ag`wo z9T*rG7}tRXL97W349dGYLHfiQ7>p36T7$HpnYtS+hGweu45()1-7}#q&D|gdgEj+$ zs12B<#lWCo1J;bU&tN_#7yEM?nDD9hLu!~i8ziG47ZtR2`AQ4n8)fq_AG z9}*uH>T+m`6d-)KwF>)SfvRW+3sgmjL2xxncI_ZLKu&|mI5IFWFe|{UV02?(P_~2l zOTr$c7UWV{d$4<$KO63p0qEx{F7NvR+y;=+m25^&&A!6DL3|t36CV*_? zfwKhREICJrZ6F`QY?C{PDJJg-i#d6SEFY-cj9_43P;i7rn4A+t9}_gFLH5c!!9qv= z5G-^QoM54&b_k>fCyb@$1!ie8FzB2Dv$Pl(xX!>>;t-ZL1A```V-DEe*^Ja!rv8403Ic zSQ+G+m$NX)H8(Oc$Td5#fn*sN7(^KvUD$t|anbys%gDgMAjin$;wp6BMV9L^n9IQ6 z9GddmB~<(@69WT71p}iC`L0WHJBGSKsy#Vsy>pd>9NvseqlZ(%%JuZIhMZjD}2ImIOGcFo4 zd7ye3y2Tk77`8Gnm`-K@0Zj%5o#`M3gC+xmmIRok!N6cJ6ULI40<$z37*wUfEDZ(* zEjY_^HcZTH9+;)Yz+koj%+h3F;9Cf0X)rJdD8X1_i(xEDI7?a?CMFFRlUoWF(_~+EDZ(**%dG`>6KuX1_Of}gr&v6AiEkSCJ$kO{03oZF)&y_SRk=AV0D@d z3{tvamIecZG@K>37AD582V=<@z*qu?Fc!ZNj3otU>1_s!X)-XF8iQFH3=Co>FqZfh z7)#Uw&e{oPX)!RE*uYr)_Ar+4ei%y{&N73utPa3rg&i3{5iJ7ZYcMb{2p>e{iy+B^ zB3sxAEYAee1X2&uCwvG~Oa!V9Bo9hh42%qp2@DJphd=_Lq@xXI2|0tsv=|sfoFN8* z_+Z1C7;G9CBpVqRM4ih)f?^B|qK7M>EHURwC`;imh`|5~3OLIY!qQ}55OM*_YBDg0 zxIoMYIbH=M2yv9i5ri<GYiO^qccFt#TXdGT)~+|jDf+>6(j_5xUd_<1d!9fCV=AN7^avA zR2|$VMh3@)3=AR=r6MrxqEKZpJ_8p+eFH;QGlS212Hji+{sx9mnGBb68FsB=n5ECq z;LgCHeGKLlBRI>-4J@X~z#!}nb_yby97pAgAjxYnFfd3Q2kX>gV9b}Bz#s+@O)0ko+ zSk#G}25Zn_U=a2J>)-?NH5iz=7#M`lfJMNB1_LuE1A_=e4LHkdGC0XH|6!J8U=W3f zav{4@3?hc&c6lF=+2G{k3pNzh#b+_aM6jrn_Jx@ua}LH5I}c`QGBAh+fLU4$43ZbY zEKLRm%Rn$oi-AEc2+RT%-Iu{EEd~Y^2uqWJK`jI(rVU|fGBD^~0gGueFjzsvKyexh z6O#?cbhGSrOfmWEFdb46U|AM;T(L3LH!wx(Gr6o_(m2N?R?oyx!oVPP1EDG&q?HGx zDz$_u_!yJGN>`pTL7a+%C6 znG{wsafUN}UdQyPlj&#&)5fz*(@!up%wuXe%hb@#)Uc9)K^kH)xa`+p1VyNbla$k6 z1_oJ($+jRvd!Tth7NQs>7Ii^o4g;u=k&1-)0b~d`RYLqQi^=m8lX)kTLKhQfDAQ+K zrt9uZM>Ck#uK@dD4+DcNL?4Q&vNyqIp@>OEfyG$R%-_i5f0oH&4U?iP6K5FHmn^0` z`Ao+aF|E76G-nZ0Lk|OkJlHW{7e=F*zzq(qM5d4#Oy=oK3Uis*6Pcd0GaW5w+Ty}A zy`HHdkbyxOq6x(*(zn3|p%f4@Sk&o7gMtribqrVsy5pUh{1ceWjhPhlnK*TsJ~uJl zsbxBr%CvkP(~Kod4FwDg(hz;9w%-Apg(4<{MV(+Q-1bx*iI$eZ4Q!bX}%~s|*ZMacKG=0d|7PuN@TR3R{^t&6qxiGTrrOI<}u_oi5XK z9R>z*Z~_K-TH-#~0a^?UQt@a8F)%PlC18q)C4zN;8Ze2NvQiIWvKkO|8Vn3lNnmy0 zW(*_&GcYiyB!LxbFfa%{2D7vn7-XJ+SsDxsmMLHssGxv|X)!PuJcWsgJ_EBrj!px! zG#D6^AYvK}4EmX1F--;rV+c!&fx-MGOiVWm#xi;ZV_Ciiv$Pl(ICEeuqqks|CIbUc M9+(9(