About ippa


Ludum Dare 27
Ludum Dare 21
MiniLD 24
Ludum Dare 19
Ludum Dare 18
Ludum Dare 16
MiniLD 14
Ludum Dare 15

ippa's Trophies

ippa's Archive

HTML5 / Javascript gamedev postmortem

Posted by
Tuesday, August 23rd, 2011 2:47 pm

So I chose to make a game with HTML5 / Javascript using the JawsJS html5 gamelib.

I used the <canvas>-tag since I wanted to make a freeform level with pixelperfect collisions, basically I made the whole thing in graphics gale, could as well have done it in paintbrush.

The new HTML5 <canvas> tag makes it easy to get the data in raw format, basically an array with RGBA values. From there on it’s to check collisions.. 1 pixel at the feet is a decent start.

The most annoying thing is probably the audio-formats that’s supported for the new <audio>-tag.

Safari doesn’t play OGGs for some lame reason, and Firefox doesn’t do MP3s. So all audio has to be provided in 2 formats.. also you wan’t detection at asset-loading time etc. I could have lived without that cruft.

Otherwise Javascript has become amazingly fast, I think V8 is faster then ruby and python. All browsers come with good debugging possibilites.

Javascript doesn’t have the traditional classes and inheritence, but rather prototypical inheritence.. which can be confusing at first.

What I love is the dynamic nature of objects in Javascript.. basically all objects are big key-value storages (hashes).

So you can whenever you want just set a new flag/property on whatever object.

/* Player.dead has never been defined or used at this point */

if(player.dead) { … do sometting …} // won’t throw any error.. played.dead will just return undefined

player.dead = true

if(player.dead) { … do something .. } // played.dead is now true and code will be executed

The biggest upside with javascript is ofcourse ppl not having to download anything. No virus-scan etc etc. Just instant gaming. And the big players are making the javascript engines faster on a daily basis.

Play my Javascript game here:


Here’s a teaser-shot from the game, you start in the “west prison” and have to find your way out of a huge castle.



Posted by
Sunday, August 21st, 2011 8:16 pm

So .. you’re a bit of a pickle and need to use your lady-brains to get you out of it … 

Play: http://www.ludumdare.com/compo/ludum-dare-21/?action=preview&uid=1087


Posted by
Sunday, August 21st, 2011 8:15 am


Making a 5x retro pixel adventure/puzzler:





LD #21 warmup javascript game

Posted by
Saturday, August 13th, 2011 4:52 pm

Planning on making a HTML5 javascript game using http://www.jawsjs.com/ this time around.

Warming up by converting an old LD entry I made in Ruby into Javascript. A 10-minute canvas-tag adventure, check it out:






Javascript/HTML5 games with JawsJS

Posted by
Friday, April 29th, 2011 7:37 am

Been working a lot on a Javascript game engine called JawsJS ( http://www.jawsjs.com/ ) for the last months. Aiming to make a game with it this LD.

So why make a game in Javascript?

– ppl don’t have to download/install/unzip anything

– no securityworries where ppl have to scan your files and/or switch to their “game user”

– The new popular HTML5 comes with tons of new power, canvas tag for freeform painting, audio tags, local storage, websockets for multiplayer.

– Builds on years of experience  of my Ruby game engine Chingu

– instant deployment across all operating systems, hell even for tabs/phones if done right.

Now the last point isn’t 100% true. There’s a lot of browserquirks to take into account. But if the gamer has a decently recent Chrome of Firefox there shouldn’t be a problem. IE9 works well too (8 is kinda flaky in certain areas though).

JawsJS comes with a lot of example, here’s one:



Also made a full mini-game with it some time ago:



First HTML5 / Javascript Game

Posted by
Tuesday, February 15th, 2011 9:31 am

Been messing around a lot with HTML5 / Javascript last month. So MiniLD #24 was the perfect time to test it out. Ended up making a small artsy game with a friend, pretty pleased with the result:

http://ippa.se/webgames/unwaivering/ – A small game about true love

(Will take about 2-3 minutes to play through)

Retro-story with an end-twist

Posted by
Sunday, December 19th, 2010 7:41 pm

I went full retro this time, I love that style of gfx.

4 different ambient “songs” made with renoise to set the mood.

An end with a twist, which I hope will make ppl remember it.

Should take about 5-15 minutes to finish.

Play it @ http://www.ludumdare.com/compo/ludum-dare-19/?action=preview&uid=1087

Made with Ruby & http://ippa.se/chingu

It ain’t easy being a foul beast

Posted by
Sunday, August 22nd, 2010 9:19 pm


Pretty  happy how the game turned out:

– 10 levels of raising difficulty

– knights, horses, balloons & different tower guns, all animated

– global high scores via http://www.gamercv.com/games/14-gnorf

– sweet readable ruby source code

Play it @ http://www.ludumdare.com/compo/ludum-dare-18/?action=rate&uid=1087

9 hour sprint + screenshot

Posted by
Sunday, August 22nd, 2010 9:33 am

Most GFX and game logic done, quite some glue and polish left. The last 20% really takes 80% of the effort. Which makes sense as no mather how well you organize your good you’ll still end up with growing complexity to look after.


Entropic failure of conceptual integrity…

Posted by
Saturday, August 21st, 2010 10:34 am

…  is probably the most common reason for software project failure.

So don’t end up with it =).

First screenshot and effectivity tip!

Posted by
Friday, August 20th, 2010 10:44 pm

So, I’ve noticed you can bump up your devspeed if you do one thing at the time. For example.

1) Figure out your general idea
2) Try to make most of your sprites
3) Start on your gamelogic

Instead of:

1) Figure out your general idea
2) Make one sprite
3) Code the gamelogic for that sprite
4) Goto #2

This is also true with sounds, try to do/generate them all at one point instead of constantly switching between your code, your sprite editor and your sound software.

And here’s my first screenshot:


A game for Whyday, celebration of M.I.A. ruby hero _why

Posted by
Thursday, August 19th, 2010 8:30 pm

… so one day before LD, I sit down and make a 12h game for Whyday.

The game become somewhat of a small puzzle platformer. I’m pretty happy with it.

All the puzzles kind of resonates with Why the lucky stiff and his art.

Especially the last puzzle will be hard if you never heard of him (you can scroll down and get the answer though). But if you’re a fan of him, you should try this game out!

Source: http://github.com/ippa/whygone (requires Ruby and the Rubygems “gosu” and “chingu”)

Win32 EXE: http://ippa.se/games/whygone.exe






The password for the last puzzle is “chunky bacon”.

Ruby/Chingu – do more with less code.

Posted by
Wednesday, August 18th, 2010 8:56 pm

I’m doing Ruby this LD and I feel extatic. First off my ruby game framework Chingu [ http://github.com/ippa/chingu ] has been making strides the last months. Tons of details have been polished and a lot of bugs fixed. Chingu now comes with a general editor in form of a game state.

From inside your game, just:


And your current game will be paused and the editor toolbar become visible. You can now move, rotate, delete, scale, modify zorder and fade any instance of class GameObject you have on the screen. Or put out new GameObjects of your choice from the icon toolbar.

Here’s a quick ‘n dirty look at it: http://ippa.se/videos/holiday_droid_edit.avi (Yes, my screencast software borked up the colors).  That’s from my gameprotoype http://github.com/ippa/holiday_droid .

If you haven’t looked at Ruby for gamedev yet, now is the time, here’s 4 easy steps to get going on windows:

1) http://rubyinstaller.org/downloads/ – install Ruby 1.9.1-p430 or later.

2) “gem install chingu” in your cmd/”DOS” window

3) see provided examples, check README @ http://github.com/ippa/chingu

4) Use http://github.com/larsch/ocra to make standalone EXEs out of your rubyscripts

Ruby is one of the most expressive langs out there. Give it a few days of your life and you’ll never look back =).

Finished voting on my 20 entries and some extras.

Posted by
Monday, December 28th, 2009 6:42 pm

Phew. Voting is a lot of work :). Downloading everything, unpack them into folders that include the author name (makes things easier afterwords),  fixing broken entries, maybe even installing extra stuff, playing the game, thinking up fair votes and commenting.

Playing the game

I feel you have to give the game a chance. Even if it looks really boring in the beginning. Sometimes it turns out to be really boring, but I feel more often it stuff can grow on you if you open your mind, try to ignore any irritating bits and concentrate on the mood the developer try to create. I found myself really trying to finish several games (and succeeding) and steering a little grey dot over a paintbrush map for at least 10 minutes (and enjoying it) :).


Voting is hard. You want to be fair (naturally). After I’ve played about 5+ entries I get a feel for what I consider a music 3.. or a humor 4. I can only decide on ratings by comparing the games.  Is this how everyone does it?


Getting positive feedback and comments is probably the most fun, and could be a big part of the motivation to make a game for LD.  Since I enjoy it so much I feel I should write something (sometimes more, sometimes less) to 99% of  the entries I try. I doesn’t need to be much work commenting, just say what’s on your mind and focus on what’s good in the game, or how something could be made even better. If you “force” yourself to comment on every game you get good at it after a while :)

New levels to my pixely Ruby-entry

Posted by
Friday, December 18th, 2009 3:26 am

sfernald sank his teeth into the game engine for my LD#16 entry – the light in the end of the tunnel and the results came out swinging!

He’s used the game engine better then then me, making some winding, fun, hard to beat, acid-filled caves.


Check it out:

Source:  http://www.bitjets.com/thelight2.zip
Win32 exe:  http://ippa.se/games/the_light_2.exe

Maybe I’ll make a sequel too since the original game was so tiny. Actually I already started hacking on it. Some ideas/goals:

  • The collision detection wasn’t perfect (for example you couldn’t jump while running into an obstacle)
  • I’m thinking level-building from One big image instead of several small, but there’s quite some things to work out before that’s possible.
  • More interaction with the world, could be levels to pull, buttons to push, doors, modification of terrain or living enemies, not just acid pools/drops.  Preferable additions that don’t complicate the level building to much, now it’s basically drawing a new image and creating one class — liberating easy.

Ruby, OpenGL and Pixels

Posted by
Monday, December 14th, 2009 2:41 am

I used my favorite language of all time, Ruby. With 1.9 Ruby has picked up speed and with Ocra you easily make a ~1-2 meg exe-file out of it. Also the excellent (and german precision engineered)  Gosu enables OpenGL accelerated 2D. On top of that I used my own Ruby/Gosu-specific framework Chingu to get game states, re-usable game logic and a boiler plate “game object”. To get a speedy get_pixel() I used the awesome Texplay by John Mair.

I have a pixel fetish. I love retro-looks in games, and I love pixel-perfect-collisions, a fetish that probably came into existence playing hours and hours of Lemmings 2-player mode on the classic Amiga 500.

So, the most time was spent up building a good pixel-perfect-collision algo, and it came out very playable, but not perfect. I ranted about it in my last blogpost.

With Ruby and Chingu my level-building got very clean, I think even ppl not into Ruby could understand what’s happening here:

class Level7 < Level
  def setup
    self.background = "level7.bmp"
    every(1000) { Enemy.create(:image => "acid_drop.bmp", x => 150, :velocity_y => 5) }
    every(1500) { Enemy.create(:image => "acid_drop.bmp", x => 250, :velocity_y => 5) }

or here (this is from the mainloop):

player.each_collision(Enemy) do |player, enemy|
  unless player.paused?
    after(1000) {  player.x = @entry_x; player.y = @entry_y; player.unpause!; }

It’s nice when it’s silly simple building readable levels.

I also got a very basic and simple Map-class going so I could build on my matrix of screens that made up the game:

map = [
[LevelUp, nil, nil, nil],
[Level1, Level2,Level22, nil],
[LevelAir, nil, Level3, nil],
[LevelAir2, Level5, Level4, nil],
[nil, Level6, Level7, nil],
[nil, Level8, Level9, End],

Basically if you exited a screen to the right I would increment a column_counter and fetch a new screen from the matrix. If exiting downwards, increment row_counter an fetch a new screen.

If you like OO, short readable code and scripting languages in general and haven’t checked out Ruby or Gosu yet, now is the time to do it.

[cache: storing page]