Sketchy Maze

"a drawing-based maze game."

Welcome to Sketchy Maze!

Sketchy Maze is a drawing-based maze game themed around hand-drawn maps on paper.

In Sketchy Maze, players may draw their own custom levels and play them as in a 2D platformer-type game. You can make your levels look like anything you want, and you decide which colors will be solid or which are fire; and then drag some "doodads" such as buttons, keys and creatures into your level to make it interesting. Oh, and those doodads? You can make your own, too, and program them in JavaScript to do whatever you want!

The game also features a "Story Mode" with some built-in levels, and players may also compose their own such Level Packs to share with others, too!

Runs on:

This game currently runs on GNU/Linux, Windows and macOS (Intel) computers and on Linux handhelds like the Pinephone or Librem 5 (arm64). It is currently available as an early, open beta release. See the Downloads page to try it out, free!

See About, FAQ and the Guidebook for more information about the game.

v0.14.0 Released

A new version of Sketchy Maze is now released and brings some polish and a handful of new features!

Some of the highlights of this release includes:

  • Level Thumbnails will now be generated and saved with your level file. At first, these will appear on the Story Mode screen for level packs but in future releases they will show when loading your custom levels from disk, and when an online level sharing service is set up, they will be prominently featured there to get a preview of a level before you download it!

    Screenshot of the Story Mode level selector showing thumbnails of the built-in levels.

  • Player physics have been overhauled and the platforming feels a bit nicer now.

    • The force of gravity is tweaked between the jumping and falling stages of player movement for a nicer feel.
    • The player can now walk up slopes without losing any momentum.
    • ‘Coyote time’ will enable the player to still jump a couple of frames after leaving the ground.

  • The JavaScript API for doodads has seen some improvements and fixes:

    • Functions like setTimeout() and setInterval() will now tie to the game’s logic tick rate for more reliable timing in your doodad scripts (using the wallclock time functions such as time.Now() is advised against because it won’t adapt in case the game is running at a slower than average frame rate).
    • A lot more of the Actor properties are now exposed on Self.

See the change log for all the details.

Check out the Downloads page to try out Sketchy Maze v0.14.0 today!

v0.13.2 Released

It’s been a bit over a year since the last release of Sketchy Maze, but I’ve been slowly working on it in between other distractions of life and work getting in the way. 😅

This release brings some new features and optimization for the game’s file formats to improve performance and memory usage.

Some new features:

  • Doodads can be non-square! You can now set a rectangular canvas size for your doodads. Many of the game’s built-in doodads that used to be off-center before (doors, creatures) because their sprites were not squares now have correct rectangular shapes.
  • A Cheats Menu has been added which enables you to enter many of the game’s cheat codes by clicking on buttons instead. Enable it through the “Experimental” tab of the Settings, and the cheats menu can be opened from the Help menu bar during gameplay.
  • The game now supports Signed Levels and levelpacks which will enable the free version of the game to play levels that have embedded doodads in them. The idea is that the base game in the future may come with levelpacks that use custom doodads (to tell a specific story) and these doodads may be so specific and niche that they will ride with the levelpack instead of be built-in to the game. To allow the free version of the game to play these levels, the levelpacks will be signed. It also makes it possible for promotional levelpacks or “free DLC” to be shipped separately and allow free versions of the game to play them with their attached custom doodads.

Other miscellaneous changes:

  • The default Author name on your new drawings will prefer to use your license registration name (if the game is registered) before falling back on your operating system’s $USER name like before.
  • In the level editor, you can now use the Pan Tool to access the actor properties of doodads you’ve dropped into your level. Similar to the Actor Tool, when you mouse-over an actor on your level it will highlight in a grey box and a gear icon in the corner can be clicked to access its properties. Making the properties available for the Pan Tool can help with touchscreen devices, where it is difficult to touch the properties button without accidentally dragging the actor elsewhere on your level as might happen with the Actor Tool!
  • Fix a bug wherein the gold “perfect run” icon next to the level timer would sometimes not appear, especially after you had been cheating before - if you restart the level with no cheats active the gold icon should now always appear.
  • New cheat code: tesla will send a power signal to ALL actors on the current level in play mode - opening all electric doors and trapdoors. May cause fun chaos during gameplay. Probably not very useful.
  • Start distributing AppImage releases for GNU/Linux (64-bit and 32-bit)

Some technical changes related to file format optimization:

  • Palettes are now limited to 256 colors so that a palette index can fit into a uint8 on disk.
  • Chunks in your level and doodad files are now encoded in a binary format instead of JSON for a reduction in file size. The current (and only) chunk implementation (the MapAccessor) encodes to a binary format involving trios of varints (X, Y position + a Uvarint for palette index).
  • Chunk sizes in levels/doodads is now a uint8 type, meaning the maximum chunk size is 255x255 pixels. The game’s default has always been 128x128 but now there is a limit. This takes a step towards optimizing the game’s file formats: large world coordinates (64-bit) are mapped to a chunk coordinate, and if each chunk only needs to worry about the 255 pixels in its territory, space can be saved in memory without chunks needing to theoretically support 64-bit sizes of pixels!

See the Downloads page to try it out!

v0.13.1 Released

This release brings a handful of minor new features to the game.

First, there are a couple of new Pixel Attributes available in the level editor:

  • Semi-Solid: pixels with this attribute only behave as “solid” when walked on from above. The player can jump through the bottom of a Semi-Solid and land on top, and gradual slopes can be walked up and down as well, but a steep slope or a wall can be simply passed through as though it were just decoration.
  • Slippery: the player’s acceleration and friction are reduced when walking on a slippery floor. In the future, players and other mobile doodads may slide down slippery slopes automatically as well (not yet implemented).
  • These attributes are available in the Level Editor by clicking the “Edit” button on your Palette (or the “Tools -> Edit Palette” menu). The Palette Editor now has small icon images for the various attributes to make room for the expanded arsenal of options.

Doodad/Actor Runtime Options have been added:

  • In the Doodad Editor’s “Doodad Properties” window, see the new “Options” tab.
  • Doodad Options allow a map creator to customize certain properties about your doodad, on a per-instance basis (instances of doodads are called “actors” when placed in your level).
  • In the Level Editor when the Actor Tool is selected, mousing over a doodad on your level will show a new gear icon in the corner. Clicking the icon will open the Actor Properties window, where you may toggle some of the doodad options (if a doodad has any options available).
  • Options can be of type boolean, string, or integer and have a custom name and a default value at the doodad level. In the Level Editor, the map creator can set values for the available options which the doodad script can read using the Self.GetOption() method.
  • Several of the game’s built-in doodads have options you can play with, which are documented below.

New and updated doodads:

  • “Look At Me” is a new Technical doodad that will draw the camera’s attention to it when it receives a power signal from a linked button. For example, if a button would open an Electric Door far across the level, you can also place a “Look At Me” near the door and link the button to both doodads. When the button is pressed, the camera will scroll to the “Look At Me” and the player can see that the door has opened.
  • Anvils will now attract the camera’s attention while they are falling.

Several of the game’s built-in doodads have new Actor Runtime Options you can configure in your custom levels:

  • Warp Doors: “locked (exit only)” will make it so the player can not enter the warp door - they will get a message on-screen that it is locked, similar to how warp doors behave when they aren’t linked to another door. If it is linked to another door, the player may still exit from the ’locked’ door - essentially creating a one-way warp, without needing to rely on the orange/blue state doors. The “Invisible Warp Door” technical doodad also supports this option.
  • Electric Door & Electric Trapdoor: check the “opened” option and these doors will be opened by default when the level gameplay begins. A switch may still toggle the doors closed, or if the doors receive and then lose a power signal they will close as normal.
  • Colored Doors & Small Key Door: you may mark the doors as “unlocked” at the start of your level, and they won’t require a key to open.
  • Colored Keys & Small Key: you may mark the keys as “has gravity” and they will be subject to the force of gravity and be considered a “mobile” doodad that may activate buttons or trapdoors that they fall onto.
  • Gemstones: these items already had gravity by default, and now they have a “has gravity” option you may disable if you’d prefer gemstones not to be subject to gravity (and make them behave the way keys used to).
  • Gemstome Totems: for cosmetic purposes you may toggle the “has gemstone” option and the totem will already have its stone inserted at level start. These gemstones will NOT emit a power signal or interact normally with linked totems - they should be configured this way only for the cosmetic appearance, e.g., to have one totem filled and some others empty; only the empty totems should be linked together and to a door that would open when they are all filled.
  • Fire Region: you may pick a custom “name” for this doodad (default is “fire”) to make it better behave as normal fire pixels do: “Watch out for (name)!”

Improvements in support of custom content:

  • Add a JavaScript “Exception Catcher” window in-game. If your doodad scripts encounter a scripting error, a red window will pop up showing the text of the exception with buttons to copy the full text to your clipboard (in case it doesn’t all fit on-screen) and to suppress any further exceptions for the rest of your game session (in case a broken doodad is spamming you with error messages). Cheat codes can invoke the Exception Catcher for testing: throw <message> to show custom text, throw2 to test a “long” message and throw3 to throw a realistic message.
  • Calling console.log() and similar from doodad scripts will now prefix the log message with the doodad’s filename and level ID.

There are new JavaScript API methods available to doodad scripts:

  • Self.CameraFollowMe() will attract the game’s camera viewport to center on your doodad, taking the camera’s focus away from the player character. The camera will return to the player if they enter a directional input.
  • Self.Options() returns a string array of all of the options available on the current doodad.
  • Self.GetOption(name) returns the configured value for a given option.

Some improvements to the doodad command-line tool:

  • doodad show will print the Options on a .doodad file and, when showing a .level file with the --actors option, will list any Options configured on a level’s actors where they differ from the doodad’s defaults.
  • doodad edit-doodad adds a --option parameter to define an option on a doodad programmatically. The syntax is like --option name=type=default for example --option unlocked=bool=true or --option unlocked=bool; the default value is optional if you want it to be the “zero value” (false, zero, or empty string).

Minor fixes and improvements:

  • Add a “Wait” modal with a progress bar. Not used yet but may be useful for long operations like Giant Screenshot or level saving to block input to the game while it’s busy doing something. Can be tested using the cheat code “test wait screen”
  • Detect the presence of a touchscreen device and automatically disable on-screen touch hints during gameplay if not on a touch screen.
  • Mobile Linux: mark the Sketchy Maze launcher as supporting the mobile form-factor for the Phosh desktop shell especially.
  • Fix the Crusher doodad sometimes not falling until it hits the ground and stopping early on slower computers.
  • Small tweaks to player physics - acceleration increased from 0.025 to 0.04 pixels per tick.

See the Downloads page to try it out!

v0.13.0 Released

A new major update to the Sketchy Maze beta has been released! This update continues to improve on performance and stability with a new file format for Levels (& Doodads) which greatly reduces memory use when playing large and colorful levels such as Azulian Tag - Forest – down from 1.5 GB of memory to closer to 200 MB, making these larger levels playable on lower power devices.

Your existing levels & doodads created with earlier versions of the game still work! The update is backwards compatible and your files will be transparently upgraded to the new format on its next save.

Screenshot of the start to the Jungle level (v0.13.0)

This release also comes with a lot of new content:

  • Swimming mechanics:
    • The water pixels on your levels actually do something useful now!
    • When the player character is wet, swimming physics apply: gravity and jump speed are slower, and the jump button can be spammed infinitely in order to “swim” upwards a small amount. Hold the jump button to ascend slowly, spam it to ascend more quickly.
    • The Azulians can swim, too! By default they’ll sink and walk along the bottom but if they are tracking the player character they will swim up to catch you.
  • 4 new levels:
    • The Jungle (First Quest) - a direct sequel to the Boat level, it’s a jungle and Mayan themed platformer featuring many of the new doodads from this release such as Snakes, Gemstones and Crushers.
    • Gems & Totems (Tutorial, Lesson 4) - a tutorial map showing how the new Gemstones & Totems work in a safe environment.
    • Swimming (Tutorial, Lesson 5) - a tutorial to explore the new swimming mechanics that come in this release!
    • Night Sky (Azulian Tag) - a third installment in the Azulian Tag survival mode levelpack!
  • 11 new doodads:
    • Blue Bird: a new variant like the Red Bird, this one flies in a sine wave pattern about its target altitude and will dive at you from a greater height.
    • Snake: a green snake that sits coiled up and always faces the player. If you try and jump over it, it will jump up to try and catch you. It is harmless to other Snakes but will still jump with you.
    • Crusher: a block-headed enemy with an iron helmet which tries to drop on you from above. Its helmet makes for a safe platform to ride back up like an elevator.
    • Gems & Totems: four collectible gems (in different colors and shapes) that slot into Totems of a matching shape. Totems may link together and require you to collect multiple gemstones before they’ll emit a power signal to other linked doodads (such as to open an Electric Door).
  • 5 new wallpapers:
    • A dark version of Dotted Paper and 4x new Parchment Paper wallpapers are now available (the latter come in white, red, blue, and green varieties). As always, you may select a custom wallpaper for your levels if you like!
  • New brush pattern: Bubbles! The “water” color of each of the game’s default palettes will use the Bubbles pattern.

New doodads including the Crusher, Snake, and gemstones

There are a handful of other changes and smaller features which you can see on the change log. Head over to the downloads page and try out the latest release today!

v0.12.1 Released

A new version of Sketchy Maze has been released and this one focuses on improving performance and memory usage of the game. Two of the game’s levels (“Azulian Tag - Forest” and “Shapeshifter”) were especially taxing on the game and 32-bit builds could sometimes crash for running out of memory! The game tries to be much nicer about freeing up memory when not in use and more proactively loading/unloading level chunks during gameplay.

This release also fixes a long-standing bug where the player character could “climb” walls to their right. See the full details on the change log and download the latest version!

Copyright © 2024 Noah Petherbridge.