Source Allies · Science Fair Game Dev Jam · July 2026

Forage

A four-player creature foraging race played on palm-size ESP32 handhelds. No phones, no server, no internet — the boards find each other over their own radio and share one world.

Red Panda Trash Panda Opossum Giant Panda

The game

Everyone holds their own board. Power one on near a match and it joins automatically — each board owns exactly one creature and broadcasts it to the others, peer-to-peer over ESP-NOW. There is no host: any board can drop out or wander off and the rest of the match doesn't care.

You play one of four creatures racing to grow. Roam a 3×3 grid of rooms, grab apple apples and bamboo bamboo, and settle down to eat. Every meal asks you a trivia question about your creature — answer right and the food becomes XP. Level up, pick a perk, and be the first to reach level 5.

Eating is the danger window. While you sit chewing, any rival that bumps you ruins the meal — and if that rival is the Trash Panda, it doesn't ruin your food, it takes it.

Red Panda portrait

Red Panda

Omnivore

The only creature that digests both foods — every apple and every bamboo counts. Flexible forager, no bad rooms.

Trash Panda portrait

Trash Panda

Thief

Catch anyone mid-meal and the food is yours. Why forage when your rivals will do it for you?

Opossum portrait

Opossum

Resilient

Cannot be interrupted. Meals can't be ruined or stolen, and nobody can shove it out of a trivia question. Slow and steady.

Giant Panda portrait

Giant Panda

Heavyweight

Nothing blocks the panda. It shoves other creatures out of its path — and nobody shoves back.

Foraging, trivia, perks

Nobody sits out

All four creatures are always in the world — unclaimed ones play themselves. Pick up a board and press anything to take over an AI creature with all its progress; put the board down and after ten idle seconds the AI takes the wheel again. A match of four AIs will happily race itself.

How to play

  1. Power on near the other boards (USB power bank or cable — anything). The board finds the match on its own; there is nothing to pair, configure, or connect to.
  2. Pick your creature. Tap the arrows to browse, tap the portrait to claim. Creatures already claimed by other players are skipped. Wait ~20 seconds and the board picks for you and lets the AI drive until you touch it.
  3. Walk by touch. Tap where you want to go; tap a room edge to walk through the door there. On menus and trivia, press and slide to preview, release to commit.
  4. Forage. Walk over food to grab it, stand still a moment to eat, answer the trivia, grow. Watch your back while chewing.

A USB keyboard bridged over ESP-NOW (W/A/S/D + J/K/L) is also supported for the full couch-multiplayer rig — ask at the demo table.

Clone it to a new device

Forage is self-replicating: every board carries a copy of its own flasher, so a running board can clone the entire game — operating system, game, art, and the cloner itself — onto a blank board over a cable. Boards it creates can create more boards. No computer involved.

Method 1 — board-to-board clone (no PC)

You need a powered Forage board (the source), a blank ESP32 CYD/CYDE board (the target), and the 4-pin clone cable (JST 1.25 mm, P1-to-P1, with the target-TX lead moved to the source's IO35 header pin — details below).

  1. Cable the boards together: source TXD → target RXD · target TXD → source IO35 · 5V and GND straight through. Power the source from USB; leave the target's USB unplugged — it draws power through the cable.
  2. Put the target in bootloader mode: hold its BOOT button, tap RESET, release BOOT.
  3. Put the source in clone mode: hold a finger anywhere on its touchscreen while tapping RESET, and keep holding about a second. The "Stoner Clone Tester" screen appears. (No touch at boot = the game starts normally.)
  4. Tap CLONE. The LED on the back glows blue while the full 4 MB flash copies (~3–4 minutes), then the source checks the copy's MD5 fingerprint. Green LED + "CLONE COMPLETE — MD5 OK" means done: the target reboots straight into Forage and joins the match. Red LED means re-seat the cable, redo step 2, and reset the source to try again.
  5. Reset the source to return it to the game.

Method 2 — flash over USB from this page

No second board handy? Flash a blank board from a computer instead. The image below is the complete board contents — the same bytes a board-to-board clone writes, cloner included.

Download forage-full.bin 4 MB · flash at offset 0x0 · MicroPython v1.24.0 + Forage + the cloner

In the browser (desktop Chrome or Edge): open Kiln, connect the board over USB, and flash forage-full.bin at offset 0x0.

Or with esptool:

pip install esptool
esptool --port COM5 --baud 921600 write_flash 0x0 forage-full.bin

If the board doesn't enter its bootloader automatically, hold BOOT while plugging in USB. These boards use a CH340 USB-serial chip — most systems have the driver, older Windows may need it installed.

The clone cable

Start from the stock 4-pin JST 1.25 mm P1-to-P1 cable that ships with the boards, then move one lead: the wire arriving from the target's TXD goes to the source's IO35 pin (the 3.3V/IO35/GND header in the top-left corner) instead of the source's RXD. The source's own USB-serial chip sits on the normal RX pin and shouts over the target's replies; IO35 has nothing else attached, so the source can actually hear the board it's programming. On a CYD (rather than CYDE) source the stock straight-through cable works as-is.

The hardware

Forage runs on the ESP32 "Cheap Yellow Display" — a hobbyist board (model ESP32-2432S028R, or the Sunton E32R28T variant) with a 2.8″ 320×240 color touchscreen, WiFi radio, and 4 MB of storage, commonly sold for around $10–15. Search any electronics marketplace for "ESP32 2.8 inch Cheap Yellow Display 2432S028R". Any 4 MB CYD/CYDE with the ILI9341 screen and XPT2046 resistive touch works — that's the standard configuration.

Everything on the board is driven by MicroPython. The multiplayer link is ESP-NOW — a connectionless WiFi-radio protocol — so a match needs no access point, router, or pairing; boards in radio range simply see each other.