Back Download


Schmup is a side-scrolling bullet hell that I made in 2 weeks using C++ and OpenGL.

The goal was to gauge the skill level of all the game development students that were there and we had complete liberty over what me made in that timeframe.

I did all the art and programming myself, only borrowing the BGM from Cave Story.

It uses some of my own formats that I was messing around with:

  1. .orb files are configuration files that are basically C structs initialized.
  2. .fel files are a script files for a command language I developed for fun.

I wasn't sure how to implement level sequencing so I used my FEL language for it.


Key Description
WASD Move in the respective direction.
SPACE Accept or shoot.
Q Activate special attack.

ORB files

Sniper {
    int max_hp = 5;
    int shoot_pause = 120;
    int sprite = 3;
    string projectile_type = "Basic";
    string scale = "2,2";
    string pattern = "MOVETO";
    string target_type = "MOVETO";

Here we define a node "Sniper" that has various properties. After parsing these I check things like the `pattern` and `target_type` which I use to interpret the FEL script's `Spawn` command.

FEL files

A "pattern" is defined in `patterns.fel`, here is an example:

// Wall of 5 enemies at the bottom

This is event 2, and there are 5 commands, they're all Spawn. To each of these commands, 3 arguments are passed type, target position and spawn position.

Now that you got enemy spawn patterns you can start building levels, like so:


This is event 3, here we actually use some built-in commands. EXE will execute another event. Here we execute event 2 in #scope "patterns". Then we wait 60 frames. Then we execute, and repeat.

Then near the end we wait till the screen is cleared with Delay[clear], we wait for 120 frames and then trigger the victory screen.


Schmup launcher

Title screen

Beating level 1

Using the special attack

Fighting through level 2

Game over screen