From 8104173b3120ace83bfff3ff0c18b9175636f13e Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 10 Oct 2022 19:05:23 -0400 Subject: [PATCH] Ground zero tutorial from #7532 --- core/assets/bundles/bundle.properties | 36 ++++++++++++++---- core/assets/maps/groundZero.msav | Bin 13804 -> 16461 bytes core/src/mindustry/content/Blocks.java | 13 +++++-- core/src/mindustry/content/Items.java | 4 +- core/src/mindustry/content/SectorPresets.java | 1 + core/src/mindustry/game/MapObjectives.java | 2 +- core/src/mindustry/type/Planet.java | 2 +- core/src/mindustry/type/Weapon.java | 3 ++ .../mindustry/ui/fragments/HintsFragment.java | 12 ++---- tests/src/test/java/ApplicationTests.java | 31 +++++++++------ 10 files changed, 68 insertions(+), 36 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index bbf99f9fca..47cdc0e3aa 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1724,25 +1724,22 @@ team.blue.name = Blue hint.skip = Skip hint.desktopMove = Use [accent][[WASD][] to move. hint.zoom = [accent]Scroll[] to zoom in or out. -hint.mine = Move near the \uF8C4 copper ore and [accent]tap[] it to mine manually. hint.desktopShoot = [accent][[Left-click][] to shoot. hint.depositItems = To transfer items, drag from your ship to the core. hint.respawn = To respawn as a ship, press [accent][[V][]. hint.respawn.mobile = You have switched control to a unit/structure. To respawn as a ship, [accent]tap the avatar in the top left.[] hint.desktopPause = Press [accent][[Space][] to pause and unpause the game. -hint.placeDrill = Select the \uE85E [accent]Drill[] tab in the menu at the bottom right, then select a \uF870 [accent]Drill[] and click on a copper patch to place it. -hint.placeDrill.mobile = Select the \uE85E [accent]Drill[] tab in the menu at the bottom right, then select a \uF870 [accent]Drill[] and tap on a copper patch to place it.\n\nPress the \uE800 [accent]checkmark[] at the bottom right to confirm. -hint.placeConveyor = Conveyors move items from drills into other blocks. Select a \uF896 [accent]Conveyor[] from the \uE814 [accent]Distribution[] tab.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate. -hint.placeConveyor.mobile = Conveyors move items from drills into other blocks. Select a \uF896 [accent]Conveyor[] from the \uE814 [accent]Distribution[] tab.\n\nHold down your finger for a second and drag to place multiple conveyors. -hint.placeTurret = Place \uF861 [accent]Turrets[] to defend your base from enemies.\n\nTurrets require ammo - in this case, \uF838copper.\nUse conveyors and drills to supply them. + hint.breaking = [accent]Right-click[] and drag to break blocks. hint.breaking.mobile = Activate the \uE817 [accent]hammer[] in the bottom right and tap to break blocks.\n\nHold down your finger for a second and drag to break in a selection. hint.blockInfo = View information of a block by selecting it in the [accent]build menu[], then selecting the [accent][[?][] button at the right. hint.derelict = [accent]Derelict[] structures are broken remnants of old bases that no longer function.\n\nThese structures can be [accent]deconstructed[] for resources. hint.research = Use the \uE875 [accent]Research[] button to research new technology. hint.research.mobile = Use the \uE875 [accent]Research[] button in the \uE88C [accent]Menu[] to research new technology. -hint.unitControl = Hold [accent][[L-ctrl][] and [accent]click[] to control friendly units or turrets. -hint.unitControl.mobile = [accent][[Double-tap][] to control friendly units or turrets. +hint.unitControl = Hold [accent][[L-ctrl][] and [accent]click[] to manually control friendly units or turrets. +hint.unitControl.mobile = [accent][[Double-tap][] to manually control friendly units or turrets. +hint.unitSelectControl = To control units, enter [accent]command mode[] by holding [accent]L-shift.[]\nWhile in command mode, click and drag to select units. [accent]Right-click[] a location or target to command units there. +hint.unitSelectControl.mobile = To control units, enter [accent]command mode[] by pressing the [accent]command[] button in the bottom left.\nWhile in command mode, long-press and drag to select units. Tap a location or target to command units there. hint.launch = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \uE827 [accent]Map[] in the bottom right. hint.launch.mobile = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \uE827 [accent]Map[] in the \uE88C [accent]Menu[]. hint.schematicSelect = Hold [accent][[F][] and drag to select blocks to copy and paste.\n\n[accent][[Middle Click][] to copy a single block type. @@ -1763,6 +1760,29 @@ hint.coreIncinerate = After the core is filled to capacity with an item, any ext hint.factoryControl = To set a unit factory's [accent]output destination[], click a factory block while in command mode, then right-click a location.\nUnits produced by it will automatically move there. hint.factoryControl.mobile = To set a unit factory's [accent]output destination[], tap a factory block while in command mode, then tap a location.\nUnits produced by it will automatically move there. +gz.mine = Move near the \uf8c4 [accent]copper ore[] on the ground and click to begin mining. +gz.mine.mobile = Move near the \uf8c4 [accent]copper ore[] on the ground and tap it to begin mining. + +gz.research = Open the \ue875 tech tree.\nResearch the \uf870 [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nClick on a copper patch to place it. +gz.research.mobile = Open the \ue875 tech tree.\nResearch the \uf870 [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nTap on a copper patch to place it.\n\nPress the \uE800 [accent]checkmark[] at the bottom right to confirm. + +gz.conveyors = Research and place \uf896 [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate. +gz.conveyors.mobile = Research and place \uf896 [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nHold down your finger for a second and drag to place multiple conveyors. + +gz.drills = Expand the mining operation.\nPlace more Mechanical Drills.\nMine 100 copper. +gz.lead = \uf837 [accent]Lead[] is another commonly used resource.\nSet up drills to mine lead. + +gz.moveup = \ue804 Move up for further objectives. +gz.turrets = Research and place 2 \uf861 [accent]Duo[] turrets to defend the core.\nDuo turrets require \uf838 [accent]ammo[] from conveyors. +gz.walls = [accent]Walls[] can prevent oncoming damage from reaching buildings.\nPlace \uf8ae [accent]copper walls[] around the turrets. +gz.defend = Enemy incoming, prepare to defend. +gz.aa = Flying units cannot easily be dispatched with standard turrets.\n\uf860 [accent]Scatter[] turrets provide excellent anti-air, but require \uf837 [accent]lead[] as ammo. +gz.zone1 = This is the enemy drop zone. +gz.zone2 = Anything built in the radius is destroyed when a wave starts. +gz.zone3 = A wave will begin now.\nGet ready. +gz.finish = Build more turrets, mine more resources,\nand defend against all the waves to [accent]capture the sector[]. + + item.copper.description = Used in all types of construction and ammunition. item.copper.details = Copper. Abnormally abundant metal on Serpulo. Structurally weak unless reinforced. item.lead.description = Used in liquid transportation and electrical structures. diff --git a/core/assets/maps/groundZero.msav b/core/assets/maps/groundZero.msav index bb169dbbc773a5fb2bf5bae7fc8afbe6a760d4a6..34fe213016bfb7b049cc264995a11aa3fd01114b 100644 GIT binary patch literal 16461 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 Zzg6JtYSvA*|Lp&zzn=D=KQNd<769j!h6Mls diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 26102dbebb..33d8ec6cd1 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1503,6 +1503,7 @@ public class Blocks{ copperWall = new Wall("copper-wall"){{ requirements(Category.defense, with(Items.copper, 6)); health = 80 * wallHealthMultiplier; + researchCostMultiplier = 0.1f; envDisabled |= Env.scorching; }}; @@ -1886,11 +1887,12 @@ public class Blocks{ //region distribution conveyor = new Conveyor("conveyor"){{ - requirements(Category.distribution, with(Items.copper, 1), true); + requirements(Category.distribution, with(Items.copper, 1)); health = 45; speed = 0.03f; displayedSpeed = 4.2f; buildCostMultiplier = 2f; + researchCost = with(Items.copper, 5); }}; titaniumConveyor = new Conveyor("titanium-conveyor"){{ @@ -1915,7 +1917,7 @@ public class Blocks{ }}; junction = new Junction("junction"){{ - requirements(Category.distribution, with(Items.copper, 2), true); + requirements(Category.distribution, with(Items.copper, 2)); speed = 26; capacity = 6; health = 30; @@ -2639,12 +2641,13 @@ public class Blocks{ //region production mechanicalDrill = new Drill("mechanical-drill"){{ - requirements(Category.production, with(Items.copper, 12), true); + requirements(Category.production, with(Items.copper, 12)); tier = 2; drillTime = 600; size = 2; //mechanical drill doesn't work in space envEnabled ^= Env.space; + researchCost = with(Items.copper, 10); consumeLiquid(Liquids.water, 0.05f).boost(); }}; @@ -3002,7 +3005,7 @@ public class Blocks{ //region turrets duo = new ItemTurret("duo"){{ - requirements(Category.turret, with(Items.copper, 35), true); + requirements(Category.turret, with(Items.copper, 35)); ammo( Items.copper, new BasicBulletType(2.5f, 9){{ width = 7f; @@ -3038,6 +3041,7 @@ public class Blocks{ inaccuracy = 2f; rotateSpeed = 10f; coolant = consumeCoolant(0.1f); + researchCostMultiplier = 0.05f; limitRange(); }}; @@ -3105,6 +3109,7 @@ public class Blocks{ scaledHealth = 200; shootSound = Sounds.shootSnap; coolant = consumeCoolant(0.2f); + researchCostMultiplier = 0.05f; limitRange(2); }}; diff --git a/core/src/mindustry/content/Items.java b/core/src/mindustry/content/Items.java index 8d79830c11..9b963bf4c0 100644 --- a/core/src/mindustry/content/Items.java +++ b/core/src/mindustry/content/Items.java @@ -23,7 +23,6 @@ public class Items{ lead = new Item("lead", Color.valueOf("8c7fa9")){{ hardness = 1; cost = 0.7f; - alwaysUnlocked = true; }}; metaglass = new Item("metaglass", Color.valueOf("ebeef5")){{ @@ -36,8 +35,9 @@ public class Items{ sand = new Item("sand", Color.valueOf("f7cba4")){{ lowPriority = true; - alwaysUnlocked = true; buildable = false; + //needed to show up as requirement + alwaysUnlocked = true; }}; coal = new Item("coal", Color.valueOf("272727")){{ diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index af8a2a3e4c..a474e4bf70 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -22,6 +22,7 @@ public class SectorPresets{ addStartingItems = true; captureWave = 10; difficulty = 1; + overrideLaunchDefaults = true; startWaveTimeMultiplier = 3f; }}; diff --git a/core/src/mindustry/game/MapObjectives.java b/core/src/mindustry/game/MapObjectives.java index b642d9eb24..fcc7e521f4 100644 --- a/core/src/mindustry/game/MapObjectives.java +++ b/core/src/mindustry/game/MapObjectives.java @@ -680,7 +680,7 @@ public class MapObjectives implements Iterable, Eachable Core.input.axis(Binding.move_x) != 0 || Core.input.axis(Binding.move_y) != 0), zoom(visibleDesktop, () -> Core.input.axis(KeyCode.scroll) != 0), - mine(() -> player.unit().canMine() && isTutorial.get(), () -> player.unit().mining()), - placeDrill(isTutorial, () -> ui.hints.placedBlocks.contains(Blocks.mechanicalDrill)), - placeConveyor(isTutorial, () -> ui.hints.placedBlocks.contains(Blocks.conveyor)), - placeTurret(isTutorial, () -> ui.hints.placedBlocks.contains(Blocks.duo)), - breaking(isTutorial, () -> ui.hints.events.contains("break")), + breaking(() -> isTutorial.get() && state.rules.defaultTeam.data().getCount(Blocks.conveyor) > 5, () -> ui.hints.events.contains("break")), desktopShoot(visibleDesktop, () -> isSerpulo() && Vars.state.enemies > 0, () -> player.shooting), depositItems(() -> player.unit().hasItem(), () -> !player.unit().hasItem()), - desktopPause(visibleDesktop, () -> isTutorial.get() && !Vars.net.active(), () -> Core.input.keyTap(Binding.pause)), - research(isTutorial, () -> ui.research.isShown()), + desktopPause(visibleDesktop, () -> isTutorial.get() && !Vars.net.active() && state.wave >= 2, () -> Core.input.keyTap(Binding.pause)), unitControl(() -> isSerpulo() && state.rules.defaultTeam.data().units.size > 2 && !net.active() && !player.dead(), () -> !player.dead() && !player.unit().spawnedByCore), + unitSelectControl(() -> isSerpulo() && state.rules.defaultTeam.data().units.size > 3 && !net.active() && !player.dead(), () -> control.input.commandMode && control.input.selectedUnits.size > 0), respawn(visibleMobile, () -> !player.dead() && !player.unit().spawnedByCore, () -> !player.dead() && player.unit().spawnedByCore), launch(() -> isTutorial.get() && state.rules.sector.isCaptured(), () -> ui.planet.isShown()), - schematicSelect(visibleDesktop, () -> ui.hints.placedBlocks.contains(Blocks.router), () -> Core.input.keyRelease(Binding.schematic_select) || Core.input.keyTap(Binding.pick)), + schematicSelect(visibleDesktop, () -> ui.hints.placedBlocks.contains(Blocks.router) || ui.hints.placedBlocks.contains(Blocks.ductRouter), () -> Core.input.keyRelease(Binding.schematic_select) || Core.input.keyTap(Binding.pick)), conveyorPathfind(() -> control.input.block == Blocks.titaniumConveyor, () -> Core.input.keyRelease(Binding.diagonal_placement) || (mobile && Core.settings.getBool("swapdiagonal"))), boost(visibleDesktop, () -> !player.dead() && player.unit().type.canBoost, () -> Core.input.keyDown(Binding.boost)), blockInfo(() -> !(state.isCampaign() && state.rules.sector == SectorPresets.groundZero.sector && state.wave < 3), () -> ui.content.isShown()), diff --git a/tests/src/test/java/ApplicationTests.java b/tests/src/test/java/ApplicationTests.java index 2e2f0b968c..1160fea462 100644 --- a/tests/src/test/java/ApplicationTests.java +++ b/tests/src/test/java/ApplicationTests.java @@ -393,6 +393,7 @@ public class ApplicationTests{ void liquidOutput(){ world.loadMap(testMap); state.set(State.playing); + state.rules.limitMapArea = false; world.tile(0, 0).setBlock(Blocks.liquidSource, Team.sharded); world.tile(0, 0).build.configureAny(Liquids.water); @@ -409,6 +410,7 @@ public class ApplicationTests{ void liquidJunctionOutput(){ world.loadMap(testMap); state.set(State.playing); + state.rules.limitMapArea = false; Tile source = world.rawTile(0, 0), tank = world.rawTile(1, 4), junction = world.rawTile(0, 1), conduit = world.rawTile(0, 2); @@ -431,9 +433,10 @@ public class ApplicationTests{ void liquidRouterOutputAll() { world.loadMap(testMap); state.set(State.playing); + state.rules.limitMapArea = false; Tile source = world.rawTile(4,0), router = world.rawTile(4, 2), conduitUp1 = world.rawTile(4,1), - conduitLeft = world.rawTile(3,2), conduitUp2 = world.rawTile(4, 3), conduitRight = world.rawTile(5, 2), - leftTank = world.rawTile(1, 2), topTank = world.rawTile(4,5), rightTank = world.rawTile(7, 2); + conduitLeft = world.rawTile(3,2), conduitUp2 = world.rawTile(4, 3), conduitRight = world.rawTile(5, 2), + leftTank = world.rawTile(1, 2), topTank = world.rawTile(4,5), rightTank = world.rawTile(7, 2); source.setBlock(Blocks.liquidSource, Team.sharded); source.build.configureAny(Liquids.water); @@ -456,10 +459,11 @@ public class ApplicationTests{ void sorterOutputCorrect() { world.loadMap(testMap); state.set(State.playing); + state.rules.limitMapArea = false; Tile source1 = world.rawTile(4, 0), source2 = world.rawTile(6, 0), s1conveyor = world.rawTile(4, 1), - s2conveyor = world.rawTile(6, 1), s1s2conveyor = world.rawTile(5, 1), sorter = world.rawTile(5, 2), - leftconveyor = world.rawTile(4, 2), rightconveyor = world.rawTile(6, 2), sortedconveyor = world.rawTile(5, 3), - leftVault = world.rawTile(2, 2), rightVault = world.rawTile(8, 2), topVault = world.rawTile(5, 5); + s2conveyor = world.rawTile(6, 1), s1s2conveyor = world.rawTile(5, 1), sorter = world.rawTile(5, 2), + leftconveyor = world.rawTile(4, 2), rightconveyor = world.rawTile(6, 2), sortedconveyor = world.rawTile(5, 3), + leftVault = world.rawTile(2, 2), rightVault = world.rawTile(8, 2), topVault = world.rawTile(5, 5); source1.setBlock(Blocks.itemSource, Team.sharded); source1.build.configureAny(Items.coal); @@ -488,10 +492,11 @@ public class ApplicationTests{ void routerOutputAll() { world.loadMap(testMap); state.set(State.playing); + state.rules.limitMapArea = false; Tile source1 = world.rawTile(5, 0), conveyor = world.rawTile(5, 1), - router = world.rawTile(5, 2), leftconveyor = world.rawTile(4, 2), rightconveyor = world.rawTile(6, 2), - middleconveyor = world.rawTile(5, 3), leftVault = world.rawTile(2, 2), - rightVault = world.rawTile(8, 2), topVault = world.rawTile(5, 5); + router = world.rawTile(5, 2), leftconveyor = world.rawTile(4, 2), rightconveyor = world.rawTile(6, 2), + middleconveyor = world.rawTile(5, 3), leftVault = world.rawTile(2, 2), + rightVault = world.rawTile(8, 2), topVault = world.rawTile(5, 5); source1.setBlock(Blocks.itemSource, Team.sharded); source1.build.configureAny(Items.coal); @@ -515,9 +520,10 @@ public class ApplicationTests{ void junctionOutputCorrect() { world.loadMap(testMap); state.set(State.playing); + state.rules.limitMapArea = false; Tile source1 = world.rawTile(5,0),source2 = world.rawTile(7, 2), conveyor1 = world.rawTile(5, 1), - conveyor2 = world.rawTile(6,2), junction = world.rawTile(5, 2), conveyor3 = world.rawTile(5,3), - conveyor4 = world.rawTile(4,2), vault2 = world.rawTile(3, 1), vault1 = world.rawTile(5,5); + conveyor2 = world.rawTile(6,2), junction = world.rawTile(5, 2), conveyor3 = world.rawTile(5,3), + conveyor4 = world.rawTile(4,2), vault2 = world.rawTile(3, 1), vault1 = world.rawTile(5,5); source1.setBlock(Blocks.itemSource, Team.sharded); source1.build.configureAny(Items.coal); source2.setBlock(Blocks.itemSource, Team.sharded); @@ -565,6 +571,7 @@ public class ApplicationTests{ world.loadMap(testMap); state.set(State.playing); + state.rules.limitMapArea = false; int length = 128; world.tile(0, 0).setBlock(Blocks.itemSource, Team.sharded); world.tile(0, 0).build.configureAny(Items.copper); @@ -873,7 +880,6 @@ public class ApplicationTests{ Time.setDeltaProvider(() -> 1f); logic.reset(); - state.rules.sector = zone.sector; try{ world.loadGenerator(zone.generator.map.width, zone.generator.map.height, zone.generator::generate); }catch(SaveException e){ @@ -934,6 +940,7 @@ public class ApplicationTests{ } assertEquals(1, Team.sharded.cores().size, "Sector must have one core: " + zone); + assertTrue(Team.sharded.core().items.total() < 1000, "Sector must not have starting resources: " + zone); assertTrue(hasSpawnPoint, "Sector \"" + zone.name + "\" has no spawn points."); assertTrue(spawner.countSpawns() > 0 || (state.rules.attackMode && state.rules.waveTeam.data().hasCore()), "Sector \"" + zone.name + "\" has no enemy spawn points: " + spawner.countSpawns()); @@ -975,4 +982,4 @@ public class ApplicationTests{ tile.build.handleStack(item, 1, unit); assertEquals(capacity, tile.build.items.get(item)); } -} +} \ No newline at end of file