swarm-0.4: data/scenarios/Tutorials/place.yaml
version: 1
name: Place
description: |
Learn how to interact with the world by harvesting entities and placing them.
#
# Placing the tree is motivated by speeding up tree collection as their growth
# is really slow. It can be cheesed by speeding up the game, but there is no need
# to tell the players. :)
#
objectives:
- goal:
- Previously you learned how to plunder a plentiful forest for wood.
Now you will learn how to plant trees to obtain as much wood as you need.
- There is a fast-growing tree (called `spruce`{=entity}) ahead of you. You could `grab`
it as before, but you now have a new device called a `harvester`{=entity}.
If you `harvest` a tree rather than `grab` it, a new tree will grow in its
place after some time.
- You can also place items from your inventory on the ground
below you using the `place` command.
- |
Using these commands in conjunction, you can plant new growable entities by
placing and then harvesting them. For example, to plant a new `spruce`{=entity} seed
you can write:
```
place "spruce"; harvest
```
- Your goal is to collect 6 `spruce`{=entity} trees. You can speed this up
by planting more trees.
- |
**TIP:** You can get a sneak peak at a feature we will explain later and type:
```
def t = move; place "spruce"; harvest; end
```
after which you only need to type `t`{=snippet} instead of retyping the whole
command or searching in your command history.
condition: |
try {
t <- as base {count "spruce"};
return (t >= 6);
} { return false }
entities:
# faster tree (the normal one grows 500-600 ticks)
- name: spruce
display:
attr: plant
char: 'T'
description:
- |
A tall, living entity made of a tough cellular material called "wood".
They regrow after being harvested and are an important raw ingredient used
in making many different devices.
- |
This one seems to grow a little faster.
properties: [portable, growable]
growth: [100, 120]
solution: |
def t = move; place "spruce"; harvest; end;
def h = harvest; move end;
// wait without needing a clock: literally spin our wheels
def w4 = turn left; turn left; turn left; turn left end;
def w16 = w4; w4; w4; w4 end;
def w64 = w16; w16; w16; w16 end;
def w256 = w64; w64; w64; w64 end;
move;
move; harvest; t; t; t; t; t;
w256;
turn back; h; h; h; h; h; h;
robots:
- name: base
dir: [1,0]
devices:
- treads
- grabber
- harvester
- logger
- compass
- dictionary
inventory:
- [0, spruce]
world:
palette:
'>': [grass, null, base]
'.': [grass]
'T': [grass, spruce]
'┌': [stone, upper left corner]
'┐': [stone, upper right corner]
'└': [stone, lower left corner]
'┘': [stone, lower right corner]
'─': [stone, horizontal wall]
'│': [stone, vertical wall]
upperleft: [-1, 1]
map: |
┌────────┐
│>.T.....│
└────────┘