New basic frozen forest tutorial

This commit is contained in:
Anuken 2026-02-19 22:52:36 -05:00
parent b00b88476b
commit fd00f3fae3
5 changed files with 15 additions and 11 deletions

View file

@ -2121,7 +2121,6 @@ hint.payloadPickup.mobile = [accent]Tap and hold[] a small block or unit to pick
hint.payloadDrop = Press [accent]][] to drop a payload.
hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a payload there.
hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires.
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.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 :core-shard: [accent]Cores[] may be constructed on :core-zone: [accent]Core Zone[] tiles.
@ -2153,6 +2152,16 @@ 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[].
ff.coal = Use :mechanical-drill: [accent]Mechanical Drills[] to mine :ore-coal: [accent]coal[].
ff.graphitepress = :tree: Research and place a :graphite-press: [accent]Graphite Press[].
ff.craft = Move :coal: coal into the :graphite-press: [accent]Graphite Press[].\nIt will output :graphite: graphite to all nearby conveyors.\nMove the output :graphite: graphite from the :graphite-press: [accent]Graphite Press[] into the core.
ff.generator = :coal: Coal can also be used as fuel in :combustion-generator: [accent]Combustion Generators[].\nResearch and place a :combustion-generator: [accent]Combustion Generator[].
ff.coalpower = Input :coal: coal into the generator to produce [accent]:power: power[].
ff.coalpower.objective = :combustion-generator: Produce Power
ff.node = :power-node: [accent]Power Nodes[] transmit power to nearby blocks in range.\nResearch and place a :power-node: [accent]Power Node[] close to the generator.
ff.battery = :battery: [accent]Batteries[] store power.\nResearch and place a :battery: [accent]Battery[] close to the node.
ff.arc = :arc: [accent]Arc[] turrets require power to function. Research and place an :arc: [accent]Arc[] turret near a power node.
fungalpass.tutorial1 = Use [accent]units[] to defend buildings and attack the enemy.\nResearch and place a :ground-factory: [accent]ground factory[].
fungalpass.tutorial2 = Select :dagger: [accent]Dagger[] units in the factory.\nProduce 3 units.

View file

@ -209,9 +209,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
state.rules.objectiveFlags.addAll(flagsAdded);
completed = true;
if(completionLogicCode != null && !completionLogicCode.isEmpty()){
LExecutor.runLogicScript(completionLogicCode);
}
LExecutor.runLogicScript(completionLogicCode);
}
/** @return true if all {@link #parents} are completed, rendering this objective able to execute. */

View file

@ -67,11 +67,13 @@ public class LExecutor{
Events.on(ResetEvent.class, e -> unitTimeouts.clear());
}
public static void runLogicScript(String code){
public static void runLogicScript(@Nullable String code){
runLogicScript(code, 100_000, false);
}
public static void runLogicScript(String code, int maxInstructions, boolean loop){
public static void runLogicScript(@Nullable String code, int maxInstructions, boolean loop){
if(code == null || code.isEmpty()) return;
LExecutor executor = new LExecutor();
executor.privileged = true;

View file

@ -252,11 +252,6 @@ public class HintsFragment{
() -> indexer.getFlagged(state.rules.defaultTeam, BlockFlag.extinguisher).size > 0
),
generator(
() -> control.input.block == Blocks.combustionGenerator,
() -> ui.hints.placedBlocks.contains(Blocks.combustionGenerator)
),
rebuildSelect(
() -> state.rules.defaultTeam.data().plans.size >= 10,
() -> control.input.isRebuildSelecting()