[r]labs

A bunch of [r]andom expermients...

๐Ÿ“ /README.md

Hi! I'm Rodrigo Alfonso (@afska)*, a software developer and musician from Argentina.

I'm interested in ๐Ÿ’ป computers, ๐Ÿค˜ metal, and ๐Ÿ‘พ retro gaming.
This page showcases some personal projects that I've developed in my free time.

You can find me on

*or @rodri042

๐ŸŽฎ video-games ๐Ÿ‘พ gba ๐Ÿ•น๏ธ nes ๐Ÿ› ๏ธ tools ๐ŸŽถ music ๐Ÿ—‘๏ธ archive

๐Ÿ“ /projects

BeatBeast GBA (2024)
๐Ÿ‘พ gba ๐Ÿ”—

Screenshot Screenshot Screenshot Screenshot

A game we made for the GBA Jam 2024 with Lu and Synthenia.

๐Ÿฆ„ Help Joaquรญn shoot his way out of this rhythmic world!

Experience 15 minutes of intense fun, and even more if rhythm games usually have you off beat. Featuring an amazing 3D title screen, powered by an impressive stack of 150 BMP files pushing 3.66 triangles per second! Enjoy menus accompanied by Good Sounding Music (GSM) and dive into main gameplay with Perfectly Crafted Melodies (PCM)โ€”it's a sound blast!

โ–ถ๏ธ Watch our playthrough of the Hard difficulty mode.

๐Ÿ“ฐ Wtf, we got the first place!!

GitHub Source code

piuGBA GBA (2020~2024)
๐Ÿ‘พ gba ๐Ÿ”—

Screenshot Screenshot Screenshot Screenshot

A Pump It Up simulator for the Game Boy Advance that uses StepMania SSC charts.

  • ๐Ÿ“ Full .ssc support (including hold and fake notes, bpm/scroll changes, stop/delays, and warps)
  • ๐Ÿ•น๏ธ Several game modes (campaign, arcade, impossible)
  • ๐Ÿ”— Multiplayer via Link Cable / Wireless Adapter
  • ๐ŸŽฅ Background videos / HQ audio from the SD card via flash carts
  • โšก Dynamic speed multipliers
  • ๐Ÿ› ๏ธ Multiple mods
  • ๐ŸŽต ~70 songs per .gba ROM

โ–ถ๏ธ Watch the demo video.

๐Ÿ’ฌ Go to the Discord server to find Download links and user-created content.

๐Ÿ“ฐ Read more on Hackaday.

GitHub Source code

gba-link-connection GitHub GBA (2020~2024)
๐Ÿ‘พ gba ๐Ÿ”—

Screenshot

A set of Game Boy Advance (GBA) C++ libraries to interact with the Serial Port. Its main purpose is to provide multiplayer support to homebrew games. C bindings are also included for compatibility.

  • ๐Ÿ‘พ LinkCable.hpp: The classic 16-bit Multi-Play mode (up to 4 players) using a GBA Link Cable!
  • ๐Ÿ’ป LinkCableMultiboot.hpp: Send Multiboot software (small 256KiB ROMs) to other GBAs with no cartridge!
  • ๐Ÿ“ป LinkWireless.hpp: Connect up to 5 consoles with the Wireless Adapter!
  • ๐Ÿ“ก LinkWirelessMultiboot.hpp: Send Multiboot software (small 256KiB ROMs) to other GBAs over the air!
  • ๐ŸŒŽ LinkUniversal.hpp: Add multiplayer support to your game, both with ๐Ÿ‘พ Link Cables and ๐Ÿ“ป Wireless Adapters, using the same API!
  • ๐Ÿ”Œ LinkGPIO.hpp: Use the Link Port however you want to control any device (like LEDs or rumble motors)!
  • ๐Ÿ”— LinkSPI.hpp: Connect with a PC or another GBA using this mode. Transfer up to 2Mbit/s!
  • โฑ๏ธ LinkUART.hpp: Easily connect to any PC using a USB to UART cable!
  • ๐ŸŸช LinkCube.hpp: Exchange data with a Wii or a GameCube using the classic Joybus protocol!
  • ๐Ÿ“ฑ LinkMobile.hpp: Connect to the internet using the Mobile Adapter GB, brought back to life thanks to the REON project!
  • ๐Ÿ–ฑ๏ธ LinkPS2Mouse.hpp: Connect a PS/2 mouse to the GBA for extended controls!
  • โŒจ๏ธ LinkPS2Keyboard.hpp: Connect a PS/2 keyboard to the GBA for extended controls!

GitHub Source code

gba-flashcartio GitHub GBA (2024)
๐Ÿ‘พ gba ๐Ÿ”—

Screenshot

A Game Boy Advance (GBA) C library to access the SD card of the following flashcarts:

  • EverDrive GBA X5 / Mini
  • EZ Flash Omega / OmegaDE

The flashcart type is autodetected and FAT partitions are supported via ELM-ChaN's FatFs library.

  • Only read operations are implemented in FatFs.
  • It reads using either DMA3 or DMA1.
  • In EverDrive mode:
    • The latter 16MB of the ROM is unavailable while reading, so avoid using that part in your interrupt handlers, or your code might crash.
    • For this same reason, avoid soft-resetting while flashcartio_is_reading.
  • In EZ Flash mode:
    • ROM is unavailable while using the SD card, so ~1KB of static EWRAM will be taken by some functions.
    • When reading, by default, interrupts will be briefly disabled (REG_IME = 0) to avoid problems.
    • The EZ Flash Definitive Edition works great out of the box, but in the original one you have to use 3,2 wait states and avoid writing to SRAM right before/after reading the microSD!

GitHub Source code

NesCore Web (2022)
๐Ÿ•น๏ธ nes ๐Ÿ”—

Screenshot

A NES Emulator made in JavaScript for educational purposes.

Its main objective is to reflect the NES internals as simply as possible by using clean, object-oriented code. It doesn't have any complex bitwise operations, huge switch-case statements or files with lots of magic numbers.

  • ๐Ÿ‘พ It emulates the NES
  • ๐Ÿ‘จโ€๐Ÿ”ง It plays Super Mario Bros. 3!
  • ๐Ÿ’ป CPU, ๐Ÿ–ฅ๏ธ PPU, ๐Ÿ”Š APU
  • ๐Ÿ SRAM support
  • ๐Ÿ’พ Save states support
  • ๐ŸŒŽ Web frontend using Web Workers and Gamepad API

GitHub Source code

A weird tale Spotify (2022)
๐ŸŽถ music ๐Ÿ”—

Cover

While playing with Aรญris, I also composed some songs for a project with my friend Santiago Sauza. Three years later, we finally finished recording and mixing the tracks, and we published them on the most common streaming platforms. The result is a powerful metal album that we're really proud of!

รฉste-ganรณ Web (2022)
๐Ÿ› ๏ธ tools ๐Ÿ”—

Screenshot

Steganography toy that encodes secret messages in strings by using zero-width Unicode characters. A Chrome extension allows highlighting the hidden parts.

GitHub Source code

play-and-shift Web Linux (2022)
๐Ÿ› ๏ธ tools ๐Ÿ”—

Screenshot

An mplayer wrapper that lets you find and play songs from your terminal with shifted pitch or speed.

I use this to quickly change a song's key when playing an instrument.

GitHub Source code

gba-remote-play GBA (2021)
๐Ÿ‘พ gba ๐Ÿ”—

A software that streams games from a Raspberry Pi to a Game Boy Advance, through its Link Port. Video and audio are compressed and sent in real time to the GBA, while the latter responds with its current input, allowing users to play games of any platform by using the GBA (hence, Remote Play).

  • ๐ŸŽฎ Plays any game using RetroPie on the GBA!
  • ๐Ÿ” 120x80 pixels of power!
  • ๐Ÿš€ ~60fps using the default display mode
  • ๐Ÿ“บ Retro scanlines ๐Ÿ˜Ž
  • โšก More pixels of power on overclocked GBAs
  • ๐Ÿ”Š Experimental audio support!
  • ๐Ÿ’ฅ Crashes on the GB Micro! (yep, that's a feature)

๐Ÿ“ฐ Read more on Gizmodo, Engadget, Hackaday, Tom's Hardware and The MagPi.

GitHub Source code

NEStation Web (2019)
๐Ÿ•น๏ธ nes ๐Ÿ”—

Screenshot

A web-based NES emulator frontend that supports two-player Net Play via WebRTC.

It's based on jsnes, but a network layer was added on top of it to allow playing over the Internet.

  • ๐ŸŽ Fullspeed NES Emulation
  • ๐ŸŒ Low-latency -peer to peer- online play
  • ๐Ÿ“ฆ ROM Drag & Drop / Easy UX
  • ๐Ÿ”€ Swap P1 and P2 at any time
  • โŒจ๏ธ Configurable controls
  • ๐ŸŽฎ Gamepad support
  • ๐Ÿ“บ CRT TV emulation

GitHub Source code

ElDumper Arduino (2019)
๐Ÿ› ๏ธ tools ๐Ÿ”—

Screenshot

A Game Boy cartridge dumper that can read the ROM and read/write battery-backed RAM to manage games and save files.

It's based on insideGadget's GBCartRead, but it adds a new graphical interface packed as an Electron app, so users don't have to download and execute Python scripts in order to dump the memory.

GitHub Source code

quickp2p GitHub Web (2019)
๐Ÿ› ๏ธ tools ๐Ÿ”—

Screenshot

A JavaScript library that simplifies connecting two web browsers in a peer-to-peer fashion through WebRTC Data Channels.

GitHub Source code

Aรญris EP Bandcamp (2019)
๐ŸŽถ music ๐Ÿ”—

Cover

In 2019, I was lucky enough to befriend some very talented people, and we formed a band where we rehearsed every week and recorded this prog-rock demo album! Although we eventually stopped playing together, weโ€™re still close friends, and they hold a special place in my heart. This project remains one of my favorite musical endeavors.

MouseWars.io Web Steam (2017~2018)
๐ŸŽฎ video-games ๐Ÿ”—

MouseWars.io is a real-time multiplayer cursor war game. The cursors must fight until only one remains.

  • ๐ŸŒ Web-based and available online for free
  • ๐Ÿคผโ€โ™‚๏ธ Two game modes: All vs all and Team vs team
  • ๐Ÿ’ฏ Two scoring types: Deathmatch and Survival
  • ๐Ÿ”ซ 9 attack types
  • ๐Ÿ‘ฅ Up to 8 players per room
  • ๐Ÿ’ฌ Integrated in-game chat
  • ๐Ÿ–ฑ๏ธ Play locally with the Desktop version
  • ๐Ÿ”“ No login needed!

Halu Android (2015~2016)
๐ŸŽฎ video-games ๐Ÿ”—

A multitasking game for Android, in which players have to survive lots of dangers:

  • ๐Ÿ’€ Deadly spikes
  • โš ๏ธ Shrinking too much will make you vanish!
  • ๐ŸŒ€ Your soul will try to escape
  • โ˜๏ธ Smoke balls will also kill you
  • ๐Ÿš€ Speed will intensify over time

The game integrates Google Play leaderboards so players can compete for the best high score. You'll literally leave your friends' bodies behind as you surpass them!

GitHub Source code

dropbox-universal-backup-tool Linux (2015)
๐Ÿ› ๏ธ tools ๐Ÿ”—

Screenshot

A command-line tool that synchronizes directories with Dropbox. It uploads the files from disk to the cloud, with the added feature of being able to preview changes before hitting the API.

It only syncs in one direction, so it's safe for pushing incremental backups, and it gives you more control over what types of files are uploaded or not.

GitHub Source code

Arduino MIDI Player Arduino (2014)
๐Ÿ› ๏ธ tools ๐Ÿ”—

A MIDI player made of buzzers. It started as a proof of concept for controlling an Arduino board using CoffeeScript.

It seems like Arduino boards can be controlled by any computer using a well-known protocol that constantly sends instructions to the board via a serial connection. Fun stuff.

GitHub Source code

MouseWars Classic Windows (2008~2010)
๐Ÿ—‘๏ธ archive ๐Ÿ”—

An online two-player war game where players control cursors to defeat each other using assigned attacks.

The game works over TCP/IP, allowing play over the Internet or a LAN. For solo play, a Bot is also available.

I ended up remaking this game in 2017, and it evolved into what is now known as MouseWars.io.

Written in Visual Basic 6, compiled and tested on Windows XP.

El Chat Windows (2004~2005)
๐Ÿ—‘๏ธ archive ๐Ÿ”—

Screenshot

A chat client that my group of friends and I used a lot, inspired by the old MSN Messenger.

The program supported emoticons, formatting, private conversations, saving chat history, theming, custom servers and moderation.

Written in Visual Basic 6, compiled and tested on Windows XP.

HackTheSystem Windows (2004~2007)
๐Ÿ—‘๏ธ archive ๐Ÿ”—

Screenshot

Fifteen-year-old me wanted to be "a hacker," so I found some online material about building a trojan horse and followed it. That experience made me love network programming and gave me a foundation in TCP sockets, inter-process communication, Win32 API calls, and more. Nobody got hacked in the process. Or maybe a few?

Written in Visual Basic 6, compiled and tested on Windows XP.