Core zone tutorial hint

This commit is contained in:
Anuken
2026-01-13 22:50:47 -05:00
parent 6b4643f8e8
commit a6c2718354
5 changed files with 22 additions and 1 deletions

View File

@@ -2130,6 +2130,7 @@ hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatical
hint.generator = :combustion-generator: [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with :power-node: [accent]Power Nodes[]. hint.generator = :combustion-generator: [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with :power-node: [accent]Power Nodes[].
hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or :graphite: [accent]Graphite[] :duo:Duo/:salvo:Salvo ammunition to take Guardians down. hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or :graphite: [accent]Graphite[] :duo:Duo/:salvo:Salvo ammunition to take Guardians down.
hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a :core-foundation: [accent]Foundation[] core over the :core-shard: [accent]Shard[] core. Make sure it is free from nearby obstructions. hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a :core-foundation: [accent]Foundation[] core over the :core-shard: [accent]Shard[] core. Make sure it is free from nearby obstructions.
hint.serpuloCoreZone = Additional cores may be constructed on :core-zone: [accent]Core Zone[] tiles.
hint.cannotUpgrade = A [red]:tree:[] icon over a payload unit indicates that its upgraded version is not researched yet.\n\nUnit upgrades must be researched in the [accent]:tree: tech tree[] before they can be produced in reconstructors. hint.cannotUpgrade = A [red]:tree:[] icon over a payload unit indicates that its upgraded version is not researched yet.\n\nUnit upgrades must be researched in the [accent]:tree: tech tree[] before they can be produced in reconstructors.
hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[]. hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation. hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation.

View File

@@ -172,6 +172,12 @@ public class Logic implements ApplicationListener{
} }
}); });
Events.on(BlockDestroyEvent.class, e -> {
if(e.tile.team() != state.rules.defaultTeam){
state.stats.destroyedBlockCount.increment(e.tile.block());
}
});
Events.on(UnitDestroyEvent.class, e -> { Events.on(UnitDestroyEvent.class, e -> {
if(e.unit.team() != state.rules.defaultTeam){ if(e.unit.team() != state.rules.defaultTeam){
state.stats.enemyUnitsDestroyed ++; state.stats.enemyUnitsDestroyed ++;

View File

@@ -555,7 +555,7 @@ public class EventType{
} }
/** Called right before a block is destroyed. /** Called right before a block is destroyed.
* The tile entity of the tile in this event cannot be null when this happens.*/ * The building of the tile in this event cannot be null when this happens.*/
public static class BlockDestroyEvent{ public static class BlockDestroyEvent{
public final Tile tile; public final Tile tile;

View File

@@ -19,9 +19,19 @@ public class GameStats{
public int unitsCreated; public int unitsCreated;
/** Record of blocks that have been placed by count. Used for objectives only. */ /** Record of blocks that have been placed by count. Used for objectives only. */
public ObjectIntMap<Block> placedBlockCount = new ObjectIntMap<>(); public ObjectIntMap<Block> placedBlockCount = new ObjectIntMap<>();
/** Record of enemy blocks that have been destroyed (from any source) by count. */
public ObjectIntMap<Block> destroyedBlockCount = new ObjectIntMap<>();
/** /**
* Record of items that have entered the core through transport blocks. Used for objectives only. * Record of items that have entered the core through transport blocks. Used for objectives only.
* This can easily be ""spoofed"" with unloaders, so don't use it for anything remotely important. * This can easily be ""spoofed"" with unloaders, so don't use it for anything remotely important.
* */ * */
public ObjectIntMap<Item> coreItemCount = new ObjectIntMap<>(); public ObjectIntMap<Item> coreItemCount = new ObjectIntMap<>();
public int getPlaced(Block block){
return placedBlockCount.get(block, 0);
}
public int getDestroyed(Block block){
return destroyedBlockCount.get(block, 0);
}
} }

View File

@@ -196,6 +196,10 @@ public class HintsFragment{
&& state.rules.defaultTeam.core().block == Blocks.coreShard && state.rules.defaultTeam.core().block == Blocks.coreShard
&& state.rules.defaultTeam.core().items.has(Blocks.coreFoundation.requirements), && state.rules.defaultTeam.core().items.has(Blocks.coreFoundation.requirements),
() -> ui.hints.placedBlocks.contains(Blocks.coreFoundation)), () -> ui.hints.placedBlocks.contains(Blocks.coreFoundation)),
serpuloCoreZone(() -> state.isCampaign() && state.getPlanet() == Planets.serpulo && Vars.indexer.isBlockPresent(Blocks.coreZone) &&
(!state.rules.attackMode || state.stats.getDestroyed(Blocks.coreShard) + state.stats.getDestroyed(Blocks.coreFoundation) + state.stats.getDestroyed(Blocks.coreNucleus) > 0),
() -> state.rules.defaultTeam.cores().size > 1),
presetLaunch(() -> state.isCampaign() presetLaunch(() -> state.isCampaign()
&& state.getSector().preset == null, && state.getSector().preset == null,
() -> state.isCampaign() && state.getSector().preset == SectorPresets.frozenForest), () -> state.isCampaign() && state.getSector().preset == SectorPresets.frozenForest),