There's two images, the drawn background image, and another which is transparent with black pixels over it which is the collision mask. The game loads up the mask, extracts every fourth pixel for the alpha value, and then the player and other game objects use that array of values to check whether it's solid or not.

Since OpenGL can't hold textures larger than 1024x1024 (or so I've heard), I've had to split each level into multiple collision masks. Having a little trouble getting collision to flow seamlessly from one mask to the adjacent ones, but It's coming together.

Edit: I only decided to use (what I assume is) a needlessly complex way of doing it because a) I wanted my artist and myself to have freedom making the levels however we wanted, which when using a tile system can be limiting, and b) I may as well learn how to do something new if I get the chance