Lunar Penguin (Platformer)

Show off your games, demos and other (playable) creations.
osuf oboys
Party member
Posts: 215
Joined: Sun Jan 18, 2009 8:03 pm

Lunar Penguin (Platformer)

Post by osuf oboys » Fri Feb 13, 2009 12:31 am

Lunar Penguin
Ludde the Lunar Penguin wishes to go to that mysterious ball in the sky called The Moon. Unlike other birds, Ludde cannot fly by flapping his wings, and so he sets off to collect helium balloons spread out across The North Pole.

Image

Project Backstory
This game was taken on one to two weeks ago to show that it is in fact relatively easy to make platformers with LÖVE. It took about two days to implement the basics and another two for pretties and tweaking. I intended to add more features, such as enemies, projectiles, an overmap, and switches, but I'm caught up in other projects for the time being (artificial intelligences also needs LÖVE).

There are only five levels, all moderately difficult. The map format is simple though, so feel free to make your own and post in this thread.

Controls
Left/right: Move left/right.
Space/up: Jump.
Down: Stand still.
Up/down/return/enter/spacebar/: Navigate menus.
p: Toggle pause.
s: Toggle sound.

Design Choices
I have in this project chosen to represent the main entity as a circle along with the physics associated with this choice. This gives some interesting features that suited the setting of the game. If you aim at something more similar to the usual platformer games, e.g. super mario, then you will want to add considerable angular damping, air control, straight-upwards jumps, jump when a key is pressed rather than being held in, more gravity, more impulse in jumps, and possibly a rectangular shape or polygon for the character. (post about this and I will finish the polygon-polygon distance part).

Technical Details
Jumping is done by computing the nearest point on any other shape that the jumping entity can collide with. If the distance is small enough, jumping is permitted and the jumping angle is computed based on the relative location of the nearest points of the shapes (the angle is modified somewhat towards jumps straight up). CAMERA is used for scrolling and avoiding off-screen drawing. I will try to release the interesting parts of the project as a quick and easy platformer module. If you wish to do so, go ahead!

License
Feel free to use any or all parts for whatever you please. If you have any questions about the source, do ask. LPCL with myself as community - clauses to be invoked at any time. The exceptions to this are the penguin and balloon images, which I have downloaded from http://www.spriters-resource.com.

To Do (Possibly)
Reduce lag. Enemies. Special balloons. Flying/falling ice taps and snow balls. Items. Overworld/map. Reduce lag for levels with huge platforms (next LÖVE?). Cannons (for pun[dit/doh]). Title screen. An opening and an ending. Replace penguin and balloon images.

Comments and suggestions most welcome!

Download: http://www.nanosleep.net/love/loves/123 ... nguin.love
Last edited by osuf oboys on Sun Mar 01, 2009 11:21 pm, edited 2 times in total.
If I haven't written anything else, you may assume that my work is released under the LPC License - the LÖVE Community. See http://love2d.org/wiki/index.php?title=LPC_License.

User avatar
Skofo
Party member
Posts: 146
Joined: Mon Dec 22, 2008 10:55 pm

Re: Lunar Penguin (Platformer)

Post by Skofo » Fri Feb 13, 2009 2:44 am

Super neat! :ultrashocked:: I could never get the hang of making a decently working Box2D-powered platformer, but it looks like you did just that! :ultraglee: Very cute game. I actually thought I could fly the first time so I tried that and failed. :P

Two things, though:
1) The first time I grabbed the second balloon in the second level it flipped out and flew to the left, where I nudged it.
2) The level with the many falling platforms is pretty frustrating, mostly because it's seemingly random how the penguin skips around and you don't have much control over it.

But other than that, I liked it. ^^ Great job!
Working on: Viator
Need a 64-bit Debian package for LÖVE? Here it is!

osuf oboys
Party member
Posts: 215
Joined: Sun Jan 18, 2009 8:03 pm

Re: Lunar Penguin (Platformer)

Post by osuf oboys » Fri Feb 13, 2009 3:06 am

Skofo wrote:Super neat! :ultrashocked:: I could never get the hang of making a decently working Box2D-powered platformer, but it looks like you did just that! :ultraglee: Very cute game. I actually thought I could fly the first time so I tried that and failed. :P

Two things, though:
1) The first time I grabbed the second balloon in the second level it flipped out and flew to the left, where I nudged it.
2) The level with the many falling platforms is pretty frustrating, mostly because it's seemingly random how the penguin skips around and you don't have much control over it.

But other than that, I liked it. ^^ Great job!
1. In this game, holding spacebar makes you jump as soon as you're near anything at all, including balloons. It should probably be changed to jumping only when spacebar is pressed and to have the jump take into account the inertia of the other object.
2. Not sure what to do about this except starting with easier levels. The handling feels natural to me but I've been doing a lot of debugging and gotten used to the system. Some pointers: Running over the falling blocks can cause the penguin to bounce over some platforms. Pressing space just before you've landed produces a weaker jump than if you have landed (but can be used in other situations for multiple jumps). You have very little air control, whatever speed you need, you need to accumulate before leaving the ground, e.g. by landing at one end of a platformer and running to the other. The jumping angle depends on the relative direction of the surface, e.g. jumping at the corners of the blocks produces jumps that are longer but not as high. Such jumps are not necessary to complete the level though. Overall, I think the third level should be relatively easy, save for getting the balloon, if one slows down to match the platforms and acquire some speed before jumping again.
If I haven't written anything else, you may assume that my work is released under the LPC License - the LÖVE Community. See http://love2d.org/wiki/index.php?title=LPC_License.

User avatar
qubodup
Inner party member
Posts: 775
Joined: Sat Jun 21, 2008 9:21 pm
Location: Berlin, Germany
Contact:

Re: Lunar Penguin (Platformer)

Post by qubodup » Fri Feb 13, 2009 7:49 am

I !love games where i am having !fun with the controls.

:) :) :) :) :) :) :) :) :) :) :) I'm friendly :) :) :) :) :) :) :) :)
lg.newImage("cat.png") -- made possible by lg = love.graphics
-- Don't force fullscreen (it frustrates those who want to try your game real quick) -- Develop for 1280x720 (so people can make HD videos)

User avatar
Kaze
Party member
Posts: 189
Joined: Sat Jul 19, 2008 4:39 pm
Location: Dublin, Ireland

Re: Lunar Penguin (Platformer)

Post by Kaze » Fri Feb 13, 2009 9:03 am

Nice game.

User avatar
rude
Administrator
Posts: 1051
Joined: Mon Feb 04, 2008 3:58 pm
Location: Oslo, Norway

Re: Lunar Penguin (Platformer)

Post by rude » Fri Feb 13, 2009 3:10 pm

Cute and difficult. How do you get the special ballon on the first level? :halloween:

Lag?

osuf oboys
Party member
Posts: 215
Joined: Sun Jan 18, 2009 8:03 pm

Re: Lunar Penguin (Platformer)

Post by osuf oboys » Fri Feb 13, 2009 3:34 pm

rude wrote:Cute and difficult. How do you get the special ballon on the first level? :halloween:
Thanks.

Each balloon offers some lift force but also some air resistance (damping). There are two ways to get the yellow balloon. Careful timing allows you to jump to the yellow balloon using the spinning platforms to catapult yourself or a tall corner. This is easiest done without the two balloons. The combination of lift force, air control, and balloons hitting the platforms allows you to climb walls by holding space if you have at least one balloon (most efficient at two, no more). You will have to let go of the jump key when you reach the top though, or you will jump off again.
Lag?
On windows, I don't experience any lag for normal use, but on linux, it lags too and from. In particular the fourth level, where I draw images stretched across most of the screen. Also, if I close and start LÖVE apps enough times (or LaTeX with blending in PGF pictures), it seems something happens and the CPU consumption of X becomes large even for seemingly trivial tasks.

Does anyone else experience lag?
If I haven't written anything else, you may assume that my work is released under the LPC License - the LÖVE Community. See http://love2d.org/wiki/index.php?title=LPC_License.

User avatar
farvardin
Party member
Posts: 162
Joined: Sat Jun 28, 2008 6:46 pm

Re: Lunar Penguin (Platformer)

Post by farvardin » Mon Feb 16, 2009 6:20 am

the game is nice, but difficult, and it lags a bit, I mean it's not very responsive and adding to the difficulty.
And is it possible to have the main sprite not blurry?

osuf oboys
Party member
Posts: 215
Joined: Sun Jan 18, 2009 8:03 pm

Re: Lunar Penguin (Platformer)

Post by osuf oboys » Mon Feb 16, 2009 11:30 am

farvardin wrote:the game is nice, but difficult, and it lags a bit, I mean it's not very responsive and adding to the difficulty.
Could you elaborate on the "not very responsive part"? I'll make a few easier levels, but if anyone wishes to make some of their own, I'd be grateful for that. The level format is pretty simple.

Code for the first level (not tile-based, I simply used integer coordinates):

Code: Select all

-- Map name, width, height
local	mp = map.new("Elevator", 1000, 300)
mp.music = "joy"

function mp.onLoad(self)
	map.onLoad(self)
	-- Penguin starts at 0,1 is has width and height 2. Positive y is upwards.

	self:addMessage("Game Name", 3, "~ Ludde the Lunar Penguin ~")
	--self:addMessage("Backstory", 15, "Ludde wants to go to the moon but he cannot fly.")
	--self:addMessage("Objective", 15, "Objective: Aid Ludde by collecting the balloons lost in the traitorous icelands.")
	
	-- map, x, y, width, height
 	makePlatform(self, 0, 0, 12, 2)
	
	-- We create four platforms with different starting positions in the animation.
	-- The first (0) is at 1, i.e. starting with phase 1.
	-- The second (1) is at 1.25, i.e. 25% done with phase 1.
	-- The third (2) is at 1.5, i.e. 50% done with phase 1.
	-- The fourth (3) is at 1.75, i.e. 75% done with phase 1.
	-- Since leaving phase 2 teleports to phase 1, the platforms are evenly spread out in the animation.
	for i = 0,3 do
		-- map, width, height, starting position in animation, animation speed and animation definition
		makeMovingPlatform(self, 12, 2, 1 + 0.25 * i, 3, {
			-- First animation phase. We immediately teleport to this location without moving through the space inbetween.
			{x=12, y=20,angle=0,teleportTo=true},
			-- Second animation phase.
			{x=12, y=-20,angle=0}
		} )
	end
	
	makePlatform(self, 28, 0, 10, 2,0)
	
	-- Common balloon, collides with platforms.
	makeBalloon(self, 28, 4, "Common Balloon", true)
	
	for i = 0,1 do
		makeMovingPlatform(self, 10, 2, 1 + 0.5 * i, 5, {
			{x=42, y=15,angle=0,teleportTo=true},
			{x=42,y=-15,angle=0}
		} )
		makeMovingPlatform(self, 10, 2, 1 + 0.5 * i, 5, {
			{x=56, y=-15,angle=0,teleportTo=true},
			-- Note how we left "angle" out here.
			{x=56, y=15}
		} )
	end
	
	makeBalloon(self, 49, 20, "Common Balloon", true)
	
	makePlatform(self, 68, -10, 8, 20)
	makePlatform(self, 68, 18, 8, 20)
	
	makeBalloon(self, 68, 30, "Special Balloon", true)
	
	-- Next level is "Jump" and you need two balloons to use the exit.
	makeLevelExit(self, 68, 1, 1.5, 1.5, "Jump", 2)
end
And is it possible to have the main sprite not blurry?
Not that I know, all scaled images are blurred (which is preferable in some situations and not preferable in others). I could rescale it in an image program and use that if you would prefer.
If I haven't written anything else, you may assume that my work is released under the LPC License - the LÖVE Community. See http://love2d.org/wiki/index.php?title=LPC_License.

User avatar
farvardin
Party member
Posts: 162
Joined: Sat Jun 28, 2008 6:46 pm

Re: Lunar Penguin (Platformer)

Post by farvardin » Tue Feb 17, 2009 11:21 pm

Could you elaborate on the "not very responsive part"?
you often feel like to press very much on the keyboard to make the penguin run faster, jump higher... It gives the feeling there is much inertia.
I could rescale it in an image program and use that if you would prefer.
I generally find blurry pixel art quite ugly. Could you (or Löve) consider using those algorithms?

http://en.wikipedia.org/wiki/Pixel_art_ ... algorithms
http://scale2x.sourceforge.net/index.html

It looks pretty neat for this kind of games!

You can also simply resample the sprites.
Here is a conversion I made with the scale2x program (last one, while the second one is a normal blurry version):

Image

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests