MAY 17, 2017

Making o: LD38 recap

As is tradition, I participated in ludumdare last month, and made o. If you haven't played it yet, go play it!

o

Time

I was actually busy most of the time during LD weekend. I had my laptop with me, so when I wasn't doing anything I worked on LD. I had an idea: make a simple world building game. You are probably shaking your head, because this is so complex, but I hadn't thought of it. Basically I spent the whole weekend trying to make something, and only got to an inventory. no actual gameplay.

Yes, I spent the whole weekend on this

I got home on Sunday, and booted up my desktop (a proper computer, at last!) I decided I was going to start from scratch. On the last day for compo, and I had classes the next day. Was it a bad idea? No.

Created a new git repo, opened up vim and made a circle. That was going to be a planet. I was going to put a character on it, but due to the lack of time I just settled with a smaller circle as a temp graphic. Turns out, this actually looks quite good, so I kept it. I had to think of a way to keep position. X and Y would be pretty hard to do calculations with, so I didn't know what to do. Turns out there's this very useful thing, called radians. They're easy to do maths with, you can just use sin and cos to get its position on the circle! So, radians it was.

-- circle_size = the radius of the planet
-- height = how high you are jumping
-- pos = your position, in radians.
love.graphics.ellipse("line", love.graphics.getWidth()/2+math.cos(pos)*(circle_size+height), love.graphics.getHeight()/2+math.sin(pos)*(circle_size+height), 10, 10, 50)

I refined it much more

It was already very early monday at this point, so I shut off my computer and went to bed, returning at ~3PM.

The next day!

I started off by adding particles. I did this by creating a certain number of circles around the player, and shrinking them each frame. It actually looks quite nice! Of course, explosions need screenshake too, so I added that (pretty proud of this one, I used a variable to control how long the screenshake should last. Pretty simple, but nice)

for i=0, love.math.random(5, 20) do
    local px = love.math.random(-10, 10) + love.graphics.getWidth()/2+math.cos(pos)*(circle_size+height)
    local py = love.math.random(-10, 10) + love.graphics.getHeight()/2+math.sin(pos)*(circle_size+height)
    local psize = love.math.random(0, 10)
    table.insert(particles, {x=px, y=py, size=psize})
end

In the meantime, I also made the planet shrink. I also had an idea of how I should make this: You shoot enemies to keep the planet from going too small.

Boom!

Alright, this is nice, but there's no actual game yet. So, off to that!

First, I added bullets. I decided these would hurt you, so you don't just shoot around and win:

pew pew pew

Next, enemies! These initially had a 30% chance (if i recall correctly) of spawning every second, but I ended up adjusting that later. I also made it so the planet shrunk faster when you killed enemies, so it got progressively harder:

actual gameplay!

The rest was simple - add collision, a score, and bam! You got yourself a game!

Looking back

I'm actually pretty proud of this. It only took ~1 day to make. Most reviews seem to agree with me, too:

(by chaseplays) The game is simple and fun! It’s addicting, and given the minimalist design of the gameplay, the graphics and audio both fit the game perfectly. I really enjoy the ability to hurt yourself by missing an enemy, as it forces you to form strategies a bit more, but the ability to jump makes it less frustrating. The only major complaint I have is that sometimes the “enemies” will spawn directly next to you, or even on top of you. These are almost impossible to avoid, which can feel irritating and unfair. If you could find a way to fix that before the jam ends, you really should. Overall, this was a great, simple game!

(by s-ol) Very cool, a minimalist take on the ‘small planet’ concept that really works well IMO. I loved the planet-collapse animation too, the reduced style of everything really integrates it well.

Overall, I'm really proud of this, and I'm actually thinking of releasing a post-jam android version on the play store!

Results

  • Overall: 161
  • Fun: 57
  • Innovation: 253
  • Theme: 30
  • Graphics: 398
  • Audio: 409
  • Humor: 631
  • Mood: 483

Pretty nice 😄