A squire, one big swamp, six critter nests and a giant toad.
44 MB of hand-painted world and animation on a 48 MHz RISC-V with 20 KB of RAM.
Download the game »
How to play
·
The streaming report
·
Building it
·
Report a bug
Table of contents
Walk a squire through one big swamp, break the six critter nests that have turned it against you, then go through the brambles into The Rot and beat OLD GULLET, the giant toad behind it all.
It is also an experiment: how far can unique art and animation go when it is streamed from the SD card every frame, on a 48 MHz RISC-V with 20 KB of RAM? Nothing the player sees is tiled or packed.
| Button | Action |
|---|---|
| D-pad | Walk in eight directions |
| A | Thrust: a big swipe arc in front of you. Right after a parry, a riposte for double damage |
| B, held | Guard: blocks a blow from the front |
| B, tapped just before a blow | Parry: the attacker is stunned (the toad too, after its tongue's tell) |
| START | Pause: the map of the swamp |
The rules and the critters are in the game's own README.
- One painted swamp, 1024x768, streamed under the camera at 60 fps: no tiles, no repeats.
- A living world at no CPU cost. Four ambient phases (reeds swaying, ripples and swell, the shore's glint, lily pads bobbing, gnats over The Rot) and a second, healed swamp for after the win, all as card data.
- Five kinds of foe. Raccoons that rear before they swipe and steal your mushrooms, turtles asleep in the reeds, beavers that dive and ambush, chameleons that fade into a shimmer, and the toad itself.
- Sword play with weight. A swipe arc, a guard, a parry that stuns, a riposte for double damage, hit-stop on every blow.
- Willows you can walk behind, redrawn over you from the card.
- Full-screen clips for the title, the death, the win and the pause map, played straight off the card.
- A save with your progress, the map's fog and your best time.
The CHGame library with its CHGfx and CHSd, Python and Pillow for the art, world and card tools, and CHGame's simulator.
- Download the latest release from the Releases page.
- Pick one:
- The cart,
EthansCritters-<version>.chgame, for CHGame's SD menu and tools. - The SD card zip: unzip it onto the root of a FAT32 microSD card.
- The cart,
- Put the card in the handheld and pick Ethan's Critters from the menu.
Note
The first boot reads the whole card file once behind a bar (STIRRING THE SWAMP, about 20 s), so that play never waits on a freshly written card. Later boots go straight to the title.
To build the game and its card data yourself, see BUILDING.md.
The whole game is streamed: the world is one 1024x768 painted bitmap, stored on the card eight times (four ambient phases, then all four again healed), and the sprites, the willows, the toad and the full-screen clips are stored as they are drawn. Each frame reads only what it needs, in a few long reads:
| At a glance | |
|---|---|
| Card data | 44 MB, 43 MB of it the world |
| The world under the camera | one read of 16-17 blocks a frame: 4.4 ms on the board |
| Frame rate on the board | 60 fps through play; the toad's angry phase dips to 30 |
| A stalled card | costs one frame (recovered in 66 us), never a freeze |
| Flash | 50,180 of 50,432 B |
| RAM | 17,800 of 18,416 B, plus a 2 KB stack |
At 60 fps the panel's flush holds the shared bus for 8.4 ms of each 16.7 ms frame, which leaves about 8 ms for the card and the drawing. Most sprites cost nothing extra: they are drawn while the world's blocks are still arriving by DMA.
Every board measurement, the budgets, what worked and what it means for the CHGame library are in the streaming report.
Five small, additive patches to CHGame's CHSd and CHGfx made the streaming possible: reading a range of a file's blocks in one command, a stream timeout with a fast recovery, the simulator's checks of the shared bus and the card's timing, and a fast 4-bit sprite blitter. The other SD games still build byte-identical. They are listed in chgame/PATCHES.md, ready to be offered upstream.
The code and documentation of Ethan's Critters are under the MIT licence:
see LICENSE. The CHGame code under chgame/ keeps its own
licences (chgame/NOTICE, chgame/LICENSE).
Elthen's sprite packs are not in the repository and are not covered by any licence here: they are sold by Elthen, under Elthen's terms. The game's files (the release's cart and card data, the README's GIF and banner, the cover) carry the art only in the game's own form.
The sprite sheets and the swamp tileset are by Elthen: the squire, the raccoon, turtle, beaver and chameleon, the giant toad, the birds and fishes.
