Juippi – Blogi ohjelmoinnista

"Life? Don't talk to me about life!" — Douglas Adams

CatchIt

without comments

After a while, I finally decided to learn something about Ogre. I created simple game, which doesn’t do anything fancy but meanwhile was very interesting project for me. Also it is made in 5 days (including installing OgreSDK).

Artwork for the game is made with Blender and uses Ogre Mesh Exporter and Ogre Scene Exporter. In Ogre scene is then loaded with new DotScene loader. Player and cubes doesn’t belong to scene, because in code there is own classes to handle those meshes.

I got one big problem, because I couldn’t get anything text rendered to screen. Even when font and overlay was correctly defined. This is bug in Ogre (1.7-series), but it took one whole day to figure that out.

And word about requirements:

Because It’s made with Visual Studio 2010 it needs newest DirectX and Visual Studio c++ Runtime which you can download on following links:

Microsoft Visual C++ 2010 Redistributable Package (x86)

Newest DirectX you probably have, but I will provide link, just in case:

DirectX End-User Runtime Web Installer

And finally download for the game:

DOWNLOAD

Written by Teijo Mursu

September 2nd, 2010 at 11:36 am

Movie Theater

with 3 comments

This is entry for Experimental Gameplay Project: Zero buttons and only mouse movement was allowed input from player. Also I made this game in 2 days, so you shouldn’t expect too much from it.

This game is simulator for movie teather and covers few aspects of it. I can’t tell actual idea, because it would spoil too much, but  I can serve one screenshot:

DOWNLOAD

Written by Teijo Mursu

August 4th, 2010 at 1:58 am

Involved

without comments

It was just another sunday, when I woke up at 3am and got an idea for game that is important for me, and I wanted to share that for every developer and why not for every casual player. Basic idea of Involved is creating game, but rather that giving direction which kind of game it is, player tries to create community around the work-in-progress game. As many may guess, this is my first ‘prototype’-game, but I created this as a prototype, because I wanted somekind of timeline for this project. And I’m really proud of that I really made it.

Because I know that many of you don’t really read README-files, I just copy the content of that file here:



 +===========================================================================+
 |                                                                           |
 |                                  INVOLVED                                 |
 |                                                                           |
 +===========================================================================+

 Involved is a game where goal is to gather as much as people as you can.
 Every time you 'advertise' your in-progress game you will loose a part from
 your own people. That's because it happens in real life. It may happen as
 natural disintersts for the project or people just starts to hate you,
 because you are shouting your project all over the internet.

 Also, I must remind you as a game developer that this is just one side of devel-
 oping games and creating community around it is just a one hard task to do.

    LICENCE & COPYRIGHT

 Because nature of SDL and it's community, many libraries are licenced with
 LGPL and that's why sources of this game is published at:

http://juippi.kapsi.fi

 As many may guess. I didn't make this game from ground zero and there were a lot
 of libraries to use and I must to thank everyone who are make my life a bit easier:

  SDL
  SDL_image
  SDL_mixer
  SDL_ttf
  SDL_gfx

 Also I pick my sound samples from freesound.org:

  12657 Whoosh Swish 02 by mich3d
  67471 m67 fragmentation grenade explosion 2 no echo by qubodup

 And finally my favorite place for Creative Commons music:

  Jamendo.com

 Background music:

  Silence - L`autre endroit - Cellule

 All tags should be in place (even in sound effects).

DOWNLOAD

Finally, there is download link: Involved-release-0.1-1.zip
And as I promised, here is sources of the game: Sources

Edit: I almost forgot to mention controls, even though they are pretty simple:

WASD: Movement in marked area
Mouse button: Plants advertise to another community

Written by Teijo Mursu

July 29th, 2010 at 5:15 pm

What I’ve Done

without comments

Tähän väliin voisi kerätä pientä muistilistaa:

1. Jotain uutta

Tämä on se pelin kehityksen kulmakivi. Se mikä motivoi, Se mikä jaksaa innostaa, se mihin pitää uskoa. Ei lähes ketään kiinnosta pelata Tetristä, koska se ei tuo mitään uutta tai mullistavaa. Tämä uuden kehitys ja luominen on todella monien yritysten toimintamalli.

Tätä aihetta varten on myös oma pelien prototyyppien kehittämiseen tehty sivusto Expreimental Gameplay Project, johon olen tainnut viitata jo aikaisemmin. Suurin osa ideoista tottakai on täysin käyttökelvottomia testauksia, mutta se onkin juuri se idea. Joskus sieltä pulpahtaa todellinen helmi esiin ja saadaan peli täysin uudenlaisessa idealla.

Tämä konsepti on jotenkin vaikea selittää tai edes ymmärtää, mutta onneksi satuin törmäämään Link-Dead kehittäjän tekemän esityksen:

Ja toinen osa:

2. Kirjoita mahdollisilman vähän

Mitä enemmän kirjoitat koodia, sitä enemmän siinä on mahdollisuuksia olla bugeja. Myöskin käyttämällä valmiita kirjastoja voidaan kehitystä nopeuttaa, koska tärkeinpänä asiana ei todellakaan ole se ohjelman nappi, jonka koodaamiseen meni pariviikkoa vaan ohjelman toiminta ja idea. Lisäksi korkeamman tason kirjastot helpottaa mm. yhteensopivuuksissa ja suorituskyvysssä, koska algoritmit on nopeita ja luultavasti niiden kirjoittajat tietää matalemman tason kirjastoista (esim. win32 tai OpenGL/DirectX) enemmän.

Tärkeimpänä asiana ohjelmassa on se mitä se tekee, ei miten. Tällä ideologialla mennään tuoreimmassa projektissa, joka ainakin yrittää käyttää kaikkea mahdollista valmista. Väliotsikosta muistuu mieleen QT:n ‘mainoslause’: “Do more, Code less”, joka kuvastaa hyvin koodaamisen ideologiaa, sen lisäksi, että QT on oikeasti hieno kirjasto.

Tästä kumpuaa myös ns. prototyyppien teko, jonka yksikertainen tavoite on tehdä mahdollisilman vähällä mahdollisilman toimiva, jotta resursseja ei hukata toimimattomaan ideaan, mutta samalla saadaan tietää toimiiko idea. Valitettavasti itse en osaa lainkaan tehdä prototyyppeja, ehkä osittain johtuen luonteesta, joten idean toimivuudestahan ei ole ainakaan vielä minkään näköistä kuvaa.

3. Opi kaikesta aikaisemmasta

Ehkä vaikein toteutettava, mutta vähitellen alan huomaamaan erilaisia toistuvia kuvioita (patterneja, kuten design patternit), mutta myös erilaisempia koko ohjelman kattavia ratkaisuja.

Tästä hyvänä esimerkkinä XNA:n esimerkki Game State Management, jota käytettyäni ihastuin täysin. Tiedän hyvin, että se ei ole täydellinen ja sisältää rajoituksia, joita en välttämättä haluaisi olevan, mutta silti on tähän mennessä parhain vastaan tullut vaihtoehto minun tarkoituksiin.

Vaikka RandomCar ei menestys ollut, eikä tule olemaan, se ei tarkoita, etteikö ohjelmointi silti olisi todella hauskaa ja juuri nyt on sellainen *heureka*-hetki, jolloin todella huomaa hyötyvästä aikaisemmista kokemuksesta. Nimettömään projektiin on myöskin tulossa lähes vastaavanlainen järjestelmä pelitilanteen ylläpitämiseen, mutta hyvin erikoistuneella ratkaisulla, joka ainakin omasta mielestä istuu peliin täydellisesti (enkai minä sitä muuten tekisi, enhän?).

Myöskin Bubble Bouncing oli hyvin opettavainen, jota tulee mietittyä yhä uudelleen ja uudelleen. Itse moottorissa ei ole mitään vikaa, mutta käytännössä kaikki on tehty käsin. Tämä johti todella moniin suorituskyvyn ongelmiin, niin prosessorin kuin näytönohjaimen kautta. Toisena suurena ongelmana näen ohjelman rakenteen. Tämä on siis tehty aikana, jolloin minulla ei ollu mitään käsitystä siitä, millainen ohjelma tai peli rakenteellisesti on ja sen huomaa hyvin helposti.

4. Opi muilta

Suurin suosikkini, koska saavuttamiseen ei periaatteessa tarvitse tehdä mitään. Aika kuluu paljon erilaisia foorumeita ja artikkeleita lukien erilaisista projekteista kuten. Soldat:n tekijöiden tulossa oleva Link-Dead-pelin kehitysblogi, GameDev-artikkelien ja monen muun enemmän tai vähemmän ajankohtaisen sisällön parissa, joka liittyy suorasti tai epäsuorasti peleihin.

Lisäksi tietenkin näin pelien kehittäjänä on oikeasti tärkeää pelata pelejä. Ehkä tärkeimpänä aspektina itse pelin toteutus. Mikä pelistä tekee hauskan pelattavan? Mitä pelistä on jätetty pois, jotta pelistä tulee pelattava? Lisäksi huomio kiinnittyy joihinkin yksittäisiin pelimekaanisiin ratkaisuihin, jotka nostaa yllättävän paljon pelin ‘tasoa’.

Valitettavasti oikeasti hyvät pelit on harvassa. Useimmat pelit toistaa vanhoista peleistä tuttua kaavaa erilaiseilla karkeilla, koska ei uskalleta tuoda mitään uuta, koska se voi myös epäonnistua. Tästä syystä suosin Indie-pelejä ja myöskin tästä syystä Trinestä pidin todella paljon.

Lopuksi

Loppuun vielä aiheeseen liittyvä video, joka kertoo aika hyvin näin koodaajan näkökulman pelien ja ohjelmien kehityksestä:

Written by Teijo Mursu

July 17th, 2010 at 12:04 am

Posted in ohjelmointi,sekalaista

Tagged with

Microsoft Visual C++ 2010 Express == Awesome

without comments

Hieman petyttyäni Microsoft Visual C++ 2008 Express Editioniin, on uusi 2010-versio huomattavasti parempi. Ehkä uudistukset ovat hieman pintapuolisia, mutta ainakin näin ensi kokemuksen perusteella todella oleellisia seikkoja.

Aloitusruutu

Ihan pelkästään aloittaen oletusasetuksista. Kaikki tarvittava on laitettu yhdelle riville (Itse asiassa kahdelle, mutta näytön resoluution salliessa siirsin toisen ylemmäs). Toisekseen, Recent Projects-lista on huomattavasti selkeämmällä ja keskeisellä paikalla.

Kolmannekseen itse teema, ja ikkunat. Teema on hillitympi, ja oletuksena näkyvissä on vain välttämättömimmät ikkunat.  Uutisia kohtaan on tullut todella mielyttävä päivitys, sillä nyt käynnistäessä ei pompille silmille läjä turhaa tekstiä, vaan näytetään uusimmasta uutisesta pätkä, ja muista otsikot. Lisäksi aloitusruudussa on käytetty paljon tyhjää tilaa, jota 2008:ssa käytännössä ei ollut.

Ihan vain verrokkina, seuraavassa kuva vanhasta versiosta:

Microsoft Visual C++ 2008 Express Edition:ssa tulee läjä tekstiä vastaan

Vanhassa versiossa erinäköisiä tabeja on ympäri IDEÄ. Lisäksi Recent Projects on hieman pienempänä kulmassa, joka on aina tuntunut vähän ihmeelliseltä paikalta sille. Pikku yksityiskohtana mainitakseni järkyttävän ruman ulkoasun, jossa gradiantteja on nakeltu sinne tänne, näyttääkseen hienolta. Lisäksi ulkoasu on ‘sinisen harmaa’, eli todella häiritsevä, kun esim. tilarivi on normaalilla ‘ruskean harmaalla’. Tästä syystä pidän todella paljon, että 2010 on yksivärinen, taustaa lukuunottamatta.

Toinen mainittava seikka ulkoasullisesti, on tabit. Uudessa versiossa tabit on paljon huomaamattomempia, kun ei-aktiivisten tabien tekstit ainoastaan näkyvät (valkosella tummaa taustaa vasten), kun taasen ainoastaan aktiivinen tabi piirretään “tabina”.

IntelliSense toiminnassa. Funktioiden kuvaukset luettavissa ihan hyvin, jopa Doxygen-dokumentaatioilla.

Itse koodamista helpottavia on parantunut IntelliSense, eli juurikin se komponentti, joka hoitaa mm. automaattisen täydennyksen. Uudistuksena automaattitäydennys koskee myös #include-directiivejä, jotka tuotti suurimman pettymyksen 2008:ia käyttäessä.

Pelkkää hyvääkö?

Ei todellakaan. Yllättäen kun kyse on Microsoftin tuotteesta, on kääntäjä mitä ihmeellismpi. Miksei virhe ilmoituksia monien vuosien kehityksen jälkeen ole saatu C# Expressin tasolle? Miksi kaikki ohjelmat käännetään niin, että ne vaativat käyttäjältään Microsoft Visual C++ 2010 Redist-paketin asennusta? Tietääkseni, MiniGW (aka GCC) ainakin kääntää niin, ettei kyseistä pakettia vaadita.

Toinen hupsuus liittyy kirjastoihin. Tarkemmin ottaen LibBoost ja OGRE kirjastoihin, koska näitä tarvitsen käytännössä pakosti kehittääkseni yhtään mitään. LibBoostia varten joutui hakemaan täyden LibBoost-paketin ja kääntämään itse, joka oli sinällänsä suhteellisen kivuton homma.

Mutta sitten tulee OGRE, joka kyllä kääntyy ja linkittyy täysin oikein, mutta käynnistyessä sanoo “Sovellusta ei voitu käynnistää oikein”. Pitkän selvittelyn jälkeen OGREn kirjastot ei ole yhteensopivia MVSC++ 2010:n kanssa. (Miksei, miksi kirjastot on ylipäätänsä IDE-kohtaisia?, tai edes kääntäjäkohtaisia?)

Loppuen lopuksi haettaessa uuden version Ogresta ja samalla libboostista (joku ihmeellinen jämä-versio tulee Ogren mukana), ja poistamalla olemassa olevat DLL-tiedostot ja laittamalla uudelle versiolle tarkoitetut tiedostot paikallee, suureksi yllätyksekseni kaikki toimi.

Itse asiassa kaikki toimi jopa niin hyvin, että hakiessani CEGUI:n, sain sen pienellä kikkailulla toimimaan Ogre:n kanssa täysin.

Täydellisen listan uudistuksista löytää MSDN:n sivuilta.

Written by Teijo Mursu

May 4th, 2010 at 2:31 pm

Stats by WP SlimStat