2010 m. spalio 26 d., antradienis

Evoliucija (atnaujinta)

Evoliucija šiuo atveju dviem prasmėm - 1) evoliucionuoja žaidimo minotaurai, 2) tobulėju aš. Antru atveju čia nėra evoliucija, bet vis tiek gražiai skamba. Dabar išsamiau...

Minotaurai ir vėl gali užsiimti kažkokia veikla tarp varžybų labirinte: prekiauti, treniruotis, kviesti kitus minotaurus į dvikovas.

Kažkada prieš gerą mėnesį jau buvau padaręs šiokį tokį minotaurų "intelektą", bet jis manęs netenkino (iš programavimo pusės), nes nebuvo universalus (moduliarus, jei toks lietuviškas žodis yra). gamedev.lt forume gavau nuorodą į http://en.wikipedia.org/wiki/Decision_tree, tačiau turėjau ir savo idėją.

Planavau padaryti minotaurų mąstymą paremtą poreikiais ir numatomais atlygiais už atliktą veiksmą. Tokiu atveju jų elgseną būtų be galo lengva keisti. Įsivaizduoju, kad kiekvienas veiksmas būtų paieškos grafiko elementas, turintis savyje informaciją apie būtinus jam įvykdyti resursus ir resursus, kuriuos įvykdžius veiksmą gauna AI. Dėja, kol kas arba mano programavimo žinios per menkos, arba tiesiog neužteko užsispyrimo, bet iki galo aš šitos idėjos neišvysčiau.

Grįžau prie decision tree ir staigmena! Pats veiksmų medis ėmė man patikti jau po kelių jo rašymo minučių, dar po 10-15 min jis buvo baigtas. Turint uomenyje, kad tokio fiksuoto daikto implementacija neturėtų sudaryti sunkumų (o su savo veiksmų paieškos algoritmų aš prasėdėjau kelias dienas), šiuo atveju, kai rankos niežti piešti, čia WIN. Po kelių prisėdimų (bendro laiko neskaičiuoju) šitą decision tree reikaliuką baigiau, ir prie pradinio plano reikėjo pridėti tik vieną vienintelę grandį. Paveiksle neparodyta, bet prieš bandydamas treniruotis minotauras tikrina, ar įvykdyti visi prerekvizitai. Šitas dalykas praktiškai nieko nepakeitė, dabar minotaurai bent jau žino, kodėl jų akademijoje nemoko.:) Pradinis variantas atrodo taip:


Dariau su Microsoft Word ("puikus" pasirinkimas šiam tikslui :)), todėl atrodo taip neįprastai. Kiekvienas klausimas - minotauro implementacijos klasės metodas, be kitko kaip parametrą gaunantis koeficientą, nuo kurio priklauso atsakymas. Tie "decrease all weight coefficients of branch" reiškia, kad visi konkrečios šakos koeficientai pakeičiami, kad būtų mažesnė tikimybė pakartoti tokį pasirinkimą - tai yra apsauga nuo amžinų ciklų.

Antra mano darbų darbelių dalis - tęsiu darbus prie žaidimo art'o. Kol kas nedaug pasistūmėjau, bet "postūmių kokybė" man vis labiau patinka. Šiuo metu be kitų piešinių bandau keisti minotaurų įgūdžių paveikslėlius. Pvz.:


Iki darbų, į kuriuos pažiūrėjęs sakyčiau "Mmmmmmm", dar toli, bet dabar esu jau visą galvą aukščiau už tą Antisepthic, kur buvo prieš mėnesį ar du.




Štai tokia ta evoliucija...

Atnaujinta:
Šiaip jau laikas miegoti, bet kažkaip minotaurai užvaldę mano protą.:)
Nauja "vaikščiojančio kilimo" versija:

Mažesnis paveiksliukas, tai tai, kaip turėtų atrodyti žaidime. Atspėkite, vaikai, ką daro minotauras?:)

2010 m. spalio 21 d., ketvirtadienis

Veikėjai: Prekeivis

Štai šitas seniokas prekiaus su minotaurais žaidime(mano vakar vakaro laisvalaikis):
Jis nelabai patenkintas vieta, į kurią pakliuvo, bet uždirba neblogai, dėl to dar ir nepabėgo iš šaltų ir drėgnų urvų, kuriuose apsigyveno labirinto arenos kovotojai.

Kritika, liaupsai, pasiūlimai?..:)

2010 m. spalio 19 d., antradienis

Darbai vyksta

Sunku ir sugalvoti, kaip pavadinti tokį įrašą, kai tiesiog nori parašyti, kad kažką darai. Kaip ir nieko išsiskiriančio, bet vis kažkas. Be to, reikia pavadinimo, kuris dažnai kartojamas atrodytų "savo vietoje". Į galvą lenda angliškas "progress report".:)

Taigi savaitgalį sukelinėjau pastarųjų poros savaičių naujoves į žaidimą - animacijų sistemą ir tile'us. Štai čia nupaveikslavau, kaip šiuo metu atrodo draw() funkcijos run būsenoje rezultatas.;)

Matome bėgančius minotaurus, tile'us ant žemės (jau naujo dydžio), vienintelio žaidimo pradžioje duoto skill'o paveiksliuką ir nemažai debug informacijos. Taip pat matome, kad įvairovės šioje aplinkoje akivaizdžiai truksta, nes naudojamas vienintelis sienos paveikslėlis (plokštokas), jokių papildomų objektų (griaučiai, grybai ir pan.), o danga sukuriama principu - kur siena, ten smėlis (atseit smėlio pripusta į kraštus). Nieko nepataisomo - tik reikia laiko...

Po geros valados ar dviejų:
Įsijungiu task manager ir ką gi matau:
Suprantu, kad susimoviau, tik pasitikrinau, kiek rimtai. Išeinant į žaidimo titulinį, atminties naudojimas beveik nesumažėja, perėjęs į žaidimo būseną gaunu dar apie 200 Mb bonuso. Susimoviau labai.;) Einu vabalų medžioti...

2010 m. spalio 14 d., ketvirtadienis

Perėjimai tarp plytelių (antra dalis)

Šiek tiek paskaitinėjau ir paeksperimentavau. Neplanavau šito, bet...
Čia seni perėjimai, tik dabar jie turi alfa kanalą. Praradau kažkiek detalių, tad perėjimai suvienodėjo. Tai galima pataisyti koreguojant atskirą kaukės (mask) failą, bet ne tas svarbu. Nežinau, kiek tai sulėtino piešimą, bet dabar visi perėjimai paišomi kaip turintys alfa kanalą, o jų tokiuose "randominiuose" žemėlapiuose absoliuti dauguma. Iš karto matau sprendimą - žemėlapio krovimo metu sukurti visas perėjimo+apatinės plytelės kombinacijas, o piešimo metu piešti įprastai - be permatomumo. Yra vilties, kad aš veltui bijau ir dėl kelių tailų žaidimo nestabdys, bet faktas, kad viskam kitam (labiausiai AI) jau bus mažiau laiko.

Kaip mano skaitymo bonusas - matau realią galimybę parašyti savo alfa blendingą naudojant tiesioginę prieigą prie bitmapų atmintyje. Tokiu būdu galėtų pavykti optimizuoti allegro blendinimą visokių patikrinimų ir apskritai apsaugų nuo kvailo userio (kurių ten daug) sąskaita.

2010 m. spalio 12 d., antradienis

Perėjimai tarp plytelių

Kad ir kaip man patinka programuoti, bet kartais maloniau piešti ar daryti dar ką nors, ko rezultatai pasirodo greitai. Štai ir dabar beveik kiekvieną dieną pavyksta nuveikti ką nors naujo žaidimo labui. Naujas pasiekimas - nupiešti tolygūs perėjimai tarp plytelių. Nepaisant to, kad jų net 112 (14 tipų po 8), darbas vyko labai greitai - dabar nereikėjo šokinėti tarp GIMP, Blender ir GraphicsGale, o viską dariau pixel'ių lygmenyje, t.y. GraphicsGale redaktoriuje. Be to, naikinti (trinti tam tikras vietas), lengviau nei kurti (piešti kiekvieną plytelę).

 Parašiau nedidelę programėlę, kuri demonstruoja, kaip neapmokytas menininkas (kompiuteris) nupiešia tokį "pusę velnio" žemėlapiuką. Vaizdas daugmaž toks:
Darbo su perėjimais aš dar nebaigiau - reikia jiems suteikti šiek tiek tūrio, bet rezultatu jau dabar esu patenkintas. Be to, gražesnį vaizdelį jau dabar galima būtų gauti, jei būtų parašytas rimtesnis generavimo kodas, o ne "metam monetą ir nusprendžiam, kokia danga bus šitame taške";). Kadangi žaidime tą darys labirinto generatorius, galvos sau nesuku. Parsisiųsti programėlę galima iš čia:
http://www.mediafire.com/file/agcvh57ew87scwj/wang_tiles_v003.rar

Čia išeities kodas ir .exe.

2010 m. spalio 10 d., sekmadienis

Naujos tekstūros - plytelės

Mano kompiuteryje atsirado naujas aplankas, vadinasi "tiles tiles". Štai čia ganėtinai NElaisvo savaitgalio darbo rezultatas:
http://img146.imageshack.us/img146/2180/tileso.png
Jau apgalvojau, kaip darysiu (darau) tile'ų perėjimus - kadangi smėlis bet kuriame perėjime "užeis" ant kito dangos tipo, ant nupaišyto tile'o dėsiu norimos formos truputį pratrintą smėlio tile'ą. Kol kas in developement...

2010 m. spalio 7 d., ketvirtadienis

Naujos tekstūros - smėlis

Vakar aptikau būdą, kaip pasigaminti tile'us izometriniam 2D žaidimui, kurie sudaro daugiau mažiau gražią tekstūrą, tad šiandien nusprendžiau nupiešti ką nors įtikinamesnio nei dviejų spalvų akmenis.

Taigi, nupiešiau keturias tekstūras:
http://img830.imageshack.us/img830/2016/startingtextures.png

Sudėjau aštuonias jų kombinacijas ir iškirpau gautas galutines tekstūras:
http://img812.imageshack.us/img812/733/combinedtile.png

Beje, raudonai nupiešiau specialiai paliekama žymę, pagal kurią sprendžiu, kur gi bus mano galutinė tekstūra.
"Užmoviau" ant plokštumos blenderyje ir sudėjęs tile'us į vieną failą nekantriai įsijungiau ide testavimui. Kai pamačiau, ką gavau, vos nesusikeikiau:
http://img6.imageshack.us/img6/4494/shithapends.png

Štai tau ir "seamless tiling"... Supratau savo klaidą - keturias tekstūras nupiešiau atskirai, todėl jų tonai kad ir nedaug, bet skirėsi, todėl ir gavau šią "šachmatų lentą".

Ėmiausi taisyti šią netvarką (tiksliau - tvarką), ir po dar vieno rato gavau štai tai:
http://img80.imageshack.us/img80/5971/correct.png

Gera žinia ta, kad atrodo jau gražiau. Blogosios yra net dvi - pirma, kad kažkokios "grotos" vis tiek šviečia, antra, kad su vienu vieninteliu smėlio tile'ų atrodo tik šiek tiek prasčiau. Pastaroji problema, aišku, maža, nes kokiai žolei ar kam kitam skirtumas tarp aštuonių ir vieno bus akivaizdesnis. Toliau galvosiu ir skaitysiu apie tolygius perėjimus tarp plytelių tipų (smėlis - akmenys, smėlis - purvas ir pan.).

Ir vos nepamiršau... Atradau, kad tiesias 2x1 linijas izometriniame žaidime galima sudaryti dviejų tipų plytelėmis:
http://img193.imageshack.us/img193/4976/tilesexamples.png
Anksčiau visą laiką naudojau pirmo tipo tile'us, kurių dydis 64x31. Vakar kad ir kiek sukinėčiau kamera blenderyje ir keisčiau kitus parametrus, tokių pačių gauti nepavyko - pavyko tik 64x32 (t.y. antrojo tipo), kas iš principo irgi buvo gerai. Šiandien apsisprendžiau gaminti didesnius tile'us, t.y. 80x40, bet kai vėl bandžiau gauti tiksliai tokio dydžio reikiamos struktūros tile'us, nieko nepavyko. Užtai pavyko gauti 80x39, ko visai nesitikėjau. Įdomiausia, kad pats to nežinodamas pasigaminau tile'ų, kurie kaip tik tokie, kokie naudojami diablo 2 variklyje! Manęs laukia dydi ateitis.:)
Jei kam įdomu, štai receptas: default'inė plokštuma (2x2 blenderio matavimo vienetų), kurios Z koordinatė yra 1, kamera, kurios koordinatės X = 10, Y = -10, Z = 5; kampai rotX = 60, rotY = 0; rotZ = 45; kamerai editing lange (F9) nustatyta orthographic ir shift y = 0.38; paveiksliuko dydis 208x120 (nors abejoju, ar Y dydis ką duoda); OSA, aišku, atjungta. Berods, nieko nepamiršau.

2010 m. spalio 6 d., trečiadienis

Plytelių klojimas

Taip taip, čia apie žaidimus. Kadangi animacijos jau yra (tik dar nėra įdėtos į žaidimą), nusprendžiau užsiimti aplinkomis. Kaip ir visada, norėdamas aplinkas kurti 2D, imuosi tile'ų (plytelių). Kadangi jau ne pirmą kartą bandau su jomis žaisti, pasistengiau pirmiausia sužinoti daugiau iš visagalio interneto. Ir ką gi aš radau? O gi:
http://shell.cas.usf.edu/~jonoska/kursevi/biomol-comp/Wang_Tiles_Paper.pdf
ir
http://research.microsoft.com/en-us/um/people/cohen/WangFinal.pdf

Idėja apie tokį tile'ų dėliojimą mane aplankė jau seniai (na, aišku, ne taip seniai, kaip Wang'ą), tačiau iš šių straipsnių aš sužinojau ir lengvą būdą tuos tile'us gaminti. Man darbo eiga buvo tokia:
1) nupiešiau keturias tekstūras 200x200;
2) pavadinau jas raudona, mėlyna, žalia ir geltona;
3) pasukau kiekviena 45 laipsniais ir sudėjau visas aštuonias kombinacijas (2-as straipsnis);
4) atsikračiau nesutapimų (tai, ką, kaip supratau, už straipsnio autorius daro kompiuteris );
5) iškirpau kvadratą iš kiekvienos kombinacijos ir išsaugojau kaip jpg (beje, naudoju GIMP);
6) užtempiau gautas tekstūras ant plokštumos blenderyje ir pažaidęs su kamera ir render opcijom, gavau reikiamo dydžio tile'us.

Mano eksperimento rezultatas:
http://img826.imageshack.us/img826/3098/wangtiles.png
Programėlės neįdedu, nes ji triviali.

Šios tekstūros nupieštos per kelias minutes, tai žaidime jų, aišku, nebus - nupiešiu ką nors bent šiek tiek padoraus.:)