Tervetuloa portfoliooni

Kuvani

Nimeni on Teemu Hörkkö ja olen 32,8 vuotias kokenut pelin­kehittäjä, ohjelmoija ja teknologian harrastaja, jolla on kokemusta sekä peli- että web-kehityksestä. Osaamiseni on karttunut vahvasti työn ja koulutuksen lisäksi aktiivisesta harrastuneisuudesta.

Valmistuin Kajaanin ammatti­korkea­koulusta joulukuussa 2014 tietojen­käsittelyn tradenomiksi, keskittyen peli- ja peli­moottori­ohjelmointiin.

Opinnäytetyöni käsitteli komponentti­pohjaista objektin­hallintaa pelin­kehityksessä käyttäen Entity-Component-System mallia, joka on keskeinen osa objektin­hallintaa moderneissa pelimoottoreissa. Sen voi lukea Theseuksessa.

Minulla on muutama open-source projekti GitHubissani.

Yhteydenotto

Jos haluat heittää minulle viestin, ota yhteyttä käyttäen sähköpostia.

Ansioluettelo

Ansioluetteloni (CV) löytyy täältä, sekä suomeksi että englanniksi.

Taidot & ohjelmointi­kokemus

Minulla on paljon kokemusta C++-ohjelmointi­kielestä, joka on myös käytössä työpaikkani pelin­kehityksessä. Sen lisäksi olen tutustunut useisiin eri web-kehityksen kieliin ja teknologioihin.

Alta löydät listan muutamista mainittavimmista kielistä, teknologioista ja ohjelmistoista jotka tiedän tai tunnen — huomioi kuitenkin ettei lista ole välttämättä täysin tyhjentävä.

Code

Yleistä

  • C++

    Isoin osa C++-kokemuksestani liittyy pelinkehitykseen, vaikka olenkin nikkaroinut myös sovelluskehityksen parissa. Omissa projekteissani käytän usein SFML-kirjastoa.

    Frozenbyten pelimoottori on ohjelmoitu C++:lla ja myös gameplay-ohjelmointi toteutetaan täysin sitä käyttäen.

  • C#

    Minulla on jonkin verran kokemusta C#-pelinkehityksestä käyttäen Unityä ja XNA:ta. Sen lisäksi olen tehnyt muutamia pieniä Windows Form sovelluksia.

  • Lua

    Lua kokemukseni on pääasiallisesti peräisin addon kehityksestä World of Warcraft pelille.

  • Python

    Python on yksi lempparikielistäni tällä hetkellä — se on hyvin kätevä pienten apusovellusten ja skriptien kehittämiseen, mutta soveltuu mainiosti myös nettisivujen backendiin.

  • Palvelinkonfiguraatio ja -hallinta

    Olen useamman vuoden ajan konfiguroinut ja hallinnoinut omaa virtuaalipalvelintani DigitalOceanilla. Palvelimella on perus LAMP stack Pythonin kanssa ja käytän sitä nettisivujen hostaamiseen sekä joillekin omille projekteilleni. Tämäkin nettisivu on tältä palvelimelta.

  • Git & SVN

    Käytän Gitiä versionhallintaan, mutta myös SVN on minulle tuttu.

Web

  • HTML & CSS

    Osaan myös SCSS:ää.

  • PHP

    Paljon kokemusta vanilla PHP:sta ja Laravel frameworkin kanssa.

  • JavaScript & TypeScript

    Minulla on kokemusta vanilla JavaScriptin lisäksi AngularJS:stä ja Next.js/Reactista.

  • SQL

    Olen työskennellyt enimmäkseen MySQL/MariaDB ja SQLite tietokantojen kanssa.

Ohjelmistot

  • Visual Studio

    Ensisijainen IDE, jota käytän sekä töissä että C++-harrastusprojekteissa.

  • Sublime Text & VSCode

    Molemmat ovat hyvin käteviä tekstieditoreita joita käytän kaikenlaiseen: Lua addoneihin, web-kehitykseen ja satunnaiseen tekstinkäsittelyyn.

  • Adobe Photoshop ja After Effects

  • Linux

    Suurin osa kokemuksestani on peräisin Ubuntusta ja muista Debianiin pohjautuvista distroista.

Gamepad

Konsoliohjelmointi

  • Nintendo Switch®

    Tällä alustalla työskentely on ollut mukavaa. Frozenbytellä olin osana ensimmäisissä pyrkimyksiä tuoda pelimoottori alustalle ja tein yleisiä matalan tason juttuja, kuten alustan konfigurointia, tiedostojen hallintaa, ohjaintukea (JoyConit ja Pro-Controllerit) sisältäen HD Rumble ominaisuuden.

    Toteutin myös konsolikohtaisen alemman tason net-game rajapinnan, jota käytetään online ja local wireless moninpelissä. Urakka oli iso, mutta opin myös paljon.

  • Microsoft Xbox One®

    Kokemukseni tästä alustasta oli pääasiallisesti verkko-ohjelmointia ja suojatun viestinnän toteuttamiseen sokettien kautta sekä online matchmakingin toteuttaminen moninpelaamista varten. Tämän lisäksi toteutin myös jotain muita moottoritoimintoja kuten MP4 videotoiston.

  • Sony PlayStation 4®

    Tällä alustalla kokemukseni on rajallista ja pääasiassa toteutin vain user presence instrumentaatiota ja trophyihin liittyvää työtä.

Sertifikaatit

  • Digitaalisen markkinoinnin perusteet

    Myöntäjä: Google Digital Academy (Skillshop)

    Katso todistus

  • Hakukoneoptimointi

    Myöntäjä: HubSpot Academy

    Katso todistus


The guardians of my desk

Lisää taustoista

Jo ennen kuin ikääni mitattiin kahdella numerolla tiesin haluavani alkaa pelin­kehittäjäksi ja ohjelmointi on ollut harrastukseni siitä asti. Ensimmäinen kieli jota käytin oli QuickBasic — ja hauska kuvitettu opaskirja kädessä yritin luoda useita tekstipelejä ja muita harjoitusprojekteja.

Myöhemmin törmäsin CoolBasiciin, joka oli varta vasten rakennettu Windows-pelintekoa varten. Basic-maailmassa seikkailuni ohella tapasin myös HTML ja PHP kielet ja tein ensimmäiset nettisivuni.


Vapaa-ajallani satunnaisen ohjel­mointi­projektin lisäksi pelaan video­pelejä, luen mangaa, kuuntelen musiikkia ja joskus soitan pianoa tai sävellän musiikkia.

Lempipelini ovat suurelta osin rooli- ja seikkailu­pelejä — The Legend of Zelda Tears of the Kingdom, The Elder Scrolls sarja (Morrowind on paras) ja Divinity Original Sin. Olen myös pelannut MMORPG:tä paljon, erityisesti World of Warcraftia ja Guild Wars 2:sta, vaikkakin en niitä enää nykyään pelaa yhtä paljon.

Muutes, tykkään myös pinguista 🐧🐧🐧🐧🐧

Pelit

Tässä osassa löydät pelit joiden parissa olen työskennellyt ohjelmoijana. Ne ovat järjestetty uusimmasta vanhimpaan.

Frozenbyte

Alla olevat ovat pelejä, joiden parissa työskentelin Frozenbyten palveluksessa.

Trine 5

Windows, Xbox Series S/X, PS5, Switch

Trine 5: A Clockwork Conspiracy will take Amadeus the Wizard, Zoya the Thief, and Pontius the Knight on their most action-packed journey yet!

With their reputations tarnished, loved ones in danger, and their own magical powers at stake, the Heroes of Trine must reunite to push back a fearsome Clockwork army and bring peace and justice to the land!

Trine 5 jatkoi matkaani gameplay-ohjelmoinnin maailmassa. Kuten Trine 4:ssä (lisää alempana) työskentelin pääasiassa yleisen gameplay-ohjelmoinnin parissa ilman että olisin erikoistunut mihinkään yhteen asiaan. Asioita joita toteutin ovat mm. erilaiset gameplay elementit, nettipeli-komponentit ja monia muita pieniä juttuja ja bugikorjauksia.

Starbase

Windows

Starbase is a space MMO, with a hybrid of voxel and vertex-based technologies, fully destructible environment and an infinitely expanding universe. The gameplay in Starbase is focused on building and designing spaceships and stations, exploration, resource gathering, crafting, trading, and combat. The multitude of fine-detailed simulations in the game allow the players the ultimate freedom to conquer space and unleash their creativity.

MMO-pelinä Starbase oli jotain sellaista mitä en vielä ollut koskaan ennen nähnyt ohjelmoijana. Peli käyttää rajulla kädellä muokattua versiota Frozenbyten pelimoottorista, jättäen raskaan entity-component järjestelmän syrjään ja virtaviivaistaen sen massiiviselle online pelille sopivammaksi.

Liityin projektiin itse muutamia kuukausia ennen Early Access julkaisua ja työskentelin pääasiassa uusien avaruusaluseditorin työkalujen parissa, lisäten mm. maalaus- ja dekaalityökalut. Sen lisäksi nikkaroin niihin liittyvien GUI-komponenttien kanssa sekä loin materiaalihintaikkunan, jonka myös porttasin pelin sisäisille ruuduille.

Trine 4

Windows, Xbox One, PS4, Switch

The three heroes of the best-selling adventure series are back, sent on a quest to retrieve the troubled young Prince Selius. Amadeus the Wizard, Pontius the Knight, and Zoya the Thief are joined together once again on a thrilling quest through fantastical fairytale landscapes teeming with danger.

Prince Selius suffers from intensely dark dreams and, due to his magical talents, monstrous nightmares are able to slip into reality and wreak havoc on the waking world. Amadeus, Pontius, and Zoya must find the afflicted prince and resolve the desperate situation before the world is engulfed by the Nightmare Prince’s shadows.

Trine 4 oli ensimmäinen matkani gameplay-ohjelmoinnin maailmaan Frozenbytellä. Sen sijaan, että keskittyisin alemman tason pikkujuttuihin, halusin saada mahdollisuuden tuoda näytölle jotain näkyvämpää kuin vain verkkoyhteyden virheikkunoita (katso Nine Parchments alla).

Työskentelin melko yleisesti ilman erikoistumista mihinkään tiettyyn juttuun. Toteutin mm. gameplay-efektitukia, triggereitä, pulmien viimeistelyä ja fysiikkakomponentteja kuten liikekomponentteja, ns. hihnapyöräjärjestelmiä ja paljon muuta.

Nine Parchments

Windows, Xbox One, PS4, Switch

Nine Parchments is a co-operative blast'em up game of magic mayhem. Runaway apprentice wizards seize the opportunity to complete their spellbooks by going after the lost Nine Parchments. As the would-be wizards rapidly acquire powerful new spells without learning proper safety measures, it's natural their hasty progress results in plenty of deadly accidents...

Nine Parchments oli toinen julkaistu peli aikanani Frozenbytellä ja verrainnollisesti isompi projekti kuin ensimmäinen projekti.

Työni tämän projektin parissa oli pääasiallisesti pelimoottorin kanssa nikkarointia ja toteutin vaadittavia alemman tason rajapinnan verkko-ohjelmointikomponentteja online moninpeliin sekä Microsoft Xbox One ja Nintendo Switch alustoille. Nintendo Switchillä lisäsin tuen yksittäisille JoyCon-ohjaimille ja toteutin pelikontrolleja.

Has-Been Heroes

Windows, Xbox One, PS4, Switch

Embark on an epic journey with the Has-Been Heroes, a group of legendary champions once celebrated throughout the kingdom – almost forgotten until the King has one more quest, the most epic of them all: TO TAKE THE TWIN PRINCESSES TO SCHOOL!

Has-Been Heroes projektin parissa työskentelin alemman tason peli­moottori­juttujen kanssa. Erityisesti Nintendo Switch konsoli­porttauksen alkuun­saatto oli keskeisessä osassa työtäni.

Frozenbyte käyttää talon sisäistä omaa C++-peli­moottoriaan. Koska tämä oli ensimmäinen projektini yrityksen palveluksessa käytin aikaa myös pelimoottorin ja editorin käytön oppimiseen.

Omat projektini

Nämä pelit ovat omia projektejani eivätkä liity työhöni Frozenbytellä. Osassa projekteja tein muutakin kuin vain ohjelmointia, mutta siitä tarkemmin jokaisen kuvauksessa. Videoita, kuvankaappauksia ja latauslinkkejä löydät Bluefox Games verkkosivuilta

Scyori

Windows

Is being evil hard work? Scyori does it for a living and now you can have a go at it too. There is a space station in the fringes of space that for some reason needs to be blown to pieces along with everyone on it. To make that a reality you have plasma guns and stuff.

Pyxenos pelin seuraaja, jossa samoja mekaniikkoja ja samanlainen graafinen tyyli. Ajan rajallisuuden vuoksi projekti ei aivan täyttänyt aikomuksiani useista pomo-taisteluista ja haastavasta vaikeusasteesta. Projekti on enemmänkin ns. proof of concept.

Tein pelin yksin. Loin sitä varten uuden pelimoottorin käyttäen C++:aa ja SFML ja Box2D kirjastoja, tarkoituksenani parantaa pelimoottorin käytettävyyttä aikaisemmista projekteista saatuun kokemukseen perustuen. Tein myös pelin grafiikat ja musiikin. Peli osallistui Assembly Summer 2013 gamedev compoon, jossa se sijoittu 10. sijalle.

Pyxenos

Windows

Brace yourself for a striking adventure. You, Pyxenos, must defend some place for no reason whatsoever now and for ever. Can you do it? Will the overwhelming numbers of your enemies vanquish you or shall you triumph on this day of glory? Only you can find out!

Teimme tämän pelin C++-kielellä käyttämällä jo suurimmilta osin toimivaa pelimoottoria edellisestä projektista. Tavoitteenamme oli luoda haastava ja siistin näköinen arena shooter peli ja osallistua sillä Assembly Summer 2012 gamedev compoon. Peli sijoittui 5. sijalle. Loin peliin myös grafiikat ja musiikin.

Blogic

Windows

Blogic is an arcade puzzle game where your goal is to destroy blocks by dropping them from up top to combine them into groups of four or more. Arcade-mode gives you limited time to destroy a certain amount of blocks while Puzzle-mode has unlimited time but a limited amount of moves.

Tämä projekti oli osa koulukurssia ja oli meidän ensimmäinen isompi C++ projekti. Rakensimme yksinkertaisen pelimoottorin tätä peliä varten käyttäen C++:aa ja SFML kirjastoa.

Projektin aikana kohtasimme useita sellaisia haasteita, joita C++ pelinkehitys tuo mukanaan ja meillä oli ongelmia muistivuotojen ja segfaulttien kanssa, mutta otimme niistä opin. Loin tätä peliä varten myös kenttäeditorin käyttäen HTML:ää, PHP:ta ja JavaScriptiö, jotta toinen tiiminjäsen voisi suunnitella pelin kenttiä ja pulmia.

Websivut

Loin nämä websivustot joko itselleni tai freelancetyönä. Ne ovat järjestetty uusimmasta vanhimpaan.

Fanisivusto eräälle mobiilipelille. Sivusto listaa erilaisia peliin liittyviä taulukoita ja statistiikkoja. Peli on sittemmin suljettu joten sivusto ei enää saa päivityksiä.

Tämän sivuston luonnissa käytin erityisempää taktiikkaa backendille Pythonilla. Sen sijaan, että sivusto renderöitiin dynaamisesti, sisältö päivitettiinkin kerran päivässä käyttäen Jinja2 templateja ja renderöidyt staattiset sivut palveltiin osana AngularJS single page web applikaatiota.

Kattava Suomen adventti­kirkon raamattu­opinto­sivusto, jossa käyttäjät voivat rekisteröityä suorittamaan kursseja ja testejä.

Sivusto sisältää täyden ylläpito­paneelin kurssien, kyselylomakkeiden ja muiden sisältösivujen luontiin sekä tiedoston­hallintaan. Sivusto käyttää Laravel backendia ja AngularJS:ää ylläpito­paneelissa.

Kajak Game Development Lab

Toinen koulun nettisivu. Loin hieman kehitty­neemmän sisällön­hallinta­järjestelmän käyttäen Laravelia ja AngularJS:ää. Sivuston ulkoasu tehtiin yhteisyössä toisen suunnitelijan kanssa, mutta hoidin itse kaiken backendissä sisältäen ylläpitopaneelin.

Verkkosivu omalle pelitalolleni tai miksi sitä kutsuakaan ja siellä jaetaan tekemiäni pelejä. Sivustoa ei ole päivitetty vähään aikaan, koska olen muissa pelin­kehitystöissä.

Parkanon Lukio

Loin ulkoasut ja sisällön­hallinta­järjestelmän. Tavoitteena oli, että koulu voi päivittää sisältöä itse. Ylläpitopaneeli sisältää simppelin WYSIWYG editorin ja sivunhallinta­paneelin.

Netpal

Netpal Oy palkkasi minut luomaan eräänlaisen paikallisen Youtuben Parkanon kaupungille. Palvelussa pystyi jakamaan videoita paikallisista tapahtumista ja käyttäjät voivat ladata palveluun myös omia videoitaan. Sen lisäksi tein myös satunnaista graafista suunnittelua ja videoeditointia.

Musiikki

Toisinaan saan inspiraation säveltää musiikkia tietokoneellani. Muista tarkistaa musiikkini SoundCloudistani ja vanhempaa kamaa löytyy myös Mikseri.netistä.

Musiikkiholvistani löydät kaikista ajantasaisimman arkiston uudesta musiikistani, käy katsomassa osoitteessa vault.sonaza.fi (englanniksi).


Pianosävellykset

Ylläolevan musiikin lisäksi minulla on muutamia alkuperäissävellyksiä pianolle, joiden nuotit voit löytää alta PDF muodossa.