Card 'Em Up
A downloadable game for Windows and macOS
CARD 'EM UP
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.
HOW TO PLAY
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
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.
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.
ABOUT THE GAME
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:
Electronic Highway Sign font:
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.