---
title: "Frequently Asked Questions"
draft: false
toc: true
---
About Sketchy Maze.

# General

## What is _Sketchy Maze?_

It is a "drawing-based maze game" themed around hand-drawn maps on paper.

With Sketchy Maze, you can draw your own levels and then play them as a
side-scrolling platformer game. You can draw maps freehand or with some basic
drawing tools (like rectangles and ellipses), specify which color lines are
"solid" and which behave like "fire" or "water," and then drag and drop various
"doodads" such as buttons and doors onto your map to add some interactive elements.

If you're not much of a level designer, fear not! The game will also feature some
built-in levels that you can play and get some inspiration from. You will
also be able to play custom maps created by others, possibly with custom
doodads included in them depending on your version of the game.

## What devices can I play it on?

_Sketchy Maze_ is first and foremost a videogame for **desktop operating systems.**
It should run on any GNU/Linux, Microsoft Windows or Apple macOS computer.

If you're feeling dangerous, you can also run it on GNU/Linux smartphone devices
like the Purism Librem 5 or Pine64 Pinephone. Mobile ports are _relatively_
down on the priority list, but it already _sorta_ functions.

See the [Download](/download) page.

## What are "doodads?"

Doodads are the dynamic objects you drag and drop into your level to make
it "do" things. They are the Buttons, Switches, Trapdoors, and other traps
and hazards to create puzzles and perilous platforming sections of your
level.

The game ships with a handful of [built-in doodads](/guidebook/doodads.html)
and players may also create their own, and program their behavior using
JavaScript.

## Do I need to learn how to program?

Nope! You can just draw some levels and use pre-made doodads in them. The "1.0"
version of the game is expected to include a proper set of single player levels
that can simply be _played_ so you don't even need to draw your own level if
you're not feeling creative.

You can also create some useful custom doodads in-game by selecting from a
"generic script" to drive its behavior. For example, you could draw a "spikes"
doodad and choose the "Generic Fire" script and it will act as a hazard to
the player in-game: "Watch out for spikes!"

You can use these generic scripts as a base and program your own logic and
behavior in JavaScript. There are some
[full example doodads](https://code.sketchymaze.com/declassified/doodads)
that you can learn from as well for creating your own custom Warp Doors
or playable characters.

## The user interface is ugly!

I find the "Windows 95" look charming.

Along with this game I'm also developing my own user interface toolkit from
scratch, with a simple API inspired by the [Tk toolkit](https://www.tcl.tk/).
It happens that the "Windows 95" look is easy to draw programmatically, as
a button is just a few rectangles overlapped to draw shadows and highlights.

The user interface toolkit is released as a
[free and open source](#is-this-game-open-source) module that other Go
developers can use to draw buttons, menus and other UI controls into a
graphical application. One day, the UI toolkit will support fancy theming
of widgets, and _Sketchy Maze_ will very easily look better (or have
user-configurable themes available to choose from).

# Pricing and Distribution

## Is this game free?

Yes!

While the game is in beta, all releases are **100% free and fully functional.**

After the game reaches "1.0" it will have a free version and a paid one
which unlocks additional modding capabilities, like the ability to embed
custom doodads in your levels. I like Minecraft's model of "buy the game
once, free updates forever" and will do similar.

The full version would mainly add quality-of-life improvements supporting
custom user content, such as the ability to play a custom level which
_comes with_ all of its custom doodads, wallpaper, and other assets
embedded directly inside the level file.

The free versions of the game would include:

* One chapter of built-in single player levels.
* The level editor where you can create and share your own custom maps, using
  the [built-in doodads](/guidebook/doodads.html) that the game shipped with.
  You can also play levels created by other players as long as they use the
  built-in doodads only, or uses custom doodads the player has installed
  locally.

Paid versions of the game will include _additional_ features such as:

* Additional chapters of built-in single player levels.
* Better support for **custom doodads**: when sharing your level with others,
  you may embed all custom doodads _inside_ of the level so that it can be
  easily played on a different computer, and the ability to play such
  levels (the free version won't use embedded custom doodads).
* Possibly some access to online account features (in-game UI to share and
  download levels and doodads made by others, etc.)

It is expected that the full set of built-in doodads will be equally available
in free versions of the game. And these doodads should be varied and featureful
enough to create all sorts of custom and creative levels, which can be shared
with other players.

## Will the game feature any form of Digital Rights Management (DRM)?

I hate DRM, so I don't expect so.

Likely, the same program .exe will use "free version" features by default
until registered as a paid version, with either of these options:

* With a license key file for offline activation.
* With an online check to an account server (optional)
* If released on Steam, a Steam license check for the game.

But I would most aim for the first option to always be available: buy the
game once, get a proof file that you can keep forever and upgrade to the
full version of the game. That way even if I get hit by a bus or you lose
your Steam account, the game can still be played to its full potential.

## What about piracy?

When I start to discover license keys which have leaked online to game piracy
websites, _future_ releases of Sketchy Maze will begin to include license
revocation lists and will cease honoring the compromised license key.

The compromised license key would still work on all _older_ versions of the game,
but would be barred from newer releases; and while the game is still being
actively worked on and gaining new features, these leaked keys would become less
interesting over time, as custom user content made for newer versions of the game
would become incompatible with the older versions.

When the game gets online services (sharing levels/doodads), the compromised
license key would be forbidden from those services.

## Will this game be available on Steam?

I haven't decided yet. I think I could try and distribute the game myself first.
It's gonna be in beta for some time and I can see if it attracts a cult following
along the way.

# Technicals

## What is this game built with?

_Sketchy Maze_ runs on a custom game engine, built from the ground up, in the
[Go](https://golang.org) programming language using [SDL2](https://www.libsdl.org/) for graphics via [veandco/go-sdl2](https://github.com/veandco/go-sdl2) bindings for Go.

While the game itself is not open source, some of its critical components are released as free and open source projects that other developers can use in their projects.

## Is this game open source?

Parts of it are!

_Sketchy Maze_ was built from the ground up using little more than
[SDL2](https://www.libsdl.org/) which lets you plot pixels on a screen. While
I was designing the game, I thought it'd be a good idea to write an abstraction
layer between low-level SDL2 functions and give me a clean, Go-like API to work
with that keeps my code from either _depending_ too much on SDL or for my Go
code to be written too C-like to work with it.

So I built my own [render](https://git.kirsle.net/go/render) library that
abstracts around SDL2 for desktops and HTML5 Canvas elements for WebAssembly,
and my game needed UI buttons so I wrote a [UI toolkit](https://git.kirsle.net/go/ui)
which provides Labels, Buttons, Menus, Windows, and all sorts of useful widgets
to draw my user interface with. The render engine can be extended to target
other APIs, such as OpenGL or Vulkan, in the future as needs arise.

Here are a list of open source projects created **as a part of** development of
_Sketchy Maze_ which should be generally useful to any Go developers for making
some simple graphical applications.

* [go/render](https://git.kirsle.net/go/render): Render engine supporting SDL2
  (native apps) and HTML Canvas (WebAssembly) targets.
* [go/ui](https://git.kirsle.net/go/ui): Go UI toolkit for adding labels, buttons,
  windows, menus, and more widgets and arranging them sanely in frames with an
  API like Tcl/Tk. It uses go/render so can also target WebAssembly.
* [go/audio](https://git.kirsle.net/go/audio): Simple audio abstraction which can load and play music or sound effects, currently only SDL2 supported.

GitHub mirrors of the above:

* [go/render](https://github.com/kirsle/render)
* [go/ui](https://github.com/kirsle/ui)

Also this website, the user guidebook, and other things with the game are
readable as open source code, at https://code.sketchymaze.com/

## Wait, does _Sketchy Maze_ have a WebAssembly port?

Sure does! But performance isn't great yet, and I'm not sure whether WebAssembly
support in web browsers needs to get better or if I need to tighten up my code.
There _is_ a lot of room for optimization in my UI toolkit, to minimize the number
of draw calls per tick.

One day I might have a "demo this game right in your web browser" feature with a
(probably stripped-down) version of the game built for WebAssembly. So far, though,
it just freezes web browsers frequently and I'm not letting you see it yet.

## Is it coming to Android or iOS?

These are relatively low on the priority list; maybe after the 1.0 release is
feature-complete I'll work on making the game work on mobile phones.

Already the game _sort of_ functions on GNU/Linux smartphones such as the
Pinephone. This phone has a 720x1280 pixel display and _most_ of the UI buttons
are usable in the level editor, doodads can be dragged onto levels, etc.; its
current biggest issue is with the on-screen keyboard app not being able to press
two keys simultaneously (like to move and jump at the same time).

An Android port would likely be the first one _after_ testing on the Pinephone
to get a touch-friendly user interface going. This game mainly just uses SDL2
which is good for portability!
