https://github.com/cfrankb/esp32-s3-vga-cs3
Creepspread III (remake) for the ESP32S3 VGA (2024). Originally written in assembly for MSDOS in 1993.
https://github.com/cfrankb/esp32-s3-vga-cs3
esp32s3 game maze-game microcontroller puzzle puzzle-game sidescroller vga vga-driver
Last synced: about 1 month ago
JSON representation
Creepspread III (remake) for the ESP32S3 VGA (2024). Originally written in assembly for MSDOS in 1993.
- Host: GitHub
- URL: https://github.com/cfrankb/esp32-s3-vga-cs3
- Owner: cfrankb
- Created: 2024-12-20T20:49:03.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-02-03T21:26:53.000Z (over 1 year ago)
- Last Synced: 2025-04-11T06:42:46.714Z (about 1 year ago)
- Topics: esp32s3, game, maze-game, microcontroller, puzzle, puzzle-game, sidescroller, vga, vga-driver
- Language: C++
- Homepage:
- Size: 2.34 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# About
Transitioning from 1993 x86 Assembly to modern C++ on ESP32-S3 involved re-implementing low-level memory buffers and interrupt-driven logic while maintaining the original game's timing and deterministic behavior.
To overcome SRAM limitations on the ESP32-S3, the game utilizes a Scanline Composition Engine. Instead of double-buffering the entire screen, sprites and tiles are composited into a single-row offload buffer before being committed to the display surface. This allows for complex transparency and layering without the 300KB+ memory overhead of a back-buffer.
This project serves as a bridge between low-level legacy architecture and modern embedded systems. It involved refactoring 16-bit Assembly logic into a structured, object-oriented C++ framework using the ESP-IDF, demonstrating long-term adaptability in software engineering.
Project focus: High-performance 2D graphics and hardware interfacing. (Note: Utilizing community-standard VGA timing libraries to focus on custom drawing routines and hardware adaptor design).
## Original MS-DOS

## ESP32-S3 VGA

Gameplay: https://www.youtube.com/watch?v=SPQwWkzFRpU
I am also releasing the source code for the map editor:
https://github.com/cfrankb/cs3-map-edit
Try the online version of the game:
https://cfrankb.itch.io/creepspread-iii
Current status is alpha. 90% of the core mechanic has been implemented.
# Software required
esp-idf v5.3 or later.
# Installation
This project is based in part on: https://github.com/spikepavel/ESP32-S3-VGA
```Shell
git clone https://github.com/cfrankb/ESP32-S3-VGA-CS3.git
cd ESP32-S3-VGA-CS3/
idf.py set-target esp32s3
idf.py menuconfig
idf.py flash
```
# Hardware
## VGA Adaptor
An adaptor is needed to communicate with the VGA Hardware.

kicad / gerber: [cfrankb/ESP32-S3-VGA-ADAPTOR](https://github.com/cfrankb/ESP32-S3-VGA-ADAPTOR)
## Gamepad

| Aim | GPIO Pin |
| ----- | -------- |
| UP | 38 |
| DOWN | 35 |
| LEFT | 47 |
| RIGHT | 48 |
```
CGameController gamepad(GPIO_NUM_38, GPIO_NUM_35, GPIO_NUM_47, GPIO_NUM_48);
engine->attach(&gamepad);
```
The above configuration is for the ESP32S3. Pin out will vary per model.