Hi ๐Ÿ‘‹

I'm Hannu, senior software engineer with 15+ years of dev experience. I've been mostly working in the industry on B2B projects for weather measurements (Vaisala) and reducing shipping emissions (Wรคrtsilรค). Here are some public indie projects I've made on free time.

Projects

RetkiSuomi

Find hiking and travel destinations in Finland. The main idea of RetkiSuomi is to display open map data in a clean way that helps you plan your trips and get inspiration for where to go. It also sources various 3rd party datasets like Wikipedia and weather info so that you don't have to search for relevant information from multiple sources or apps.

Main frontend tech: TypeScript, Preact, MobX, MapLibre, Vite. Main backend tech: Kotlin, PostgreSQL, Undertow, Nginx, Docker.

Experiments

The following "experiments" lack some polish to be considered done, but they can still be fun to try out.

Subshooters

Multiplayer deathmatch game made with WebGL, WebRTC and TypeScript.

The game uses client-server architecture but the server is not a traditional cloud server; rather, the player who starts a new game runs the server in their browser and other players connect to that browser-server directly using WebRTC. WebRTC can provide a truly low-latency peer-to-peer mode when players are connected to the same (wifi) network, but it can also fall back to using a cloud server proxy mode when the clients can't connect to each other directly due to firewall restrictions or such. Websockets are used for establishing the initial connection between players, but not for the game traffic.

No game engine was used, but the renderer is based on js13k-2d, a fast and tiny library for sprite rendering. Avro was used for network packet serialization. The game has been designed for touch controls and mobile, but it can also be played with keyboard.

The initial plan was to design a local multiplayer game for phones, with the assumption that players connect to the same wifi for optimal latency. However, it turned out that WebRTC latency can be low enough (~50 ms) even when the players use 4G with different ISPs.

"Monster game"

Simple 2d action game where the player fights against enemy hordes, inspired by Vampire Survivors. Made with WebGL, Web Audio and TypeScript. It can render and update 2000+ monsters at 60+ FPS on a decent phone, however the game doesn't currently quite push the limits to the max yet. Gameplay is still early prototype phase and not very well balanced. It starts with randomized weapons and you just have to kill as many monsters as you can. I didn't use a game engine or (large) libraries, so the code and part of the bundled graphics are just 30 kB gzipped. The graphics and audio are bought or have a free license.

SketchPaint

Free-hand vector painting app where you can easily tweak your painting by grabbing and smoothing the strokes, cutting the stokes and by varying the stroke thickness, etc. Supports pen pressure.

Koodikoulu

Programming course for kids, in Finnish. It teaches the basics of game programming with Javascript. I held the programming course a few times in a public library, but you can try out the exercises here as well.

Words

Mini-game for finding words on a grid. It's a quick test of cramming as many overlapping words onto a grid as possible and seeing if searching for them is fun (it's not ๐Ÿ˜…). Finnish words only.

Old Projects

TOU ๐Ÿš€

2d cave-flying shooter made by Kimmo Palander (audio) and I (coding, gfx) mostly in high school and released in 2002. It has over 70 special weapons, lots of hand-drawn levels and infinite generated levels in various themes. You can play it with up to 4 players on a single PC and with up to 63 computer-controlled ships. There's tons of options to configure the game to your liking, such as increasing weapon firing rate, changing gravity, adding environmental hazards, playing with a base you must protect, changing ship speeds, banning weapons from the game etc. and it also has pre-made game modes that change many of the rules for different experiences.

Check out the gameplay from a fan video in YouTube. The game was featured in many gaming magazines when it was released and bundled in magazine CDs/DVDs. Additionally, it was downloaded some tens of thousands up to 100k times from its old website.

It's still a blast to play, especially if you tweak the rules to be a bit faster (at least that's my preference ๐Ÿ˜‰). Unfortunately it's missing some modern niceties such as support for wide-screen resolutions, controllers or internet multiplayer.