diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java
index d532734999..0f6ab0924b 100644
--- a/android/src/io/anuke/mindustry/AndroidLauncher.java
+++ b/android/src/io/anuke/mindustry/AndroidLauncher.java
@@ -26,7 +26,7 @@ import io.anuke.kryonet.KryoServer;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
import io.anuke.mindustry.io.SaveIO;
-import io.anuke.mindustry.io.Saves.SaveSlot;
+import io.anuke.mindustry.game.Saves.SaveSlot;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.ui.dialogs.FileChooser;
import io.anuke.ucore.function.Consumer;
diff --git a/core/src/Mindustry.gwt.xml b/core/src/Mindustry.gwt.xml
index 95e2e371aa..685a8675a6 100644
--- a/core/src/Mindustry.gwt.xml
+++ b/core/src/Mindustry.gwt.xml
@@ -3,7 +3,7 @@
-
+
diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java
index 18cb9c3ea7..fd8d756027 100644
--- a/core/src/io/anuke/mindustry/Vars.java
+++ b/core/src/io/anuke/mindustry/Vars.java
@@ -15,7 +15,7 @@ import io.anuke.mindustry.entities.effect.Shield;
import io.anuke.mindustry.entities.traits.SyncTrait;
import io.anuke.mindustry.entities.units.BaseUnit;
import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.io.Version;
+import io.anuke.mindustry.game.Version;
import io.anuke.mindustry.net.Net;
import io.anuke.ucore.entities.Entities;
import io.anuke.ucore.entities.EntityGroup;
diff --git a/core/src/io/anuke/mindustry/ai/WaveSpawner.java b/core/src/io/anuke/mindustry/ai/WaveSpawner.java
index 96635c2576..b6221b180f 100644
--- a/core/src/io/anuke/mindustry/ai/WaveSpawner.java
+++ b/core/src/io/anuke/mindustry/ai/WaveSpawner.java
@@ -7,7 +7,7 @@ import io.anuke.mindustry.entities.units.Squad;
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.game.SpawnGroup;
import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.game.WaveCreator;
+import io.anuke.mindustry.game.Waves;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.util.Mathf;
@@ -169,7 +169,7 @@ public class WaveSpawner{
quadrants = new Bits(quadWidth() * quadHeight());
if(groups == null){
- groups = WaveCreator.getSpawns();
+ groups = Waves.getSpawns();
}
}
diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java
index 78ee87ed73..38816ced32 100644
--- a/core/src/io/anuke/mindustry/core/Control.java
+++ b/core/src/io/anuke/mindustry/core/Control.java
@@ -17,8 +17,8 @@ import io.anuke.mindustry.input.DefaultKeybinds;
import io.anuke.mindustry.input.DesktopInput;
import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.input.MobileInput;
-import io.anuke.mindustry.io.Map;
-import io.anuke.mindustry.io.Saves;
+import io.anuke.mindustry.maps.Map;
+import io.anuke.mindustry.game.Saves;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java
index fa2c5ac999..27da0142d2 100644
--- a/core/src/io/anuke/mindustry/core/NetServer.java
+++ b/core/src/io/anuke/mindustry/core/NetServer.java
@@ -14,7 +14,7 @@ import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.traits.SyncTrait;
import io.anuke.mindustry.gen.Call;
import io.anuke.mindustry.gen.RemoteReadServer;
-import io.anuke.mindustry.io.Version;
+import io.anuke.mindustry.game.Version;
import io.anuke.mindustry.net.*;
import io.anuke.mindustry.net.Administration.PlayerInfo;
import io.anuke.mindustry.net.Packets.*;
diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java
index 65aa2f3eda..1447b1b5f7 100644
--- a/core/src/io/anuke/mindustry/core/Renderer.java
+++ b/core/src/io/anuke/mindustry/core/Renderer.java
@@ -256,7 +256,7 @@ public class Renderer extends RendererModule{
private void drawFlyerShadows(){
Graphics.surface(effectSurface, true, false);
- float trnsX = 12, trnsY = -13;
+ float trnsX = -12, trnsY = -13;
Graphics.end();
Core.batch.getTransformMatrix().translate(trnsX, trnsY, 0);
diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java
index 0a6a0300de..a691cef20f 100644
--- a/core/src/io/anuke/mindustry/core/World.java
+++ b/core/src/io/anuke/mindustry/core/World.java
@@ -11,10 +11,10 @@ import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.game.EventType.TileChangeEvent;
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.io.Map;
+import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.io.MapIO;
-import io.anuke.mindustry.io.MapMeta;
-import io.anuke.mindustry.io.Maps;
+import io.anuke.mindustry.maps.MapMeta;
+import io.anuke.mindustry.maps.Maps;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.mapgen.WorldGenerator;
diff --git a/core/src/io/anuke/mindustry/editor/DrawOperation.java b/core/src/io/anuke/mindustry/editor/DrawOperation.java
index 421a34bd6c..d2b434e21f 100755
--- a/core/src/io/anuke/mindustry/editor/DrawOperation.java
+++ b/core/src/io/anuke/mindustry/editor/DrawOperation.java
@@ -2,8 +2,8 @@ package io.anuke.mindustry.editor;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.IntSet;
-import io.anuke.mindustry.io.MapTileData;
-import io.anuke.mindustry.io.MapTileData.TileDataMarker;
+import io.anuke.mindustry.maps.MapTileData;
+import io.anuke.mindustry.maps.MapTileData.TileDataMarker;
import io.anuke.ucore.util.Bits;
public class DrawOperation{
diff --git a/core/src/io/anuke/mindustry/editor/EditorTool.java b/core/src/io/anuke/mindustry/editor/EditorTool.java
index 70c69897e1..662b03efe0 100644
--- a/core/src/io/anuke/mindustry/editor/EditorTool.java
+++ b/core/src/io/anuke/mindustry/editor/EditorTool.java
@@ -3,8 +3,8 @@ package io.anuke.mindustry.editor;
import com.badlogic.gdx.utils.IntArray;
import com.badlogic.gdx.utils.IntSet;
import io.anuke.mindustry.content.blocks.Blocks;
-import io.anuke.mindustry.io.MapTileData.DataPosition;
-import io.anuke.mindustry.io.MapTileData.TileDataMarker;
+import io.anuke.mindustry.maps.MapTileData.DataPosition;
+import io.anuke.mindustry.maps.MapTileData.TileDataMarker;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.ucore.util.Bits;
diff --git a/core/src/io/anuke/mindustry/editor/MapEditor.java b/core/src/io/anuke/mindustry/editor/MapEditor.java
index 0f61541c3f..640ad78520 100644
--- a/core/src/io/anuke/mindustry/editor/MapEditor.java
+++ b/core/src/io/anuke/mindustry/editor/MapEditor.java
@@ -5,9 +5,9 @@ import io.anuke.mindustry.Vars;
import io.anuke.mindustry.content.blocks.Blocks;
import io.anuke.mindustry.editor.DrawOperation.TileOperation;
import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.io.MapTileData;
-import io.anuke.mindustry.io.MapTileData.DataPosition;
-import io.anuke.mindustry.io.MapTileData.TileDataMarker;
+import io.anuke.mindustry.maps.MapTileData;
+import io.anuke.mindustry.maps.MapTileData.DataPosition;
+import io.anuke.mindustry.maps.MapTileData.TileDataMarker;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.ucore.util.Bits;
diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java
index f004d59c63..b28b17fe1c 100644
--- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java
+++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java
@@ -11,10 +11,10 @@ import com.badlogic.gdx.utils.ObjectMap;
import io.anuke.mindustry.content.blocks.StorageBlocks;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.io.Map;
+import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.io.MapIO;
-import io.anuke.mindustry.io.MapMeta;
-import io.anuke.mindustry.io.MapTileData;
+import io.anuke.mindustry.maps.MapMeta;
+import io.anuke.mindustry.maps.MapTileData;
import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import io.anuke.mindustry.world.Block;
diff --git a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java b/core/src/io/anuke/mindustry/editor/MapLoadDialog.java
index c9c249636e..a657da6f8b 100644
--- a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java
+++ b/core/src/io/anuke/mindustry/editor/MapLoadDialog.java
@@ -1,6 +1,6 @@
package io.anuke.mindustry.editor;
-import io.anuke.mindustry.io.Map;
+import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.ui.BorderImage;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import io.anuke.ucore.core.Core;
diff --git a/core/src/io/anuke/mindustry/editor/MapRenderer.java b/core/src/io/anuke/mindustry/editor/MapRenderer.java
index b86c8bf7e1..48ad02cf68 100644
--- a/core/src/io/anuke/mindustry/editor/MapRenderer.java
+++ b/core/src/io/anuke/mindustry/editor/MapRenderer.java
@@ -7,7 +7,7 @@ import com.badlogic.gdx.utils.Disposable;
import com.badlogic.gdx.utils.IntSet;
import com.badlogic.gdx.utils.IntSet.IntSetIterator;
import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.io.MapTileData.DataPosition;
+import io.anuke.mindustry.maps.MapTileData.DataPosition;
import io.anuke.mindustry.world.Block;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Graphics;
diff --git a/core/src/io/anuke/mindustry/editor/MapResizeDialog.java b/core/src/io/anuke/mindustry/editor/MapResizeDialog.java
index a5ffc63835..84f2ae4d51 100644
--- a/core/src/io/anuke/mindustry/editor/MapResizeDialog.java
+++ b/core/src/io/anuke/mindustry/editor/MapResizeDialog.java
@@ -1,6 +1,6 @@
package io.anuke.mindustry.editor;
-import io.anuke.mindustry.io.MapTileData;
+import io.anuke.mindustry.maps.MapTileData;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import io.anuke.ucore.function.BiConsumer;
import io.anuke.ucore.scene.ui.ButtonGroup;
diff --git a/core/src/io/anuke/mindustry/editor/MapSaveDialog.java b/core/src/io/anuke/mindustry/editor/MapSaveDialog.java
index c11318298b..97fafb8884 100644
--- a/core/src/io/anuke/mindustry/editor/MapSaveDialog.java
+++ b/core/src/io/anuke/mindustry/editor/MapSaveDialog.java
@@ -1,7 +1,7 @@
package io.anuke.mindustry.editor;
import io.anuke.mindustry.core.Platform;
-import io.anuke.mindustry.io.Map;
+import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.scene.ui.TextButton;
diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java
index 9a4641dce2..cf69d83df1 100644
--- a/core/src/io/anuke/mindustry/entities/Player.java
+++ b/core/src/io/anuke/mindustry/entities/Player.java
@@ -276,7 +276,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
@Override
public void drawShadow(){
- Draw.rect(mech.iconRegion, x + elevation * elevationScale, y - elevation * elevationScale, rotation - 90);
+ Draw.rect(mech.iconRegion, x - elevation * elevationScale, y - elevation * elevationScale, rotation - 90);
}
@Override
diff --git a/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java b/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java
index b003e03984..60c7c8ff0a 100644
--- a/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java
+++ b/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java
@@ -125,7 +125,7 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{
@Override
public void drawShadow(){
- Draw.rect(type.region, x + elevation * elevationScale, y - elevation * elevationScale, rotation - 90);
+ Draw.rect(type.region, x - elevation * elevationScale, y - elevation * elevationScale, rotation - 90);
}
@Override
diff --git a/core/src/io/anuke/mindustry/io/Saves.java b/core/src/io/anuke/mindustry/game/Saves.java
similarity index 97%
rename from core/src/io/anuke/mindustry/io/Saves.java
rename to core/src/io/anuke/mindustry/game/Saves.java
index 0fd1792034..599bcdfeab 100644
--- a/core/src/io/anuke/mindustry/io/Saves.java
+++ b/core/src/io/anuke/mindustry/game/Saves.java
@@ -1,11 +1,12 @@
-package io.anuke.mindustry.io;
+package io.anuke.mindustry.game;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.core.GameState.State;
-import io.anuke.mindustry.game.Difficulty;
import io.anuke.mindustry.game.EventType.StateChangeEvent;
-import io.anuke.mindustry.game.GameMode;
+import io.anuke.mindustry.maps.Map;
+import io.anuke.mindustry.io.SaveIO;
+import io.anuke.mindustry.io.SaveMeta;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Settings;
import io.anuke.ucore.core.Timers;
diff --git a/core/src/io/anuke/mindustry/io/Version.java b/core/src/io/anuke/mindustry/game/Version.java
similarity index 96%
rename from core/src/io/anuke/mindustry/io/Version.java
rename to core/src/io/anuke/mindustry/game/Version.java
index 8bd816fb89..7471376622 100644
--- a/core/src/io/anuke/mindustry/io/Version.java
+++ b/core/src/io/anuke/mindustry/game/Version.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.io;
+package io.anuke.mindustry.game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
diff --git a/core/src/io/anuke/mindustry/game/WaveCreator.java b/core/src/io/anuke/mindustry/game/WaveCreator.java
deleted file mode 100644
index a5e5e25340..0000000000
--- a/core/src/io/anuke/mindustry/game/WaveCreator.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package io.anuke.mindustry.game;
-
-import com.badlogic.gdx.utils.Array;
-import io.anuke.mindustry.content.Items;
-import io.anuke.mindustry.content.StatusEffects;
-import io.anuke.mindustry.content.UnitTypes;
-import io.anuke.mindustry.content.Weapons;
-import io.anuke.mindustry.type.ItemStack;
-
-public class WaveCreator{
-
- public static Array getSpawns(){
- return Array.with(
- new SpawnGroup(UnitTypes.scout){{
- end = 8;
- unitScaling = 2;
- }},
-
- new SpawnGroup(UnitTypes.vtol){{
- begin = 12;
- end = 14;
- }},
-
- new SpawnGroup(UnitTypes.scout){{
- begin = 11;
- unitScaling = 2;
- spacing = 2;
- max = 4;
- }},
-
- new SpawnGroup(UnitTypes.titan){{
- begin = 9;
- spacing = 3;
- unitScaling = 2;
-
- end = 30;
- }},
-
- new SpawnGroup(UnitTypes.scout){{
- begin = 10;
- unitScaling = 2;
- unitAmount = 1;
- spacing = 2;
- ammoItem = Items.tungsten;
- end = 30;
- }},
-
- new SpawnGroup(UnitTypes.titan){{
- begin = 28;
- spacing = 3;
- unitScaling = 2;
- weapon = Weapons.flamethrower;
- end = 40;
- }},
-
- new SpawnGroup(UnitTypes.titan){{
- begin = 45;
- spacing = 3;
- unitScaling = 2;
- weapon = Weapons.flamethrower;
- effect = StatusEffects.overdrive;
- }},
-
- new SpawnGroup(UnitTypes.titan){{
- begin = 120;
- spacing = 2;
- unitScaling = 3;
- unitAmount = 5;
- weapon = Weapons.flakgun;
- effect = StatusEffects.overdrive;
- }},
-
- new SpawnGroup(UnitTypes.vtol){{
- begin = 16;
- unitScaling = 2;
- spacing = 2;
-
- end = 39;
- max = 7;
- }},
-
- new SpawnGroup(UnitTypes.scout){{
- begin = 82;
- spacing = 3;
- unitAmount = 4;
- groupAmount = 2;
- unitScaling = 3;
- effect = StatusEffects.overdrive;
- ammoItem = Items.silicon;
- }},
-
- new SpawnGroup(UnitTypes.scout){{
- begin = 41;
- spacing = 5;
- unitAmount = 1;
- unitScaling = 3;
- effect = StatusEffects.shielded;
- ammoItem = Items.thorium;
- max = 10;
- }},
-
- new SpawnGroup(UnitTypes.scout){{
- begin = 35;
- spacing = 3;
- unitAmount = 4;
- groupAmount = 2;
- effect = StatusEffects.overdrive;
- items = new ItemStack(Items.blastCompound, 60);
- end = 60;
- }},
-
- new SpawnGroup(UnitTypes.scout){{
- begin = 42;
- spacing = 3;
- unitAmount = 4;
- groupAmount = 2;
- effect = StatusEffects.overdrive;
- items = new ItemStack(Items.pyratite, 100);
- end = 130;
- }},
-
- new SpawnGroup(UnitTypes.monsoon){{
- begin = 40;
- ammoItem = Items.blastCompound;
- unitAmount = 2;
- spacing = 2;
- unitScaling = 3;
- max = 8;
- }},
-
- new SpawnGroup(UnitTypes.vtol){{
- begin = 50;
- unitAmount = 4;
- unitScaling = 3;
- spacing = 5;
- groupAmount = 2;
- effect = StatusEffects.overdrive;
- max = 8;
- }},
-
- new SpawnGroup(UnitTypes.monsoon){{
- begin = 53;
- ammoItem = Items.pyratite;
- unitAmount = 2;
- unitScaling = 3;
- spacing = 4;
- max = 8;
- end = 74;
- }},
-
- new SpawnGroup(UnitTypes.monsoon){{
- begin = 53;
- ammoItem = Items.coal;
- unitAmount = 2;
- unitScaling = 3;
- spacing = 4;
- max = 8;
- end = 74;
- }}
- );
- }
-
- public static void testWaves(int from, int to){
- Array spawns = getSpawns();
- for(int i = from; i <= to; i++){
- System.out.print(i + ": ");
- int total = 0;
- for(SpawnGroup spawn : spawns){
- int a = spawn.getUnitsSpawned(i) * spawn.getGroupsSpawned(i);
- total += a;
-
- if(a > 0){
- System.out.print(a + "x" + spawn.type.name);
-
- if(spawn.weapon != null){
- System.out.print(":" + spawn.weapon.name);
- }
-
- if(spawn.ammoItem != null){
- System.out.print(":" + spawn.ammoItem.name);
- }
-
- System.out.print(" ");
- }
- }
- System.out.print(" (" + total + ")");
- System.out.println();
- }
- }
-}
diff --git a/core/src/io/anuke/mindustry/game/Waves.java b/core/src/io/anuke/mindustry/game/Waves.java
new file mode 100644
index 0000000000..1d07b89bd5
--- /dev/null
+++ b/core/src/io/anuke/mindustry/game/Waves.java
@@ -0,0 +1,190 @@
+package io.anuke.mindustry.game;
+
+import com.badlogic.gdx.utils.Array;
+import io.anuke.mindustry.content.Items;
+import io.anuke.mindustry.content.StatusEffects;
+import io.anuke.mindustry.content.UnitTypes;
+import io.anuke.mindustry.content.Weapons;
+import io.anuke.mindustry.type.ItemStack;
+
+public class Waves{
+
+ public static Array getSpawns(){
+ return Array.with(
+ new SpawnGroup(UnitTypes.scout){{
+ end = 8;
+ unitScaling = 2;
+ }},
+
+ new SpawnGroup(UnitTypes.vtol){{
+ begin = 12;
+ end = 14;
+ }},
+
+ new SpawnGroup(UnitTypes.scout){{
+ begin = 11;
+ unitScaling = 2;
+ spacing = 2;
+ max = 4;
+ }},
+
+ new SpawnGroup(UnitTypes.titan){{
+ begin = 9;
+ spacing = 3;
+ unitScaling = 2;
+
+ end = 30;
+ }},
+
+ new SpawnGroup(UnitTypes.scout){{
+ begin = 10;
+ unitScaling = 2;
+ unitAmount = 1;
+ spacing = 2;
+ ammoItem = Items.tungsten;
+ end = 30;
+ }},
+
+ new SpawnGroup(UnitTypes.titan){{
+ begin = 28;
+ spacing = 3;
+ unitScaling = 2;
+ weapon = Weapons.flamethrower;
+ end = 40;
+ }},
+
+ new SpawnGroup(UnitTypes.titan){{
+ begin = 45;
+ spacing = 3;
+ unitScaling = 2;
+ weapon = Weapons.flamethrower;
+ effect = StatusEffects.overdrive;
+ }},
+
+ new SpawnGroup(UnitTypes.titan){{
+ begin = 120;
+ spacing = 2;
+ unitScaling = 3;
+ unitAmount = 5;
+ weapon = Weapons.flakgun;
+ effect = StatusEffects.overdrive;
+ }},
+
+ new SpawnGroup(UnitTypes.vtol){{
+ begin = 16;
+ unitScaling = 2;
+ spacing = 2;
+
+ end = 39;
+ max = 7;
+ }},
+
+ new SpawnGroup(UnitTypes.scout){{
+ begin = 82;
+ spacing = 3;
+ unitAmount = 4;
+ groupAmount = 2;
+ unitScaling = 3;
+ effect = StatusEffects.overdrive;
+ ammoItem = Items.silicon;
+ }},
+
+ new SpawnGroup(UnitTypes.scout){{
+ begin = 41;
+ spacing = 5;
+ unitAmount = 1;
+ unitScaling = 3;
+ effect = StatusEffects.shielded;
+ ammoItem = Items.thorium;
+ max = 10;
+ }},
+
+ new SpawnGroup(UnitTypes.scout){{
+ begin = 35;
+ spacing = 3;
+ unitAmount = 4;
+ groupAmount = 2;
+ effect = StatusEffects.overdrive;
+ items = new ItemStack(Items.blastCompound, 60);
+ end = 60;
+ }},
+
+ new SpawnGroup(UnitTypes.scout){{
+ begin = 42;
+ spacing = 3;
+ unitAmount = 4;
+ groupAmount = 2;
+ effect = StatusEffects.overdrive;
+ items = new ItemStack(Items.pyratite, 100);
+ end = 130;
+ }},
+
+ new SpawnGroup(UnitTypes.monsoon){{
+ begin = 40;
+ ammoItem = Items.blastCompound;
+ unitAmount = 2;
+ spacing = 2;
+ unitScaling = 3;
+ max = 8;
+ }},
+
+ new SpawnGroup(UnitTypes.vtol){{
+ begin = 50;
+ unitAmount = 4;
+ unitScaling = 3;
+ spacing = 5;
+ groupAmount = 2;
+ effect = StatusEffects.overdrive;
+ max = 8;
+ }},
+
+ new SpawnGroup(UnitTypes.monsoon){{
+ begin = 53;
+ ammoItem = Items.pyratite;
+ unitAmount = 2;
+ unitScaling = 3;
+ spacing = 4;
+ max = 8;
+ end = 74;
+ }},
+
+ new SpawnGroup(UnitTypes.monsoon){{
+ begin = 53;
+ ammoItem = Items.coal;
+ unitAmount = 2;
+ unitScaling = 3;
+ spacing = 4;
+ max = 8;
+ end = 74;
+ }}
+ );
+ }
+
+ public static void testWaves(int from, int to){
+ Array spawns = getSpawns();
+ for(int i = from; i <= to; i++){
+ System.out.print(i + ": ");
+ int total = 0;
+ for(SpawnGroup spawn : spawns){
+ int a = spawn.getUnitsSpawned(i) * spawn.getGroupsSpawned(i);
+ total += a;
+
+ if(a > 0){
+ System.out.print(a + "x" + spawn.type.name);
+
+ if(spawn.weapon != null){
+ System.out.print(":" + spawn.weapon.name);
+ }
+
+ if(spawn.ammoItem != null){
+ System.out.print(":" + spawn.ammoItem.name);
+ }
+
+ System.out.print(" ");
+ }
+ }
+ System.out.print(" (" + total + ")");
+ System.out.println();
+ }
+ }
+}
diff --git a/core/src/io/anuke/mindustry/io/MapIO.java b/core/src/io/anuke/mindustry/io/MapIO.java
index 5b10c9d7ed..ecb1de8578 100644
--- a/core/src/io/anuke/mindustry/io/MapIO.java
+++ b/core/src/io/anuke/mindustry/io/MapIO.java
@@ -8,8 +8,11 @@ import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.ObjectMap.Entry;
import io.anuke.mindustry.content.blocks.Blocks;
import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.io.MapTileData.DataPosition;
-import io.anuke.mindustry.io.MapTileData.TileDataMarker;
+import io.anuke.mindustry.maps.Map;
+import io.anuke.mindustry.maps.MapMeta;
+import io.anuke.mindustry.maps.MapTileData;
+import io.anuke.mindustry.maps.MapTileData.DataPosition;
+import io.anuke.mindustry.maps.MapTileData.TileDataMarker;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.ColorMapper;
diff --git a/core/src/io/anuke/mindustry/io/SaveMeta.java b/core/src/io/anuke/mindustry/io/SaveMeta.java
index f782e74db1..ac682ec423 100644
--- a/core/src/io/anuke/mindustry/io/SaveMeta.java
+++ b/core/src/io/anuke/mindustry/io/SaveMeta.java
@@ -3,6 +3,7 @@ package io.anuke.mindustry.io;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.game.Difficulty;
import io.anuke.mindustry.game.GameMode;
+import io.anuke.mindustry.maps.Map;
import java.util.Date;
diff --git a/core/src/io/anuke/mindustry/io/TypeIO.java b/core/src/io/anuke/mindustry/io/TypeIO.java
index 20307d4ef3..fe5e57cf8f 100644
--- a/core/src/io/anuke/mindustry/io/TypeIO.java
+++ b/core/src/io/anuke/mindustry/io/TypeIO.java
@@ -27,9 +27,7 @@ import java.nio.ByteBuffer;
import static io.anuke.mindustry.Vars.*;
-/**
- * Class for specifying read/write methods for code generation.
- */
+/** Class for specifying read/write methods for code generation.*/
public class TypeIO{
@WriteClass(Player.class)
diff --git a/core/src/io/anuke/mindustry/io/versions/Save16.java b/core/src/io/anuke/mindustry/io/versions/Save16.java
index afe056970c..fe9a57ddb2 100644
--- a/core/src/io/anuke/mindustry/io/versions/Save16.java
+++ b/core/src/io/anuke/mindustry/io/versions/Save16.java
@@ -9,9 +9,9 @@ import io.anuke.mindustry.entities.traits.TypeTrait;
import io.anuke.mindustry.game.Difficulty;
import io.anuke.mindustry.game.GameMode;
import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.io.Map;
+import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.io.SaveFileVersion;
-import io.anuke.mindustry.io.Version;
+import io.anuke.mindustry.game.Version;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.BlockPart;
diff --git a/core/src/io/anuke/mindustry/io/Map.java b/core/src/io/anuke/mindustry/maps/Map.java
similarity index 69%
rename from core/src/io/anuke/mindustry/io/Map.java
rename to core/src/io/anuke/mindustry/maps/Map.java
index 1959862c79..05e1a03e37 100644
--- a/core/src/io/anuke/mindustry/io/Map.java
+++ b/core/src/io/anuke/mindustry/maps/Map.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.io;
+package io.anuke.mindustry.maps;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.utils.ObjectMap;
@@ -7,25 +7,15 @@ import io.anuke.ucore.function.Supplier;
import java.io.InputStream;
public class Map{
- /**
- * Internal map name. This is the filename, without any extensions.
- */
+ /** Internal map name. This is the filename, without any extensions.*/
public final String name;
- /**
- * Whether this is a custom map.
- */
+ /** Whether this is a custom map.*/
public final boolean custom;
- /**
- * Metadata. Author description, display name, etc.
- */
+ /** Metadata. Author description, display name, etc.*/
public final MapMeta meta;
- /**
- * Supplies a new input stream with the data of this map.
- */
+ /** Supplies a new input stream with the data of this map.*/
public final Supplier stream;
- /**
- * Preview texture.
- */
+ /** Preview texture.*/
public Texture texture;
public Map(String name, MapMeta meta, boolean custom, Supplier streamSupplier){
diff --git a/core/src/io/anuke/mindustry/io/MapMeta.java b/core/src/io/anuke/mindustry/maps/MapMeta.java
similarity index 96%
rename from core/src/io/anuke/mindustry/io/MapMeta.java
rename to core/src/io/anuke/mindustry/maps/MapMeta.java
index ab554148c5..c731941297 100644
--- a/core/src/io/anuke/mindustry/io/MapMeta.java
+++ b/core/src/io/anuke/mindustry/maps/MapMeta.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.io;
+package io.anuke.mindustry.maps;
import com.badlogic.gdx.utils.IntIntMap;
import com.badlogic.gdx.utils.ObjectMap;
diff --git a/core/src/io/anuke/mindustry/io/MapTileData.java b/core/src/io/anuke/mindustry/maps/MapTileData.java
similarity index 99%
rename from core/src/io/anuke/mindustry/io/MapTileData.java
rename to core/src/io/anuke/mindustry/maps/MapTileData.java
index 1a2d307d40..de52f78dac 100644
--- a/core/src/io/anuke/mindustry/io/MapTileData.java
+++ b/core/src/io/anuke/mindustry/maps/MapTileData.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.io;
+package io.anuke.mindustry.maps;
import com.badlogic.gdx.utils.IntIntMap;
import io.anuke.ucore.util.Bits;
diff --git a/core/src/io/anuke/mindustry/io/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java
similarity index 79%
rename from core/src/io/anuke/mindustry/io/Maps.java
rename to core/src/io/anuke/mindustry/maps/Maps.java
index 92ccdbd779..f30447fe9a 100644
--- a/core/src/io/anuke/mindustry/io/Maps.java
+++ b/core/src/io/anuke/mindustry/maps/Maps.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.io;
+package io.anuke.mindustry.maps;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
@@ -7,6 +7,7 @@ import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Base64Coder;
import com.badlogic.gdx.utils.Disposable;
import com.badlogic.gdx.utils.ObjectMap;
+import io.anuke.mindustry.io.MapIO;
import io.anuke.ucore.core.Settings;
import io.anuke.ucore.function.Supplier;
import io.anuke.ucore.util.Log;
@@ -17,46 +18,30 @@ import java.io.*;
import static io.anuke.mindustry.Vars.*;
public class Maps implements Disposable{
- /**
- * List of all built-in maps.
- */
+ /**List of all built-in maps.*/
private static final String[] defaultMapNames = {};
- /**
- * Tile format version.
- */
+ /**Tile format version.*/
private static final int version = 0;
- /**
- * Maps map names to the real maps.
- */
+ /**Maps map names to the real maps.*/
private ObjectMap maps = new ObjectMap<>();
- /**
- * All maps stored in an ordered array.
- */
+ /**All maps stored in an ordered array.*/
private Array