Skip to content

About

Swamp adventure game that makes use of 50 MB of sprite sheets on the SD card for the CHGame system

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

Ethan's Critters: the squire, a raccoon and OLD GULLET at a pond in the swamp

A swamp adventure for the CHGame handheld, streamed off the SD card every frame

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.

Release Stars Forks Issues MIT License

Platform Frame rate Card data Flash RAM

Download the game »

How to play · The streaming report · Building it · Report a bug

Table of contents
  1. About the game
  2. Getting started
  3. How it works
  4. The library patches
  5. License
  6. Acknowledgments

About the game

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.

Ethan's Critters gameplay

Controls

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.

Features

  • 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.

Built with

C++ Arduino RISC-V Python Zig

The CHGame library with its CHGfx and CHSd, Python and Pillow for the art, world and card tools, and CHGame's simulator.

(back to top)

Getting started

  1. Download the latest release from the Releases page.
  2. 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.
  3. 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.

(back to top)

How it works

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.

(back to top)

The library patches

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.

(back to top)

License

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.

(back to top)

Acknowledgments

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.

(back to top)

About

Swamp adventure game that makes use of 50 MB of sprite sheets on the SD card for the CHGame system

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages