Developer blog / Projects / Codename Z

Az utóbbi időben ezerrel dolgoztam a sulis és egyéb projektjeimen, ezek közül szeretnék bemutatni egyet az előbbiek közül:

Codename Z: Incomplete Operation

A Vizuális Eseményvezérelt Programozás nevű óra keretében kaptuk a feladatot, hogy írjunk egy játékot, úgyhogy írtam egyet. Persze azért ebben rengeteg órányi munka és legfőképp korábbi tapasztalat van, szóval így könyű (könnyebb), hogy nem idén látok először programkódot. A játékkal meg is nyertem az első díjat a tárgyhoz tartozó programozási versenyen, amin minden osztályból a legjobb féléves munkák indultak.

Vizuális Eseményvezérelt Programozás verseny 1. díj

Maga a játék szörnyen egyszerű, A pontból B pontba el kell jutni egy darabban, közben zombik és trollface-ek hada próbál megállítani minket, és ha ez nem lenne elég, a létesítmény automata biztonsági rendszere is az ellenségünk! De nem kell kétségbe esni, a pálya tele van lőszerrel és elsősegélycsomagokkal.

Felülnézetben fedezhetjük fel ezt a veszélyes világot, ahol fontos szerepet játszanak a fények. Ez már az elején nyilvánvalóvá vált, hogy fények nélkül túl üres lenne a pálya, így viszont jelentős szerepet kap a történet során az elemlámpa, melyet az F gombbal tudunk ki és be kapcsolni (Xbox Controller esetén B). A pálya több részén is koromsötétben kell utat találnunk, és közben visszaverni az ellenfeleket, de szerencsére ahogy mi sem látunk a sötétben, ők sem! Viszont ha túl közel kerülsz hozzájuk, megérzik a jelenléted!

Codename Z: Incomplete Operation

Az irányítás:


(Az Xbox Controller-t automatikusan felismeri indításkor, ha be van dugva. Felismer más gamepadokat is, de a gombok kiosztása azoknál eltérő lehet)

 

És persze nem utolsó sorban itt van a lényeg, maga a játék:
http://vbstudio.hu/games/codenamez-incomplete-operation

A programhoz a következőknek kell telepítve lenniük:

Az utóbbi kettő, ha van játék a gépeden, akkor már valószínűleg telepítve van.
Jó szórakozást! ;)

 

Most, hogy a lényeget már letöltötted, jön a kevésbé érdekes rész, a technikai infó :D

Hogy a félreértéseket elkerüljük, most előre kijelentem: a játék nem használ DirectX-et a megjelenítésre! OpenGL-t sem. Az egész játék a .NET 2.0 rendszer GDI+ API-ját használja a grafikák kirajzolására. Részben ezt, és részben közvetlenül végez számításokat a memóriában. Ez az összetettebb képszámolásoknál kell, a fények kirajzolásánál, illetve az ütközéstérkép olvasásánál, mert ezeknél rendkívűl fontos a sebesség, és a beépített Bitmap.GetPixel() nem képes ezt a teljesítményt szolgáltatni. Ennek az oka egyszerűen az, hogy a GetPixel() minden híváskor lezárja a bitmapot a memóriában, kiolvassa azt az egy pixelt, aztán fölszabadítja, és ezután a kiolvasott pixelnek még létrehoz külön egy Color objektumot. A közvetlen memória írásnál és olvasásnál csak egyszer zárja le a bitmapot, és addig nem szabadítja fel, amíg az összes pixelműveletet el nem végezte, a pixeleket pedig byte formájában olvassa ki pointer-ek segítségével.

A program egyetlen egy helyen használ DirectX-et, mégpedig a joystick kezeléséhez.

A hangokat az irrKlang hang library biztosítja. Csak ajánlani tudom, mert bárki számára szörnyen egyszerű a használata. Az alábbi linken érhető el:
http://www.ambiera.com/irrklang/

Egyetem mellett nehezen jut időm másra, de mivel ez részben a beadandó feladatom is (megint), ezért lassan de biztosan haladok tovább a játékkal. A Codename Z: Incomplete Operation mint a neve is utal rá: félkész. Most ezt a régi engine-t fejlesztem tovább, azóta kerültek bele a dinamikus fényekhez dinamikus árnyékok is, rengeteg optimalizáción esett át, kapott komplett menürendszert is.

Mogyorós Márton kolléga jóvoltából lesznek új ellenfelek és jó sok tereptárgy, statikus és interaktív egyaránt.

Fejlődik a pályatervező is, amit a végleges játéknál tervezem hogy publikáljam. Ehhez lesz majd „Online MapStore”, ahova egy VB stúdiós login ellenében bárki feltöltheti és menedzselheti a saját pályáit. Mindezt login nélkül is le lehet majd tölteni ráadásul közvetlenül a játékon belül, és már megy is!

(A Wolfenstein grafika nem lesz a végleges verzióban, csak ez volt hirtelen kéznél)

A 3D mód, ami eredetileg poénnak indult, ilyen „ilyet is tudok” alapon, az mostanra elég fejlett, mondhatni játszható állapotba került. Az Incomplete Operation-ben még csak a falakat renderelte, és a statikus fényeket, most már az összes dinamikus fény is benne van, és sprite-okat is tud, tehát ellenfél, tereptárgy, lövedék, minden megjeleníthető benne. Ezért kár is lenne érte, ha ez a mód csak egy bónusz funkcióként lenne elrejtve. A terv az, hogy ugyan a fő játék az marad a felülnézetes, lesz egy bónuszküldetés a 3D módban, ami az alapjáték történetéhez akár semmilyen szinten nem kötődik.

Boldog Karácsonyt Minden Kedves Látogatónak! :)

Amikor elhatároztam, hogy Karácsonyra összehozok egy játékot, nem is sejtettem hogy mit vállalok el :D Határidőre dolgozni nem a legjobb, főleg amikor az utolsó napon kerülnek elő hibák. Nem is beszélve a misztikus hibákról, amik csak bizonyos rendszereken jönnek elő.

Codename: Xmas

Codename: Xmas (klikk ide a játékhoz)

Ha már a Codename Z motorjára írtam, ragaszkodtam hozzá hogy valamelyest utaljon rá a neve. Az utóbbi időben kizárólag a 3D résszel foglalkoztam, nem is csoda, hisz a 3D világ sokkal érdekesebb kihívásokat tartogat és az eredmény is látványosabb. Ami jelentős fejlődés a legutóbbi verzióhoz képest, az a skybox, illetve hogy a padló is lehet átlátszó, olyan hatással, mintha üveglapon járnánk (ez a funkció nem látható a karácsonyi kiadásban). Ezekből a lehetőségekből remek űrbéli pályákat lehet csinálni.

További újítás, hogy már a képarány se fixen 4:3-as. Kivéve a felülnézetes módnál, azon okból, hogy szélesvásznú képnél zavaró, hogy oldalirányban messzebre látunk, mig fölfelé meg lefelé alig. A 3D módban választható lesz, épp úgy, ahogy most is a beállítások menüben.

Ennyi update jelentés elég lesz mára, mindenki menjen ajándékot bontani :-)

Vaporizer gunNekiláttam és implementáltam egy részecskegyorsító... izé... részecske motort a játékba és most mindenből részecskék folynak.

Részecske, avagy hivatalos nevén Particle, róluk azt kell tudni, hogy olyanok, mint egy sprite, csak ezeknek nincs textúrája, egyszínű az egész és a mérete sem fix, többnyire picikék. Ilyen részecskékből előállítható rengeteg minden: törmelék, vér, víz, füst, hamu, tűz, lövedéknyomvonal, szikrák... gyakorlatilag bármi, ami apró kis színes pontokból kirakható és természetesen különféle fajta részecskéknek eltérő lehet a viselkedésük is. A dolog még cifrázható is azzal, hogy lehet átlátszó, vagy additív blending-el is kirajzolni őket. Utóbbi kiváló pl. lézerfegyver nyalábjához (a képen pont nem azzal van, az csak simán átlátszó, majd kijavítom).

Jelenleg még csak kezdem felfedezni a benne rejlő potenciált, a mai remekmű a baloldalt látható hamvadás animácó, ami a 2D sprite-ot alakítja 3D-s particle hamufelhővé, megtartva az eredeti pixelek színét (ha nem is sokáig). A terv az, hogy rengeteg ilyen cucc lesz és ha nem esek túlzásokba a mennyiséggel, akkor elég korrektül fogja vinni bármelyik átlagos CPU. (Csak várjátok ki míg berakom a multi-thread támogatást is :D)

Másik nagy újítás az, ahogyan a falak lebomlanak: amikor egy darabot kilövünk a falból, annak a helyét feltölti ilyenekkel, és aztán repülnek a szélrózsa minden irányába, pattogva, miközben folyamatosan rajzolódnak át a padlóra, - mint ahogy az a hamunál is látszik - így miután eltűntek, utána is örökre megmarad a nyomuk. Jó lesz majd így a végleges játékban visszatérni egy korábbi csatatérre és végignézni a pusztításunk nyomait :D

Lassan már érik egy tech-demo, de most már egy rendes, nem olyan, amiből gyorsan egy „mondjuk hogy kész” játékot faragok, és kihagyok egy csomó klassz funkciót a sztory meg a játékmenet miatt. A pálya rombolhatóságát és a dinamikus fényeket még eddig nem igazán mutattam be, úgyhogy a hangsúly főleg ezen a részén lesz.

bird's view

Legújabb feature a kamera mozgásának immár fokozott szabadsága. Már tud mozogni függőlegesen is, ezáltal bármilyen magasságú lehet a főhős, továbbá megoldhatóvá vált a „head bobbing” is (ez utóbbit ki lehet majd kapcsolni :D).

Ahogy a képen látható, a nézés iránya is változtatható, bár ez a rész csalás. A trükk az, hogy a horizont került arréb. Képzeljünk el két monitort egymáson, a horizont a kettő között lesz. Ha csak az alsó monitort nézzük, akkor olyan, mintha lefelé néznénk, mert a horizont alatti részt látjuk csak, pedig valójában a kamera továbbra is egyenesen néz. Ezt a technikát alkalmazták több hasonló elvű régi játékban is, mint pl. a Duke Nukem 3D-ben. Bár hogy lesznek-e ennyire madártávlati jelenetek, az azon fog múlni, hogy meg tudom-e oldani, hogy a menyezet egyes nyílásain betekintve is renderelje a falakat, mert ez egy kicsit bonyolítja a procedúrát. Ami viszont mindenképp lesz, az a padló és plafon közti mozgás.

...de nem az, amire gondoltok, még nem. Ez most egy tavalyi verzió, amit véletlenül most túrtam elő és úgy éreztem, hogy nem merülhet feledésbe. Ez egész pontosan a Haladó Programozás órára készített verzió, amiben még felülnézet van és a régi Incomplete Operation-ös pályával, de tele rengeteg advanced cuccal. Olyanok mint: spéci dinamikus fénykezelés, menürendszer, normálisan megrajzolt szereplők, látványosan bontható falak, rakétavető, shotgun, éjjellátó (N), szonár (M).

A játékot letölthetitek innen: http://vbstudio.hu/games/codenamez-ioap

A mostani alpha verzió is jön, már majdnem kész vagyok vele. Az AI az nem nagyon működik benne, de most nem is fogok már nekilátni megcsinálni, hanem gyorsan publikálom így ahogy van, ugyanis több radikálist változtatást is készülök végrehajtani, amik miatt legközelebb max nyáron lehet belőle normális verzió.

Elérkezett hát a várva várt pillanat, publikálásra került a Codename Z első alfája.

Tech Demo

Mint azt már korábban írtam, az AI kimarad ebből a verzióból, viszont helyette összeraktam egy érdekesnek bizonyuló kis pályát, tele apró meglepetésekkel. Cél az nincs, csupán a felfedezés. Na de lássuk csak mit is lehet csinálni: rögtön az elején teljes fegyverarzenállal indulunk, ezek között a szám gombokkal vagy az egérgörgővel váltogathatunk. Ajtókat az E gombbal nyithatjuk ki, F gombra bekapcsol az elemlámpa, N gombra pedig az éjjellátó.

A rakétavetővel és az overkiller-el, atomjaira bonthatjuk az egész pályát, meg az ellenfeleket is, a Beam Gun-nal vaporizálhatjuk őket és bónusz feature a gomba. Igen, gomba. Van egy pár elrejtve a pályán, és meg lehet őket enni. A hatás nem marad el :D

Ha kifogytunk a lőszerből, csalhatunk is. Hozzuk elő a konzolt az F1 gombbal és oda írjuk be, hogy "giveall", aztán enter. Ez a birtokunkba juttatja az összes fegyvert (ha esetleg nem lenne meg, bár itt alapból megvannak) és teljes lőszermennyiséget ad mindhez.

Többet nem is mondanék, a képek mindent elmondanak, maga a játék meg méginkább. Innen letöltheted:
http://vbstudio.hu/games/codenamez-alpha_labs_sector_a
Jó szórakozást ;-)

Miután sok évnyi keresés után végre találtam egy programot, amivel szoftver-renderelt játékból is tudok 30fps-el videót felvenni, végre elkészülhetett életem első Gameplay Trailer-e! Az első szerencsés játék a „Codename Z: Alpha Labs Sector A” lett. A jelenlegi palettáról még talán az „Incomplete Operation”-nek csinálok majd egyet, a többihez nem érdemes, viszont jönnek majd az új játékok, amik sokkal háromdésebbek lesznek mint eddig bármi. ;)

A trailer a játékkal együtt az alábbi linken megtekinthető:
http://vbstudio.hu/games/codenamez-alpha_labs_sector_a

Már 3 éve annak, hogy utoljára jelentkeztem a Codename Z-vel kapcsolatban. Még 2013. márciusában raktam ki a legutolsó állapotát a játéknak, amit le is lehetett tölteni, és utána úgy tűnhetett, hogy ennyi volt, vége, nem lesz már belőle semmi, vaporware lett... de nem! Tény, hogy nem foglalkoztam vele évekig, mert az egyetemen bejött a szakirány és a féléves programokat írtam, meg a szakdolgozat projektet, vagy ha pedig épp nem azt, akkor arduino-ra fejlesztettem és ez gyakorlatilag felemésztette minden időmet, de ennek most vége, az egyetemmel kész vagyok, így a hozzátartozó projektekkel is, és most az elmúlt 2 hónapban szinte nonstop a Codename Z fejlesztésével voltam elfoglalva.

Az eddigi fontosabb újdonságok:

  • Lua script rendszer, amellyel bármilyen komplex működést le lehet kódolni a pályáknak.
  • Mentés, ezzel egyúttal megoldottá vált, hogy át lehessen járni pályák között, és vissza is lehessen térni régi helyekre. (A Lua kódot is menti, majd onnan folytatja)
  • Brutális render optimalizáció, modern Intel processzorokon 40-90 frame/sec-el is elfut (és ez még nem a vége!).
  • Teljes joystic támogatás, lehet gamepad-al is játszani, ha valakinek ez a szíve vágya.
  • A falak rajzolása teljesen újra lett gondolva, a szerkesztőn belül voxelenként megrajzolhatóak az egyes csempék.

...na meg hát nagyjából a fél programot újraírtam, csak azok semmi említésre méltó újdonságot nem hoztak be, de a jövőbeli frissítéseket megalapozták. Inkább ezekkel ment el az idő java része, úgyhogy ezért tűnhet még úgy, hogy nincs olyan sok újdonság.

Ez egyelőre még az alpha verzió, de közeleg a béta, aminél már publikálni fogom a pályatervezőt is. Az lenne az ötlet, hogy bárki tudjon pályákat csinálni hozzá és remekül moddolható legyen. Az alap sztory kampányra is ez az elképzelésem, hogy alapvetően outsource-olom minél több embernek a pályák elkészítésének a feladatát, így azok igazán változatosak és kreatívak lesznek (elvégre ezen áll vagy bukik az egész, nem az engine-en).

Na és a lényeg, egy kis demó!

Érdkességnek pedig egy példa, hogy a fenti videón látható rész hogyan is néz ki a pályatervezőből:

CodenameZ editor minta