v0.4.0 Release Version Candidate
|
@ -1,3 +1,41 @@
|
|||
# About Project: Doodle
|
||||
|
||||
Lorem ipsum.
|
||||
Project: Doodle is a "drawing-based maze game" themed around hand-drawn mazes
|
||||
on paper.
|
||||
|
||||
![Screenshot of the level editor](../images/about.png)
|
||||
|
||||
You can draw your own custom maps, freehand or with some basic drawing tools,
|
||||
and then drag and drop pre-made "[doodads](doodads.md)" into your level for
|
||||
interactive things like keys, doors and buttons.
|
||||
|
||||
This is an **early alpha build** of the game. Longer term it will include a couple
|
||||
built-in "single player campaigns" of multiple themed levels, but for now it
|
||||
just includes a couple example levels and the editor itself.
|
||||
|
||||
## Inspiration
|
||||
|
||||
When I was a kid in the era of Sega Genesys and Super Nintendo, I liked to
|
||||
draw my own levels with pen and paper and "play" them with my imagination. My
|
||||
"mouse mazes" had all sorts of features borrowed from videogames I liked.
|
||||
There were buttons that the player had to push that would open a door far
|
||||
across the level (and I'd draw a little dotted line showing the connection
|
||||
between the button and the door). Trapdoors would have the player fall through
|
||||
and then close behind them so they can't go back. Keys in different shapes
|
||||
could unlock doors in similar shapes (you'd just have to remember which keys
|
||||
you've got!)
|
||||
|
||||
When you're drawing with a pen and paper, the level can be anything you want.
|
||||
You can draw a castle or a cave, place little gizmos and traps throughout the
|
||||
level (doors, keys, buttons and things) to create puzzles. Do you want the red
|
||||
pixels to mean "fire" and burn the player? Or do you want to decorate the tops
|
||||
of "bloody" spikes with red? Either way, the 'fire' attribute on that color will
|
||||
do the job and you can draw whatever shape you want for your level hazards.
|
||||
|
||||
![Palette editor](../images/palette.png)
|
||||
|
||||
## Mod Friendly
|
||||
|
||||
While the game ships with a [handful of built-in doodads](doodads.md) to
|
||||
spice up your level, you can also create your own and program them to do
|
||||
whatever you want, with JavaScript!
|
||||
|
|
|
@ -1,27 +1,35 @@
|
|||
# Drawing a Doodad In-Game
|
||||
|
||||
Project: Doodle has some **limited** support to draw your doodad sprites
|
||||
in-game. Currently you can only draw one frame (image) for the doodad
|
||||
and save it to disk.
|
||||
Project: Doodle has support for drawing your custom doodad sprites in-game,
|
||||
although for now you may find it more comfortable to use an
|
||||
[external image editor](edit-external.md) instead.
|
||||
|
||||
To start a new doodad, open the game and enter the level editor.
|
||||
To start a new doodad, open the game and enter the level editor. Select the
|
||||
"File -> New Doodad" menu at the top of the screen. You will be prompted for
|
||||
the square dimensions of your doodad (i.e. `100` for a 100x100 sprite) and
|
||||
you can begin editing.
|
||||
|
||||
Select the "New Doodad" button at the top of the screen to start drawing a
|
||||
new doodad. Choose the size (square) of its sprite when prompted.
|
||||
![Screenshot of the Doodad editor](../images/doodad-editor.png)
|
||||
|
||||
Doodads saved in-game go in your user config directory for the game. On Linux,
|
||||
this is at ~/.config/doodle.
|
||||
## Layers
|
||||
|
||||
If you want to create a doodad with multiple frames (to animate it or have
|
||||
varying states that change the doodad's appearance in the level), the
|
||||
`doodad` tool is recommended. See
|
||||
[drawing images in an external program](edit-external.md).
|
||||
A key difference between Levels and Doodads are that Doodad drawings can have
|
||||
multiple **layers**. For doodads these are used to store multiple frames of
|
||||
animation or different states, such as an opened vs. closed door.
|
||||
|
||||
Clicking the **Lyr.** button on the left toolbar or the "Tools -> Layers"
|
||||
menu will open the Layers window where you can switch your editor between
|
||||
layers, add and rename them. Layers can be toggled by the doodad's
|
||||
[JavaScript code](scripts.md) by index number or by name, so giving each layer
|
||||
a descriptive name is useful.
|
||||
|
||||
Doodads saved in-game go in your [user config directory](../profile-directory.md)
|
||||
on your system.
|
||||
|
||||
## Future Planned Features
|
||||
|
||||
Creating doodads in-game is intended to be a fully supported feature. The
|
||||
following features are planned to be supported:
|
||||
|
||||
* Support editing multiple frames instead of only the first frame.
|
||||
* Implement some features only available on the `doodad` tool using in-game
|
||||
UI, such as attaching JavaScripts to the doodad.
|
||||
|
|
|
@ -5,7 +5,12 @@ and ability to interact with the player and other doodads.
|
|||
|
||||
Doodad scripts are run during "Play Mode" when a level _containing_ the doodad
|
||||
is being played. You can install a JavaScript (.js) file into a doodad using
|
||||
the command-line `doodad` program.
|
||||
the `doodad` [command line program](../doodad-tool.md) that
|
||||
shipped with your game:
|
||||
|
||||
```bash
|
||||
> doodad install-script index.js filename.doodad
|
||||
```
|
||||
|
||||
An example Doodad script looks like the following:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Creating Custom Levels
|
||||
|
||||
One of the core gameplay features is its Level Editor which lets you draw your
|
||||
One of the core gameplay features is the Level Editor which lets you draw your
|
||||
own custom maps to play and share with others.
|
||||
|
||||
From the game's Main Menu, click on the "Create a Level" button to open the
|
||||
|
@ -12,6 +12,8 @@ button instead.
|
|||
When creating a new level, you first choose some settings for it. These are
|
||||
described below:
|
||||
|
||||
![Screenshot of New Level dialog](../images/newlevel-1.png)
|
||||
|
||||
### Page Type
|
||||
|
||||
This setting controls the size and boundaries of your level, and control the
|
||||
|
@ -27,6 +29,8 @@ appearance of the notebook paper background of your level.
|
|||
grow your level. The wallpaper on this level type only uses the "tiling"
|
||||
pattern, so notebook-themed levels won't show the top/left decorations.
|
||||
|
||||
You can change these settings later if you change your mind.
|
||||
|
||||
### Wallpaper
|
||||
|
||||
The wallpaper affects the "theme" of your level. Project: Doodle is themed around
|
||||
|
@ -54,46 +58,194 @@ lines pattern. The page types and their effect on the wallpapers are:
|
|||
* **Unbounded** levels only use the repeating tiled pattern across the entire
|
||||
level, because there is no top-left boundary to anchor those decorations to.
|
||||
|
||||
## Editor Mode Interface
|
||||
## Editor Interface
|
||||
|
||||
![Level Editor View](../images/editor-1.png)
|
||||
![Level Editor View](../images/newlevel-2.png)
|
||||
|
||||
Quick 5-minute tour of what you're looking at:
|
||||
This is the level editor. You can click and drag on the blank page and begin
|
||||
drawing a level. The toolbar down the left has various drawing tools: Pencil
|
||||
(freehand), Line, Rectangle, Ellipse. The toolbar down the right is your level
|
||||
palette. You can mouse-over most buttons and see an immediate tooltip appear
|
||||
that describes what it is.
|
||||
|
||||
* The top of the window has your **Menu Bar**:
|
||||
* **New Level** opens the "Create a New Level" menu.
|
||||
* **New Doodad** opens the Doodad Editor for drawing a new custom doodad.
|
||||
You're prompted for the size of the doodad, which will be its width and
|
||||
height boundary. For example, a size of "100" means a 100x100 pixel graphic
|
||||
for your custom doodad.
|
||||
* **Save** and **Save as...** let you save the current Level or Doodad you're
|
||||
drawing to disk. "Save" will only ask for the filename once whereas "Save as"
|
||||
asks every time.
|
||||
* **Load** opens the "Edit a Level" menu to choose a Level or Doodad to edit.
|
||||
* **Options** options the Level Options dialog so you can modify the page type
|
||||
and wallpaper setting.
|
||||
Quick 5-second overview of the editor interface:
|
||||
|
||||
* The top of the window has your [**Menu Bar**](#menu-bar), a common sight on desktop applications.
|
||||
* The panel on the left side of the window is your **Tool Box**. Clicking these
|
||||
buttons activates a specific drawing tool or mode:
|
||||
* **Pencil Tool** lets you click, drag, and draw pixels of your selected
|
||||
Palette color onto your level freehand.
|
||||
* **Line Tool** lets you easily draw a straight line between two points. Click
|
||||
* <img src="../images/sprites/pencil-tool.png" width="16" height="16">
|
||||
**Pencil Tool** lets you click, drag, and draw pixels of your selected
|
||||
Palette color onto your level freehand. Shortcut key: `f`
|
||||
* <img src="../images/sprites/line-tool.png" width="16" height="16">
|
||||
**Line Tool** lets you easily draw a straight line between two points. Click
|
||||
in your level where you want the first point to be, and drag your mouse to
|
||||
the second point. Release the mouse to commit the line to your drawing.
|
||||
* **Rectangle Tool** lets you easily draw rectangles on your level.
|
||||
* **Ellipse Tool** lets you draw circles or elliptical shapes.
|
||||
* **Doodad Tool** lets you drag doodads such as buttons and doors onto your
|
||||
level. See the [Doodad Tool](#doodad-tool) below.
|
||||
* **Link Tool** lets you link doodads together so that they can interact off
|
||||
Shortcut key: `l`
|
||||
* <img src="../images/sprites/rect-tool.png" width="16" height="16">
|
||||
**Rectangle Tool** lets you easily draw rectangles on your level. Shortcut: `r`
|
||||
* <img src="../images/sprites/ellipse-tool.png" width="16" height="16">
|
||||
**Ellipse Tool** lets you draw circles or elliptical shapes. Shortcut: `c`
|
||||
* <img src="../images/sprites/actor-tool.png" width="16" height="16">
|
||||
**Doodad Tool** lets you drag doodads such as buttons and doors onto your
|
||||
level. See the [Doodad Tool](#doodad-tool) below. Shortcut: `d`
|
||||
* <img src="../images/sprites/link-tool.png" width="16" height="16">
|
||||
**Link Tool** lets you link doodads together so that they can interact off
|
||||
each other. For example, a Button connected to an Electric Door will cause
|
||||
the door to open and close when the button is pressed. See [Link Tool](#link-tool)
|
||||
below.
|
||||
* **Eraser Tool** cleans up your mistakes. Click and drag over pixels you've
|
||||
drawn to delete the pixels from your level.
|
||||
* **Brush Size:** the "Size:" label shows the brush size of your current drawing
|
||||
tool. This translates to the line thickness, or how big your pixels are when
|
||||
drawn into the level. Click the + and - buttons to increase or decrease the
|
||||
brush size, and draw thicker or thinner lines.
|
||||
* <img src="../images/sprites/eraser-tool.png" width="16" height="16">
|
||||
**Eraser Tool** cleans up your mistakes. Click and drag over pixels you've
|
||||
drawn to delete the pixels from your level. Shortcut: `x`
|
||||
* The **Size:** label on the left controls the brush size of your current drawing
|
||||
tool. This translates to the line thickness, or how big your pixels are when
|
||||
drawn into the level. Click the + and - buttons to increase or decrease the
|
||||
brush size, and draw thicker or thinner lines.
|
||||
* The panel on the right side of the window is your **Palette** of colors to
|
||||
draw with.
|
||||
draw with. Mouse over a color to see its name and properties -- different
|
||||
colors may mean different things!
|
||||
* The **Edit** button will open the Palette Editor where you can change a
|
||||
color, rename it, and set its properties. See [Color Attributes](#color-attributes)
|
||||
|
||||
---
|
||||
|
||||
## Palette Editor
|
||||
|
||||
![Screenshot of the Level Palette editor](../images/palette.png)
|
||||
|
||||
Clicking the "Tools" menu and "Edit Palette", or the Edit button on the
|
||||
palette toolbar on the right side of the screen, will open the palette editor.
|
||||
|
||||
Levels are designed to have a limited color palette, and this is your selection
|
||||
of colors for the level or doodad you're drawing. You can click on "Add Color"
|
||||
to create more rows as needed.
|
||||
|
||||
### Color Attributes
|
||||
|
||||
The **Attributes** column toggles behaviors on or off for this color. In the default
|
||||
color palette, black pixels make up your **solid** level geometry, red pixels are
|
||||
**fire**, and blue pixels are **water**.
|
||||
|
||||
By default the color will be purely decorative, not physically colliding with the
|
||||
player or affecting them in any way.
|
||||
|
||||
The attributes and their meanings are:
|
||||
|
||||
* **Solid**: the player character and other mobile doodads will collide against
|
||||
pixels drawn in this color. Useful for your level geometry.
|
||||
* **Fire**: if the player touches pixels of this color, they die!
|
||||
* **Water**: will act like water, currently it just draws the player blue.
|
||||
|
||||
### Changing Colors
|
||||
|
||||
Clicking on the colored square will prompt you to enter a new color in
|
||||
hexadecimal notation, like `#FF00FF` for <span style="color: #FF00FF">magenta</span>
|
||||
or `#0099FF` for <span style="color: #0099FF">light blue</span>. Colors can
|
||||
be entered in the following formats (the # prefix is actually optional):
|
||||
|
||||
* 3-digit hexadecimal: `#F0F` or `#09F`
|
||||
* 6-digital hexadecimal: `#0099FF` or `#FC390E`
|
||||
* 8-digit RGBA: `#0000FF99`
|
||||
|
||||
You can also set the color to be **semi-transparent** by providing an
|
||||
additional two hex characters for its alpha channel:
|
||||
|
||||
![Enter an RGBA color value for see-thru colors](../images/palette-rgba.png)
|
||||
|
||||
> Pictured: I have set the "solid" color to #000000**33** giving it an alpha
|
||||
> value -- making it semi transparent against the level wallpaper.
|
||||
|
||||
## Doodad Tool
|
||||
|
||||
When clicking on the <img src="../images/sprites/actor-tool.png" width="16" height="16"> **Doodad Tool** or
|
||||
pressing the `d` key, the Doodads window will appear in the level editor:
|
||||
|
||||
![Doodads window](../images/doodads.png)
|
||||
|
||||
Doodads are objects you drag and drop into your level to add interactive elements
|
||||
such as enemies and buttons. Mousing over a doodad will tell you its name, and
|
||||
the pager buttons at the bottom can show more options.
|
||||
|
||||
Click and drag a doodad from the Doodads window onto your level to place it.
|
||||
|
||||
When the **Doodad Tool** is active on the left toolbar, when you mouse over an
|
||||
existing doodad on your level, and orange box will appear around it. You may
|
||||
click and drag to move this doodad somewhere else. Right-click it to remove it
|
||||
from your level.
|
||||
|
||||
* Left click: move a doodad somewhere else on your level.
|
||||
* Right click: remove the doodad from your level.
|
||||
|
||||
Doodads provide various useful features to your level:
|
||||
|
||||
* **Keys and Locked Doors** let you place collectible keys around the level which,
|
||||
when obtained, allow the player to permanently unlock doors of the same color
|
||||
and open new paths on the level. There are four pairs of keys and doors.
|
||||
* **Buttons and Switches** let you open and close **Electric Doors** and trigger
|
||||
other devices to which they are linked.
|
||||
* **Trapdoors** provide one-way gates; once the door has swung shut, it can not
|
||||
be entered from the wrong side!
|
||||
|
||||
To connect buttons to control doors, use the
|
||||
<img src="../images/sprites/link-tool.png" width="16" height="16"> **Link Tool.**
|
||||
|
||||
## Link Tool
|
||||
|
||||
The <img src="../images/sprites/link-tool.png" width="16" height="16"> **Link Tool**
|
||||
allows you to pair two doodads on your level together. This allows the doodads
|
||||
to communicate events with each other, for example, so a button can open an
|
||||
electric door when pressed.
|
||||
|
||||
![Link Tool](../images/link-tool.png)
|
||||
|
||||
This screenshot shows several buttons and switches that are linked to several
|
||||
electric doors. With the Link Tool selected, mouse over a doodad on your level
|
||||
and a magenta box appears around it. Click on it, and then click on the other
|
||||
doodad to pair it to. A glowing magenta line will connect the two doodads
|
||||
together from then on, showing their connection.
|
||||
|
||||
> **Note:** there seems to be no way to un-link two doodads once linked,
|
||||
> deleting one from your level and placing a new one will break the links.
|
||||
|
||||
Linked doodads are able to send small messages to their linked partners when
|
||||
events happen to _them_. For example, when the player character steps on a button
|
||||
it sends a "power on" signal to the door it's connected to, and the door opens.
|
||||
When the button is released, it sends a "power off" signal and the door closes.
|
||||
|
||||
See the [Doodads](../doodads.md) page for a description of the game's built-in
|
||||
doodads and how they interact with each other.
|
||||
|
||||
## Menu Bar
|
||||
|
||||
While editing a level or doodad, a Menu Bar appears at the top of the screen.
|
||||
Its options include:
|
||||
|
||||
* **File**
|
||||
* New level (Ctrl-N)
|
||||
* New doodad
|
||||
* Save (Ctrl-S)
|
||||
* Save as...
|
||||
* Open... (Ctrl-O)
|
||||
* Close level
|
||||
* Quit (Escape)
|
||||
* **Edit**
|
||||
* Undo (Ctrl-Z)
|
||||
* Redo (Ctrl-Y)
|
||||
* **Level**
|
||||
* Page settings (to change the level type or wallpaper)
|
||||
* Playtest (P)
|
||||
* **Tools**
|
||||
* Debug overlay (F3)
|
||||
* Command shell (Enter)
|
||||
* Edit Palette
|
||||
* Doodads (d)
|
||||
* Pencil Tool (f)
|
||||
* Line Tool (L)
|
||||
* Rectangle Tool (r)
|
||||
* Ellipse Tool (c)
|
||||
* Eraser Tool (x)
|
||||
* Link Tool
|
||||
* **Help**
|
||||
* User Manual (F1)
|
||||
* About
|
||||
|
||||
![Doodad Toolbar View](../images/editor-2.png)
|
||||
|
|
129
docs/doodads.md
Normal file
|
@ -0,0 +1,129 @@
|
|||
# Doodads
|
||||
|
||||
Project:Doodle 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!
|
||||
|
||||
---
|
||||
|
||||
## Flags
|
||||
|
||||
The **Start Flag** sets the player spawn point in your level. There should be
|
||||
only one start flag.
|
||||
|
||||
The **Exit Flag** sets a goal point for the level. The player must touch this
|
||||
flag to win the level.
|
||||
|
||||
---
|
||||
|
||||
## Trapdoors
|
||||
|
||||
Trapdoors come in four varieties: **Left**, **Right**, **Up**, or down (**Trapdoor**).
|
||||
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
## Locked Doors & Keys
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
Each key/door pair also has a distinct shape:
|
||||
|
||||
* **Red Key** (triangle)
|
||||
* **Green Key** (cross)
|
||||
* **Yellow Key** (star)
|
||||
* **Blue Key** (diamond)
|
||||
|
||||
---
|
||||
|
||||
## Electric Door
|
||||
|
||||
The sci-fi electric door can only be opened when it receives a "power" signal
|
||||
from a linked button or switch. See [Linked Doodads](#linked-doodads) below.
|
||||
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
## Buttons
|
||||
|
||||
**Buttons** will emit a "power: on" signal to all doodads that they are
|
||||
[Linked](#linking-doodads) to 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 three varieties:
|
||||
|
||||
* **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:** a button with a red arrow that stays pressed in once pressed.
|
||||
|
||||
When a sticky button is pressed, it emits a "power: on" signal once and stays
|
||||
pressed in forever. If the Sticky Button itself _receives_ "power: on" from another
|
||||
button, it will pop back up.
|
||||
|
||||
---
|
||||
|
||||
## Switches
|
||||
|
||||
**Switches** will emit a `power: on` signal to [linked](#linked-doodads) doodads
|
||||
when touched by the player or other mobile doodad, and then a `power: off`
|
||||
signal when touched again.
|
||||
|
||||
They come in various aesthetic flavors:
|
||||
|
||||
* Wall switch (left, right)
|
||||
* Floor switch
|
||||
* On/Off "background" wall switch facing the screen
|
||||
|
||||
---
|
||||
|
||||
## Crumbly Floor
|
||||
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
## State Blocks
|
||||
|
||||
**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.
|
||||
|
||||
---
|
||||
|
||||
## Red Azulian (Test Mob)
|
||||
|
||||
The red Azulian is a test mobile character. Not really an enemy, as he doesn't
|
||||
care about the player.
|
||||
|
||||
The Azulian's A.I. just has it run left and right until it meets resistance.
|
||||
It can pick up keys, activate buttons and switches that it passes by, and can
|
||||
unlock doors.
|
||||
|
||||
This mob will probably go away in future releases of the game and will remain
|
||||
in the code as a hidden easter egg.
|
15
docs/experimental.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
# Experimental Features
|
||||
|
||||
Some upcoming gameplay features that aren't _quite_ working well yet will
|
||||
be 'hidden' behind some feature flags and not turned on by default.
|
||||
|
||||
To start up the game with ALL experimental features enabled, pass the
|
||||
--experimental option to the program's command line:
|
||||
|
||||
```bash
|
||||
# Unix-like environments
|
||||
$ ./doodle --experimental
|
||||
|
||||
# Windows.
|
||||
> doodle.exe --experimental
|
||||
```
|
172
docs/hacking.md
Normal file
|
@ -0,0 +1,172 @@
|
|||
# Hacking
|
||||
|
||||
This page discusses some advanced features of the game.
|
||||
|
||||
I've always loved it when developers kept debugging features in their released
|
||||
games, and playing around with those and figuring out what makes the game tick.
|
||||
I purposely left some debug features in the game that you can play around with.
|
||||
|
||||
## Developer Console
|
||||
|
||||
Pressing the `Enter` key at any time will open the developer console at the
|
||||
bottom of the screen (all gameplay logic is paused while the console is open).
|
||||
|
||||
In the console you can type anything from simple commands, to hidden cheat
|
||||
codes, to JavaScript commands to operate on some of the game's internal code!
|
||||
|
||||
![Screenshot of the developer console](../images/shell.png)
|
||||
|
||||
Pressing `Enter` again without typing a command will close the console.
|
||||
|
||||
## Commands
|
||||
|
||||
At the white **>** prompt you can type a command. Typing `help` will show
|
||||
a listing of available commands; typing `help` and then a command name will
|
||||
show further usage of that command. For example, `help echo`.
|
||||
|
||||
The answer to your command is "flashed" in blue text at the bottom of the
|
||||
screen and the developer console is closed. Pressing `Enter` will re-open the
|
||||
console and show the recent history, including the answer to your last command.
|
||||
|
||||
```
|
||||
>help echo
|
||||
Usage: echo <message>
|
||||
Flash a message back to the console
|
||||
```
|
||||
|
||||
The following commands are supported:
|
||||
|
||||
* `help`, `help <command>`
|
||||
|
||||
Shows the list of commands, or further help on a specific command.
|
||||
|
||||
* `echo <message>`
|
||||
|
||||
Flashes your custom message on the bottom of the screen.
|
||||
|
||||
* `alert <message>`
|
||||
|
||||
Pop up an alert box modal with a custom message.
|
||||
|
||||
* `new`
|
||||
|
||||
Go to the "New Drawing" screen.
|
||||
|
||||
* `save [filename]`
|
||||
|
||||
Save the current drawing. If the drawing has not been saved
|
||||
before, a filename is required, including the `.level` or
|
||||
`.doodad` suffix.
|
||||
|
||||
* `edit <filename>`
|
||||
|
||||
Open a file for editing. The filename is a path on disk relative
|
||||
to the game's working directory.
|
||||
|
||||
* `play <filename>`
|
||||
|
||||
Open a file for playing. The filename is a path on disk relative
|
||||
to the game's working directory. A wrong filename will play a
|
||||
new, blank level where Boy just falls to the bottom of the map.
|
||||
|
||||
* `close`
|
||||
|
||||
Close the current level being edited and return to the title screen.
|
||||
|
||||
* `quit`, `exit`
|
||||
|
||||
Close the developer console (an empty command would also work).
|
||||
|
||||
## Cheat Codes
|
||||
|
||||
Typing these messages in the console will toggle various mundane cheat
|
||||
codes within the game:
|
||||
|
||||
* `unleash the beast`
|
||||
|
||||
Do not cap the frames per second target of 60, allowing the game
|
||||
to run as fast as it's capable of. May or may not actually work.
|
||||
|
||||
* `don't edit and drive`
|
||||
|
||||
While playing a level, this makes the level canvas editable and
|
||||
you can draw new pixels by clicking. Note that drawn pixels do not
|
||||
"commit" to the level until you release the cursor.
|
||||
|
||||
* `scroll scroll scroll your boat`
|
||||
|
||||
While playing a level, this allows scrolling the level with arrow
|
||||
keys as if you're editing it. The camera still keeps the player
|
||||
character in view.
|
||||
|
||||
* `import antigravity`
|
||||
|
||||
While playing a level, this turns off gravity for the player
|
||||
character. In this state the arrow keys can freely move the
|
||||
character in any direction. [Relevant xkcd](https://xkcd.com/353/)
|
||||
|
||||
* `ghost mode`
|
||||
|
||||
Disable collision detection for the player character. This
|
||||
will also enable antigravity, otherwise you would fall to the
|
||||
bottom of the level.
|
||||
|
||||
* `give all keys`
|
||||
|
||||
Gives all four colored keys to the player.
|
||||
|
||||
* `drop all items`
|
||||
|
||||
Removes all keys and items from the player's inventory.
|
||||
|
||||
## JavaScript Shell
|
||||
|
||||
The developer console also features a JavaScript shell, which exposes
|
||||
many of the game's internal data types and functions that can be
|
||||
useful when debugging the game, or just fun to see what you can
|
||||
break within the game!
|
||||
|
||||
In the developer console, the `eval` or `$` command will run a single
|
||||
line of JavaScript code.
|
||||
|
||||
```
|
||||
>$ 2 + 2
|
||||
4
|
||||
>$ d.Flash("This is %s", d.Title())
|
||||
This is Project: Doodle v0.4.0-alpha
|
||||
```
|
||||
|
||||
The following native objects are exposed to the JavaScript shell:
|
||||
|
||||
* `d` is the master game object.
|
||||
* `function RGBA(red, green, blue, alpha uint8)` creates a native
|
||||
Color type, each value is range 0 to 255
|
||||
* `function Point(x, y int)` creates a native Point type.
|
||||
* `function Rect(x, y, w, h int)` creates a native Rect type.
|
||||
* `function Tree(ui.Widget)` prints a tree of UI widgets drawn on the
|
||||
screen -- if you can find the widgets somewhere under `d`
|
||||
|
||||
```
|
||||
>$ RGBA(255, 153, 0, 230).String()
|
||||
Color<#ff9900+e6>
|
||||
>$ Object.keys(d)
|
||||
Debug,Engine,Scene,ConfirmExit,DrawCollisionBox,DrawDebugOverlay,...
|
||||
>$ typeof(d.Debug)
|
||||
boolean
|
||||
>$ typeof(d.Flash)
|
||||
function
|
||||
>$ d.Flash("Flash a custom message, like the `echo` command")
|
||||
undefined
|
||||
>$ d.EditDrawing("filename.level")
|
||||
```
|
||||
|
||||
It helps if you run Project: Doodle itself from a command line terminal,
|
||||
so you can see its developer console output also on your terminal
|
||||
window. Using `Object.keys(d)` will show all the exported functions and
|
||||
variables from the internal game state.
|
||||
|
||||
Understanding that my game's [rendering engine](https://git.kirsle.net/go/render) and
|
||||
[user interface toolkit](https://git.kirsle.net/go/ui) are open source projects
|
||||
you can have fun reconfiguring widgets to change colors or whatever.
|
||||
|
||||
![Screenshot of the JavaScript REPL](../images/jsrepl.png)
|
54
docs/hotkeys.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# Shortcut Keys
|
||||
|
||||
Here are all the hotkeys/shortcuts used within Project: Doodle.
|
||||
|
||||
* [Global Shortcuts](#global-shortcuts)
|
||||
* [Level Editor](#editor-only)
|
||||
* [Gameplay](#gameplay-only)
|
||||
|
||||
## Global Shortcuts
|
||||
|
||||
| Key | Action |
|
||||
|----------|------------------------------------------------------------|
|
||||
| `Escape` | Exit the application (after confirmation modal). |
|
||||
| `F1` | Open the Guidebook (this site). |
|
||||
| `Enter` | Open the [developer console](hacking.md#developer-console) |
|
||||
|
||||
---
|
||||
|
||||
## Editor Only
|
||||
|
||||
Only while editing a level or doodad:
|
||||
|
||||
| Key | Action |
|
||||
|----------|------------------------------------------------------|
|
||||
| Arrows | Scroll the view of the level you're editing. |
|
||||
| `p` | Playtest the current level (press `e` to edit again) |
|
||||
| `d` | Open the Doodads window to drop them in your level |
|
||||
| `f` | Pencil Tool (**f**reehand) |
|
||||
| `l` | **L**ine Tool |
|
||||
| `r` | **R**ectangle Tool |
|
||||
| `c` | Ellipse Tool (**c**ircles) |
|
||||
| `x` | Eraser Tool |
|
||||
| `+=` | Zoom in (with [--experimental](experimental.md)) |
|
||||
| `-_` | Zoom out ([--experimental](experimental.md)) |
|
||||
| `1` | Reset zoom ([--experimental](experimental.md)) |
|
||||
| `0` | Scroll level back to origin (0,0) |
|
||||
| `Ctrl-N` | Create a new level |
|
||||
| `Ctrl-S` | Save the current drawing |
|
||||
| `Ctrl-O` | Open a drawing |
|
||||
| `Ctrl-Z` | Undo |
|
||||
| `Ctrl-Y` | Redo |
|
||||
|
||||
---
|
||||
|
||||
## Gameplay Only
|
||||
|
||||
| Key | Action |
|
||||
|---------|----------------------------------------------------------|
|
||||
| `Left` | Move the player character towards the left. |
|
||||
| `Right` | Move the player character towards the right. |
|
||||
| `Up` | Jump |
|
||||
| `e` | Return to the level editor (only if you game from there) |
|
||||
|
||||
|
BIN
docs/images/about.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
docs/images/doodad-editor.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
docs/images/doodads.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
docs/images/jsrepl.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
docs/images/link-tool.png
Normal file
After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 86 KiB |
BIN
docs/images/newlevel-1.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
docs/images/newlevel-2.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
docs/images/palette-rgba.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
docs/images/palette.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
docs/images/shell.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
docs/images/sprites/actor-tool.png
Normal file
After Width: | Height: | Size: 687 B |
BIN
docs/images/sprites/ellipse-tool.png
Normal file
After Width: | Height: | Size: 717 B |
BIN
docs/images/sprites/eraser-tool.png
Normal file
After Width: | Height: | Size: 709 B |
BIN
docs/images/sprites/line-tool.png
Normal file
After Width: | Height: | Size: 626 B |
BIN
docs/images/sprites/link-tool.png
Normal file
After Width: | Height: | Size: 679 B |
BIN
docs/images/sprites/new-button.png
Normal file
After Width: | Height: | Size: 709 B |
BIN
docs/images/sprites/pencil-tool.png
Normal file
After Width: | Height: | Size: 752 B |
BIN
docs/images/sprites/rect-tool.png
Normal file
After Width: | Height: | Size: 648 B |
10
docs/profile-directory.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Profile Directory
|
||||
|
||||
Project: Doodle stores your user-created levels and custom doodads in your
|
||||
operating system's profile directory for your account.
|
||||
|
||||
This will typically be found at the following locations based on your platform:
|
||||
|
||||
* **Linux:** `$XDG_CONFIG_HOME` or `$HOME/.config/doodle`
|
||||
* **Windows:** `%APPDATA%` or `C:\Users\%USER%\AppData\Roaming\doodle`
|
||||
* **Mac OS:** `$HOME/Library/Application Support/doodle`
|
10
mkdocs.yml
|
@ -3,7 +3,15 @@ use_directory_urls: false
|
|||
nav:
|
||||
- Home: index.md
|
||||
- About: about.md
|
||||
- "Custom Doodads": custom-doodads/index.md
|
||||
- "Creating Levels": custom-levels/index.md
|
||||
- "Built-in Doodads": doodads.md
|
||||
- "Creating Doodads": custom-doodads/index.md
|
||||
- "Drawing Doodads": custom-doodads/edit-in-game.md
|
||||
- "Doodad Scripts": custom-doodads/scripts.md
|
||||
- "Shortcut Keys": hotkeys.md
|
||||
- "`doodad` Tool": doodad-tool.md
|
||||
- "Hacking": hacking.md
|
||||
theme: readthedocs
|
||||
markdown_extensions:
|
||||
- toc:
|
||||
permalink: "#"
|
||||
|
|