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. :)

Nincsenek megjegyzések: