A következő címkéjű bejegyzések mutatása: játéknapló. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: játéknapló. Összes bejegyzés megjelenítése

csütörtök, július 24, 2025

ha már a kocsmatúra útvonalát is a terminátor optimalizálja majd


Szóval az ópenéjáj úgy tűnik, megpróbálta ellopni a startot a matematikai olimpián elért eredményük közlésével, közben kiderült, hogy a dípmájnd is ugyanolyan jól szerepelt (ugyanazokat a feladatokat oldották meg tökéletesen, de az ő eredményüket a szervezők certifikálták és állítólag a szervezők azt is kérték, hogy csak az olimpia vége után hét napra közöljék az eredményeket). Közben meg egy kínai csapat, a bájtdensz is ezüstöt ért el, de ők a lean nyelvben formalizált megoldást generáltak (az még nem világos, hogy a feladatok eredeti kiírását a rendszer fordította át lean formalizmusba, vagy azt emberekre bízták (ez utóbbira tippelnék, mert tudományosan maga a formális bizonyítás az érdekesebb, de persze az életben a természetes nyelvből automatikus formalizálás sem piskóta feladat)).

Szóval nagyon úgy tűnik, hogy ez a nemzetközi matematikai olimpia szintű feladatmegoldás lassan be lesz húzva, ami szerintem egy óriási lépés. A dípmájnd ígérte is, hogy nemsokára valamilyen formában elérhető lesz a rendszerük, gondolom fizetni kell majd érte, reméljük nem túl sokat. Én legalábbis úgy vagyok vele, hogy gyakran ütközöm matematikai problémákba munkám során (az informatikaiakkal jobban tudok küzdeni) és hát elég gyengécskén oldom meg őket, szerintem amikor a láthatóságon dolgoztam, nagyon jó lett volna, ha nem én kellett volna kódolás után megtaláljam azokat az ellenpéldákat amelyek invalidálták a megoldásomat, hanem mondjuk egy mesterséges intelligencia megmondta volna nekem, hogy ez bizony nem jó ötlet. De egyébként az élet is tele van matekfeladatokkal, csak az emberek próbálják nem észrevenni őket, hogy ne frusztrálja őket, hogy nem tudják megoldani. Erre én be fogok fizetni, ha havi 10 dollárból megúszom (nem is tudom hogy van a dzsemináj árazása, remélem van ilyen réteg). Ha még azt is megkapnánk, hogy formalizálja a rendszer a megoldást leanben és azt valahogy hozzá lehet fordítani a C++ programhoz, akkor aztán már tényleg itt lesz a kánaán. A tudományok fejlődésének komoly mérföldköve lesz ez (persze arra még várni kell, míg az a generáció, amely számítógéppel kezdi a matematikai modellezést átveszi a stafétát).

Demó.

Zene

AI

hétfő, július 21, 2025

az játék előrehaladottáról

Újabb vidiót készítettem.

Nem, még mindig nem fejeztem be a játékot. De most már tényleg azon dolgoztam, hogy úgy nézzen ki mint egy játék. Legyenek benne menük, meg háttér a menük mögött (most csak egy példa shadert tettem oda, ami nagyon jól néz ki, de ez nem szabad felhasználású, szóval kell majd írnom egy sajátot). Meg persze végre sorra került a mentés és töltés is. Ehhez először lecseréltem az ECS-t flecs-re és a fájlkezelést rábíztam a sqlite-ra. Ezek elég jó technológiák, azt hiszem, hasznos lesz, hogy integráltam őket, elég jól megoldják azt amire kitalálták őket.

A gond inkább az, hogy egy kicsit túl ambiciózusra vettem az elején a dolgokat, most meg kiderült, hogy jól hangzik az, hogy a háttérben számítjuk ki a pályát meg a fényezést, de ha ez párhuzamosan kell menjen a mentés/töltéssel is, akkor jó sok galibát okozhat az, hogy valamelyik számítás nem ér véget amíg az ember menteni vagy tölteni akar egy másik pályát. Jó sok "if" kellett és még mindig nincs elég, valami a fények kiszámításánál elbarmolódik, ha betöltünk egy pályát úgy, hogy már kolbászoltunk előtte egy kicsit. Végül odáig mentem, hogy kellett írjak egy eseményrendszert ami vezérli a játék főbb mozzanatait, hogy tesztelni tudjam, hogy minden helyesen működik együtt. Ez persze később még jól fog jönni, bár nem hinném, hogy nagyon mélyen fogom tesztelni a játékot, azt azért kipróbálom majd, hogy végig lehet-e zongorázni a pályákon egymás után egy kis csalással.

Szóval van még pár bug, de azt gondolom, hogy most már tényleg meg van a 90%-a annak, ami a szokásos töltelék egy játékhoz, nem igazán a játékmenetről szól. Remélem ezt aztán sok módosítás nélkül fel tudom majd használni még pár játéknál, másképp nem nagyon volt kedvem menürendszert írni.

Szóval akkor még van 10% bug és persze a teljes játék hátra, mert a végső pályákból még semmi nincs. Az a baj, hogy megint az volt, hogy akartam kicsit viccesebb pályákat generálni, de egyből beindult az agyam, hogy milyen új rendszert kéne írni hozzá, hogy működjön (most éppen egy újraírási (term rewriting) rendszerként képzelem el, hogy nagyon expresszíven tudnám a kis szabályaimat kifejezni. Komolyan vissza kell fognom magam, már annyi mindent tud a rendszer, azokkal kéne lehessen valami jót kihozni. Persze ideje lenne a pályaszerkesztőbe is betenni a fényeket, mert most sajnos nem tudják és elég nehézkes úgy szerkeszteni a pályát, hogy minden fényezési beállításhoz újra kell indítani a játékot (jó, persze tudom, a hőskorban is így csinálták ezt).

Na jó, nem szaporítom a szót, ma már csak egy ivászat maradt a programban, majd legközelebb többet filózom. Reméljük idén sikerül befejezni mindent... 

vasárnap, május 04, 2025

az játék előrehaladottáról

Ez most rövid lesz. Nem, nem fejeztem be a játékot máig, ahogy szerettem volna, kicsit sok mindent írtam újra. Remélem egy-két hét múlva viszont befejezem ezt a szakaszt, azaz minden rendszer kész lesz, már csak a pályákat kell belevarázsolni, akkor majd lesz vidió, meg filózás is, ha lesz kedvem és energiám. Nem hinném, hogy volt aki lélegzet visszatartva várta a híreket, de hát nem ez lesz a legrövidebb bejegyzés... :)

kedd, március 11, 2025

az játék előrehaladottáról

Megint tettem fel új vidiót.

Végre fut a játék windowson, kicsit többet tartott ez a dolog mint először számítottam rá, de hát ki kellett operálni nem csak a grafikus absztrakciót, de a memória menedzsert meg egy csomó más dolgot is. Azért döntöttem így, mert amit eddig használtam (The Forge), nem volt a legjobb választás. Nem nagyon foglalkoznak azzal, hogy stabil legyen az API (mondjuk nekik, akik ebből élnek, lehet, hogy ez nem is igazán szempont, mert mindig megfizettethetik az átállást az új API-ra), ráadásul a speckó memória menedzser és STL jó ötlet elméletben, de gyakorlatban akkor minden libraryt kell portolni a rendszerre, ami nem túl nagy ötlet. Ráadásul nem hiszem, hogy olyan sok sebességet köszönhettem nekik, szóval mindenből a standardot kértem most és ezzel így is fogok maradni. Szerencsére az SDL fejlesztők nagyon aktívak, ez a GPU absztrakciójuk is elég érthető (a régebbi bonyolultabb volt, lehet, hogy gyorsabb, de csak deszkriptor managementből írtam legalább két verziót amíg rájöttem, hogy kár vele törődni, megy az anélkül is, a sebességhez az okos kézi batching a kulcs. Szóval egy csomó kódot kidobtam, végre standard imgui-t is integráltam, meg lua-t is, ki kell próbálnom, hátha végre azt is tudom debuggolni. Egyébként az új ubuntumon már a shader debug is megy RenderDoc-kal, nagyon jó cucc, kár, hogy nem most kezdem a projektet, most mindent elég jól értek és mennek a toolok is mint a karikacsapás. Igaz, azt hiszem, ma már Rust-ban kezdenék neki Bevy-vel.

Na mindegy, szóval még rengeteg dolgot meg kell csinálni, most az a terv, hogy először kiadható állapotba hozom a játékot, tehát mindent megcsinálok, kivéve a pályák generálását és utána még amennyi idő marad, azt pályagenerálásra szánom. Persze, ha marad idő, meglátjuk. Ez az egész dolog nem volt túl vidám, mert bár nem vagyok az a típus aki szerelmes a kódjába, azért mindig próbáltam minél többet megtartani, néha ez rendesen az utamba állt. Aztán persze végül csak kinyestem mindent. :) Poén, de most megint rájöttem, hogy dolgozhatok ramdisken is, hogy gyors legyen a linkelés, már nagyon régen csináltam ilyent, még amikor a 486-osba végül lett 8 mega ram és 4-et ramdisknek használtam amikor djgpp-vel kezdtem aprítani. Csak most 4 giga ramot használok ramdisknek a 32-ből, így másfél perc alatt a nulláról megvan a fordítás és linkelés, gcc-vel, a clang gyorsabb lenne, de annak nem látja a debugger a változóit a watch-ban, szóval gcc-vel maradok egyelőre, de talán majd a végén clanggal fordítom le, Linuxon persze, Windowson VS 2022 Community Edition-t használok, azt hiszem ez az utolsó.

Ja igen, egyébként az árnyékokat kiszedtem, meg az animációkat is, valószínűleg kimaradnak a játék első verziójából, de azért csinálom így a dolgokat, hogy nyugodtam fejlesztgethessem életem végéig, szóval majd valamikor visszakerülnek. Na most ennyi, nem tervezek minden kis apróságról blogot írni, lehet, hogy a következő bejegyzés már arról lesz, hogy all systems go. Menük, save/load, level progresszió, hangok, ezek amik nagyjából hiányoznak. Lehet, hogy a mentéshez integrálom az sqlite-t. :)

csütörtök, január 09, 2025

banánhéj csúszott a világvége kalkulációba

Nem tudok megszabadulni a CG témától. Mindegyre elkezdek gondolkodni a leghülyébb dolgokon, hogy milyen lesz az életünk a neocsausiszta rendszerben, ha nem lépünk le idejében. Jó lenne, ha meg tudnám jósolni valamennyire, hogy mennyi idő után kerül sor a határok lezárására és, hogy ezután még meddig marad fenn a rendszer, de sajnos ez számomra egy teljesen kiszámíthatatlan érték, még a leginkább prediktív változókat sem igazán hiszem, hogy sikerült feltérképeznem. Mégis ezt tekeri vég nélkül a tudatalattim, aztán néha-néha meg felböfög egy eredményt a tudatomba és elszomorít. A legrosszabb, hogy ezzel semmit nem tudok kezdeni, általában ez nem okoz problémát, vicces dolgok bukkannak fel az elmémben, nem vagyok hajlandó lelángszórózni a tudatalattimat.

Talán az lenne a legjobb, ha kiírnám magamból a dolgokat. Nem tudom, hogy mi működött végül az éghajlatváltozástól való félelmem kezelésében, talán az írás, talán az, hogy felismertem, teljesen veszett ez a dolog, semmit nem tehetek vele kapcsolatban. Most ég éppen le Los Angeles egy része és én csak legyintek, legyen az ő problémájuk, mert tényleg nincs mit tenni. De ez a CG dolog még nincs egészen lefutva, itt még vissza lehetne rántani az elszabadult szekeret, mert valójában tényleg csak az van, hogy egyesek nagyon nem értik a világot, de talán megérthetnék anélkül, hogy megpróbálnák megvalósítani az ötleteiket.

Mert ez a szuveranista gondolat egy óriási önellentmondáson alapul. Csak egy hangyafasznyival kisebb mint az az ellentmondás, hogy mivel én minden tárgyat amit használok a két kezemmel teremtettem, ezért engem is valakinek teremtenie kellett. Ez az ellentmondás arra épül, hogy ők úgy gondolják, hogy sikeres szuveranisták, mivel sikeresen árulják a befolyásukat Romániához, de azt elfelejtik, hogy amikor megvalósul ez a szuveranista világ, akkor már senki nem lesz érdekelt abban, hogy befolyást szerezzen itt, mert Románia addig érdekes csak, amíg jó pénzt lehet keresni rajta, ha jön a szuveranista államforma, akkor a gazdaság hamar anarchiává válik, a kiszámíthatóság megszűnik (vagy rendőrállami kiszámíthatósággá válik ami csak egy nagyon limitált technológiai fejlettség mellett fenntartható, a drónok számát sokkal jobban lehet felskálázni mint a rendőrökét). A modern világban a befolyás megszerzésének egyetlen módja van, az pedig a szabad piac, a játékszabályok ismertek, mindenkinek nyitott az ajtó, lehet versenyezni, de abban nagyon nem a szuveranista gondolatvilág bizonyult eddig a nyerőnek (két megjegyzés: 1. most érdekes módon, a világ leggazdagabb országa is megpróbál egyfajta szuveranista modellt, arra azért kíváncsi leszek, hogy nekik mennyire fog bejönni a dolog, 2. van azért egy másik szintje is a versenynek, de oda csak azután lehet bekerülni, ha az ember már letett valamit a szabad versenyben és ebben is pont most láthatunk egy világraszóló ámokfutást, akár első sorból is, ha nem blokkoltuk az egyént a tuitteren, persze).

Szóval rá kéne jönni, hogy a szuveranizmus zsákutca, nincs egyetlen sikeres ország sem amely ez alapján működne és főként a nép élvezné a szuveranista politika gyümölcseit.

Na de legalább most már kiderült, hogy május 4-ig be kell fejezzem a játékot. Eddig mindig az volt a kalkuláció, hogy érdemes olyan dolgokba fektessem az energiát, amelyek hosszú távon megtérülnek, ezért is nyúlt talán ilyen hosszúra a fejlesztés. Most viszont megváltozott a kalkuláció, ha emigrálnom kell, jó lenne, ha már tudnám, hogy munkát is kell keresni, vagy már van valamiféle jövedelmem a játékból, szóval a hosszú táv megszűnt, maradt a rövid. Remélem a tudatalattim is partner lesz ebben a kalkulációban.

Demó.

Zene.

vasárnap, december 22, 2024

az játék előrehaladottáról

Készítettem új vidiót.

Arról van szó, hogy integráltam egy prolog interpretert a játékba. Igazából, ezt már régebben megcsináltam, csak nem volt kedvem vidiót készíteni, gondoltam, hogy készítek valami szép kis épületet vagy labirintust vele és akkor majd beszámolok róla, de aztán nagyon megcsúsztak a dolgok az utóbbi hetekben és gondoltam, hogy jobb lesz megcsinálni a vidiót most, mint hagyni a következő évre csúszni.

Az, hogy miért jó egy prolog interpreter, most nem lesz bővebben kifejtve. A lényeg az, hogy most úgy gondolkodom a pályagenerálásról, mint egy fix rácson mindenféle részletek elhelyezése (persze ettől még a rács szerkezet nem kell könnyen észrevehető legyen, majd mutatok példát). A részletek viszont több információt kell figyelembe vegyenek, mint annyit, hogy éppen ki teszi le őket, mondhatni környezetfüggőek kell legyenek. Szóval akkor miért is nem készítettem környezetfüggő nyelvet a generáláshoz? Hát azt nem is olyan egyszerű kifejezni nem rácsszerkezeten (a wave function collapse is rácsszerkezeten műxik). A lényeg az, hogy prologgal gyorsan lehet kifejezni mindenféle kombinatorikus problémákat és ezzel szépen lokálisan lehet modellezni a kis részletecskéket (úgy kell rá gondolni, hogy van sok szoba és a részletek az ablakok a falakon, amelyeket nem unalmas helyekre kell tenni, ugyanakkor két egymást érintő falra ugyanoda kell tenni az ablakot, másképp nem ablak :)).

Szóval, hogy mutassam, hogy tényleg prolog van, egyrészt ott van a kódja a legújabb teszt rövid vidiónak, másrészt meg a klasszikus gazda, farkas, juh, káposzta feladatot oldottam meg, amelyben a gazda mindent át kell vigyen a folyó másik oldalára úgy, hogy a végén mindent ő ehessen meg, ne az egyéb aktorok egymást (csak a káposzta nem eszik meg semmit). Ezt a vidiót is összecsaptam, de hát nem volt értelme modellezni őket szépen, mert nem lesznek gazdák meg farkasok a játékban, legalábbis nem az elsőben. Hacsak, nem termekkel reprezentálom őket, amelyek egymást bennfoglalják és mozgatják...

Nagyon reméltem még az év elején, hogy idén befejezem a játékot, de sajnos nem jött össze, de jövőre most már tényleg le kell tudni. Utána majd szépen lassan elmagyarázok megint mindent elölről, a megértés úgyis csak a végéről indulhat egy folyamatnak.

Most akkor nekifogok windowsra portolni a játékot, kíváncsi leszek, hány napot fog tartani...

kedd, október 01, 2024

az játék előrehaladottáról

Elkészült egy újabb vidió.

Jó két éve dolgozom a pályageneráláson. Mielőtt még nekifogtam ezen dolgozni, kellett néhány tesztpálya a többi algoritmus teszteléséhez. Ezeket az elején én építettem fel kézzel C++-ban, mindenféle primitívek egymás mellé rakásából. Ez elég jól működött, aztán amikor eljött a pálya generálás ideje, akkor persze egy jobb rendszert akartam. Igazából mielőtt nekifogtam a projektnek, végig gondoltam, hogy nagyjából mire lesz szükség és akkor úgy gondoltam, hogy ezt valamilyen megszorítás alapú rendszerrel fogom megoldani, nem lesz kedvem meghatározgatni a méreteket magam, hanem csak annyit, hogy mi mivel kapcsolódik és majd a rendszer kisakkozza, hogy akkor mekkora is az akkora. De mire eljutottam ahhoz, hogy dolgozzak is rajta, már nem tartottam ezt olyan fontosnak, elég jól működött az, hogy mégis csak meghatározott méretű és típusú elemeket rakosgatok össze, már csak a szabályokat kellett hatékonyan leírni. Az elején a szabályok json fájlokban voltak tárolva, de nehezen ment az, hogy egymásra hivatkozzanak (azaz, hogy mondjuk az egyik szabályt úgy hívják, hogy kis-ajtó és az kapcsolódjon a nagy-szoba szabályhoz, ugyanis nem tudtam kitalálni egy nomenklatúrát, azaz elnevezési szabályokat, néha a méreteket találtam fontosnak, néha a kapcsolódási pontokat, mondjuk kis-ajtó-előre, stb, mindig kellett keresgélni a json fájlban, több időt vett el a keresés, mint maguknak a szabályoknak a meghatározása). Ezért nekifogtam egy grafikus szerkesztőnek, amiben már könnyű volt a szabályokat kiválogatni, de aztán rájöttem, hogy ezek nem elég általánosak, ezért elkezdtem mindenféle behelyettesítési szabályokat is hozzárakni, aztán egyre többet és többet kísérletezgettem a rendszerrel és egyre több és több elemi primitívre lett szükségem. Szóval bevezettem jó sokat, az eredeti három primitívből (alapvető primitív, (mint mondjuk kocka, lépcső, valamely oldalán nyílt kocka, stb), szabály, ami alapvető primitívek és más szabályok sorozata és változó, amely ezeknek kombinációja és addig próbálkozik amíg egyet alkalmazni nem tud, vagy ha egyik sem megy, akkor hibát jelez) 31 lett (most nem fogom mindet leírni, majd ha véget ér a projekt, talán). Aztán ahogy egyre hosszabbak lettek a szabályok és több lett belőlük, rájöttem, hogy ez a grafikus szerkesztő sem jó, mert nehéz volt egész szabály családokat létrehozni és a válogatásuk is nehézkes volt egy kis listából több száz szabály közül kibökni pont azt ami kell. Meg néha ugye az is van, hogy egy szabálynak vannak különböző verziói, de azok abban is eltérnek, hogy egy hivatkozott szabály megfelelő verzióit használják, ezt a fajta függőséget is lehetetlen volt kifejezni, kézzel csinálni meg munkás volt. De leginkább szerintem az általános copy-paste hiányzott, szóval lemondtam a szerkesztőről, hogy majd lua-ban generálom a szabályokat, ez egy amolyan metaprogramozás. Aztán rájöttem, hogy bizonyos típusú szabályokat még könnyebben is generálhatnék, mondjuk azokat amelyek csak primitívekből állnak egymás után, na erre akkor a lua metaprogramozás metaprogramozásába kezdtem. Aztán kezdtem kapisgálni, hogy jó lenne, ha bizonyos döntéseket bonyolultabb logikával döntenék el, amit nem lehet kifejezni a rendszeremben, vagy nem könnyen. Szóval az előző vidió ugye arról szólt, hogy most már a szabályrendszer kiértékelése, azaz a pálya generálása alatt is meg tudok hívni lua függvényeket, amelyek elérnek valamennyi információt a kiértékelési fából és az alapján bonyolultabb logikát használhatnak, mint annyit, hogy most itt éppen mit próbálunk ki. De mint annyiszor, rá kellett jönnöm, hogy debugger nélkül gyengécske lua programozó vagyok, szóval leges legutoljára rájöttem, hogy jobb lesz, ha C++-ban is írhatok meghívható függvényeket és ha már úgyis itt tartunk, akkor már ne csak egyetlen szabályprimitívet bocsáthasson ki ez a speciális primitív maga helyett, hanem akárhányat. Ez kb. olyan, mint az önmódosító kód volt valamikor, csak nem kell odafigyelni a relokációra. Ezzel ugyanakkor bezárult a kör, visszajutottam oda ahonnan kezdtem, C++-ban tudok mindenféle geometriai primitíveket egymás mellé tenni, ha akarok és ez lesz a pálya. Persze még mindig ott van az az egész kiértékelős infrastruktúra is, amit persze egyre inkább megtanultam használni, de mégis csak értelmezhető valahogy ez az egész, hogy amit két évig csináltam, az haszontalan volt.

Ettől egy hétre eléggé elment a kedvem a melótól.

Talán most kerültem a legközelebb ahhoz, hogy egyszerűen csak feladjam az egészet és visszamenjek munkát keresni. Illett volna előre látnom, hogy olyan típusú döntéseket, mint, "hogy legyen két párhuzamos út, amelyek 5 lépésenként keresztezzék egymást és ha mindig vált a játékos, akkor mindig a másik útra tegyük a jutalmat, de a cél előtt váljanak szét legalább 10 lépésre és már ne legyenek láthatóak", nem fogok tudni kifejezni egy mezei kis környezetfüggetlen grammatikával, amelyben mindig is odafigyeltem, hogy ne lehessen keresni a térbeli pozíció alapján, csak a kiértékelés fát lehessen esetleg bejárni (mert a térbeli keresés lassú 3 dimenzióban). Így aztán a legkisebb kanyar messzire visz a céltól, ha utána sokat megyünk rossz irányba, persze tudok már rátartani a jó irányra más módszerekkel, de akkor már könnyebb lett volna ha egy okos tervet készítek előre és csak azt hajtom végre, nem kell megkeresni a kijáratot, ha úgyis tudod előre...

Na de 5 év után már illene letenni valamit az asztalra, szóval a kognitív disszonancia győzött, újra hegesztem a kis kódokat, már miután befejezem ezt a bejegyzést. A mostani példa meg egy olyan szerkezet, amit nagyon nehéz lett volna a régi módszerrel megcsinálni, a gömb nem összerakható kockákból, mondjuk nem is sikerült valami jól, de aztán kis csápokat rakni belőle a normál vektor irányába, még nehezebb lett volna régebben. Most csak írtam egy kis C++-t és minden megoldódott. Most így utólag nézem, hogy nem annyira diszkó gömb ez, mint korona vírus, de hát ez már csak ilyen.

Persze, most neki lehetne fogni az egész szabály kiértékelési folyamatot láthatóvá tenni a C++ natív függvényeknek, hogy újabb meta szintet vezessek be, de remélem most már tényleg nem kell semmi komoly új dolgot bevezessek és képes leszek megcsinálni a pályákat a rendelkezésre álló primitívekkel. Az a programozó dolga, hogy egyre hatékonyabbá tegye a munkáját, de tényleg el kell jöjjön egyszer az a pillanat, amikor azt mondja, hogy elég volt, így már mindent meg tudok csinálni amit akartam. Remélem nekem eljött ez a pillanat. Már csak ki kell találni a pályák szerkezetét, aztán valami játékmenet szerű sem ártana... Aztán hangok, vindóz, és végső finomítások. Van még meló bőven...

Ez a mém elég jól leírja, hogy mit tanultam az utóbbi 2 évben. :)

szombat, július 20, 2024

az játék előrehaladottáról

Megint tettem kis vidiót, sőt, még egy rövidet is, amit Blenderrel generáltam az éppen generált struktúráról.

Most éppen arról van szó, hogy végre elszántam magam és megcsináltam a két szuperprimitívet a rendszerbe, mégpedig a lua szkripttel definiálható primitívet, meg a sima szabadon repkedő primitívet. Ez utolsó logikus dolog lett volna már akár két éve is, de mivel szabályokat írok, amelyeknek minden primitívje egy-egy voxel primitívet bocsát ki és egymáshoz kötődik, egyszerűen nem volt értelme olyan primitívnek, ami a térben egy fix pontra helyez valamit, ugyanis minden alakzat bárhova rakható. Most viszont van egy új mód ahogy alakzatokat rakosgathatok le, mégpedig lua kóddal kiszámítva, hogy hova is kerülnek és ezért már van értelme fix pozícióra rakosgatni azokat, hiszen az a pozíció nem is annyira fix, kiszámolja valaki, csak nem maga a szabályrendszer. De persze a szabályokat be kell tartani, ha egy szabály hibásnak bizonyul és mindent vissza kell vonni, amit addig csinárt, akkor ezek a fixe helyre került alakzatok is visszavonódnak.

Ezzel most már tényleg úgy érzem, hogy végre minden elérhető amit akarok, ugyanis eddig mindig az volt, hogy meg akarok csinálni egy épületet, vagy labirintust, vagy valami egyebet és persze könnyű lenne lekódolni, de az eddigi szabályrendszerből mindig hiányzott valami. Most pl azon akadtam fenn, hogy azt akartam, hogy különböző magasságból induló lépcsők ugyanazon a magasságon érjenek véget. Ezt sehogy sem lehetett eddig megoldani, de mert bár állíthatok képzeletbeni falat a magasabban kezdődő fal végére, nehéz kiszámítani, hogy az mekkora is legyen, ha mondjuk a két lépcső különböző irányba halad. Amit most csináltam, simán csak össze tudom már hasonlítani a koordinátákat és az alapján írok egy döntést és kész. Ráadásul nem is volt nehéz implementálni, ez a sol3 library eszméletlen jó a Lua-C++ interopban.

Szóval mostmár tényleg csak meg kell tervezni a pályákat, remélem technikai limitációk már nem lesznek, csak az én képzeletem határait kell áttörni, de ahhoz szerencsére van elég referencia a neten, amit használni lehet.

Reméljük legközelebb már bemutatok egy pályát, aminek a struktúrája már nagyjából fix lesz. Kis részletek még valószínűleg sokáig változni fognak, ezért is csináltam mindent procedurálisra, hogy az apró részleteket (ami akár a méret szorzója is lehet) bármikor változtathassak, ahogy alakul ki a vizuális nyelv a fejemben. De a nagyobb struktúráknak már nagyon ideje kezd lenni kikristályosodni.

Ja igen, és végre rájöttem egy dologra, ami végig zavart, de nem tudtam megfogalmazni. A példaként elkészített Menger spongyában az a poén, hogy nem túl nehéz generálni a struktúráját (rekurzív kis kockákok ezek), talán még valahogy a létező szabályrendszerekkel is meg tudtam volna csinálni. Na de az, hogy erre még egy-két-akárhány más szabályt is rátegyek, az elképzelhetetlen lett volna a régi módszerrel, mert én kellett volna kombináljam kézzel a szabályokat. És persze olyanokat, hogy hely függő legyen, nem is igazán tudom hogy csináltam volna, szóval a gömb a kockában és annak egyik fele ilyen, a másik fele meg olyan színű, azt el sem tudtam volna képzelni. Na de lua-ban könnyű lekódolni és bár a vidióban nem az történik, hogy egy külső szabály hívja a lua-t, hanem a lua generál egy fix alakzatot, de ez működik azért már, majd legközelebb jobban bemutatom ezt.

péntek, július 19, 2024

édesen alszol, zörren a tuitter

A háború művészetét már időtlen idők óta tanulmányozza az ember. A mai téma a bombák lesznek.

A bombák maximális hatékonysággal csak akkor vethetőek be, ha pontosan megtervezzük térben és időben a robbanásukat. Ha viszont ez megvalósul, akkor akár egy bomba eldöntheti a háború kimenetét. A háború addig nem ér véget, míg mindkét fél el nem használta az összes bombáját, de ebben sohasem lehetünk biztosak. Mindenki rejtegeti a stratégiai tartalékait, akár még kisebb csatákat is hajlandóak elveszíteni azért, hogy maximalizálni tudja a bombái későbbi hatékonyságát.

Ez az elv meglepő módon sok helyzetre általánosítható.

Demó. Demó. Demó.

Zene. Zene. Zene.

szerda, május 29, 2024

az játék előrehaladottáról

Tettem új vidiót a játékról.

Ez most egy kicsit elméletibb jellegű, de mivel olyan ritkán sikerül készíteni egyet, ezért gondoltam senki nem haragszik meg. :) Itt a blogban egy kicsit többet is fogok filózni, mint amennyi a vidióba került. Egyébként egyetlen próbából felvettem a teljes hangot, olyan is lett, de 10 perc munka még mindig úgy tűnik, hogy elég egy vidió megcsinálásához. Aztán majd ha mesterséges intelligenciával generálhatom a hangot, akkor jobb is lesz, meg értelmesebb is és nem fog napokat tartani amíg kivágosgatom a nyenyegéseket belőle. Na majd ha komolyra fordul a dolog...

Szóval az van, hogy végre eldöntöttem, hogy mégis csak sétálós játékot készítek. Most már nagyon be akarom fejezni a játékot és nincs kedvem a szörnyikékkel is foglalkozni, még ha meg is van már írva a kódjuk nagy része. Inkább maradok a sétálgatásnál és megpróbálok beletenni valamiket amitől érdekes is lesz. Elvégre, a pac-man is sétálgatós játék, csak közben kis golyókat kell felszedegetni és futni kell a szellemek elől. Valamit kell majd nálam is gyűjtögetni és persze kapcsolókat kapcsolni, hogy haladni lehessen. Ilyesmik. Meg amúgy is az az ötlet, hogy megcsinálom a játékot és utána még fogom tovább fejleszteni, azaz updatelem. És ami nem fért bele az elején, az belefér később. De a fejlesztések már kevesebb munkát igényelnek egyenként, akár még amellett is tudom csinálni, hogy visszamegyek dolgozni. Mert hát nem igazán hiszek már abban, hogy ebből meg tudok élni, de talán ha még pár évig bővítgetem a játékot, a végére már kikerekedik belőle valami élvezetes. Szóval a vég csak a kezdet, mint az lenni szokott. De mindenképpen át akarok mihamarabb lépni ebbe az új fázisba.

Szeretném azt gondolni, hogy csak 1-2 hónap választ el, de hát ezt már régebb is gondoltam így és mi lett belőle, lassan 5 éve lesz, hogy nekifogtam a játéknak (bár igazán komolyan csak 2019 őszén kezdtem dolgozni, 2019 nyara még a lazázásról szólt, ami 2020-at tekintve lehet nem is volt olyan rossz ötlet).

A másik dolog meg az, hogy végre eldöntöttem azt is, hogy egyszerűsítem a pályagenerálási problémát. Lassan rá kellett jönnöm, hogy ahogy most csinálom, nem valami jól van. Nem is ez volt az eredeti tervben, én megszorítás megoldó algoritmussal terveztem létrehozni a pályákat, csak amikor a vizibilitást teszteltem, gyorsan írtam ezt a kis szabály alapú rendszert és úgy tűnt, működik jól és akkor már elkezdtem ebbe rakosgatni azokat a dolgokat amelyekről úgy éreztem, hogy hiányoznak. De túl sok gond van az előre meghatározott formákkal, nagyon nem akarnak úgy összepászolni ahogy én akarom, meg amikor keresgetik a megoldást, akkor is végig kell pásztázzák a voxelek terét, nem egy magasabb, térfogat szinten működnek, úgyhogy az a bizonyos megoldás kereső dolog amit beleírtam, eléggé szenved becsületes méretű feladatoknál. Na de már új rendszert nem írok egy ideig, ebből kell kihozni amit ki lehet, ami van. Szerencsére, ha fix méretű építőkockákat használok, akkor könnyebb pászítani az elemeket és könnyebb több előre meghatározott elemet elkészíteni és azok variálgatásával hazudni azt a felhasználónak, hogy itt beza a végtelen lehetőségek tárháza van. És egyébként így könnyebb nekem is elképzelni a dolgokat, amikor szabad volt minden, beza bonyolult algoritmusokat kellett megcsinálni abban a leíró nyelvben amit csináltam, hogy két kocka végre összeérjen jól, itt megy ez magától és szerintem még így is tudok majd érdekes dolgokat generálni. Reméljük nem fog sok hónapot tartani már.

Egyébként most is az van, hogy mindenféle absztrakciókat húzok a kész rendszer fölé, mert programozni könnyebb mint azt mondani, hogy akkor ez most így jól van. Kicsit úgy érzem, hogy nagyon alábecsültem ezt a feladatot. Mostanra már megértettem, hogy kb. az volt a logikám, hogy mivel tudom, hogy kell egymásra rakni a téglákat, ezért meg tudok tervezni egy házat is. Csak azt felejtettem el, hogy igaz, hogy a ház megépítéséhez téglákat kell egymásra tenni, de a terv elkészítéséhez érteni kell azt, hogy mit is jelent a ház. És ez nekem teljességgel hiányzik, szóval hiába generálok valamit, ami 90%-ban úgy néz ki, mint egy ház, nem tudom mi az a 10% ami hiányzik. Persze, csinálhatom azt, hogy megelégszem a 90%-al, de nem tudom, hogy a játékosoknak is elég lesz-e ez. Meglátjuk.

Mindenesetre építgetem az absztrakciókat és amikor már úgy érzem, hogy házak készülnek vele, akkor megállok és akkor már csak tovább kell futtatni az algoritmust és még több házat generál.

Most még a filózásba is belefáradtam, most be is rekesztem ezt a bejegyzést. A lényeg csak annyi, hogy dolgozom én és tuti befejezem a játékot, csak ki kell várni. :)

Ja igen, és a vidióban azt mondtam, hogy bugos a rendszerem, de aztán rájöttem, hogy nem bugos, igenis jól működik, meg is írtam kommentben, hogy azért mutat kevesebbet a pályából, mert csak annyi látszik a kezdőpontból, anélkül, hogy kimennénk a pályát magába foglaló térfogatból. Ha növelem egy kicsit a térfogatot, akkor látszik az egész. Na reméljük nemsokára lesz valami látványosabb pálya is amivel ezt bemutathatom. Addig is, lehet nézni a rövid vidiókat amelyekben tesztelgetem az algoritmusokat. Gyakran ezek sem sikerülnek valami jól, pl. ez utóbbi rendesen kiégett, de mivel kb. 3 órát dolgozik rajta a Blender míg megcsinálja a 4k-s vidiót, ki nem dobjuk, majd legközelebb jobb lesz. :)

csütörtök, május 16, 2024

gameloft kolozsvár 2010-2024

Felröppent a hír, hogy bezár a kolozsvári Gameloft iroda. Bár én már vagy 8 éve (2016 áprilisától) nem dolgoztam ott, azért valamennyire mégis rosszul esik ez a dolog. Pedig akár lehetnék kárörvendő is, meg "ugye megmondtam", de mégsem vagyok boldog. Pedig nem hiszem, hogy valaha is visszamentem volna, még a tudatalattim sem hitte el, hogy egyszer még újra egy jó hellyé válhat a cég ahol érdekes dolgokon lehet dolgozni. Annyi a szerencsém, hogy elkaptam a kolozsvári aranykort és mivel az első cég volt ahol dolgoztam, egy elég atipikus bevezetést kaptam a céges világba, ami talán a hasznomra vált később. Talán nem.

Azt hiszem, az általános következtetésektől el fogok most tekinteni, mert hát inkább olyan dolgokat tanultam, amelyek némileg rombolják azt az idealizált világot amit a cégek próbálnak terjeszteni magukról. Persze, mindenhol szürkébb a valóság mint ami a prospektusban van, néhol persze az van, hogy a prospektus túloz nagyon, nem lehet utolérni, néhol meg a valóság a nagyon fekete, itt azért nagyon sokat jelentett az, hogy az emberek igazán szerették amit csináltak és együtt könnyebb túllépni a szar dolgokon.

Szóval inkább leírom azt, hogy miken dolgoztam.

Én azon kevesek (talán 8 ember) egyike voltam, aki ott volt a stúdió nyitásánál, 2010-ben. Éppen Románia legjobb egyeteméről (most, akkoriban nem voltak ezek a listázások annyira témában, vagy csak én nem tudtam róla) jöttem el, igen szar szájízzel. Ehhez képest játékokon dolgozni és rendesebben megfizetve lenni maga volt a mennyország. Először az volta a dolgom, hogy a NOVA ipades verzióját (ami már nagy felbontású volt) visszaportoljam a iphone-os verzióba, ami szintén nagyon akarta támogatni az éppen megjelenő iphone 4-es nagy felbontását. Hát, eltartott ez egy darabig, de összejött, persze a grafikában volt segítségem. Aztán beraktak a bukaresti fejlesztésű NOVA2-re valami bluetoothos hálózati cuccot írni (ezt teljesen el is felejtettem, míg rá nem jöttem, hogy a mobygameson van érte kreditem), ez egyébként egész jól ment, emlékszem, mindenki mindig szidta a bluetoothot, de akkoriban iphone-on egészen jól ment a dolog. Aztán ha már volt némi tapasztalatom a NOVA2-vel, akkor egy update-t is kellett gyártsak hozzá, amelyben vásárolni lehetett két új multiplayer pályát (amit persze nem én készítettem, hanem a profi modellezőink Kolozsváron) és kijavítottam egy csomó bugot is, amelyek benne maradtak a végső nagy hajrá közben. Emlékszem, vagy 15 buildet kellett leadni amíg meg nem unták, hogy velem fixáltassák meg az összes bugot ami a játékban maradt, már az elsőben megcsináltam mindent ami eredetileg a feladatom lett volna (a két új pálya integrálása, az új menük, fizetés integrálás, ez-az). Jó, néha fixáltam bugot úgy is, hogy befejezhetetlenné vált a játék, de hát nem tehettem róla, egyszer se játszottam végig és hát elég nagy spagetti volt az egész. Azért sokat tanultam belőle persze.

Ez kb. az első 6-8 hónap volt. Aztán volt egy rövid ismerkedés a 3DS devkittel, de utána eldőlt, hogy megkapja a kolozsvári stúdió az Asphalt 6 portolását PS Vita-ra, persze más néven, ja és a VITA megjelenésére el kellett készülni (azaz launch title voltunk). Elég mély víz volt, én csak a közepén kerültem bele a projektbe, csak a maradékot kaptam programozni, szóval jó sok interfészt írtam, meg némi hálózatokat, meg fene tudja még mit. Mondjuk gyakran volt olyan, hogy megindult egy bug, hogy hibás érték jelenik meg, nosza javítsam ki. Persze a hibás eredmény azért íródott ki, mert hibás volt a számítás mögötte, de ha már úgyis én kell kijavítsam a bugot, akkor letisztázhatnám, hogy mit és miért kéne ott kiszámolni. Emlékszem olyan bugok voltak az eredeti kódban, hogy kis szerencsével egy-két kör után ki lehetett maxolni az autódat, annyi pénzt össze lehetett szedni. Hiába, a szorzók nagyon mocsok kis dolgok tudnak lenni. :)

Aztán elkezdtünk egy stratégiai játékon dolgozni, itt mivel már az elejétől ott voltam, megkaptam a mesterséges intelligenciát. Ez jó volt, nagyon poénosak a mesterséges intelligencia bugok, aztán amikor már kezd játékszerűvé lenni a dolog, egészen érdekes is tud lenni. Aztán amikor már jól ment a dolog, puff, átraktak a bukaresti nagy projektre, a The Dark Knight Risesra. Úgy emlékszem, én voltam kb. a 15. programozó és még utánam is jött néhány ember. Én az utolsó 4 hónapban dolgoztam rajta, Bukarestben laktam, néha egy harkovi lakótárssal, aki valami hálózatos projekten dolgozott itt. Na, ez már nagyon söprögető munka volt, minden szart csináltam ami senkinek sem kellett. Viszont itt kezdtem sok hang integrálási feladatot kapni, amire rá kellett jönnöm, hogy nagyon élveztem. A hangok azért szoktak a végén integrálódni egy játékba, mert általában végleges animációkhoz szokás hangot gyártani és az animációk csak a végén válnak véglegessé. Viszont akkor aztán nagyon sok jön. Azért tök jó volt, úgy játszani a játékot, hogy egyetlen effektus hallatszik és azt nézem, hogy jókor szólal-e meg, jól áll-e meg és indul-e újra. Ja, meg interfészt és fizetős dolgokon is dolgoztam, ez már tényleg az én keresztem lett, pedig soha nem kértem. :) Egyébként egész jó kis játék lett ez, talán mobilokban az egyik igazi AAA játék volt abban az időben, azt hiszem, vagy 60-an dolgoztunk rajta. Ráadásul megismerkedtem egy budapesti designer sráccal, aki aztán visszament Budapestre mert ott is nyitott stúdiót a Gameloft, amit már rég be is zárt. Az a 4 hónap kb. arról szólt, hogy vagy dolgoztam, vagy söröztem ezzel a sráccal (néha már az úton megkezdtük, egész be a Győzelem térig, néha busszal bementünk a régi központba és ott egy kis kocsmában, ahol 100 féle sört lehetett inni variálgattuk a búzasöröket az ipákkal és belga gyümölcsös cuccokkal, ekkor már Pesten megkezdődött a kézműves sör forradalom, de nálunk még nem híre-hamva se volt), vagy aludtam. Néha meglátogatott E hétvégenként, akkor nem dolgoztam.

Amikor véget ért a betmen játék, ősszel megnéztük a moziban és láttuk, hogy még arra sem voltak hajlandóak, hogy elmondják nekünk, hogy ki lesz az igazi főellenség (gondolom nem írok le nagy titkot, hogy Selina az, nem Bane, féltek, hogy kiszivárogtatjuk a nagy csavart a végén). Én egyébként semmit sem láttam a film készítőivel történő kommunikációról, csak néha nézegettem, hogy milyen fura pályák jelentek meg, ilyen hülyeséget tuti csak a filmből meríthettek. Szerintem ki is dobták az érdekesebb dolgokat a végső játékból, bár ezt se játszottam végig soha, azért a szerkesztőben végig kellett kolbászolni minden pályát, amikor rakosgattam be a pályaelemek hangjait.

Aztán amikor visszajöttem Kolozsvárra, a stratégiai játék már szinte kész volt, de rájött a vezetőség, hogy Clash of Clans klónt kéne gyártani. Én megint csak sokadik programozó lettem a projekten, de szerencsére aki átvette a mesterséges intelligenciát tőlem, az el is ment nemsokára, szóval miután ő átírta azt amit én csináltam, én harmadjára átírtam azt amit ő csinált. Elég nagy katyvasz lett belőle, ráadásul odatettek, hogy az útkeresést egy harmadik ember írja, aki nagyjából az egyik első programozó volt a projekten és válogathatott abban, hogy mit akar csinálni. Ebből még nagyobb katyvasz lett. De azért talán ez volt a legélvezetesebb projekt amin dolgoztam és itt végre elég sok mesterséges intelligenciát írtam (persze ez csak egy vicces megnevezés arra, hogy az ember külön rendszert ír az ifek menedzsmentjére, amelyek az animációkat pakolgatják egymás után). Meg hangot is integráltam, ez igazán vicces volt ebben az esetben, néha több tucat kis emberke mozog egyszerre, nem teljesen triviális, hogy ne legyen katyvasz belőle. Aztán egy év késéssel megjelent a Total Conquest és bár soha meg sem közelítette a másolt játék sikerét, azért azt hiszem elég sikeresnek számított a mi berkeinken belül is.

Viszont amikor már az updatelési fázisba ért a játék, egy idő után meguntam a szarevést és elhúztam a Garminhoz, ami egy tök jó hely volt, de egyszer még visszacsábítottak a Gamelofthoz azzal, hogy Witcher 3-at készítsünk telefonra. Nagyon pöpec kis játék volt az, amikor én becsatlakoztam, de ekkor is már sokadiknak érkeztem, mesterséges intelligencia már nem jutott, de jutott jó sok hálózatok meg fészbuk integrálás. A hálózatokkal az a baj, hogy a szerverek néha megadják magukat és olyankor persze a programozó rontott el valamit, nem a szervert kell újraindítani. Amikor már sokadszorra baszogattak olyan dolgok miatt, amelyekről nem tehetettem, leléptem megint (és utoljára). Mondjuk az is volt, hogy én annyira mesterséges intelligenciát akartam írni, hogy a hálózati rész is egy teljesen szabadon konfigurálható viselkedés fával implementáltam (amit a játék mesterséges intelligenciájából vettem át), de ez nem nagyon tetszett a bukaresti hálózatos programozóknak és elkezdtek mindenféle okot felhozni, amiért nem lesz ez így jó, amelyekre persze én tudtam volna megoldást találni és amúgy is mindig működtek a dolgok amiket csinálnom kellett, általában nem is szálltam el a megoldással, főként annyira nem amennyire sokan hajlamosak voltak, bár ez a behavior tree alapú hálózatkezelés azért kicsit unortodox volt, azt meg kell hagynom. Ez a játék végül Iron Blade néven jelent meg, de közben elveszítette a lelkét.

Ez után már nem készültek nagy játékok Kolozsváron, csak pár kisebb cucc, meg egyre inkább a többi stúdió munkájába kellett besegíteni, de ez azzal is járt, hogy megszűnt a túlórázás is.

Ezt az egészet így leírva, azt hiszem az egyik legfontosabb tanulság az, hogy akkor érdemes egy projektbe beszállni, amikor indul, utána már csak a szarevő melók jutnak és ezt eléggé alá is tudom írni. Persze igazán nagy cégeknél több projekt indul, könnyebb váltani, ha van hajlandóság rá minden oldalról. Én mindenesetre nagyon szerettem volna grafikát programozni, szerintem értettem is hozzá legalább annyira mint bárki más ott (tekintve a demós hátteremet is), de még csak közelébe sem kerültem (egyszer kaptam egy feladatot, de csak azért, mert aki a grafikát programozta nem tudta megoldani és nagyon nehéz is volt a létező rendszerben, a megoldás az volt, hogy kivettük a gondot okozó dolgot a játékmenetből, úgyis kifelé állt a rúdja). De aztán csináltam egy csomó olyan dolgot is, amiről nem gondoltam, hogy élvezni fogom, pl. a hangok, de igazából az a legvagányabb, amikor az ember látja, hogy az ő munkája is hozzátesz a projekt fejlődéséhez, még ha nem is ő csinál valamit, az egész projektet magáénak érzi. Aztán persze amikor rossz döntések születnek, akkor az ő szívében is forgatják a kést. Én ezt nem fogadtam el igazából, amikor mindig tovább és tovább mentem cégről cégre. De így megismertem egy csomó új embert, dolgoztam sokkal nehezebb feladatokon is, sokkal furább architektúrákon is, rájöttem, hogy nem csak a francia főnökök lehetnek párhuzamosak azzal ami a dolguk lenne, hanem a német meg az amerikaiak is. Állítsuk meg Brüsszelt. Meg Párizst. Meg Kansast. Meg Stuttgartot. Meg Kolozsvárt is. Egy percnyi tiszta kocsmazajt megér azért a Gameloft is.

Annyi még, hogy egy másik cégről sem fogok írni ebben a blogban, a többi hely ahol dolgoztam, sokkal kiegyensúlyozottabb volt, ugyanakkor sokkal unalmasabb is. Persze néha az unalom jó. Néha meg nem. Az biztos, hogy a Gameloftban az emberek voltak a legjobbak, szerencsére még most is jó haver vagyok jó néhányukkal, időnként még találkozunk is sörözni. Remélem ez még sokáig így marad.

Ja igen, és még egy valamit megtanultam. Bármilyen problémát meg tudok oldani, ha eleget dolgozom rajta. Talán ezért mertem belevágni a saját játék fejlesztésébe is, meg talán ezért is tart ilyen sokat. :) Na de egyszer vége lesz és akkor jó lesz. Vagy nem. :)

csütörtök, május 09, 2024

száz forintnak tíz a fele logaritmikus skálán csuhajja

Van egy számítógép. 1% az esélye, hogy a felhasználója programozó lesz. 10% az esélye, hogy 5 év után eleget tud már, hogy játékokat írjon és el kezdjen játékokon dolgozni. A számítógépek eladása évente 30%-al nő. Minden szép és jó. Ezek a 80-as, 90-es, 2000-es évek. Aztán a számítógépek eladása stagnálni kezd, de a beérő játék programozó generációk éppen a mobil telefonokra kezdenek dolgozni, mert ott van éppen az óriási növekedés. Ezek a 2010-es évek. A 2020-as évekre már a mobil telefonok eladásai is stagnálni kezdenek és a beérő játék programozók megtapasztalják azt, hogy milyen egy stagnáló iparban dolgozni. Ha most jön a mesterséges intelligencia forradalom, akkor már jó kérdés lesz, mi nő ki belőle.

A következtetés házi feladat.

Demó. Demó. (ha a Debris már volt)

Zene. Zene.

csütörtök, február 08, 2024

az játék előrehaladottáról

Tettem fel új vidiót a játék készültéről.

Most csak nagyjából egy hónapnyi munka volt az előző vidió óta, de egy elég fontos változás állt be, ezért összedobtam egy próbából a vidiót, most meg írom a blogot hozzá.

Szóval az történt, hogy nekifogtam kis teszteket készíteni bizonyos pálya típusokhoz, egyébként megoldottam egy olyan problémát is, amin szinte azóta gondolkodtam, amióta nekifogtam a pályagenerálásnak. Szóval én ugye szabályokat írogatok és azokat kiértékelem. A kiértékelés mélységi bejárást jelent, mert az ugye természetes, a programok forrás kódja is mélységi bejárásban hajtódik végre, azaz mondjuk "fentről lefelé" és amikor egy szabályt talál, akkor abba "belemegy" és végrehajtja amíg minden utasítást végrehajtott, vagy hibát talál. Ez szép, csak van egy baj vele, hogy ha egy szabály nagyon ágas-bogas geometriát generál, akkor elfoglalja a teret a többi szabály elől, mert mondjuk olyan helyekre is befurakodik ahonnan egy következő szabály kiértékelése is generálhatna valamit. Ezért lehetne mondjuk azt csinálni, hogy párhuzamosan értékelem ki a szabályokat, azaz szélességi bejárást végzek, de ezzel több probléma is van, az egyik az, hogy még mindig egymás útjába állhatnak, meg akkor nem hathatnak egymásra mondjuk úgy, hogy az első beállít valami változót amiről a másodiknak tudnia kéne, ilyenek. Meg persze implementálni is nehezebb. De azért mégis csak jó ötletnek tűnt az, hogy a kiértékelési fát mindenféle random pontokon terjesszem ki. Na és ezt sikerült megoldani végre, ugyanis a szabályok paraméterezésére már régebben megírtam, hogy a kiértékelési fa egy ágát be tudják küldeni egy szabálynak, de most azt is megcsináltam, hogy ne csak az ágát, hanem a gyökerét is, ráadásul van egy olyan lehetőségem is, hogy keresek ezeken az ágakon megjelölt leveleket és mondjuk kiválasztom a legközelebbit vagy a legtávolabbit egy másik levéltől (térben). Na most már nem csak távolság alapján választhatok, hanem random módon is és kiértékelés közben megjelölhetem a leveleket úgy, hogy itt van egy kapcsolódási pont, így gyakorlatilag bárhol kiterjeszthetem a fát. Ez igazi sikerélmény volt, még ha nem is tudtam elmagyarázni könnyen érthetően.

Szóval készítgettem ilyen kis teszteket nagyon egyszerű, egyen méretű elemekből, de nagyon fárasztó volt a szabályokat újra használni, pedig csináltam egyszerű metaprogramozási primitíveket is. Mégis csak forrás kódban gondolkodom én, megszoktam a lehetőségeket amelyeket ad, az általam készített szerkesztő igazából csak egyetlen igazi segítséget nyújtott, mégpedig a szabályokat egy listából lehet kiválasztani, nem kell megjegyezni őket. Sajnos ezek a listák igencsak megnőttek, erre kitaláltam a közösségeket, de még így is túl nehézkes a rendszer, arról ne is beszélve, hogy nincs benne keresés és átírás funkció sem, sem másolás és beillesztés, ami minden szöveg szerkesztő legfontosabb funkciója. Szóval már régóta gondolkodtam arról, hogy mégis csak vissza kéne térni a LUA-hoz, hogy szkripteljem, azaz valamilyen szinten metaprogramozzam ezeket a szabályokat, de mindig arra gondoltam, hogy mennyi energiát is beleöltem a szerkesztőbe és persze már egész gyorsan tettem bele az újabb és újabb primitívek paraméterezését (ami mondjuk egy forráskód alapú rendszerben egyébként is zéró munka lenne). De aztán csak győzött a józan ész és két nap alatt meg is lett a LUA programozás, utána több időbe tellett az, hogy átírjam a teszt eseteket, amivel ellenőrzöm, hogy a rendszer ugyanúgy működik-e mint régen, ha valami komolyabb változtatást eszközölök.

Na de most már kész van minden, gyárthatom a szabályaimat kódból, reméljük végre tényleg jól begyújtom a rakétákat ami a pályák generálását illeti. Persze azért arra is oda kell figyelni, hogy megint ne szálljon el velem a ló, most még könnyebb kiterjeszteni a rendszert, már így is minden bekerült ami eszembe jutott az utóbbi időben, egyes dolgok fölöslegessé is váltak, de nehezebb kivenni őket mint nem használni. :) Viszont kicsit félek, hogy most hogy imperatív módon is generálhatom a szabályokat, kicsit rá fog szállni a rendszerben rejlő deklaratív lehetőségekre.

Na jó, ez most nagyon absztraktra sikerült, szóval az a lényeg, hogy dolgozom még...

Más. Kezdtem készíteni kis rövid jótúb vidiókat is néhány ilyen kísérlettel, egy-egy még kapott is pár megtekintést. Szóval kicsit gyakrabban lesznek ezentúl vidiók arról, hogy éppen mivel szórakozom. Egyébként Blendert használok a rendereléshez, de valami eszméletlenül megbúgatja a szegény gépemet, mondjuk nem is igazán értek hozzá, hogy hogy kell okosan renderelni, 4k-ba nyomom ki a 300 képkockát, minden képkocka 25-30 másodpercet tart, szóval olyan két óra az egész. Kicsit fogom is a fejem, hogy ez talán túlzás, de jó lenne kicsit tanulgatni a Blendert is, később még hasznos lesz, ha mondjuk kicsit bonyolultabb anyagokat akarok a kis kockákra kifeszíteni, meg esetleg 3d filmet akarok készíteni, mindez relatív egyszerű beállítás Blenderben. Egyébként elég vicces, de gyakran hibásan rendereli a kis kockákat, amikhez én írtam kézzel egy kis python szkriptet, mert a szerkesztőben minden jól néz ki, de a renderelőben egy-két kocka lemarad, vagy fekete. Mondjuk már maga az import is nagyon sokat tart, lehet, nem egyenként kéne berakni a cirka 4-5000 kockát, mert mindegyik után újraszámolja a bvh-t, vagy akármit, amit használ a rendereléshez, de az az igazság, hogy élvezem, hogy kicsit hibásak a renderek, mert így legalább őszinte maradok magamhoz, hogy még lenne mit dolgozni az egészen, de most egyelőre ennyi időm és kedvem volt. Meg amit renderelek sem olyan eget verő cucc, szóval ilyen keleti filozófia az egész, hogy a tökéletesség unalmas.

Na jó, mostmár nagyon be kell fejezni ezt a bejegyzést, várnak a kis kockák, legközelebb egyre több és szebb lesz. :)

péntek, december 22, 2023

az játék előrehaladásáról

A tegnap új vidiót tettem fel a játék készüléséről.

Idén mindössze két vidiót termeltem, nem valami sok, de dolgozni azért dolgoztam eleget, most egy kicsit hosszabban fogok írni, mert idén már nem fogok többet dolgozni és talán az sem árt, ha egy kicsit jobban kiöntöm a lelkem a témában.

Szóval még mindig a pályageneráláson dolgozom. Amikor a projekt kezdete előtt végig gondoltam a teendőket, úgy gondoltam, hogy nagyjából két hónap alatt befejezem ezt a dolgot. Nos, 2022 július 22-én tettem fel az utolsó vidiót aminek nem volt köze a procedurális generáláshoz, tehát olyan 17 hónapot dolgoztam rajta. Persze, még az sem biztos, hogy befejeztem, de erről később.

Szóval miért is kell nekem procedurális pálya generálás? Bizonyára 17 hónap alatt tervezhettem volna kézzel is 20-30 pályát és akkor már sokkal előbb lennék, talán a játék is be lenne már fejezve. Nos, ez így igaz, de ez a projekt nekem egy kicsit arról is szól, hogy ami nagyon érdekel, arra szánok időt, hogy felfedezzem, vagy megértsem. Márpedig a pálya generálás egy olyan dolog, ami régóta érdekelt, de sosem tudtam beleásni magam. Most szerencsémre lehetőség adódott, hogy addig ássak amíg kedvem tartja és hát jó mélyre sikerült leásnom. Bizonyára ha kézzel terveztem volna meg azokat a pályákat, abból is sokat tanultam volna, de az automatikus generáláson dolgozva is sokat tanultam, ráadásul azért így is szükség lesz arra, hogy sok mindent kézzel csináljak.

Van azért egy másik ok is. Ha írok egy jó pályagenerálót, akkor elvileg végtelen mennyiségű pályát generálhatok, ami jó pályák esetén egy jó dolog. Ha unalmasak lesznek a pályák, akkor fölösleges a végtelen számú, senki sem fog többel játszani mint 2-3. Egyelőre még nem túl jók a pályák, de nem is tettem túl magasra a lécet, ebben az első kísérletben csak egyszerű téglalap alakú szobák összeillesztéséből készült pályákat gyártottam, főként a Wolfenstein 3D-t használva inspirációnak. Igazából még csak nem is érik el azt a szintet a pályáim, mert tényleg csak véletlenszerűen vannak összeillesztve a téglalapok, mert már ezzel is volt elég gondom. Persze, készítettem néhány kisebb tesztet néhány bonyolultabb struktúra (mint mondjuk egy nxn-es cellákból álló fix szobaméretű labirintus, vagy egy 2xn-es szoba elhelyezés középen folyosóval, vagy csillag alakú berendezés) elkészítésével és azok mentek a kis tesztben, de a véletlenszerűen generált illesztések jobban feladták a leckét. Ugyanis már a munka elején kezdtem aggódni, hogy hogyan is fogom megoldani a rövidítések problémáját, ugyanis ahogy én a kifejezéseimet kiértékelem mélységi sorrendben, nem tudnak egymásról az egyes primitívek a különböző kiértékelési ágakon, csak annyit tudnak, hogy elkerüljék egymást. Semmiképpen nem akartam azt, hogy keresgéljek a térben kapcsolódási pontokat, mert az nagyon lassú és egy csomó gonddal is járna. Ezért sokat gondolkodtam ezen a problémán, találtam is rá néhány potenciális megoldást, de egyik sem volt elég jó, a mostani módszer sem olyan nagyon jó, de azt hiszem, megteszi. Azért van szükség a kiértékelési fa ágainak a kommunikációjára, mert ezzel tudom összekötni a szétágazó szobákat és arra meg azért van szükség, hogy rövidítéseket hozzon létre két térben közeli szoba között, azaz ha mondjuk van egy elágazás (azaz egy szobából két ajtó nyílik, (két különböző falon, de akár egy hosszú falon két ajtó is nyílhat, ha van hely)), akkor az egyik ajtót választva és végig küzdve a soron következő szobákat, ne kelljen már visszamenni az elágazásig, mert az unalmas, ugyanis már mind kiöltük ott a szörnyikéket. Inkább lehessen a másik elágazásra átmenni valahol és onnan folytatni a gyilkolászást, persze ha valaki mindent meg akar keresni a pályán, akkor valószínűleg muszáj lesz visszamennie már látogatott részekre, de az már az ő dolga, hogy betanulja, hogy milyen sorrendben érdemes választani az elágazásokban az irányokat, hogy a lehető leggyorsabban bejárhassa a pályát. Szóval úgy érzem, ilyen rövidítések nélkül eléggé nehéz fenntartani az adrenalin szintet, ezért mindenképpen meg kellett oldani. A mostani megoldás egyébként valami olyasmi, hogy a kiértékelés során a már kiértékelt részekre át lehet küldeni egy referenciát a kiértékelés alatti szabályba és az végezhet néhány egyszerű műveletet, pl. kereshet egy bizonyos címkével ellátott primitívek közül a lehető legközelebbit vagy legtávolabbit, meg megpróbálhatja összeadni a térfogataikat (esetleg a falakra elhelyezett markereknek) és megnézni, hogy van-e hely az összeadott térfogatnak is, sőt még kérhet ajtó nyitást is a már létező primitív falára. Lehet, hogy egyszer oda is el fogok jutni, hogy enumerálnom kell a címkézett primitíveket és ezt az enumerációra ki kell terjesztenem a backtrackinget is, ezen is gondolkodom most.

Egyébként nagyon érdekes játék ez, hogy mit tudjon a rendszer, néha úgy érzem, hogy már elég mindent tud, ha van valami problémám, akkor inkább próbáljam megoldani a létező dolgokkal, máskor meg minden ami eszembe jut, bekerül. Az elején, csak három primitívre gondoltam, az alap formák, a szabályok, amelyek mindig formával indulnak (hogy fixáljam azt, hogy a térben hol is fogom kiértékelni, de időközben ezek a formák lehetnek átlátszóak is, szóval ez nem túl erős megkötés) és a változók, amelyek véletlenszerűen felvehetik egy szabály vagy egy forma értékét. Na, most már van vagy 20 ilyen primitív, majd ha véget ér a fejlesztés, mindenképpen fogok készíteni egy vidiót arról, hogy mire is képes a rendszer, mindenesetre mindenféle dolgokra lett szükségem. Időközben rájöttem, hogy én nagyon programozó szemmel nézem még mindig ezeket a feladatokat, szóval még végrehajtási feltételeket is tettem be, olyanokat mint pl ha sikerült egy al-szabályban létrehozni egy primitívet, akkor érjen véget ez a szabály sikerrel (ez egy fajta "if", de van ennél sokkal explicitebb "if" is) vagy a büdzsé ha nem merült ki, akkor érjen véget a szabály sikertelenséggel amikor újra belép a backtracking és megpróbálja kielégíteni a szabályt, meg ilyenek. Azt kell mondjam, hogy igazán élvezem is ennek a szabályrendszernek a pofozgatását, pedig nem egy túl vicces dolog, általában tépem a hajam, hogy miért nem mennek úgy a dolgok ahogy szeretném, aztán mindig találok egy esetet amire nem megy az algoritmusom. Odáig jutottam, hogy kénytelen voltam debuggolási funkciókat beépíteni, egészen pontosan, brékpontot, meg lépésenkénti végrehajtást, hogy lássam pontosan mi történik. Sajnos nem volt valami jó döntés ez a szerkesztő amit írtam, jobb lett volna, ha inkább forráskódszerű valamit írok, még ha nem is imperatív nyelven, hanem deklaratívon, de nagyon hiányzik a teljes forrás átlátása, meg a keresés és kicserélés. Kommenteket kell már fűzzek gyakran a szabályok primitívjeihez, mert erőst felejtek és persze már meta-programozásra is szükség van, ami nagyjából csak annyit csinál, hogy kicserél primitíveket, vagy változókat, vagy szabályokat.

Szóval nem mondanám, hogy jól mennek a dolgok, de azért kitartok már ennél a procedurális generálásnál, mert lehetővé tesz még egy dolgot azon kívül, hogy rengeteg pályát lehet generálni. Mégpedig azt, hogy minőségileg másfajta pályák generálását teszi lehetővé, ugyanis a klasszikus pályaszerkesztésben az ember kénytelen koncentrálni egyetlen helyes bejárási útvonalra, mert olyan munkás a processz. Ha generáljuk a pályákat, akkor elvileg akárhány útvonalat generálhatunk a pályán belül, ami sokkal inkább megfelel a valóságnak, ugyanakkor persze ennek az az ára, hogy az egyes útvonalak nem annyira jól tervezhetőek és nem is annyira szépek és részletesek. De ezzel én már rég kibékültem, a falaknak még mintázata sem lesz, csak egy fix színe (legalábbis amíg meg nem gondolom megint magam), szerintem úgyis a geometria és a világítás adja a pálya érdekességét, nem az, hogy mi van a falon. Persze amíg NaissanceE klónt akartam írni, ez jól adta is magát, ugyanis ott is egyszínűek a falak. De megint megváltoztattam a tervet, mégsem sétáló-szimulátort írok először, mivel oda valami nagyon egyedi pályák dukálnának, inkább megmaradok az fps-ek világában, ahol nem csak a világ számít, hanem a szörnyikék is, akik benépesítik. Persze ezeket vásárolni fogom, az nagyon nem az én asztalom, hogy készítsek is ilyeneket, bár gondolkodtam egy kicsit generált robotokon (petscii robots mintára).

Hmm, én eredetileg arról akartam írni, hogy milyen jó, hogy a saját fejem után mehetek ebben a kérdésben is, de megint elvesztem a technikai részletekben. Fogok még filózni itt eleget, főként ha véget ér a fejlesztés. :)

szerda, július 26, 2023

az játék előrehaladottáról

No, megint tettem fel új vidiót. Az előzőt 7 hónappal ezelőtt tettem fel, ez volt a legnagyobb kimaradás két vidió között, legalábbis eddig. Az van, hogy általában akkor teszek fel vidiót, ha valamit befejezek és most a szabályrendszeren és annak a szerkesztőjén dolgoztam és ez egy olyan dolog, amit sose lehet befejezni, mindig lehet valami új dolgot betenni, vagy valamivel könnyíteni a szerkesztő életén. Szóval az utóbbi hét hónap alatt sikerült másfélszer újraírni az egészet és még mindig nagyon elégedetlen vagyok az egésszel.

Az a baj, hogy az épületek morfogenézise egy elég nehéz probléma amit én rendesen alulbecsültem és még csak nincs is egy jó absztrakció kialakulva róla a fejemben. Úgyhogy a szabályrendszer elemei eléggé szétszórtak. Az elején azt hittem, hogy három alapelem lesz, szabály, voxelekből álló primitív és változó, amivel majd a véletlenszerűséget viszem be. Sajnos ezek nem nagyon bizonyultak elégnek és elkezdtem hozzáadni dolgokat amikre szükségem volt, pl. megszorítás, hogy hányszor lehet egy szabályt használni, vagy mondjuk virtuális térfogatelem, amely összeadja más primitívek térfogatait, meg egy csomó csere lehetőség, amivel egy szabályban valamilyen elemet ki tudok cserélni, mondjuk egy primitívet, vagy egy másik szabályt. Ja és persze a szabályok sikerrel alkalmazhatóak, vagy sikertelenek lehetnek, de egyes pontokon a sikertelenség csak annyit jelent, hogy véget ér a szabály végrehajtása azon a ponton, más helyen meg ha sikertelenek vagyunk, akkor az egész szabály sikertelenné válik. Ez azért kell, hogy ne építsünk lépcsőt a semmibe, szóval ha a lépcsőnek van is hely, de a szobának ahova vezet nincs, akkor az egészet visszavonjuk. Aztán kb. egy hónapja arra gondoltam, hogy elvileg meg kéne tudjam oldani a 8 királynő problémáját, mert abban is a királynők 8 különböző pozícióban lehetnek, tehát 8 lehetőség közül választunk és az, hogy ne üssék egymást csak annyit jelent, hogy mindenki azokra a kockákra amiket ütne, kitesz egy-egy kis foglaló kockát, amit majd később leszedünk, hogy ne látsszanak. Ez mind szép is volt, de sajnos 5 királynő után megállt a rendszer és rájöttem, hogy ugye az a baj, hogy bár talál az 5. királynőnek jó helyet kipróbálva a 8 lehetőséget, a következőnek már nem és vissza kéne menni az előző királynőkhöz és más lehetőséget próbálni, nem csak az első megfelelőt. Ezt hívják magyarul backtrackingnek, érdekes módon középsuliban a francnak sem tudtam felfogni, pedig mondjuk assemblyben azért elég jól elboldogultam, de ilyen bonyolult algoritmus azért nem fért a fejembe. Persze utólag megértettem, meg most már elvileg írtam egy egészen absztrakt verziót is, de amíg sikerült belekalapálni a szabályrendszerbe, az szinte egy hónapot tartott. Kezdve mondjuk azzal, hogy azelőtt a szabályok állapota egy verem volt, sosem tértem vissza egy előző szabályhoz ami nem volt alattam a veremben, de így fát kellett csinálni belőle, de csak az egymás utáni lépéseknél, a szabály kompozíció maradhatott a régi. Na mindegy, szóval sokat szívtam ezzel, de végre megy, legalábbis a 8 királynőt megoldja. Meg gondolom a labirintusban is megtalálja majd a megoldást, ha mondjuk utólag ki akarom díszíteni a jó utat.

Na jó, szóval elég sokat dolgoztam az utóbbi időben, csak nem sok látszata van, de remélhetőleg sokat javul a produktivitásom az elkövetkezőkben amikor a pályákat kezdem tervezni. Javítottam pl azon is, hogy nem kell fejben kitaláljam azt, hogy fogom összekötni a kis téglatesteket, ha hibás az összekötés, akkor villogva megmutatja, hogy melyikkel van gond (mondjuk csak 1 téglatestre megy, egy egész szabályra már nem, lusta voltam megírni általánosabban és úgyis minden szabály téglatesttel kezdődik (hogy a pozíciója fixálódjon)).

Egyébként nagyon érdekes párhuzamokat lehet találni mindenféle programozási nyelvi fogalom és az én szabályrendszerem között, pl. ez, hogy minden szabály fix valamivel kell kezdődjön ez arra hasonlít mint ami az eager meg a lazy evaluation, vagyis előre kell tudjam, hogy hova applikálom a szabályt, nem lehet csak úgy a levegőbe és utólag próbálom beilleszteni, mert lehet sehogy sem fér be. Persze hamar rájöttem, hogy kellenek üres kockák is, amik senkinek sem ártanak, de legalább egy pozíciót lestoppolnak.

Most megint az van, hogy neki kell fognom pályát tervezni, amihez egyébként nem igazán értek, főként nem profi szinten, de kénytelen vagyok én megcsinálni, mert ha én nem, akkor ki? Remélem azért belejövök hamar, mert már így is nagyon megcsúszott ez a projekt és már 80%-ban kognitív disszonancia hajtja, ami ki tudja meddig tart ki...

szerda, december 21, 2022

az út a fontos, nem az ít

Van ez a jótúber, Louis, aki most éppen megy át Amerikán, azaz LA-NY utat teszi meg egy régi VW kisbusszal, amit ő alakított át elektromosra és olyan sokat tart a töltés, hogy napi egyszeri teljes töltés mellett mindössze 150 mérföld megtételével számolt. A teljes út 3000 mérföld, szóval 20 nap kell neki. A jótúbon még csak a 8. napnál tart. A valóságban nem tudom hol tart, de lassan meg kellett érkezzen.

Nagyon régen iratkoztam fel a csatornájára, de annyira nem követtem amit csinált, aztán eltűnt egy időre, mostanában mintha megint több cuccot rakosgatna fel, aztán poénból belenéztem az első ilyen videóba és egy kicsit elgondolkodtatott.

Elég nagy szenvedés amit csinál, az optimális megoldás ugye az lenne, hogy repülőre pattan és úgy teszi meg pár óra alatt a távot. Ha már nagyon vezetni akar, akkor viszont ugye a benzines autókra van felkészülve az infrastruktúra, csak a vezetéssel kell foglalkozni, a többit megoldották már nagyon régen. Ha nagyon elektromosat akar vezetni, akkor lehetne egy szériában gyártott elektromos autót, azoknak általában elég jó már a töltése, nem kell 8 órát várni a tele tankra. Ő viszont egy általa átalakított VW kisbusszal nyomja, amivel kell várni 8 órát a tele tankra, ráadásul az útvonalon ahol megy (délnek) elég ritkásak a töltőállomások, aludni is a buszban kell. És a végén mit oldott meg? Megmutatta, hogy "így" is lehet, de ez az "így" csak neki érdekes, mert ezt a módszert senki nem választja, mert az emberek nagy részének nincs ennyi ideje egy ilyen útra. Ráadásul még így is a hagyományos infrastruktúrára támaszkodik, nem egy sárga kiskacsában nyomja le az utat az út felett fél méterrel lebegve, ott alszik és ott tölt, ahol mindenki más, csak mindenki más nem egy ekkora úthoz használja ezt az infrastruktúrát. Ha a nem megfelelő választ adjuk a kérdésre, nem kapunk vigaszdíjat a szenvedésért.

Vagy mégis?

Azért mégis van egy varázsa annak, hogy az ember nem a megszokott módon old meg egy feladatot. Ha ott ahol a többiek feladják, mert nem látják az értelmét, ott ő mégis kitart. Még akkor is, ha végül nem tudja megfogalmazni magának azt, hogy mit is tanult az egész kísérletből. Az ember élete rossz döntések sorozata, sajnos ez így van. De el lehet ezt fogadni és végig lehet menni az úton akkor is, ha rossz ötlet. Egyesek szerint az út a lényeg, nem a végcél. Sajnos, ha mindenki a célnál vár és már nagyon ideges, olyan nagyon mégsem működik ez az okosság.

Szóval a játékommal én is egy kicsit hasonló hajóban evezek mint ő. Úgy gondoltam, hogy saját utamon kell eljussak oda, ahova akarok, de ez sajnos nem a legrövidebb, mondjuk én sokkal kevesebb meglévő infrastruktúrára hagyatkozom mint ő, de azért elég ahhoz, hogy ne mondhassam, mindent én csináltam (nem is igazán jó cél ez). Sajnos igazán ebben a projektben nem lesz lehetőség levonni a következtetéseket ebből a folyamatból, talán majd a következőben már egy-két dolgot jobban csinálhatok. Mondjuk azért megoldottam néhány olyan dolgot, amire nem tudtam az elején a választ, az jó kérdés, mennyire volt hasznos. Bizonyára nehéz lesz sokaknak megérteni, miért tartott ez ennyit és miért nem úgy néz ki, mint minden más. Lehet, hogy az, hogy így volt kedvem megcsinálni, nem megfelelő válasz, de más nincs. Talán majd eljön az idő, amikor szebb és jobb lesz és még mindig az enyém. :)

Zene.

szerda, december 14, 2022

az játék előrehaladottáról

A tegnap tettem fel újabb vidiót a játékról, de nem írtam bejegyzést, inkább meccset néztem és jó döntésnek bizonyult. :)

Szóval az van, hogy szerettem volna ugye már elkészülni egy egyszerűsített játékkal, de nem jött össze. A pályák tervezése nagyon nehézkesen ment az előző módszerrel, ami abból állt, hogy én írogatom egy szöveges fájlba be a szabályokat amelyek generálják a pályát. Kicsit hasonló ez a programozáshoz, csak az a baj, hogy nincs rendes segítség a szövegszerkesztő részéről és én még mindig nem igazán jöttem rá, hogy is nevezzem el a dolgokat, szóval rengeteg hiba volt benne. Ezért arra gondoltam, hogy gyorsan összeütök egy szabályszerkesztőt, de szokás szerint a gyors nem lett valami gyors. Régen írtam én már felhasználói felületet és amikor írtam is, általában a döntéseket nem nekem kellett hozni, én csak kódoltam amit kértek. Hát a döntések sem olyan könnyű dolgok, főként, ha az ember egy intuitív de egyben minimális felületet is szeretne. Szóval az én felületem valószínűleg se nem intuitív, se nem minimális, de azért nagyjából megegyezik azzal ami a fejemben van és a legfontosabb tulajdonsága, hogy ha valami nagyon hiányzik, akkor bármikor be tudom tenni. Csakúgy mint a pályageneráló rendszerbe is bele tudok nyúlni, ha valamire még szükségem van. És általában szükségem van még dolgokra, nem olyan könnyű még mindig használni és hát sokszor nem is kezelem igazán szépen a hibákat, csak simán befagyasztom a programot, ha valami nem úgy van ahogy azt elvártam volna. Azt is figyelembe vettem, hogy azokat a dolgokat, amelyeket relatív ritkán kell használni, mint mondjuk az alap építőkockák definiálása vagy az ő ragasztgatásuk meghatározása, azt még mindig tudom a szöveges fájlban csinálni, csak persze olyankor újra kell tölteni a programot.

A lényeg, hogy azért lassan kezdek belejönni a dolgokba, pl. most megcsináltam egy szokásos teszt világot, a Sponzát, ami néhány emeletből és árkádból áll, szépen moduláris, lehetne játszani vele könnyen. Persze még mindig egy kicsit el vagyok veszve fejben, szeretném, ha a véletlenszerűség és a fizikai megkötések összjátéka jobban összejátszhatna és organikusabb formákat tudnék alkotni, de lehet, hogy arra kell még várni egy nagyobb újraírásig. Meglátjuk.

Most mindenesetre elkezdem többet használni a rendszert, hogy végre generáljak pályákat az új játékhoz, most éppen nem akarok azon gondolkodni, hogy ez mennyi időbe is fog telni, remélem nem sokba és hamar ráérzek, hogy mit kell kézzel csinálni és mit lehet a véletlenre bízni egy épületet generáló szabályrendszer meghatározásánál. Azt hiszem, a bejáratok számát azért én döntöm majd el előre...

szombat, szeptember 24, 2022

az játék előre nem haladottáról

Van egy kis gond. Kitaláltam, hogy könnyebb játékot készítek, csak sétálgatni kell és esetleg gombokat nyomogatni vagy kombinatorikus fényjátékokat tervezni, de az a baj, hogy így el kellene mesélni is egy történetet a környezettel, ez pedig nekem most nagyon nem megy. Ráadásul a pályagenerálás is nehézkes, nem lehet játszadozni vele és inspirálódni, oda kell figyelni az apró részletekre ahhoz, hogy valid szabályokat alkossunk. És elég törékeny is, mondjuk szeretnék újabb megszorításokat bevinni, hogy mondjuk egy szabály alkalmazása két ponton ugyanúgy történjen, hogy mondjuk szimmetrikus struktúrákat generálhassak, de már előre félek megírni ezt, pedig elvileg nem nehéz. Kicsit lehetne pofozni a kódot is, hogy jobban menjenek ezek az ötletek. Nem hiszem, hogy kész leszek időben, pedig mostmár nagyon szerettem volna. Az is van, hogy technikai dolgokon mindig sokkal könnyebb dolgoznom, mint mondjuk most eldönteni azt, hogy a jövőben vagy a múltban játszódjon-e a történet. Én nem vagyok teljesen elköteleződve a NaissanceE (illetve Blame) ihlette megastruktúrák iránt, érdekes, de talán nem az elidegenedés a legrosszabb dolog az életben ami elől menekülni kell. Lenne egy jó kis zombis spin is a fejemben, de akkor megint karaktereknél tartok akiknek sebessége meg fordulási sebessége van, meg a lépteiknek zajaik meg megannyi egyéb gond, amelyek egy jó része már meg van írva, mondjuk utat tudnak már keresni és animálni is tudnak. De először valami egyszerű de firkás dolgot kéne készíteni. De lehet szabályszerkeszőt készítek, mert az legalább kód és az megy. Mondjuk a Windóz port is kód, az mégsem megy. Illetve nagyon nincs kedvem hozzá. Olyan jól elvagyok itt az Ubuntun...

kedd, szeptember 13, 2022

az játék előrehaladottáról

Újabb vidiót tettem fel a játékról.

Ez a mostani bejegyzés kicsit hosszabb lesz.

Szóval az utóbbi másfél hónapban az automatikus pályageneráláson dolgoztam. Szokás szerint ezt is rendesen alulbecsültem, amikor valamikor nagyon régen, mielőtt nekifogtam a játéknak, átgondoltam a lépéseket, úgy gondoltam, hogy erre elég lesz max két hét. Hát, háromszor annyi kellett. Pedig azt csináltam meg, amire akkor gondoltam, mégpedig környezetfüggetlen grammatikákkal generálok primitív listákat és azt, hogy kapcsolódnak ezek össze. Az volt a gond az egésszel, hogy nem volt egy jó kis absztrakció a fejemben, hogyan is csináljam mindezt, ugyanis mióta egyetemre jártam, nem foglalkoztam formális nyelvekkel, csak természetessel, de azt meg ugye nagyon lebutítva. És persze van nálam még egy apró probléma, ugyanis okés, hogy vannak terminálisaim (ezek a primitívek, nagyjából kockák, de elvileg bármilyen voxel alakzat jöhetne ide), meg nem terminálisaim, de a terminálisokat össze is kell ragasztani és itt már nem mindegy, hogy amikor kibontok egy nem terminálist, mit hoz be, mert nem mindenhez lehet elvileg ugyanúgy és ugyanott csatlakozni. És persze az is van, hogy a kockák átfedhetik egymást, amely esetben a szabály alkalmazása lehetetlenné válik, vagy mondjuk kilép az előre megadott térfogatból, hogy egy kicsit limitáljuk is az építkezést.

Szóval a lényeg az, hogy szenvedtem ezzel rendesen, csomó buta bugot beletettem amelyeket ki is kellett venni és közben meg gondolkodtam, hogy hogy is volt az egyetemen, hogy miért volt reguláris egy nyelv, itt kezdtek bizonyos dolgok igazi értelmet nyerni, pl. hogy miért fontos az, hogy csak terminálissal vagy nem terminálissal is kezdhetünk egy szabályt (nálam csak terminálissal). Szóval végül nem is igazán tudom, hogy milyen grammatikát ért meg a rendszerem, de annyira nem is fontos, mert nyakon öntöttem egy csomó szósszal (valószínűségi szabályválasztás, szabályok másolgatása egymás között, absztrakt szabályok, változók, limitált mélységű szabályok és ez még csak a kezdet), hogy legyen kicsit expresszívebb, mert mint így utólag rájöttem, elég nehézkes így változatos dolgokat generálni. Szeretnék én érdekeseket is, de az még messze van. Lehet a végén még be kell kombináljak egy-két más algoritmust is, régebben megszorítás alapú konstrukciókon gondolkodtam, de az most túl bonyolultnak tűnik, most lehet csak néhol elvágom és összefoldozom majd a világot, hogy beférjen egy-két titkos járat, ha túl nehéz lesz begenerálni őket.

Az biztos, hogy sokkal nehezebb ez a feladat, mint amire eredetileg számítottam, de persze azért az álom még meg van, hogy szép városokat és épületeket generáljak, csak még gondolkodnom kell rajta. Szóval ezért is döntöttem úgy, hogy egyelőre jegelem a lövöldözős játékot és csak egy sétálós játékot készítek, mert azokba csak a pályát kell generálni.

Meg az is van, hogy karácsonyra szeretném megjelentetni a játékot, ehhez pedig jó lenne december elsejére kész lenni, ami már csak két és fél hónap. Ebből az utolsó hónap a végső simításokra és balanszolásra volt szánva, ebből a balanszolás lejön, esetleg hangulat gyártás lesz belőle, mert a sétálásban nem kell sokat balanszolni, legalábbis úgy képzelem most. Viszont a maradék másfél hónapban rendesen meg kell húzzam a munkát, hogy generáljak valami érdekes világot. Szóval nem is tudom, hogy lesz-e újabb videó, vagy csak néha még írogatok ide néhány gondolatot és azzal letudom a folyamat megörökítését.

Ja, és még vindózra is kell majd portolni a játékot. Fujj... A hangokkal megint nem lesz gond, remélem, az atmoszférikus zenével már annál inkább.

Na hát most ennyi. Igen, kicsit nagy fába vágtam a fejszémet...

péntek, július 22, 2022

az játék előrehaladottáról

Megint tettem fel vidiót a játékról.

Most nem csináltam valami nagy dolgot, bár azért valamennyire látványos. Már persze a bugfixek után, mert megfixáltam a lightmap generálást és okosítottam is rajta elég sokat, mostmár nem számol mindig mindent újra, ha változnak a látható fények a láthatósági számítások nyomán, csak az új fényt számolja újra.

Amiről a vidió szól az az, hogy megírtam, hogy skálázhatjuk a voxelek méretét ezentúl. Én eredetileg is akartam ilyesmit, de aztán az elején nem tettem bele, most meg amikor lassan kezdenek véget érni a grafikai kódolások (bár még speciális effektusok nincsenek, valószínűleg gyorsan összeütök valami részecskerendszert majd valamikor, de előbb megnézem, hátha van valami nyílt forrású dolog amit használhatnék, ha másra nem, legalább szerkesztésre) ideje volt megcsinálni, mert kicsit nagyocskák a voxelek ha egy az egyben visszük át őket a világ koordináta-rendszerébe, ugyebár 1 voxel 1 egység a koordinátarendszerben, azaz 1 méter. Mostmár a voxelek kisebb kockákká változtathatóak, viszont akkor a többi dolgot meg a voxelek méretének reciprokával kell növelni, hogy minden klappoljon, fizikában és renderelésben is. Kicsit már szétcsúszott a kód is, nincs már ennek nagyon könnyű megoldása, hogy csak egy helyen kéne változtatni, vannak olyan tárgyak amelyeknek a belső méreteit használom, másokat a vertex shaderben újraméretezek, szóval egyenként kellett mindent megírni. Nem is igazán fejeztem be, az megvan, hogy minden leskálázódott, de a visszaskálázást már csak a fagyira (meg a többi felvehető tárgyra, amelyek még nincsenek igazán) írtam meg, az ellenségek, most kis egérkék lehetnek, akik félnek lelépni a küszöbről. Na de most meg akartam lenni ezzel a vidióval, mert megint jön egy hét pihenés. :)

Legközelebb tuti nem jön ilyen hamar vidió, még megfixálom ezt a skálázást, utána meg jön a pályagenerálás. Utána viszont valószínűleg kénytelen leszek portolni az egészet windózra, mert a minimum gép amit becéloztam az egy windózos leptop és ki kell próbáljam, mennyit bír meg, hogy milyen bonyolult pályákat generálhatok, talán még egy kis optimalizálásra is időt kell majd szakítani. Sajnos ez a nyolcszoros sűrűség nem valószínű, hogy lehetséges lesz a végső verzióban, de 4x az jó volna. Igazából a preprocesszálásban van egy lépés, amikor kitöltöm a világ üres részét kockákkal, ami kicsit talán sokat próbálkozik egy optimális konfiguráció megtalálásával, ezt be kell majd gyorsítani, vagy kitrükközni valahogy, elvileg generálás közben is tudom valamennyire hol van az üres hely, mert üres téglatestekből rakok mindent össze, lehetne ezt is progresszívvé tenni, hogy először csak a látható helyeken menjen végig, de frászom van a progressziótól. :)

Pfujjj, még rengeteg meló van hátra...