What it does
The player moves one tile a step on a grid of terrain. Collecting chips counts down to the socket, which opens when enough are in, and stepping on the exit clears the level. Keys open doors of their own colour, and green keys are kept. Water drowns the player without flippers, fire burns without fire boots, ice slides them on without skates, and force floors push them without suction boots, while a thief takes the boots away. The player pushes blocks, and a block pushed into water fills it with dirt, which turns to floor when walked on. Bombs destroy what steps on them, teleports send the arrival out of the next teleport that has room, pop-up walls rise behind the player, the green button toggles walls and the blue button turns tanks round.
The monsters each follow their own rule. Bugs and paramecia follow walls on opposite sides, fireballs and gliders turn their own ways, balls bounce, tanks drive straight on, walkers and blobs wander, and teeth chase the player. Monsters keep off dirt, gravel, items and doors, and off fire and water unless they are the kind that can cross them. Touching one is death, and so is running out of time on a timed level.
The game draws nothing: view gives the terrain of every cell and every mover with its kind, cell and direction, and
drain gives events, chip, key, door, boots, push, splash, teleport, slide, die with its cause,
and more, for animation and sound. The whole game snapshots to plain JSON and restores. solveLevel searches the
game's own states breadth first, chip by chip, for a way through, and the autopilot plays a level's stored way or one
it finds.
Features
- Chips, socket and exit — a chip count per level, all of them by default, and an optional time limit.
- Keys and doors — red, blue, yellow and green, with green keys kept.
- Elements and boots — water, fire, ice and force floors, with flippers, fire boots, skates and suction boots, and a thief to take them.
- Blocks and dirt — pushed blocks fill water; dirt and gravel keep monsters off.
- Board changers — bombs, teleports, pop-up walls, toggle walls with a green button, and a blue button for tanks.
- Nine monsters — bugs, paramecia, fireballs, gliders, balls, tanks, walkers, blobs and teeth, each with its own movement.
- Text levels — one character per tile, with starting facings for monsters, a hint and a stored solution.
- Solver and autopilot — a breadth-first search over the game's own states, and a player for attract modes.
- Validation, events and snapshots — every fault in a level listed, every rule reported, saves as plain JSON.
Good for
- Tile-effect puzzle games in the style of Chip's Challenge, with keys, boots and monsters.
- Level packs and editors, since a level is rows of text and the validator and solver check your work.
- Teaching puzzles, with one mechanic a level and a hint tile to explain it.
- Timed puzzle challenges, with a clock that kills on zero.
- Attract modes and demos, with the autopilot walking a level's way through.
Make it yours
A level is a name, a text map of terrain and movers, the chips the socket needs, the time in seconds or none, the hint, the monsters' first facings and a stored solution. The game takes the list of levels, the starting level, the seconds a move takes and the seed for the wanderers. The four built-in levels teach keys and doors, the elements, monsters and blocks, and switches and teleports, and are there to replace with your own.
Two materially different uses: a calm untimed puzzle pack of your own levels about ice and force floors, with a hint tile on each and no monsters; and a fast timed set where the move time is shortened, teeth chase the player and tanks are turned with the blue button to open the way.
A quick look
A game driven by held keys and drawn from its view:
const cc = game.chipsChallenge.create();
cc.move(keys.dir);
cc.step(dt);
const v = cc.view();
v.terrain.forEach((t, i) => drawTile(t, i % v.width, Math.floor(i / v.width)));
for (const m of v.movers) drawMover(m.kind, m.cell, m.dir);
Works with
boulder-dash— for caves of falling boulders and diamonds instead.pusher— for crate-pushing puzzles with undo and deadlock checks.tiles-2d— to draw the board as a tilemap.
Good to know
- Clone machines, traps, recessed walls, invisible and blue walls, ice corners and the slide-delay rules of later versions are not modelled.
- The player cannot step off a force floor against its push.
- The solver goes chip by chip to the nearest next one, so it is quick but can miss levels that punish the order of chips, and it stops at its node budget, 200,000 by default.
- The pack draws nothing; your game presents the view and the events.






