Apr 232012

Another Ludum Dare is over, number 23 to be precise, and my game is submitted. It’s called “Aether” and is a mix of an explorer platformer and missile command, where you have to run through a landscape to reach a mountain with a secret weapon, while at the same time fighting off alien spacecraft.

You can play it here: Play Aether. Have fun!

Edit: Results:

#31 Fun 3.79
#37 Overall 3.90
#47 Mood 3.66
#51 Innovation 3.90
#82 Audio 3.47
#108 Graphics 3.80
#312 Humor 2.47
#354 Theme 3.18
Total number of compo entries: 1072


Feb 222012

I needed a profanity filter for the highscores in an app I made, but I couldn’t find anything free that worked the way I wanted, so I made a simple one myself. It’s pretty basic but someone might have use for it.

You need a list of lowercase words to filter for. The one I used is far too big to paste here, but you can find one by searching for “bad word list”.

private static const badWords:Array = ["lots","of","bad","words"];
// Returns a profane word if found, else ""
static public function checkName(text:String):String {
  text = text.toLowerCase();
  for (var i:int = 0; i < charReplacements.length; i++ ) {
    var ra:Array = charReplacements[i] as Array;
    text = strReplace(text, ra[0], ra[1]);
  for each (var w:Object in badWords) {
    if (text.indexOf(String(w)) != -1) {
      return String(w);
  return "";

The function will detect character sequences that look like some other character, to make it harder to bypass the filter. For example, 1 becomes i, û becomes u, |\| becomes n etc.
In this way “Fuc|<” would be detected for instance. The sequence replacements can even be used to identify inappropriate symbols like “(.)”, by converting them to (in)appropriate words if you like. 🙂

private static const charReplacements:Array = [["@", "a"], ["0", "o"], ["1", "i"],
  ["2", "r"], ["3", "e"], ["4", "a"], ["5", "s"], ["7", "t"], ["8", "b"],
  ["9", "g"], ["|<", "k"], ["|\/|", "m"], ["|\|", "n"], ["ä", "a"], ["ã", "a"],
  ["â", "a"], ["ä", "a"], ["á", "a"], ["à", "a"], ["å", "a"], ["é", "e"],
  ["è", "e"], ["ë", "e"], ["ê", "e"], ["§", "s"], ["$", "s"], ["£", "l"],
  ["€", "e"], ["ü", "u"], ["û", "u"], ["ú", "u"], ["ù", "u"], ["î", "i"],
  ["ï", "i"], ["í", "i"], ["ì", "i"], ["ÿ", "y"], ["ý", "y"], ["ö", "o"],
  ["ô", "o"], ["õ", "o"], ["ó", "o"], ["ò", "o"], ["(.)","boob"]];

You will also need this helper function for string replacement:

// Helper that replaces all "find" with "replace" in the given input string
public static function strReplace(input:String, find:String, replace:String):String {
  while (input.indexOf("find") != -1)
    input = input.split(find).join(replace);
  return input.split(find).join(replace);

It works quite well, let me know if you found it useful or have any suggesstions.

Dec 192011

I entered the Ludum Dare game making competition this weekend as usual. The theme was “Alone”. I didn’t have any immediate ideas, so I began by making the basis for a platformer with the theme in mind. Then it sort of evolved as I came up with things I thought would be cool to add.


The tools I used:

  • Flashdevelop (IDE)
  • Flashpunk (Game library)
  • Photoshop
  • Audition (sound editing)
  • Cubase (music)
  • Chronolapse (timelapse recording)

I decided early on to make it atmospherical, and I put a lot of focus on the effects, sounds, music and animation.

Continue reading for more info and a post-mortem. Continue reading »

Sep 072011

I’m have been working on Coin Runner since Ludum Dare 21. Here is a screenshot of how it looks at the moment, although a lot of it is still placeholder art. As you can see, there are now achievements.

It plays a lot better than the compo version!

There’s also lot’s of new items and skills you can buy. More info coming soon!

 Posted by at 03:32
Aug 232011

I participated in last weekends Ludum Dare 48 hour game making competition again. This time the theme was “Escape”, and I made a game where you run from enemies and collect coins, called Coin Runner. This time I focused most of my efforts on the gameplay, hence the squares for graphics. You can try the compo version here: Coin Runner compo-version. I’m continuing to work on the game, so stay tuned.


Coin Runner


Cross posted at the LD site:

Waking up at 1:30 PM in the day today with aching fingers, I felt happy.

The game is actually pretty fun to play, and not too badly balanced. There are three zones of different colors, and each zone get’s a bit harder. The enemies get a little too fast and jumpy after a while though.

I don’t regret using Flashpunk this time, it really makes everything so much easier than using just as3 like last time. I spent many hours on a stupid bug though, and realised Flashpunk tilemaps do not actually clear tiles when you call clearTile() on them if the clear tile (index 0) is transparent. That was annoying and made me loose a lot of time.

I think the leaderboard can add a lot to the game. Sadly Playtomic has disabled it’s leaderboards due to some problems, but it should be working soon again.

I didn’t really make any graphics at all, but focused on gameplay instead. I think that was a good idea, but the game could really use some better graphics. The music and sound effects could be better too, but they do the job.

A breakdown of the time spent in different applications (tracked with ProcrastiTracker):

  • Flashdevelop 13h
  • Chrome 6h
  • Flashplayer 4h
  • XChat 2h
  • Photoshop 2h
  • Cubase 1h
In total 28 hours!

Entry page: http://www.ludumdare.com/compo/ludum-dare-21/?action=rate&uid=2311




 Posted by at 20:51
Jul 252011

Ludum Dare 20 was almost three months ago, and I have been working on a new version of my game The World Above every now and then.

The original game had a lot of flaws. There was only one level, you couldn’t move for a few seconds when you collided which was very frustrating, the resolution was way too high making it unplayable on smaller screens, if you ran out of fuel it was a chore to continue playing as you fell and crashed over and over, and it just suffered from a general lack of playtesting.

Even though there was many problems, I feel like there is a good game in there. I’m especially happy with the controls and movement of the submarine, and I want to get it closer to it’s potential. Due to work over the summer, progress is slow, but I have fixed most of the problems in the LD version, added some new features such as time powerups and mines and replaced many of the rushed sprites with shiny new ones. There are now multiple levels instead of the huge single level, and the tiles in the level are now about half of the original size. (can’t remember why I made ’em so huge!)

New animating title screen

Continue reading for more info and screenshots.

Continue reading »

Jul 022011

Someone recently wondered how to pick a color of a pixel from the screen in as3. If you have a bitmap image you can simply grab the color value using BitmapData.getPixel(). But if you want to capture a pixel color value in the stage as the user sees it, including vector graphics, you need another technique.

The way I found was to make a 1×1 bitmap, and then drawing the stage to the bitmap using a translation matrix for the offset. The result is then in the single pixel of the bitmap.

public function pickColorFromStage(x:int, y:int):uint {
   var bmd:BitmapData = new BitmapData(1, 1, false, 0x000000);
   var matrix:Matrix = new Matrix();
   matrix.translate(-x, -y);
   bmd.draw(stage, matrix);
   return bmd.getPixel(0, 0);
 Posted by at 13:14
Jun 262011

I have made it possible to load/save presets as base64 strings, so that people can share brush presets easily. I used this lib for as3: base64-optimized-as3-lib. The nice thing about this is that the presets are text strings, and can be posted in comments, shared by mail or IM, or any other kind of text communication. The base64 string represents a serialized flash Object-object, storing key-value pairs for each setting, so it should be possible to make presets specifying just some of the settings, while leaving the rest, although in this version all the settings are stored.

You can save the base64 string in a text document at the moment as it’s not possible to save them in the application, but I have added some hard coded presets you can try using the numbered buttons. (they can be accessed with keys 0-9 aswell)

Presets window

To open the preset window, click Presets in the panel or press P. To make a base64 string for your brush, click “Generate base64”, and copy the text. To use a base64 brush that someone sent you, just paste it in the text area and click “Load from base64”.

Open FloralParticles 0.45

You can share presets in the comments below if you want. I might even add good ones as standard presets in the application. 🙂

 Posted by at 19:03
Jun 222011

Some of the new features:

  • Improved line rendering
  • Color mixing
  • Multi-step undo/redo
  • Fade-To-Color setting
  • Save to PNG (lossless and faster)
  • Background vignette (toggleable)
  • Fullscreen mode
  • Mouse smoothing
  • New spawner behaviours
  • Opacity setting, global and fading per particle

Open FloralParticles 0.4

Any suggestions or feedback are welcome, just post a comment below.

Floral Particles 0.4

 Posted by at 00:18
Jun 212011

I’ve been adding a lot of new features, including a new line rendering method using polygons which looks much better than just using line drawing in flash. That enabled the neat “tire track” effect you can see in the first image, by using a negative bias for first edge the polygons.

Also added is an opacity slider, speed multiplier, a bunch of new controls for the brush behaviour, a color mixing slider which makes the particles pick up the colors from the canvas and a bunch of other stuff. It’s a lot of fun!

A runnable is coming soon.

Continue reading »

 Posted by at 01:12