2012. április 18., szerda

Cím és külcsíny





Örömmel mutatom be játékunkat:

Dimension Leak

Új blog grafika, logó, meg ilyesmi hamarosan. Addig is két képecskét berakok előzetesnek...

 Ez itt az editorban lévő ingame.
Ez pedig a kliensben levő.











Alakulunk, mint púpos gyerek a prés alatt... :D

2012. április 4., szerda

List, entity, shooting, stb.

Lehet lassan hozzá kell szoknom / szoknotok, hogy havi szinte blogolok, de akkor legalább mindig valami nagyobb lélegzetűt. :)

Rohamtempóban halad a fejlesztés, és az elmúlt 2 hétben minden olyan egyszerűen és gyorsan elkészült. Remélem nem most fog jönni a lejtmenet, mert még szívesen tartózkodnék ebben a kreatív és hatékony időszakban. :P

Ja igen, ígértem egy minigamet a múltkor. No hát le lettem szólva csúnyán - végülis jogosan - Bitsculptor részéről, hogy nincs "sideproject" meg különcködés, tehát gyorsan visszaterelgetett a shúterünkhöz. :)
Arra viszont jó volt az a két nap, amit azzal a játékkal töltöttem, hogy pár olyan dolgot kikisérletezzek, amit hasznosítani tudok / tudtam a játékunkban. 
Ilyen lett például a Shooting osztály. A player és az enemy-k is megkapják az osztály kezelését, és ha lőni akarnak, a fegyverzetüknek megfelelő adatokat elküldik a Shooting-nak, valamint az X és Y koordinátáját a kilövés helyének. Ezt egy BulletShell nevű mini osztályban tárolom, és a Shooting BulletList-jét frissítgetik.
Ezután fogja magát a Shooting és minden ciklusforduláskor leellenőrzni a BulletList-et, hogy van e benne lövedék. Ha van, akkor végigpörgeti egy ciklussal és létrehozza a lövedékeket. Ezután törli a listát és kezdődhet elölről. 

Ez azért kellett, mert belefutottam már a Prototype-nál is és a kis sideproject-nél (nincs erre értelmes, magyar szó?) is, hogy ha sprite-on belül akartam lövedéket létrehozni, akkor az egy pillanatnyi reccenést okoz az adott sprite mozgásában. Ha meg mondjuk particlesystemet akarok létrehozni, vagy olyan lövedéket, akkor még nagyobbat akad. És mivel az Andorra nagyon szépen és helyesen külön szálakon kezeli a szprájtjait, ezért azt láttad egy nagyobb lövöldözés közepette, hogy mindenki össze-vissza akadgat, és közben ontja magából a lövedéket. Playernél ez különösen mókás, főleg úgy, hogy kb. csillagszóróként működik... :D

Nem tudom írtam e előző bejegyzésekben valahol, hogy mennyire fontosak a jó listák. Az én életemet megkönnyítette a TList-ek használata. Kicsit átírtam, kibővítettem és végre nem kell saját recordokat, meg láncolt listát, meg dinamikus listát írni, meg ilyen szerencsétlenségeket. Ott a TList, ez lesz a listám őse, ott átírom, hogy Itemként milyen típusokat (pl BulletShell a BulletList-nél) vagy milyen ojjektumokat (pl. AdvancedParticleSystem a ParticleList-ben) kezeljen. Hozzáraktam Find függvényt, ami name vagy ID alapján visszaadja a keresett itemet - már ha van - és utána tökéletesen használható, mert van saját Add, Delete, Clear, Exchange, Insert, stb. stb. eljárásai.

(megjegyzés: 3. napja írom melóhelyen ezt a bejegyzést, de ma már csak befejezem)

Izé... Hol tartottam... :D
Tegnap este (ápr 4.) nekiálltam a fegyverzetek felszerelésének az entity-kre.
Érthetőbben: van egy weapon editorom, ahol megadhatom, hogy a lövésnek milyen torkolattüze legyen (particlesystem), a lövedéknek milyen textúrája, sebessége, robbanása, sebzése, stb. stb. Ezeket a fegyvereket egy fent bemutatott listában tárolom (WeaponList). Eddig úgy működött a cumó, hogy egy entity-hez (entity-t is mindjárt kifejtem) hozzá lehetett rendelni egy azaz egy fegyverzetet meg egy meghajtót (ez csak egy "kipufogó" animáció, ami szintén particlesystem). De őnagysága, fenséges bitsáska úr kérte, hogy ezek dinamikusan legyenek változtathatók. :) Logikus, és valóban így lesz jó, de lustaságom, vagyis inkább fáradtságom határtalan, ezért nem akartam vele vesződni. A lényeg az hogy kérte, hogy legyen, és tegnap bele is fogtam. :) Annyiban bonyolódik a dolog, hogy az Entity kap egy új mezőt, ami egy TList (ki hinné). Ez a TList (Weapons) tárolja az entity-hez adott fegyverzetek azonosítóját (ID). Ugyanezt eljátszom majd a "meghajtókkal" is és kész is a dinamikusan változtatható felszerelés. :)

És hogy megértsétek, hogy az Entity mit is takar:
Ez az osztály tárolja az editorban összekattingatott űrhajókat. Persze nem muszáj csak űrhajónak lennie, lehet bármi más is, de jelenleg csak űrhajókat csinálunk. :) Van ugyebár textúrája, robbanása, sebessége, HP-ja. Fel lehet szerelni tehát fegyverekkel, meghajtókkal. Később pajzsot is fog kapni, vagyis kaphat. Ó, az is mi munka lesz, előre látom... :D
(újabb szünet után folytatás...) Az Entity pedig a saját adatait átadja a származtatni kívánt playernek és enemy-nek. Az, a származtatáskor leellenőrzi, hogy az entity-hez volt e rendelve hajtómű, van e fegyverzet, stb. stb. és úgy hozza létre magát.
Remélem nem hangzik bonyolultnak, mert szerintem nagyon jó kis megoldás, vagyis eddig tökéletesen beválik.

Lehet még folytatom, de jelenleg lezárom így és végre postolom. :D

2012. március 5., hétfő

Újra itt!

Üdv újra, kedves olvasók, kedves blog. :)
A béta annyira jól sikerült, hogy hirtelen el is tűntem az éterben... Mint láthatjátok, se release nem lett, se tippek-trükkök-tanácsok kezdőknek, amolyan rookie's guide. Na nem azért, mert hogy lusta lennék, hanem pont ellenkezőleg. A beta feltöltése után pár nappal kezdődött az új munkarendem, ami reggel 6-tól délután 5-ig tart... Hát igen, a pénz nagy úr...

Emellett bitsáska úrral a béta megjelenése után 1 nappal belecsobbantunk a mélyvízbe, hogy megmártózzunk egy kicsit a csapatszintű játékfejlesztés húgymeleg rejtelmeiben. :D

Tehát Prototype release abban a formában, ahogy terveztem, nem lesz. Minden pici időmorzsám a programozásra és drága kis feleségemre megy el. :) 

Hétköznaponként 2-4 órát tudok programozni maximálisan, ami nem éppen rohamtempójú haladást eredményez. Maradtam továbbra is a Delphinél és Andorránál, mert ha már így belemerültem a ebben a grafikus endzsinbe, és végre elég tapasztalatot szereztem, akkor miért ne ebben gyártsak játékot?
A munkamegosztás úgy történik, hogy én írom a game engine-t és az editorokat, sáska dizájnol, grafikázik és boldogítja a mindennapjaimat. :) 

Imádom a God of War-t. Ha igazán motiváló devblogot akartok, nézzétek meg a Making of GOW3-at. Ott van egy rész, amikor a programozók beszélnek. Kérdezik őket, hogy mi a dolguk. Ők azt mondják, hogy "We makes tools for designers." Aztán nevetve elkezdik mondani, hogy a dizájnerek elmondják mit szeretnének a programokkal csinálni, ekkor a programozók megcsinálják. Megnézik a delikvensek, akik azt mondják: majdnem jó, de itt meg ott át kell kicsit alakítani. Oké, átírják, átalakítják, és mikor odaadják a kész programot, jön a dizájneri válasz: NEM! ÉN NEM ERRE GONDOLTAM!

Na ezt éltem át én már az első héten drágajó sáska úrral is. :D Nagyon frankón leírta, hogy mit hogy szeretne az editorban. Az elején ugyanez a válasz jött, mikor még "in the making" -ben volt a fejlesztés, hogy ez az, valahogy így lesz jó. És mikor kész lett a háttérkezelő motor és a háttér editor, akkor kiborult a bili és kaptam hideget-meleget. :D Egyből eszembe jutott ez a videó és már kínomban nevettem. :D
Aztán jött az őrület, kikukáztam az egész háttérkezelő rendszert és az editort is lesöpörtem és újra nekiálltam.

Konklúzió:
- Mindig mindent pontosítsatok az "ügyféllel", különben félreértés lehet a dologból.
- Folyamatosan tesztelje a végfelhasználó a programodat, ne csak te, mert ami neked egyértelmű, az másnak szinte 100% hogy nem az.

Pozitívum:
- Ha a Prototype-os háttérkezelésem tűrhetőnek volt mondható, az újraírt verzió meg elfogadható, akkor a mostani, véglegesnek tűnő verzió meg már egyenesen JÓ! :)

Szóval hiába húzzuk a szánkat, mi, fejlesztők, ha újra kell valamit tervezni, írni, vagy esetleg 1-2-sok heti munkát ki kell kukázni, az adott témában (pl háttérkezelés) időközben annyi tapasztalat összejön, hogy újrakezdve mindig jobb és jobb rendszert tudsz megírni. Eddig bármikor ilyen történt velem, mindig lett jobb. Most is tervezem, hogy kicsit belenyúlok a jelenlegi háttérkezelésbe, de persze nem 0-ról írom át, csak úgy 80-90-ről. :) Mivel jelenleg csak fentről lefelé loopolható hátterek és statikus hátterek lehetnek a rendszerben, ezt szeretném kiegészíteni alulról felfelé és oldalirányú háttérmozgással is.

Más:
A napi 11 óra civil munka nem kicsit égeti ki az embert. Egy hónap alatt egyszer voltam edzeni, a szokásos heti 3-4 helyett. Tudjátok, ép testben ép lélek. :) Ezt tartom is a mai napig, mert programozás után mindig jól esik edzeni, bár edzés után meg kell 1 óra, hogy újra rá tudjak nézni a kódra. :D
Ennek tükrében péntek este gondoltam egyet, hogy a jelenlegi játékmotorral (a grafikus motort és a játékmotort ne keverjétek, mert míg az előbbit nem én írtam, addig az utóbbit igen) csinálok egy kis remaket.

Úgy terveztem, hogy vasárnapig kész leszek, de összesen ha tudtam vele 6-8 órát foglalkozni. Még kéne rá ugyanennyi és kész. 

Ha minden igaz, ma, vagy holnap töltök fel belőle ízelítőt. ;)