lauantai 18. huhtikuuta 2009

Projektin päätös

Terve,

Pahoittelen tätä viivästymistä. Päätin että en todellakaan jaksa tuhlata aikaani tämän surkean koodin paikkaamiseen ja juonen kehittelyyn.
Pelissähän on siis jossain määrin toimivina ominaisuuksina:
Tilepohjainen grafiikka ( uusien tilejen lisääminen helppoa )
Kartan luku tiedostosta ( Helppo ja visuaalinen kartta muoto )
Questit ( Ei niiiin helppo lisätä uusia, mutta onnistuu )
Aseet ( Sama kuin questeissa )

Blaa blaa.. Kaiken näköstä siellä on, mutta jos jotain olen oppinut tästä projektista ( sen lisäksi että opin julmetusti xna:sta ), niin se on kyllä ollut suunnittelun tärkeys. Seuraavan projektin tulen kyllä suunnittelemaan kunnolla, jotta oppisin luomaan fiksumpaa koodia.

Pistän huomenissa tulee Lähdekoodia, jos se ketään kiinnostaa.

tiistai 7. huhtikuuta 2009

18. ja 19 Tunti

Nyt on viikonloppu vietetty ja maanantaikin meni ilman mitään päivityksiä. Tänään kuitenkin väsäsin alkeellisen kaupan ja questin. Homma on kuitenkin siten tehty, että periaatteessa tavaroita ja questeja on helppo lisätä, mutta se jää nähtäväks.

Uusimman version pelistä voi ladata täältä! Muistathan, että sinun koneellasi tulee olla asennettuna ainakin .Net framework 2.0, ehkä jopa 3.5 ja Xna Redistributable härpäkkä.

Peli on nyt siinä vaiheessa, että enempää en ominaisuuksia oikeastaan voi laittaa, koska aika loppuu kesken.
Viimeiset tunnit käytän grafiikoihin, uusiin mappeihin ja juoneen :P
Koitan saada vielä sen tehtyä, että mappia voi vaihtaa tuosta noin vain.. ehkä lisään muutaman tavaran, mutta katotaan mihin aika riittää.
Veikkaisin, että huomenna on peli valmis.

perjantai 3. huhtikuuta 2009

Pieni tauko

Moro,

aattelin pitää viikonlopun vapaata koodaamisesta, koska meille tuli vieraita, joten ei oikein pysty koodailemaan. Mutta sunnuntaina tai sit maanantaina jatketaan.

-Riku

keskiviikko 1. huhtikuuta 2009

14. ja 15 Tunti

Nyt alkaa näyttämään hyvältä. Taisteleminen toimii, joskin alkeellisesti, mutta toimii. Mobit kuolee ja tappelee vastaan. En voinut vielä tehdä hirveän monimutkaista taistelusta, koska tavaroita ei ole luotu. Esim yhdenkäden miekka lyö nopeampaa, mutta vahingoittaa vähemmän. Tällä hetkellä kaikki lyö 1/2s ja damage on 2d6 ( eli 2x random 1-6 ).

Pelissä on nyt taustamusiikkia, jonka löysin soundboard.com:ista. Kyseessä on 70 luvun pornofilmistä napattu mahtava biisi :)
Samalta sivulta kaivoin esiin myös askel äänet ja miekan kalinat.
Askelista siis kuuluu ääni ja taistelusta myös.
Aikaa kului tuohon taistelun ajoittamiseen, että saan säädettyä, koska on kenenkin vuoro lyödä, siten että jos toinen on nopea, se voi lyödä useammin kuin se hidas kaveri.

Seuraavaksi käyn tavaroiden kimppuun. Luon joitakin perus tavaroita, kuten potionit, miekat, kirveet, armorit. Sitten voin tehdä lootti systeemin ja sen jälkeen NPC:n jolta saa questeja jne.

Tämmöstä tänään. Peli etenee siis ihan hyvää vauhtia, huolimatta että kirjoitin lähes kaiken uudelleen. Huomenna tai ylihuomenna luultavasti päättyy tämä projekti.

13. Tunti

Kello on 01:18..
Tein ukon ja mobin testikuvasta 4 kuvaa ( ylös,alas,vasen ja oikea ), muutin piirtämistä siten, että riippuen suunnasta, niin piirretään eri kuva.
Lisäsin ääniä, jotka oli todella helppo lisätä. Tausta musiikki soi ja askelista kuuluu äänet. Olin oikeasti yllättynyt, kuinka helppoa äänien lisääminen oli.
Koodi on jotain tän tapaista:

SoundEffect omaEfekti;
omaEfecti = Content.Load("EfectinNimi");
omaEfecti.Play();

Ei ollut paha homma.
Ja %&¤#? sentään.. huomaa että kello on paljon. Ihmettelin, että minkä takia, aika simppeli functio, ( joka käy kartan läpi ja luo tarvittavan määrän mobeja ja antaa niille koordinaatit, jotta engine osaa sit piirtää ne tarvittaessa), sijoitti mobit päin persettä..
Käytin niiden luomiseen normaalia 2x for looppia ja sijoitin for-muuttujat suoraan x/y koordinaateiksi juuri luodulle mobille.. However.. Ne muuttujat oli väärin päin. Etin ja ihmettelin vikaa, kun mobit spawnaa ruudulle kohtalaisen hassuun järjestykseen ja ratkaisu ongelmaan oli muuttujat jotka oli vaihtaneet vahingossa paikkaa.. Pikkasen sapettaa.

Mutta mutta, huomenna sit taistelun ja questien? kimppuun.

tiistai 31. maaliskuuta 2009

Tunnit 8-12

Tulihan sitten käytettyä nekin tunnit.
Kirjoitin suurimman osan ( 95%) koodista uusiksi. Koodi on nyt paremmin järjestetty ja muutenkin loogisempi. Huolimatta että siinä meni monta tuntia, niin olen tyytyväinen tän hetkiseen toimintaan. Sain jopa "saumattoman scrollauksen" toimimaan. Eli huolimatta siitä, että liikutaan tile kerrallaan, niin liikkuminen tapahtuu nykimättä, liukuen siis.

Törmäyksen tunnistuksen kanssa oli vähän ongelmia ja joudun muuttamaan kartan muotoa, jotta hommat saa nopeammin toimimaan, niin kuin haluan.

Lisäsin myös ensimmäisen vihollisen ja törmäystarkistuksen siihen. Taistelu funktioita olen jo kirjoitellut, mutta ei tähän rumbaan kerennyt nyt. Huomenna luulisin saavani taistelut ja viholliset toimimaan. Itse asiassa, päätän nyt, että se on seuraava minkä kimppuun käyn.


Puoliaika, niin se aika vain hupenee. Peli on vielä kaukana pelattavasta, mutta toivoa on. Nyt pitäis kaiken olla helppoa lisätä, koska uskokaa pois, koodi oli aivan hirveetä :)
Seuraavina tunteina aion luoda vihollis interaktiivisuuden, sitten lootti ja inventory järjestelmä.
Ehkä sitten tulisi hyvin npc joka myy/ostaa kamaa/antaa questeja. Questi järjestelmä, varmaan jokin simppeli esim. .txt jossa on questin nimi, jokin tyyppi ( kerää, tapa ) ja määrä. En usko että on vaikeata, mutta katsotaan.

En ole vielä kokeillut, mutta luulisin, että "Engine" kykenee useaan mappiin, eli voin lisätä karttaan merkin, jonka päälle astuttaessa siirtyy toiseen karttaan. Näkis vaan :D

Mutta joo,
Uusi testi versio on taas upattu ja voitte sitä näppäillä jos siltä tuntuu.
Tarvitset .NET Framework 3.5 Jotta se toimii ( luulisin )

maanantai 30. maaliskuuta 2009

7. Tunti

Nyt on vihollisiakin. Nyt alkaa tuntumaan jo "suunnittelemattomuuden taakka" harteilla.. Koodi on täynnä virityksiä, kaikki on kirjoitettu suoraan koodiin. Enään en alusta aloita tätä projektia. Ehkä tällaisen voisi pistää uudestaan pystyyn, koska seuraavalla kerralla voisi sitten suunnitellakin jotain.

Mutta niin, loin muutaman uuden luokan. BaseCreature, player ja mob. Bases on kaikki yhteiset ominaisuudet, esim. voima, ketteryys, miekankäyttö, nimi jne.

Ominaisuuksien lisääminen tähän koodiin, on vähintäänkin mielenkiintoista.. Koodi on täynnä käyttämättömiä muuttujia ja funktioita, sekä ihmeellisiä listoja ja olioita.

Mutta kyllä mä tästä pelin saan vielä :)

4. Ja 5. ja 6.Tunti


Sinne meni sitten nekin tunnit..
Tuli tapeltua kahden aivan mitättömän asian kanssa.
Ensiksi yritin uudistaa kartan piirtoa. Failed
Sitten yritin liikuttaa ukkoa suhteessa aikaan, ei suhteessa FPS.. onnistuin viimein.
Ukko ainakin liikkuu, tai ukkoa jäljittelevä kissan hanurista karannut oksennuspuikko. Mutta liikkuu.
Versio 0.1.0:
Törmäyksen tunnistus lisätty.
Hahmon liikkuminen lisätty.
Sisäisiä muutoksia kartta ja törmäys luokissa.

Nyt on 6 Tuntia mennyt itse koodaus aikaa. Pahin vaihe on mielestäni nyt takana. Tästä pitäis helpottuu hommien. Seuraavaksi varmaan tulee viholliset/ystävät, eli NPC:t. Tappelusta en tiedä vielä, että miten sen hoitais? Ehkä Zeldamainen miekka ja potionit. Luulis niil selviävän. Questejä? En tiedä, se olis aika hienoa. Uusia tilejä, isompi kartta, ehkä "Fog of war".

Ensimmäinen julkaisukelpoinen testidemomikälie on ladattavissa täältä!.

Koittakaa muistaa, että tämä on ensimmäinen graafinen peli ( CoolBasic poisluettuna ), mitä olen tehnyt ja kehitetään ilman sen kummempaa suunnittelua.

Ominaisuuksia saa ehdottaa ja otan haukkuja ja kehuja vastaan kommenttien muodossa.

Hyvät päivän jatkot,
-Riku

sunnuntai 29. maaliskuuta 2009

2. ja 3. Tunti


Noniin, nyt saa kuvan piirrettyä ruudulle.
Grafiikan piirtäminen ruudulle ei sinänsä ollut vaikea homma, mutta ongelmia tietenkin tuli..
Tilet on helppo piirtää ruudulle, jos on vain yhden ruudun kokoinen rata, mutta kun halutaan 10*10 kokoinen peliruutu ja mahdollisuus muuttaa sitä, niin ongelmia alkoi ilmetä. Nullexeptionia pukkas ja kovaa vauhtia, mutta niistä selvittiin sitten. Koska ukko on aina keskellä ruutua, niin sijainti 0,0 aiheutti hetken aikaa ongelmia. Päätin, että negatiiviset luvut ja luvut jotka ylittävät kartan leveyden, piirretään mustalla tilellä.


Sain supistettua piirto komennon yhteen kätevään functioon. TEngine on siis tile enginen ilmentymä ( olio ).
TEngine.DrawMap(spriteBatch, testx, testy, 12, 12);

Tällä hetkellä engineen voi lyödä niin monta erilaista tileä kuin tarvii. Kaikki tapahtuu helpoilla funktioilla, jotka voisi periaatteessa ulkoistaa täysin, jotta engineä voisi käyttää ilman "hard coding":ia. Peli lukee tekstitiedoston string[] taulukkoon talteen. Tällä hetkellä kartassa on vain 'w' ja '.' merkkejä, joista 'w' on seinä ja '.' on lattia. Merkiksi kelpaa kaikki ASCII merkit ja isot ja pienet erotellaan, joten kartoissa voi olla monelaista tileä.
Tile on myös oma luokkansa, kuten aikaisemmin kaiketi mainitsin. Tilelle voi antaa "IsWalkable" muuttujaan joko "true" tai "false", riippuen voiko sen päällä kävellä, sen jälkeen engine hoitaa törmäys tunnistuksen automaattisesti.

Mutta, siinä kaikki tällä kertaa. Huomenna varmaan saan aika monta tuntia tehtyä tätä, joten jotain kokeiltavaakin saattaa tulla. En mene nyt sen kummemmin lupaamaan, mutta yritetään.



1 Tunti

Ensimmäinen tunti on nyt takana ( blogin aloitin kyseisen tunnin jälkeen, joten siksi nämä postaukset tulevat yhteen putkeen ).

C# ja Xna on valmiiksi asennettu, joten niiden asennusaikaa ei huomioida tässä.

Aloitin luomalla luokat "TileEngine" ja "Tile". Jokainen erilainen tile on oma yilmentymä tästä luokasta ja jokainen tile tyyppi ( Seinä, lattia jne ) saa omat ominaisuudet, esim. voiko sen läpi kävellä.
Tile engine huolehtii kartan piirtämisestä. En halua että koko kartta näkyy kokoajan, vaan että voin näyttää vain ne 10-15 tilee pelaajan ympärillä.
Se huolehtii myös kartan lukemisesta ja törmäys tarkistuksista.

Loin myös 2 malli tileä, jotta voin kohta puoliin testata kuvan luontia.

Äkkiä se aika menee..

Suunnittelu vaihe

"Game Design Document"

Tämä on todellakin dokumentti isolla D:llä. Eli mietin, että minkälainen pelistä tulisi ja miten ajattelin ajan käyttää, että on jotain tavoitteita.

Sankari seikkailee luolissa, kohtaa vihollisia, kerää parempia varusteita ja tappaa lopparin.
Siinäpä se, yksinkertaisuudessaan. Mitään ihme hilavitkuttimia on turha miettiä, 24h on lyhyt aika sellaiseen. Yksinkertaiset grafiikat ( muuta saakaan aikaseksi ).

1-8H:
Luolaston luonti, tekstitiedostosta, sankari jota voi liikuttaa, törmäyksen tunnistus.
9-12:
Esineet ja interaktiivisuus.
13-16:
Vihollisia ruudulle, taistelut, perus "AI"
17-20:
Käyttöliittymä
21-24:
Varattua aikaa grafiikoille ja muille osioille

Haluan huomauttaa, että peli todellakin rakennetaan "hot seat" tyyliin, eli sillä istumalla luodaan ideat ja porskutetaan eteenpäin näillä eväillä.

Projektin idea ja sen toteuttaja

Tervehdys,

Olen 26 vuotias harrastelijakoodari. Olen rääpinyt kasaan joitakin harjoituspelejä ( Pong, konsoli rpg jne ), mutta en ole koskaan saanut mitään valmiiksi, aina tulee uusi projekti, joka on parempi kuin edellinen.. Mutta kaikkia niitä yhdistää se tosiasia, että ne ovat jääneet ideaksi.

Tossa muutama päivä sitten, törmäsin mielenkiintoiseen artikkeliin, jossa kokenut pelialan ohjelmoija loi roolipelin, käyttämällä 0$ ja 40h aikaa. Idea oli mielenkiintoinen ja kilpailuhenkisenä ihmisenä, ajattelin pistää paremmaksi. 24h aikaa ja pelattava peli. En yritä tehdä tätä vuorokaudessa, vaan 24:n koodauksen aikana.

Säännöt (Omia ja vain itseäni varten)
Kaiken pitää olla ilmaista -> IDE ja grafiikka, kaikki.
Ei mitään valmiita pelimoottoreita
24 tuntia aikaa ( Sen jälkeen peliin ei saa lisätä ominaisuuksia enään, mutta bugit saa korjata ).

Valitsemani työkalut:
C# Express 2008
Xna 3.0
Paint .Net

Valitsin C#:n kieleksi, koska se tuntuu mukavalta ja monipuoliselta.
Xna:n koska se on siististi kool :P

Mutta anyway, aika aloittaa hommat.
Wish me luck,

Riku