Skip to content

Entities cheat sheet

noahyor edited this page Jan 29, 2022 · 18 revisions

Entities

This is a quick-overview table of entities - click the name for detailed description.

*) As a note, most entities have the Portable property, so we show it in a separate column.

? Name Capabilities Properties* Portable
T tree Growable ✔️
y branch ✔️
l log ✔️
w board ✔️
π workbench Make ✔️
o rock ✔️
@ boulder Unwalkable
A mountain Unwalkable
C copper ore ✔️
| copper wire ✔️
8 strange loop Recursion ✔️
I copper pipe ✔️
# furnace ✔️
M motor ✔️
* flower Growable ✔️
λ lambda Lambda Growable ✔️
C curry ✔️
water Growable, Liquid ✔️
~ wavy water Growable, Liquid ✔️
B boat Float ✔️
0 bit (0) Growable ✔️
1 bit (1) Growable ✔️
! drill bit ✔️
box ✔️
* gear ✔️
C counter ✔️
L Linux ✔️
% treads Move, Turn ✔️
< grabber Grab, Give, Place, Install ✔️
# solar panel ✔️
! drill ✔️
3 3D printer Build ✔️
D dictionary Env ✔️
y branch predictor Cond ✔️
* detonator Selfdestruct ✔️
O life support system ✔️
$ scanner Scan, Sensefront ✔️

tree

  • Char: T
  • Properties: Portable, Growable
  • Capabilities: None

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 a many different devices.

branch

  • Char: y
  • Properties: Portable
  • Capabilities: None

A branch cut from a tree. It's as if the tree had to make a decision and was exploring two options.

log

  • Char: l
  • Properties: Portable
  • Capabilities: None

A wooden log, obtained by harvesting a tree and cutting off its branches.

board

  • Char: w
  • Properties: Portable
  • Capabilities: None

A wooden board.

workbench

  • Char: π
  • Properties: Portable
  • Capabilities: Make

A plain wooden workbench, providing space for you to make other things using the make command.

Example:

make "log"

rock

  • Char: o
  • Properties: Portable
  • Capabilities: None

A small rock.

boulder

  • Char: @
  • Properties: Unwalkable
  • Capabilities: None

A rock.

mountain

  • Char:
  • Properties: Unwalkable
  • Capabilities: None

A mountain.

copper ore

  • Char: C
  • Properties: Portable
  • Capabilities: None

Raw copper ore. It is extremely useful for making wires, pipes, and other metal things. Often, in locations where copper can be found on the surface, additional copper can be found by drilling beneath the surface.

copper wire

  • Char: |
  • Properties: Portable
  • Capabilities: None

Copper wire is very good at conducting electricity and useful for making various types of circuits and machines.

strange loop

  • Char: 8
  • Properties: Portable
  • Capabilities: Recursion

Two copper wires twisted together in a strange shape that loops back on itself. It must be useful for something...

copper pipe

  • Char: I
  • Properties: Portable
  • Capabilities: None

A pipe made out of a thin sheet of copper. Great for transmitting water or steam.

furnace

  • Char: #
  • Properties: Portable
  • Capabilities: None

A furnace can be used to turn metal ore into various useful products.

motor

  • Char: M
  • Properties: Portable
  • Capabilities: None

A motor is useful for making devices that can turn when electric current is applied.

flower

  • Char: *
  • Properties: Portable, Growable
  • Capabilities: None

A flower.

lambda

  • Char: λ
  • Properties: Portable, Growable
  • Capabilities: Lambda

A wild lambda. They are somewhat rare, but regrow when picked. Lambdas are delicious when cooked into curry.

Lambdas can also be used to create functions. For example,

def thrice : cmd () -> cmd () = \c. c;c;c end

defines the function thrice which repeats a command three times.

curry

  • Char: C
  • Properties: Portable
  • Capabilities: None

Delicious curry cooked from wild lambdas.

water

  • Char:
  • Properties: Portable, Growable, Liquid
  • Capabilities: None

Water.

wavy water

  • Char: ~
  • Properties: Portable, Growable, Liquid
  • Capabilities: None

A wavy section of water.

boat

  • Char: B
  • Properties: Portable
  • Capabilities: Float

A robot with a boat installed can float on top of water without drowning!

Note: most devices are automatically installed on robots that will require them; but since floating is not associated with any particular command, a boat must be manually installed on any robot that will need it.

bit (0)

  • Char: 0
  • Properties: Portable, Growable
  • Capabilities: None

A bit.

bit (1)

  • Char: 1
  • Properties: Portable, Growable
  • Capabilities: None

A bit.

drill bit

  • Char: !
  • Properties: Portable
  • Capabilities: None

A drill bit is an important component of a drill.

box

  • Char:
  • Properties: Portable
  • Capabilities: None

A wooden box. It can hold things.

gear

  • Char: *
  • Properties: Portable
  • Capabilities: None

A wooden gear.

counter

  • Char: C
  • Properties: Portable
  • Capabilities: None

An 8-bit counter.

Linux

  • Char: L
  • Properties: Portable
  • Capabilities: None

A copy of the Linux operating system.

treads

  • Char: %
  • Properties: Portable
  • Capabilities: Move, Turn

Installing treads on a robot allows it to move (via the move command) and turn (via the turn command).

Example:

move; turn left; move; turn north

grabber

  • Char: <
  • Properties: Portable
  • Capabilities: Grab, Give, Place, Install

A grabber arm allows a robot to manipulate items via the grab, place, give, and install commands.

The grab command takes no arguments; it simply grabs whatever is available, and also returns the name of the grabbed thing as a string. It raises an exception if run in a cell that does not contain an item.

The place command takes one argument, the name of the item to place. The item is removed from the robot's inventory and placed in the robot's current cell (which must be empty). Raises an exception if the operation fails.

The give command takes two arguments: the name of the robot to give an item to (which can be at most 1 cell away), and the name of the item to give. Raises an exception if the operation fails.

The install command takes two arguments: the name of the robot on which to install a device (which can be at most 1 cell away), and the name of the device to install.

solar panel

  • Char: #
  • Properties: Portable
  • Capabilities: None

An extremely efficient solar panel, capable of generating sufficient power from ambient starlight alone. A robot powered by one of these can operate any time, including on cloudy days and at night.

drill

  • Char: !
  • Properties: Portable
  • Capabilities: None

A drill allows robots to drill through rocks and mountains.

3D printer

  • Char: 3
  • Properties: Portable
  • Capabilities: Build

A 3D printer gives you the capability of printing more robots! You can access the 3D printer via the build command.

Example:

build "fred" {move; grab; turn back; move; give "base" "tree"}

builds a robot named "fred" to get the tree on the cell to the east (if there is one) and bring it back to you. Note that if there is already a robot named "fred", the new robot will be given a similar but unique name. The build command always returns the name of the newly constructed robot. For example,

name <- build "fred" {move}; view name

builds a robot and then views it (no matter what it ends up being named).

dictionary

  • Char: D
  • Properties: Portable
  • Capabilities: Env

A dictionary allows a robot to remember definitions and reuse them later. You can access this ability with either a def command, which creates a name for an expression or command that is available from then on, or with a let expression, which names an expression or command locally within another expression.

def m2 : cmd () = move; move end
let x : int = 3 in x^2 + 2*x + 1

The type annotations in def and let are optional.

branch predictor

  • Char: y
  • Properties: Portable
  • Capabilities: Cond

A branch predictor is a device which allows a robot to interpret conditional expressions. The syntax for a conditional expression is if followed by three arguments: a boolean test and then two expressions of the same type.

Example:

if (x > 3) move {turn west; move}

detonator

  • Char: *
  • Properties: Portable
  • Capabilities: Selfdestruct

An explosive device which can be used to self-destruct, via the selfdestruct command. Immediately vaporizes the robot and any inventory it is carrying. Can be useful, say, if you are sending out some exploratory robots and don't want them cluttering up the world once they are done.

life support system

  • Char: O
  • Properties: Portable
  • Capabilities: None

A state-of-the-art life support system which maintains the particular temperature and mixture of gases you need to survive. It uses a sophisticated recirculating system and can run pretty much indefinitely. Unfortunately, the atmosphere outside is severly toxic (why do the inhabitants of this planet need so much nitrogen!?), so you'll have to stay inside for now.

scanner

  • Char: $
  • Properties: Portable
  • Capabilities: Scan, Sensefront

With a scanner device, robots can use the scan command to learn about their surroundings. Simply give scan a direction in which to scan, and information about the scanned item (if any) will be added to the robot's inventory.

A scanner also enables the blocked command, which returns a boolean value indicating whether the robot's path is blocked (i.e. whether executing a move command would fail).

Finally, robots can use the upload command to copy their accumulated knowledge to another nearby robot; for example, upload "base".