# Built-in Doodads

Sketchy Maze comes with several built-in doodads that you can use in your
levels. You may also [create your own](custom-doodads/index.md) custom doodads
and program them to do whatever you want!

Doodads are available in the Level Editor by clicking on the
<img src="images/sprites/actor-tool.png" width="16" height="16"> **Doodad Tool**
and then dragging a doodad onto your level. See the [Doodad Tool](custom-levels/index.md#doodad-tool)
for more information.

**See also:** [Linked Doodads](linked-doodads.md) for how doodads interact when
linked together in your levels.

* [Objects](#objects)
    * [Start Flag](#start-flag) - Spawn point of a level
    * [Checkpoint Flag](#checkpoint-flag) - **NEW in v0.8.0**
    * [Exit Flag](#exit-flag) - Goal of a level
    * [Anvil](#anvil) - **NEW in v0.8.0**
    * [Box](#box)
* [Creatures](#creatures)
    * [Boy](#boy) - The player character
    * [Red Bird](#red-bird)
    * [Azulians](#azulians)
    * [Thief](#thief) - **NEW in v0.8.0**
* [Doors & Trapdoors](#doors-trapdoors)
    * [Colored Locked Doors & Keys](#colored-locked-doors-keys)
    * [Small Key Doors](#small-key-doors)
    * [Warp Doors](#warp-doors)
    * [Trapdoors](#trapdoors)
    * [Electric Door](#electric-door)
    * [Electric Trapdoor](#electric-trapdoor)
    * [Crumbly Floor](#crumbly-floor)
* [Objects](#objects)
    * [Box](#box)
* [Gizmos](#gizmos)
    * [Buttons](#buttons)
    * [Sticky Button](#sticky-button)
    * [Switches](#switches)
* [Boolean State Doodads](#boolean-state-doodads)
    * [State Button](#state-button)
    * [State Blocks](#state-blocks)
    * [Blue & Orange Warp Doors](#blue-orange-warp-doors)
* [Technical Doodads](#technical-doodads)
    * [Goal Region](#goal-region)
    * [Checkpoint Region](#checkpoint-region)
    * [Fire Region](#fire-region)
    * [Power Source](#power-source)
    * [Stall Player](#stall-player)

---

## Objects

### Start Flag

![Start Flag](images/doodads/start-flag.png)

The **Start Flag** sets the player spawn point in your level. There should be
only one start flag per level.

Multiple Start Flags in one level is considered to be an error; a warning is
flashed on-screen and the player will spawn at the "first" start flag it found.

A level without a Start Flag will spawn the player at the 0,0 coordinate at
the top-left corner of the level, and flash an error about the missing Start
Flag.

If the Start Flag is [linked](linked-doodads.md#start-flag) to another doodad
in your level, then that doodad will be used for the player character. For example,
linking a Start Flag to a Thief will use the Thief as the player character
for that level instead of the default character, [Boy](#boy).

### Checkpoint Flag

![Checkpoint Flag](images/doodads/checkpoint-flag.png)

The **Checkpoint Flag** records the player's position in the level each time
he reaches a checkpoint. Should they die during the level, the option to
"Retry from checkpoint" will teleport the player back to that location and
continue gameplay without resetting the level -- so you keep any keys you
have, unlocked doors remain unlocked, etc.

The default checkpoint location is at the Start Flag, and crossing Checkpoint
Flags updates it to the last flag touched. When a second checkpoint is touched,
the previous checkpoint flags are reset and the player's spawn point is the
checkpoint they most recently touched.

### Exit Flag

![Exit Flag](images/doodads/exit-flag.png)

The **Exit Flag** sets a goal point for the level. The player must touch this
flag to win the level.

### Anvil

![Anvil](images/doodads/anvil.png)

The **Anvil** is a "harmless" object that becomes dangerous when it is falling.

It has no collision and is affected by gravity; when falling, it is dangerous
to any **mobile** doodad that it encounters, including the player character.
Being hit by it will fail the level with "Watch out for falling anvils!" and
you can retry from your last checkpoint. It destroys other mobile doodads that
it lands on, removing them from the level.

If it receives a **power** signal (from a [linked](linked-doodads.md#buttons)
Button or Switch), the Anvil will reset to its original location on the level,
making "reset buttons" possible for puzzle levels.

### Box

![Box](images/doodads/box.gif)

The **Box** is a pushable object. If the player or another mobile doodad touches
the box from the side, the box will move at a fixed speed. It can be pushed up
and down slopes and it is affected by gravity.

The box is taller than [Boy](#boy) and so can make a useful platform to jump on top of
to reach a higher ledge.

Boxes can be pushed by enemies too, but it gets dicey with multiple enemies
pushing simultaneously. Boxes can be stacked on top of each other, but sometimes
Boy will get "stuck" standing on top of the pile. If this happens, use the
[cheat code](hacking.md#cheat-codes) `ghost mode` to get yourself unstuck.

**New in v0.8.0:**
If it receives a **power** signal (from a [linked](linked-doodads.md#buttons)
Button or Switch), the Anvil will reset to its original location on the level,
making "reset buttons" possible for puzzle levels.

---

# Creatures

### Boy

![Boy](images/doodads/boy.gif)

**Boy** is the player character.

If he touches a "fire" pixel, he dies! You get a message like "Watch out for fire!"
and it doesn't even have to say "fire" - it'll use the color's name.

If he touches water he'll turn blue. Swimming physics aren't hooked up yet!

### Red Bird

![Bird](images/doodads/bird.gif)

The **Bird** is a simple creature which flies left and right across your level,
changing direction when it encounters an obstacle.

The bird has solid collision on its top side, so the player can ride on it
across the level. It's very slippery, though!

In the future, the bird will dive-bomb the player character in a diagonal
trajectory when it sees a shot it can take. This will harm the player if the
bird hits. If the bird hits the player, or misses and touches the ground, it
will fly back up to its original altitude and continue its A.I. program of
flying back and forth and searching for the player. It will also be easier to
ride more reliably.

Currently, however, the bird is harmless and does not dive bomb the player.

**New in v0.8.0:** the Bird no longer can pick up items such as keys, unless
controlled by the player character.

### Azulians

![Red Azulian](images/doodads/red-azulian.gif)

The **Red Azulian** was the first test mobile character, and the
**Blue Azulian** was originally the player character in very early builds of
the game.

The Azulians' A.I., when placed in your level, is that they walk right and
left across the ground, changing directions when hitting an obstacle. They
can pick up keys, unlock doors, and interact with buttons and switches that
they walk onto - basically all the capabilities as the player character.
The blue Azulian walks half as fast as the red one.

You can play as them in your custom levels by linking a Start Flag to
the Azulian.

### Thief

![Thief](images/doodads/thief.gif)

The **Thief** is a mobile character which can steal items from other doodads,
including the player character.

The Thief's A.I. is to walk right and left, she can pick up items, unlock doors,
and activate most devices that it walks onto. When she encounters another
doodad (including the player), the Thief will **steal** any items they are
carrying:

* For items which have no quantity, such as the Blue Key, the Thief will only
  steal it if she does not already have one, letting the player keep the
  key.
* Items with quantity are always stolen: the Thief will steal all your small
  keys.
* The A.I. Thief does **not** steal from other A.I. Thieves.

The player can play **as** the Thief by using the Link Tool and connecting
the Start Flag to a Thief. When controlled by the player character, the Thief
has special abilities compared to most other characters:

* You can steal items from other characters. When you contact another character
  such as the Azulians, if they are holding any items, you'll automatically
  steal them in the same way the Thief usually steals from you.
* The player character is immune to Thieves which will not steal from Thieves.
* The player character _can_, though, pilfer items that the other Thieves have
  collected.

---

## Doors & Trapdoors

### Colored Locked Doors & Keys

![Blue Locked Door](images/doodads/blue-door.gif) ![Blue Key](images/doodads/blue-key.png)

There are four pairs of **Colored Locked Doors and Keys** you can use on your level.

Colored doors are locked and behave as a solid wall until the player or another
mobile doodad "picks up" the Key of the same color. The doors may then be
permanently unlocked if the player walks into them while holding the key.

The **Colored Keys** are not consumed when used; with one key the player can
unlock many doors of the same color unless they lose the key. Currently there is
no method to lose keys except for the "drop all items" [cheat code](hacking.md#cheat-codes).

A locked door has a golden padlock over its sprite; after being unlocked, the
padlock is missing even while the door is closed. Should the player lose the keys
later, previously opened doors will remain unlocked but the player will need to
find another key to open more doors.

![Red Key](images/doodads/red-key.png) ![Green Key](images/doodads/green-key.png) ![Yellow Key](images/doodads/yellow-key.png) ![Blue Key](images/doodads/blue-key.png)

Each key/door pair also has a distinct shape for color-impaired players:

* **Red Key** (triangle)
* **Green Key** (cross)
* **Yellow Key** (star)
* **Blue Key** (diamond)

### Small Key Doors

![Small Key Door](images/doodads/small-key-door.gif) ![Small Key](images/doodads/small-key.png)

**Small Key Doors** are doors which consume the **Small Key** when unlocked. The
player or other mobile doodad may carry several Small Keys and they can only
unlock as many Small Key Doors as the number of keys they hold.

The Small Key Door is permanently unlocked after unlocking it once. A golden
padlock appears on the door when it's locked, which disappears after unlocking.

### Warp Doors

![Warp Door](images/doodads/warp-door.gif)

The **Warp Door** allows the player character to fast travel between two remote
locations within the same level. The door is brown in color with a yellow "W"
symbol.

To connect the doors together, drag two doors into your level and then use the
**Link Tool** to connect them. During gameplay, walk the player character to one
of the doors and press the Space Key to open it. The door will swing open and
shut and the player character exits from the other door.

If a Warp Door is not linked to another door, a message will display indicating
that the door is "locked" and it can not be entered by the player.

**See also:** the [Blue & Orange Warp Doors](#blue-orange-warp-doors) tied to the
[State Blocks](#state-blocks).

### Trapdoors

![Trapdoor](images/doodads/trapdoor-down.gif)

A **Trapdoor** is a one-way passage. If the player or other mobile doodad touches
the door from the "correct" side, the door will swing open. After the mobile
doodad has passed, the door will swing shut again.

When the door is shut, you can not open it from the "wrong" side and it behaves
as a solid wall. If the door is open you may run in from the wrong side.

Trapdoors come in four variants: downward-facing (default), rightward, leftward
and upwards.

### Electric Door

![Electric Door](images/doodads/electric-door.gif)

The sci-fi **Electric Door** can only be opened when it receives a "power" signal
from a linked button or switch. See [Linked Doodads](custom-levels/index.md#link-tool).

When the door receives a "power: on" signal it will open and allow passage to
the player or other mobile doodads. When it receives a "power: off" signal it
will close.

### Electric Trapdoor

![Electric Trapdoor](images/doodads/electric-trapdoor.gif)

The **Electric Trapdoor** requires a power source to open it.

If it receives a power signal from a linked Button or Switch, it will open.
When it loses power, it will close. Switches will always toggle its state
regardless of "power" status.

### Crumbly Floor

![Crumbly Floor](images/doodads/crumbly-floor.gif)

The **Crumbly Floor** behaves as a solid ceiling when hit from below, and a
solid floor when walked on from above, but watch out! The floor will shake
and collapse after a moment beneath your feet.

The floor will respawn after a while and forbids passage from the underside
of the doodad.

---

## Gizmos

The gizmo doodads work best when **Linked** to other doodads in your level. For
example, a Button linked to an Electric Door will cause the door to open whenever
the button is pressed.

**See also:** [Link Tool](custom-levels/index.md#link-tool)

### Buttons

![Button Type A](images/doodads/button-a.gif) ![Button Type B](images/doodads/button-b.gif)

**Buttons** will emit a `power: on` signal to all doodads that they are
[linked to](custom-levels/index.md#link-tool) when the button is pressed by the
player or another mobile doodad.

When the button stops being pressed, it will emit a `power: off` signal to
all connected doodads, which will generally close electric doors.

Buttons come in two varieties which are cosmetic only:

* **Button:** a button with a grey arrow that pops back up when pressed.
* **Button Type B:** a variation without the grey arrow but behaves the same.

### Sticky Button

![Sticky Button](images/doodads/sticky-button.gif)

The **Sticky Button** is a variant of the Button but with a red arrow on its side.

When the Sticky Button is pressed, it will emit a `power: on` signal and it will
**remain pressed** forever -- unless the button itself receives a `power: on`
signal from another linked doodad, then it will pop back up and can be pressed
again.

### Switches

![Switch](images/doodads/switch.gif) ![Switch Right](images/doodads/switch-right.gif)

**Switches** will emit a `power: on` signal to any [linked](custom-levels/index.md#link-tool)
doodads when touched by the player or other mobile doodad, and then a `power: off`
signal when touched again.

Switches come in a few different styles (all cosmetic in nature and behave the
same way):

* On/Off "background" wall switch that faces the screen.
* Side-profile switches to attach to the side of a wall (left and right).
* Side-profile floor switch.

---

## Boolean State Doodads

The **Boolean State Doodads** are a series of doodads which have a mutually
exclusive state from one another, with their state toggled by the "ON/OFF"
State Button.

### State Button

![Blue "On"](images/doodads/blue-button.png) ![Orange "Off"](images/doodads/orange-button.png)

The **State Button** globally toggles the boolean state for all doodads in the
level which are sensitive to the state.

The player character must jump into the ON/OFF block from below and hit it with
their head. From above, the ON/OFF block acts like a solid floor that the player
or other mobile doodads can stand on top of.

In the future it will be possible to bonk the ON/OFF block from the sides or
top with enough force, but currently only hitting it from the bottom will flip
its state.

* When the button is **OFF**, all **blue** state doodads are active. This is the default state.
* When the button is **ON**, all **orange** state doodads are active.

### State Blocks

![Blue "On"](images/doodads/blue-on.png) ![Blue "Off"](images/doodads/blue-off.png)

![Orange "Off"](images/doodads/orange-off.png) ![Orange "On"](images/doodads/orange-on.png)

**State Blocks** are blue and orange squares that keep opposite state from one
another. In one state the block is solid, in another it is passable.

The ON/OFF block will toggle all state blocks on the level to their opposite
setting whenever it's touched by the player or other mobile doodad.

### Blue & Orange Warp Doors

![Blue Warp Door](images/doodads/warp-door-blue.gif) ![Blue "Off" Door](images/doodads/warp-blue-off.png)

![Orange "Off" Door](images/doodads/warp-orange-off.png) ![Orange Warp Door](images/doodads/warp-door-orange.gif)

The **Blue & Orange Warp Doors** are variants of the [Warp Door](#warp-doors) that
are sensitive to the ON/OFF State Blocks. These doors can only be opened while the
door is in the "ON" (active) state -- when "OFF" (drawn as a hollow dotted outline)
the door can not be opened by the player. However, a player may still **exit** from
a de-activated door.

The **Blue Warp Door** is active at the same time as the **Blue State Blocks**,
and vice versa for the **Orange Warp Door.**

---

## Technical Doodads

"Technical" doodads tend to turn invisible during gameplay and have some useful
interactions for certain situations.

### Goal Region

![Goal Region](images/doodads/goal-region.png)

This doodad acts like an invisible Exit Flag, winning the level if touched by
a player character.

### Checkpoint Region

![Checkpoint Region](images/doodads/checkpoint-region.png)

This doodad acts like an invisible Checkpoint Flag, recording the player's
progress in a level.

### Fire Region

![Fire Region](images/doodads/fire-region.png)

This doodad will trigger the fail condition if touched by the player.

### Power Source

![Power Source](images/doodads/power-source.png)

On level start, this doodad emits a `power(true)` signal to all linked doodads.
Connect it to an Electric Door, for example, and the door will open immediately
when the level begins.

### Stall Player

![Stall Player](images/doodads/stall-player.png)

This doodad will freeze the player character for 250ms, one time. It is useful
if you need to slow down the player to get some timing in your level to work
out.

If this doodad receives power from a linked button, it will reset the trap,
and will freeze the player again for 250ms should they make contact with the
doodad again.