A downloadable game for Windows and macOS


A game made in 72 hours by Mike Daniels for Ludum Dare 41.

If you want to run the ".love" file, this game requires version 11 of the Love Engine.


This is a turn-based bullet hell game. The goal is to survive as long as 
possible. The longer you survive, the higher your score. 

The game is divided into two alternating phases:
- a planning phase in which you determine how your ship is about to move, and
- a movement phase during which your ship and everything else moves.

Unlike most games in this genre, you can't fire back at the boss. :)

Press space to pause the game.


Select a card: 1, 2, 3
Set the movement direction: click
Pause: space

The planning phase

During the planning phase, the game pauses, and you must determine the next move 
that your ship will make. At the bottom of the screen, you will see three 
"cards". To select a card, press the "1", "2", or "3" key.

If the card is a movement card, you must also establish the direction that your 
ship will move. Mousing over the game area after selecting a card will show you 
a preview of the path your ship will take. Click to confirm the route. 

Cards must be used within five turns of them appearing in your hand. A number 
next to the card shows you how many turns you have left to use the card. A card 
will turn red when there is only one turn left to use it. 

Card types

There are four types of cards, which appear randomly in your hand:

- Straight line
- Turn left
- Turn right
- Stay still

The "stay still" card doesn't require clicking the game area to set a direction.


At the start of the game, your ship has three health points.

You take a point of damage when:
- A bullet hits your ship, or
- You fail to select a card and a direction before the planning phase is over,
- One of your cards expires.

After you take damage, your ship will be immune to damage from bullets for
the next two seconds of movement (i.e., not planning).

When you have 0 health points left, the game is over.

Your ship's collision area is slightly smaller than its visual representation.


Your score multiplier is shown in the top center of your screen. This multiplier 
increases the longer you go without taking any damage. Any points you earn are 
multiplied by the current multiplier value. When you take damage, your 
multiplier returns to 1.0x.

Your multiplier increases faster if you are more than 30% of the way across
the screen, and the further to the right you are, the larger the bonus.


This game was made for the Ludum Dare Game Jam #41, in a period of 72 hours
between Friday, April 20th and Monday, April 23rd, 2018.

I made this game using the "Love Engine", a freely-available 2D game engine.

If you downloaded the ".love" file, you can rename it to ".zip" and open it up 
to see everything the game is made of, including the full Mercurial history, 
Reaper project for the background music, etc. 

The code is absolutely awful and nobody should try to mimic it, but somehow it 
works. Most important stuff is global state, which made it really convenient to 
implement features, but it's not exactly a good idea. As time went on I also 
kind of got lazier about attempting to do proper object-orientation, especially 
for things I knew would be singletons like fonts, sound effects, etc. I regret
not having done any up-front work to establish a general game object library
where objects maintain their own transforms, etc.

One thing I thought worked out really well was the use of coroutines to generate 
bullet patterns. Basically, each bullet pattern is a coroutine that yields until 
it's time to do something, then spawns a bunch of bullets and goes back to 
sleep. This way, the entire behavior is encapsulated in a single function, 
without requiring maintenance of any other state. Each update cycle I re-awaken 
the coroutine and tell it how much time has elapsed. I didn't end up using this 
to make very complex patterns, but it would be really useful for doing things 
like patterns that fire bullets at different angles over time, or patterns that 
evolve over time. 

The music is really bad, but I made it in like an hour on the last day of the 
jam, and it's the first time I've attempted to use a DAW (in my case, Reaper) to 
make anything at all. The NES-style music was made using the default synth 
included with Reaper and I intentionally didn't try to make it sound any 
fancier. Near the end of the looping section there's a really gross dissonant 
part I didn't try to fix. Sorry if it bothers you, but I'm not a musician and I 
don't know what I'm doing. :) 

The Sounds were made with bfxr, a simple tool for making synthesized sound
effects that's pretty fun to use!

The in-game font is called "Electronic Highway Sign", a free to use font.

There were some ideas that didn't manage to make it into the game. I thought
about adding in items that would float through the play area that would increase
your multiplier, but didn't get around to implementing them. If I had done that,
I probably would have made the bullet patterns a little easier, since you'd have
had something to chase after in addition to just dodging. I thought about adding
a "shield card" that would put up an area that bullets couldn't pass through
for a couple of turns, but didn't get to that either.


Ludum Dare Jam:
Love Engine:
Reaper DAW:
Electronic Highway Sign font:

PlatformsWindows, macOS
Made withLÖVE
TagsBullet Hell, Ludum Dare 41, Turn-based
Average sessionA few minutes
InputsKeyboard, Mouse
AccessibilityColor-blind friendly
LinksLudum Dare

Install instructions

On Windows 64-bit, download the .zip file, extract it anywhere, and run CardEmUp.exe.

On OSX, download the app .zip file, extract, and run!

Alternatively, you can install the Love game engine and download the .love file, which has all of the game's code and assets contained within.


cardemup-win64.zip - Windows 64 bit executable 7 MB
cardemup.love - package for the Love game engine, including source and all assets 3 MB
cardemup.app.zip 9 MB