■odorici.sys

$ cat ~/work/mbed-rpg-game.md

project · embedded · 2023

Beat the Buzz

A top-down RPG on bare-metal ARM

A handheld top-down RPG on an mbed LPC1768, with a hash-table world backing two 50x50 maps, a boss fight and a pause menu, all in a few kilobytes of RAM.

fig.01 · photograph
kind
project
course
ECE 2035, Georgia Tech
category
embedded
period
Mar 2023 - Apr 2023
status
completed

head -n 20 README

A color-screen role-playing game on an mbed LPC1768, built on a bare course shell with a C hash table underneath it.

The project came in two parts. First, a separate-chaining hash table written in C, tested with GoogleTest and checked for leaks with AddressSanitizer; the game stores every map tile in it, keyed by coordinate. Then the game itself on the mbed LPC1768: a 50x50 world drawn through an 11x9 tile viewport with partial redraw at 100 ms, hand-drawn 11x11 sprites, and a nav switch and buttons for input. On top of the required features I added a start screen, a second faster movement mode, a pause menu, a lives system, and a boss fight with two enemies that each die to a different spell, plus a hidden extra life. With no engine, no filesystem and a few kilobytes of RAM, everything a normal platform gives you for free had to be written by hand.

grep -n highlights

  1. 01Wrote a separate-chaining hash table in C, tested with GoogleTest and memory-checked with AddressSanitizer, storing every map tile by coordinate.
  2. 02Rendered a 50x50 world through an 11x9 tile viewport with partial redraw at 100 ms on an mbed LPC1768.
  3. 03Drew the sprites by hand as 11x11 pixel arrays and drove them from the nav switch and buttons.
  4. 04Added a start screen, a faster second movement mode, a pause menu, a lives system and a hidden extra life beyond the required features.
  5. 05Built a boss fight with two enemies that each fall to a different spell.

ls ./media

fig.02A full run on the uLCD: the overworld, the cave, the pause menu and the boss fight against the Buzz and his arm.
fig.03The build: mbed LPC1768, nav switch, buttons and the uLCD-144-G2 color screen.
■ 12 modules · 2 roles∿█