space-shooter.c
A cross-platform, top-down 2D space shooter written in C using only platform libraries.
Dependencies
- Base: Win32 (Windows), Xlib (Linux), Emscripten (Web)
- Rendering: OpenGL 3.3 (Windows/Linux), OpenGL ES 3.0 (Web)
- Audio: XAudio2 (Windows), ALSA/pthread (Linux), OpenAL (Web)
- Gamepad: XInput (Windows), evdev (Linux), Emscripten (Web)
Description
space-shooter.c
is a cross-platform, top-down 2D space shooter written in standard C11 using only platform libraries (with platform libraries defined as anything included in the C standard library or supported platforms). space-shooter.c
has been tested on Windows 10, Ubuntu Linux 16.04, Chrome 103 and Firefox 103. This project drew heavy inspiration from Handmade Hero and pacman.c.
The design and architecture of space-shooter.c
is described here.
Caveat
I am not a professional game developer, nor a professional C programmer, so the design may be unconventional or sub-optimal in many ways. Happy to take feedback from any pros out there!
Building
Windows
- In a shell with cl set up, run
build.bat
for a debug build orbuild.bat release
for an optimized build. - Run
space-shooter.exe
from thebuild/
directory.
Linux
- Make sure development headers for the Linux kernel, Xlib, glx and ALSA are installed.
- E.g. on Ubuntu, run the following:
sudo apt install linux-libc-dev libx11-dev mesa-common-dev libasound2-dev
- E.g. on Ubuntu, run the following:
- Run
make linux
for a debug build ormake linux-release
for an optimized build. - Run
./space-shooter
from thebuild/
directory.
Web
- Make sure make and emscripten are installed.
- Run
make web
for a debug build ormake web-release
for an optimized build. - Serve the
build/
directory for debug builds or thesite/
directory for release builds from a local web server (e.g.python -m SimpleHTTPServer
), and open the page in Chrome or Firefox.
What About Mac?
I hope to work on a Mac platform layer as soon as I have a Mac machine to work on.
Contributing
Since this project is intended as a personal challenge, I am not accepting external contributions at this time. I am very open to feedback, however, so feel free to open an issue for anything that needs fixing.