Tag: love2d


Ludum Dare 27: Triad

For pretty much all of this year I haven't really been doing any game development (nor posts). But I'm starting to get back into it now; a couple weeks ago I started working on my arena shooter again, and now I've participated in the 27th Ludum Dare. It would seem my period for "not participating in the main competition" was only eight months. :P

The game I made is called Triad. You can download it from the previous link, or rate/comment at its Ludum Dare page.

Read more

Ammo 1.0

This is just a post announcing that Ammo 1.0 has been released (changelog). After a couple months in the 0.x range, I feel it's ready to be pushed up to 1.0. Hopefully soon I can create some tutorials for the library; the documentation is complete and up-to-date, but documentation isn't particularly good at conveying the big picture.

Anyway, if you've got any feedback on the library, please let me know.

Read more

Ammo

This announcement post is a bit overdue, but, better late than never. A short while ago, I released the first version (0.1) of Ammo, my organisational library for LÖVE. Its current version is 0.1.3. I plan to let the library stay in the 0.x range for a while as it's tested by me and any others who use it.

Along with the core library, there's a number of extensions available. The one I'm most excited about is ammo-debug, a versatile, highly customisable debugging console. It provides stuff like output logging, a command system, info graphs, and even simple live coding support. At present its version is 0.2.

Read more

Custom Cursors in Love2D

When making a game in LÖVE, you'll probably end up needing to customise the mouse cursor. As I recently had to do just that, I thought I'd make a quick tutorial on it. If you want an example cursor, here's the crosshair I'm using in a game right now.

Now, all of what we need is contained within the love.mouse module. The first step is to hide the mouse with love.mouse.setVisible. You'll probably want to do this in love.load:

Read more

How It Works: The Thruster in Facilitated Escape

In this post I'll be taking a look at how I programmed aspects of the ship's thruster in my game, Facilitated Escape. I'll most likely be making more posts like this in the future (as in, I intend to make a series of "How It Works" posts).

Initially I had a lot of trouble getting the thruster to look right; you might be able to see some of my troubles in the Ludum Dare time-lapse. The reason for this was that I had programmed the game to move the ship on the y axis instead of moving everything else, as expressed by this code (line 72 of ship.lua)

Read more

Mouse Dragging in Love2D

In this tutorial, I'll be taking you through my method of enabling objects to dragged by the mouse (in LÖVE of course). You can view the completed code for this tutorial at gist #1196228.

So, say you have an object with x/y coordinates, width, and height, and you want this object to be draggable by the mouse. For this tutorial, I'm just going to construct a table and put in the global, rect:

function love.load()
  rect = {
    x = 100,
    y = 100,
    width = 100,
    height = 100,
    dragging = { active = false, diffX = 0, diffY = 0 }
  }
end

The next thing we need to do is define love.draw to draw the rectangle. (We'll see what rect.dragging is all about soon.)

Read more

Facilitated Escape 1.0

This post is to announce the release of the first version of my game, Facilitated Escape (other than the one submitted to Ludum Dare). I've been working on it for nearly two weeks since I started work during Ludum Dare 21.

The game revolves around escaping a collapsing facility in your rocket, dodging oncoming "blocks" that are in your path. It's got quite a retro feel to it, with pixel art and 8-bit music.

Anyway, I won't repeat what I've already written, you can get more information and download the game from its page. Also, I'd really like to hear your comments and suggestions regarding it.

Read more

Ludum Dare 21

After my complete failure in the last Ludum Dare, I didn't plan to take part in the next one (the 21st), however I decided to give it another shot. I'd learnt a number of things from my failure last time: go with a concept that's really simple, and use simple art, like pixel art, at least if you're a programmer like me.

I also decided not use my personal framework for LÖVE; the biggest reason I failed last time was that my framework was riddled with bugs. My framework is much more solid now, nevertheless my main reasons for not using it are:

Read more

Glow Effect for Lined Shapes in Love2D

Recently I experimented with an easy way to make lined shapes glow (using LÖVE of course). There are of course other ways of doing it, and there are many styles of glow that can be used, but this is the one I came up with.

love.graphics.setColor(r, g, b, 15)

for i = 7, 2, -1 do
  if i == 2 then
    i = 1
    love.graphics.setColor(r, g, b, 255)
  end

  love.graphics.setLineWidth(i)
  -- draw lined shape here
end

The shape gets drawn multiple times, each time with a different line width, set by i. In all, six shapes are drawn with the widths 7, 6, 5, 4, 3, 1. For all the lines, except the last, the alpha of the colour (by the way, r, g, and b represent the respective values of whatever colour you might choose) is set to 15. Since the alpha of every overlapping colour is added to each other (by default), for each line the colour will get stronger and stronger, giving the glow effect. The last line is given an alpha of 255, since this is where all the "light" is meant to be coming from.

Read more

A Guide to Getting Started with Love2D

In this post, I'll attempt to give you my personal guide on some good steps to getting started with the Love2D game engine (the proper name is LÖVE, which I'll be using from now on). It's not perfect, of course, but I hope you find it useful. If you have any feedback, I'd love to hear from you in the comments.

I'm guessing you probably already know, but for those who don't, LÖVE is a 2D game engine (or, framework). It's an environment which contains a lot of pre-written code targeted at making games. It interfaces with the Lua programming language to makes things even easier for you.

Read more

Cameras in Love2D Part 3: Movement Bounds

Because there was some interest in a part 3, of this series, I've written it, and in this part we'll cover creating bounds that the camera can't move beyond. Make sure you've read part 1 and part 2 before continuing.

In case you're wondering what I mean by this, I mean restricting the movement of the camera to a "box", as in, having minimum and maximum x/y coordinates for the camera. This comes in handy when you're following players, for example, and you don't want the camera to show any of the stuff beyond the level (usually blackness) when the player comes to an edge. Now of course, movement bounding can get much more complicated than a simple rectangle, you restrict it to certain paths and the like, but we're going to keep it simple here.

Read more

Draw Origins in Love2D

In this post I'm going to be showing you origins when drawing stuff in Love2D. First of all, what are origins? They specify the offset for the origin of the object's x/y coordinates. In other words, if you specify the x origin to be 20, the object will be drawn 20 pixels to the left, as in x - 20. It's the same for the y origin: if we have a y origin of 20, the object will be drawn 20 pixels up, as in y - 20.

This allows us to do many useful things. First of all, if we have an object with centre based coordinates (like physical bodies), instead of drawing like this:

Read more

Ludum Dare 20: My Experience

From April 29 to May 2 Ludum Dare 20 has been going on. For those who don't know, the main competition involves making a game based on a certain theme in a 48 period; tough call. Hundreds of developers have a shot at this every four months, and I thought I'd give it a try. In this post, I'm going to write about my experience in it, and the lessons I learnt. I'll let you know now, however, the end result was me pulling out not long after half-way.

So anyway, I started when the competition was about 6 or 7 hours in. My plan was to use the Love2D engine, along with a personal framework I'd written for it. The theme was "It s Dangerous to go Alone! Take this!" So my first idea was to have sort of dangerous test facility which was pitch black with darkness (making it dangerous to go all alone), and you're given a light or something (the "this") to see your way through. Well that didn't work too well, so I switch the character to a rolling ball, and made "this" the ability to propel yourself in any which way.

Read more

Cameras in Love2D Part 2: Parallax Scrolling

In part 1 we constructed a basic camera. Now we're going to extend it by adding some parallax scrolling. Note that the method I'll use is probably not the prettiest, as I came up with it in half an hour. Nevertheless, this will be a starting point for you to develop your own system.

Now, for those who don't know, what is parallax scrolling? It's a way to get a pseudo-3D effect while still have all graphics and gameplay based in 2D. It's currently used very widely among 2D games, as it adds a sense of depth that normally isn't there.

Read more

Cameras in Love2D Part 1: The Basics

This is the first of a couple of blogs on creating cameras in the LÖVE engine. This part will deal with the fundamentals of creating a camera. Part two will deal with parallax scrolling and creating layers. So, let's get to it!

Update: I've actually ended up writing a part 3, which covers restricting camera movement.

Read more

Launcher

I've been working on a little game (in the LÖVE game engine), which for now I'm calling "Launcher". The core gameplay mechanic is this: you are a circle, which can stick to certain surfaces, and then launch yourself at great speed off them in the direction of the mouse. It's completely controlled by the mouse, you aim with it, and the distance between the player and the mouse determines the speed of launch.

On my YouTube channel I've already posted three gameplay videos of the work done so far. Here's the first:

Read more