What if the GameCube Keyboard Controller worked with Animal Crossing...? It started out as a "quick, simple project", then quickly turned into seven quick simple projects. Demonstration video (on YouTube) Typing at the speed of TAS Typing in Animal Crossing (GCN) is painfully slow. Or, at least.. it was. Not anymore. Pro Gamer WPM (unassisted): TBD Tool-assisted WPM: Also TBD Custom Keycaps Compose digital diary entries in style with this set of 81 custom, 3D printed keycaps that map perfectly to Animal Crossing's in-game character set. See the separate pico-crossing-keycaps repository for FreeCAD project files and OBJ exports. Infinite Playlist Cycle through your favorite Town Tunes without having to futz about with e-Reader cards. All Items Unlocked Type the name of (almost) any item, and this little raccoon-looking guy will give it to you for free. Usage: press Shift + Alt + 🗝️ , then type the name of any compatible item Put any Image in the Game Convert any image to display in Animal Crossing's pattern editor. The script automatically sets up a Python environment and handles all dependencies. Basic usage: ./convert_image.sh monalisa.jpg See image_tools/README.md for advanced usage. Put any Video in the Game (if you're patient) Convert videos to animated sequences in Animal Crossing (requires ffmpeg for video processing). Basic usage: ./convert_video.sh rickroll.mp4 See image_tools/README.md for advanced usage. A Playable Version of Snake... in Animal Crossing!? It's more likely than you think. Usage: press the S key while a design (image or video) is being entered. Building the Hardware You'll need: a Raspberry Pi Pico (or Pi Pico W) two GameCube controller extension cables two 1k Ω resistors (1/4W or higher) one 1N5817 Schottky diode (protects GameCube from USB 5V backfeeding during flashing/debugging) Assembly: Cut both extension cables and strip back the outer sleeve to reveal the 5 inner wires. You'll need two female plugs and one male plug. Important: Verify your extension cable pinouts before soldering! The colors in the provided schematic correspond to the "High Quality" labeled cables I used, but colors may vary between manufacturers or even batches. Solder the components to the Pi according to the schematic: Install the Schottky diode between the male plug's 5V line and the Pi's VSYS pin (cathode toward VSYS), then connect the 5V line from the male plug directly to the 5V lines on both of the female plugs. Install pull-up resistors connecting the Pi's 3.3V supply to GPIO 3 and GPIO 4 on the Pi. Connect the 3.3V line from the male plug directly to the 3.3v lines on both of the female plugs (without connecting it to the Pi). Connect GND(POW) from the male plug to PIN 38 on the Pi and the GND(POW) lines on both of the female plugs. Connect GND(SIG) from the male plug to PIN 3 on the Pi and the GND(SIG) lines on both of the female plugs. Connect the DATA line from the male plug to GPIO 2 on the Pi. Connect the DATA lines from the female plugs to GPIO3 and GPIO4 on the Pi. Prerequisites System Dependencies Python 3 - Required for image/video conversion tools - Required for image/video conversion tools ffmpeg - Required for video conversion ( brew install ffmpeg on macOS) - Required for video conversion ( on macOS) picotool - Required for flashing firmware to Pico - Required for flashing firmware to Pico Raspberry Pi Pico SDK - Set up according to official documentation Installing picotool macOS: brew install picotool Ubuntu/Debian: sudo apt install picotool Building the Software This project includes several build scripts for different workflows: Quick Build, Flash, and Monitor For the fastest development cycle: ./buildflashmonitor.sh This script runs build → flash → monitor in sequence. Great for testing changes. Individual Build Scripts Build only: ./build.sh Cleans and builds the project, generating the .uf2 firmware file. Flash only: ./flash.sh Attempts to force the Pico into BOOTSEL mode and flash the firmware (no need to manually hold the BOOTSEL button). Monitor serial output: ./monitor.sh Opens a serial connection to view debug output from the Pico. Manual Flashing Fallback If the automatic flashing fails: Hold the BOOTSEL button while plugging in your Pico Copy the generated .uf2 file from the build/ directory to the RPI-RP2 volume Licenses and Acknowledgements This project incorporates code from the following open source repositories: joybus.hpp - GameCube controller communication interface (used directly) - GameCube controller communication interface (used directly) joybus.pio - PIO program for GameCube Joybus protocol (used directly) - PIO program for GameCube Joybus protocol (used directly) joybus.cpp - Joybus communication implementation (adapted with modifications) - Joybus communication implementation (adapted with modifications) gcReport.hpp - GameCube controller report structure (used directly) controller.pio - PIO program for reading controller input (used directly) Core SDK libraries and build system pico_sdk_import.cmake - SDK integration helper Other Sources The Nook Codes defined in nookCodes.hpp are sourced from Nookipedia's Animal Crossing (GCN) Data Spreadsheet (except the code for the Froggy Chair , which I generated using Nookipedia's Secret Code Generator). License This project is licensed under GPLv3, which ensures compatibility with all incorporated dependencies. Disclaimer If you work for Nintendo, Please Understand: No emulation was used in the making of this project, and no game binaries were distributed or modified in the slightest. All footage was captured on unmodified hardware running unmodified, authentic software.