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

Texture splatting 2020. április 21., kedd - 0:51


A Wikipédia is ír róla egy cikket, képtalálatok közt is sok jó ötletet látni a kifejezésre keresve.

Példa:


Ebbe a problémába én legelőször a Three.js-sel futottam. Más környezetekben már eleve kész megoldás van rá, lásd Unity3D-nél. Rajzolhatsz paint-szerűen 3d-ben, és azonnal tökéletes az egész.

Régen az első ötletem a Metin2 miatt az volt, hogy biztos az egész pálya textúrázása Photoshop-szerűen meg van rajzolva már előre, majd ezt feldarabolták (ez az egész művelet akár automatizált is lehet, a lényeg azon van, hogy előre elkészítve történik a dolog) kis részekre, akárcsak magát a pályát, és egyszerűen betölti a megadott chunk textúráját a megadott területre.

Ez tuti működő, és nagyon CPU-kímélő, cserébe rohadtul helyigényes, de memóriaigényes is. A metinből ki is nézném, de igencsak ott sem ez van a háttérben.

A fenti kép példán jól látszik a lényeg. Adott N textúra, amiket L hosszúságú átmenettel akarunk ellátni egymás felé, bármelyikből bármelyikbe.

A Three.js megoldása shaderes alapú, amit egy tanárEmbör valósított meg példa módon, és tett is közzé, amit köszön neki minden élő, mert remek alap.

Én magam is kísérleteztem vele, az ő megoldásával két nagy gond van (nem is a megoldásával, hisz  csak példaképp hozta létre, nyilván olyan céllal, hogy aki többet akar, az tovább is fejlesztheti).
  1. csak előre meghatározott hosszúságban tud átmenet keletkezni a megoldásával 2 textúra közt
  2. csak egymás után következő textúrák tudnak átmenetelni a másikká.
    • A-ból lehet B, B-ből C, C-ből D, viszont A-ból D nem, stb.
Az meg már csak mellékes, hogy ő magassághoz kötötte a dolgot. Adott Y magasságot elérve van egyik-másik textúra.

De ez a módszere alapja shaderrel.
Lényegében:

A domborzatra, vagy síkra (mindegy) minden textúra ki van rajzolva egyszerre. Ugyanakkor a shader ad egy virtuális magasságot a textúráknak, amik le tudnak menni 0-ra vagy alá is (ekkor meg sem jelennek, hanem egy default fekete kirajzolási szín veszi át a helyüket, amit a textúrák egyébként ki tudnak takarni). És tulajdonképp a trükk annyi, hogy bizonyos magasságtól indulva hullámszerűen az egyik textúra elkezd kiemelkedni 1 irányába, míg az épp látszódó elsüllyed 0 felé, és idővel helyetcserélnek, így képezve adott pontokon az átmenetet. És ugyanez megy végbe más-más Y magasságoknál a textúrákon.

És hogy lehetne ezt javítani?

Mármint olyan értelemben, hogy bármelyik textúra bármelyikbe át tudjon menni, és akár változtatható hosszúságú átmenettel is?

A netes leírások alapján sokan színhez kötik a textúrát egy térképen, mint fenti képen látható. Így alapvetően 3 vagy 4 szín jelöl 3/4 textúrát, és ezek egymásba kábé bármilyen átmenettel át tudnak menni. A hiba ezzel kettő: a textúrák mennyisége, és hogy egy majdnem real méretarányú textúrára valósítják meg. És pont a spórolás a lényege a dolognak. Szóval faja, hogy egy ekkora képen több tíz pixel átmenetével szép átmenetet képeznek a textúrák közt is, de egy játékbéli térképen majd 4-5 pixel is soknak fog hatni, több métert fed át a játékon belül (már amennyiben a Metinhez hasonlóan kb 300-500 pixeles térképek vannak, amik több száz métert fednek le a játékon belül).

Megoldás röviden: az RGB minden betűje. Tulajdonképp ugyanezt megcsinálva, de mondjuk jól kihasználva a színeket egy PNG képpel már 256 textúrát tárolhatunk akár (trükközéssel még többet is). Hogyan? (És itt jön a lényeg, ami előtt rizsázok mióta.) Mondjuk a red sáv jelöli a kép pixelében az original textúrát (hogy miből induljon az átmenet), a zöld szín a "melyikké" textúra indexét, és a kék szín utolsó helyen pedig az átmenet állapotát százalékban. Ennyi. Már csak meg kéne valósítani, hogy a shaderes megoldással ez király legyen, és ez némi gondolkodást igényel majd, meg számítást.
Magát a kis térképet, amin ez a miből, mibe és hány% típusúan, a pixelben lévő színek összetételét meg vizualizálhatjuk is egyből 3d-ben, akár egy Unity-szerű painttal (ilyet is akarok), és végül a memóriában tárolt bittérkép alapján menthet egy PNG képet a megtervezett térképről, így már szinte tényleg semmi munka nem lesz vele, és teljesen Unity hatást kapunk készítés közben és használati performancia közben is.

Idővel majd megvalósítom, már egyszer elkezdtem, félig kész is volt, de félbehagytam, és törölték a tárhelyem is, talán viszont volt mentés /de akkor is 0-ról csinálom újra, tökmindegy/.

Ezt a bejegyzést majd folytatom, ha lesz kedvem a leírtakat is megvalósítani.

OSM && Dévaványa 2020. január 2., csütörtök - 10:52


Úgy adódott, hogy már régi tervem, hogy random helyeket átültessek 3D-be, egy játékba, és most részben nekifogtam.

Mert amúgy tökre szeretnék egy GTA-t csinálni, ráadásul valós helyszínen játszódót. Legalábbis annyira, hogy az utak megegyezzenek a valóssal, és a főbb pontokon keresztülnézve egy arrafelé jártas ember, pl. aki az adott hely környékén lakik, az igenis tudja, hogy ha előre menne egy utcányit, akkor mit találna ott, és merre mehetne tovább, a játékon belül is, mint a valós helyen.

Az első ilyen célpont életemben Dévaványa volt, mert hát kicsi hely, és a lakhelyem volt 20 évig.

A nagy terveim félbeszakadtak, mikor Miskolcra felköltöztem, akkor inkább Miskolcot akartam már célnak kitűzni, és állandóan egész BP lebegett a szemem előtt, de az halál nagy feladat volna, bármilyen sok segítséggel is.

Szóval összességében egy játékmotort mégis Dévaványára érdemes építeni, esetleg egyszer, ha végtelen időm lesz, akkor nagyobb városokba is bele lehetne fogni.

Szóval itt újévi, hajnali merengésből nekifutva, sok random téma köszöntött bátyámmal. Volt régen egy GTA Vice City szervere, azon és a fennmaradt videóin röhögtünk, majd elkezdtem keresgélni.

Valamiért python 3D játékmotort, de nem találtam olyat, ami szimpi, csak a PyOgre-t, mert az Ogre-t régről ismerem a Game Maker-es portja miatt. Aztán dobtam az ötletet, végül az lett, hogy hát lehetne Unity3D. Mármint ha egy random, nem-találom-fel-újra-a-kereket típusú Vice City klón játékot akarok csinálni, miben fognék hozzá. A unity jó. Bénáztam vele kicsit, majd miután kész volt a TPS kameranézet, és irányítás: térkép kellene.

Netes leírásokból kiindulva a GTA VC térképét lehet exportálni modellként, csak haláli sok munka. Nekem erre nincs időm, és energiám. Annyiba kerülne, hogy nem éri meg.

És akkor jött: hát .. akkor újra Dévaványa? És nekifogtam.

Felcsaptam az OSM oldalát, és exportáltam Dévaványa területét valami XML formátumban.
Megnéztem az adatokat, és bedobtam a MySQL adatbázisomba egy egyszerű szerkezetet nekik, alakítgattam az adatokat látva. Majd közben írtam egy béna, de gyors és működő PHP parsert az XML-hez, ami a számomra lényeges node-okat beküldi a DB-be. Ez elég pöpecül sikerült is, néhányezer adat volt mindössze. Én csak a pontokat importáltam, meg a "way-eket", amik nem csak pontokat összekötő vonalak, hanem akár area-k is lehetnek (elvileg);


Erre közben összedobtam egy HTML5 megjelenítőt is, ami nagyjából jól működik, most elég királyul vonalakkal összeköt minden pontot a megfelelővel. Zsírul néz ki.


Ha minden egybetartozó vonalat random színezünk, akkor meg szépen elszeparálódnak a dolgok..


 No mindegy. Ez csak ilyen érdekesség. Az OSM király! Ezekből a vektoros adatokból, szemben azzal, ha pl. Google térkép screenshotból generálnám, elég pontos 3D-s utakat tudok majd generálni modell formátumba; vagy ha azt épp nem, de a pálya minimális helyre tömörítve el fog férni, az utak adatait tárolva, amit így már bármilyen nekem tetsző módon kezelhetek, és realtime generálhatom a pályát az elmentett koordináták alapján. Majd egyszer.

"a kaja Shazam-ja" 2019. január 8., kedd - 3:36


Elkezdtem nézni a Szilícium-völgy sorozatot, mert király.

A 4. évad 4. részében Jìan-Yáng és Erlich új baromsághoz fog. Az sikerül belőle, hogy készül egy demó-alkalmazás, ami telefonos; lefotózhatsz vele egy hotdogot, és kiírja, hogy Az hotdog. Jön a csavar: ha pedig mást fotózol le, akkor azt írja ki, hogy Nem hotdog. :D

Zseniális. Most lelőttem egy elég jó poént, bocsánat, de erre épül a bejegyzés, szóval muszáj volt.

Elgondolkodtam, hogy milyen menő lenne írni saját AI-t, ami felismer dolgokat.. Felismer dolgokat.. "Hmm, Bezzeg a Google-be ha feltöltök egy képet, rávágja, hogy mit is töltöttem fel.."

És tényleg!

Szóval, ha valami XHR kéréssel, vagy PHP-s cURL-lal meg tudnám hívni ezt a bizonyos keresést, és a forráskódból egy jól irányzott regex-szel kicsórnám azt a picike "Legjobb tipp erre a képre: " utáni szövegecskét, majd kiírnám a képernyőre, akkor kész is vagyok.

Ennyi? Basszus, ez túl egyszerűen tűnik, megoldásra, viszont nagyon hatásos lenne; sok nem-programozó túlértékelné, hiszen a többségnek eszébe sem jutna, hogy a Google képkeresés ugyanezt csinálja; // sokan arról sem tudnak, hogy lehet képet keresni a guglin...

Ja, mondani könnyű. Megvalósítani is az volt, fél óra maximum. Hogy működjön Chrome böngészőben, egy extension-nel, ami minden cross-origin kérést, és egyebet engedélyez.

Teszthez elég volt, mert működik minden.. De élesben hogy oldom meg?

Mindent kipróbáltam, illetve közben elég sok ember leírását olvastam a CORS-ról, a CORB-ról. Régebben csak a SOP volt a gond, de ez annak része, vagy válfaja.
Megpróbáltam .htaccess-ben mindent allow-olni, megpróbáltam PHP-s cURL hívással lekérni az adatokat, mert sajnos az AJAX meghalt CORS hibával mindig. Ha pedig a sokak által ajánlott dataType: jsonp; (vagy simán json) formátummal próbálkoztam, akkor meg inkább CORB hibát kaptam.
Egy a lényeg, ez nem sikerül. Pont ezen bukott el minden.

Míg nem találtam meg valaki hozzászólását, ami mindent megoldott..
https://cors.io/
És ez épp az, aminek hangzik. Ha akár csak üresen, egy ? után egy URL-t adsz meg a címnek, akkor ez az oldal megcsinálja a requestet, és a resultot kiírja. Amivel már tudok mit kezdeni.

Tehát: nem tudom, hogy a Google be fog-e rágni a használati módért, és bot-ellenőrzést csinál-e (aztán pedig ezt elbukva megáll a működő "appom"), vagy hogy a cors.io meddig bírja, stb..

De amíg ez az előbbi kettő probléma nem következik be, addig jó vagyok. ^^

Íme az eredmény, képfeltöltéssel (max 1.5 MB, JPG/JPEG/PNG):

http://users.atw.hu/kaszapatrik/gis/


// Megjegyzés: nekem mobilos Chrome-on örökké várakozik, bár a képet feltölti. :(

EDIT (2019. 01. 11.):

Eljött, amitől féltem. Mégis elkapta a "gyanús forgalom" miatt a Google Captcha-ja.. :/ Ennyit erről. Pedig épp most jutott eszembe felnőtt tartalom szűrőt faragni az ötletből, majd Githubra, mint első projekt, feltölteni...


SOP és AJAX 2018. november 27., kedd - 10:02


Sokat SOPtam már a Same-origin policy miatt.

Röviden ez egy olyan biztonsági eljárás a böngészőkben, alapértelmezetten, logikus módon bekapcsolva, hogy ha valami komolyabb dolog történik egy másik host közbenjárásával, akkor azt megtiltja a böngésző - így elkerülve azt, hogy pl. egy weblapon lévő képet átemeljünk a canvasunkra, mert hátha az nem is kép, hanem vírus. Vagy mai esetemben, hogy jquery ajax-szal POST kérést küldjek egy PHP-nak, ami másik webcímen van.

Ugyanis olyan helyzet adódott, hogy kéne egy rendszert írnom, ami automatizálja (egy kattintásra rövidít) egy megszokott adatmentési folyamatot, amiben szerepel két kép elmentése, egy email elmentése, és pár fájl/mappa létrehozása/átnevezése. Ehhez egy weblap adatbázisára van szükség, és sajnos nem igazán tudtam hozzáférni. Szóval a terv az volt, hogy egy kattintásra megnyílik az adatbázis adott sorának típusával GET-ben egy oldal, ami feldolgozza az összes adatot a sorból, és megfelelő formátumban. És a célom az volt, hogy ezeket az adatokat, többek közt a két kép URL-jét is GET formába szerializálva a linkbe építem, ami egy localhostos oldalra irányít át. Majd a localhoston lévő kis PHP progi a többit elintézi, hisz az már a saját gépen tud mappákat nyitogatni, létrehozni, átnevezni fájlokat, meg a képeket letölteni, pl. cURL hívással.

Persze a cURL-lal is szívtam, mire sikerült megkerülnöm az SSL-t..

$ch = curl_init('https://weboldal.hu/image.jpg'); $fp = fopen('localhostom/letoltottkep.jpg', 'wb'); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp);
De ugye a GET hátránya, hogy nem nagyon lehet végtelen hosszúságú stringet továbbítani, ezért POST-tal kellett volna megoldani, viszont nem voltam biztos benne, hogy lehetséges, hogy egy random URL-ről JS-ből küldve POST kérés lefusson pl. a localhoston. Jól működött a dolog, a teszt alatt kiderült, hogy megfelelő engedélyekkel még fordítva is megy. Localhost POST AJAX megkapta az eredményt a webre feltöltött PHP-tól. Csak a headerrel keleltt kicsit bénázni. Örülök. :D

header("Access-Control-Allow-Origin: *"); header('Access-Control-Allow-Credentials: false'); header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); header('Content-Type: text/html; charset=utf-8');
Gondoltam leírom, hátha más is szenved, vagy csak nem volt ilyesmiben biztos /mint én is/, de érdekelné.

Bögre 2018. szeptember 14., péntek - 20:22


Jó pár hete már szóba került egy osztálytárssal, hogy kéne bögretervező progi, a webshopba, ahova bedolgozgatok. Hogy tényleg fog-e kelleni, jó kérdés, de szabadidőmben hozzáfogtam megcsinálni. Mert az ötlet fun, a megvalósítás érdekes is lehet, és tanulságos. Valamint menő új 3D dolgokat gyártani, ami fut telefonon is. Ez a része főként teljesült.

Egy nagy probléma volt: nem találtam normális, 3 dl-es bögre modellt (ingyen letölthetőként, szépben/"átlagosban", konvertálható formátumban).

Volt egy tűrhető darab, de a smooth shading elég elcseszett volt.. Nem értek nagyon a modellezéshez, ezért megpróbáltam rávenni a blendert, hogy számolja újra a normaljait a vertexeknek, de ez nem sokat változtatott (semmit). Biztos béna vagyok, de amúgy is jobban szerettem volna saját bögrét, mert az tényleg olyasmi, amit én akarok, és hát nem "lopott", enyém minden jog.


Így végül nekifogtam, rég blendereztem, így sok idő volt belerázódni. 2 óra munkája lett a második képen szereplő bögre, a vörös égbolttal. Ez már pár fokkal szebb. :3 Büszke is vagyok rá.

Ide kattintva lehet liveban megnézni, akár mobilon is, ha nem 1000 éves a telód. :)

Codeacademy 2018. május 25., péntek - 1:23


Úgy adódott, hogy le kéne valamilyen szinten mérni a képességeimet a programozás, weblapozás és hasonló tevékenységek körében. További instrukciónak kaptam, hogy a Codeacademy-n tegyem ezt meg, van rá ingyenes lehetőség.


Lassan befejezem rajta a JS témakört. Nem mondom, hogy nehéz, de azért időbe telik átrágni magam rajta. Én úgy voltam vele, hogy a HTML, a CSS és a pure JS azok a dolgok, amik már biztosan mennek, és nem sok újat tudnak kérni/mutatni. Pár aprósággal ugyan találkoztam, de tényleg nem sok újat mutatott az oldal, és nem is kért számon.

Leginkább az idegesített fel, hogy túlteljesítenék folyton. Értve ezt úgy, hogy gyorsabban szeretnék haladni, mint ahogy a feladat elvárja, emiatt pedig nem enged tovább, mert elcseszem az egész feladatkört azzal, hogy "előre dolgozok".

Emiatt nem egyszer csinálta, hogy space indentre pontosan ugyanaz volt a kódom, amit elvárt, pl. 10 sor, amiben az osztályt létrehoztam, de mivel egy console.log()-ot írtam már bele, és egy rövid változó volt kiíratva (ami a következő instrukció lett volna a sorban), már emiatt nem engedett tovább, és erre sajna a sokadik ilyen után jöttem rá. Emiatt kezdtem újra sok exercise-t.

Valamint egy idegölő dolog, amitől nem tudok szabadulni; lehet csak nálam van így (Firefox legújabb verziót használok), de a pontosvessző beírása (AltGr + M-től jobbra lévő vessző billentyű) esetén ugyanaz történik, mintha a Back gombra kattintanék.. És odavész a beírt kódom, amit még nem futtattam le.... És ez milliószor történt, ezért az összes kódolásom során Ctrl+V-t használtam pontosvessző helyett, és így a vágólapomon folyton egy pontosvessző kimásolva szerepel...

Ennyit a negatívumról. Mert mindössze ennyi van vele kapcsolatban. Nem enged sokszor előredolgozni. Ezen kívül elég tetszetős a rendszere.

Tehát konkrétan a weblap felépítése, miközben egy gyakorlatot végzünk, épp olyan, mint a CodinGame-é.Hasonlóan játékosan, többnyire érthetően vannak leírva a leckék/feladatok. Alapvetően 2, néha csak 1, egész gyakran 3 oszlopra bontva látjuk a szerkesztés közben az oldalt. Balra az instrukciók. Leírás, feladat, stb. Középen a szövegszerkesztő rész, jobbra az eredmény (konzol, terminal, létrehozott weblap, stb).

Szóval úgy vagyok vele, hogy sok idő túl lenni az alapokon, de csak egyszer kell megcsinálni. Vannak achivementek (gyűjthető jelvények, pontszám, fenetudja). Ráadásul nekem elsőre (a 200$-os tanfolyamtól eltekintve) felajánlotta, hogy próbáljam meg a ReactJS-t. Az most 57%-ra van kész, majd befejezem (az ingyenes részeket).

Mindig is érdekelt, hogy mire is jó ez a sok plusz framework, hisz' úgy voltam vele, hogy a jQuery már mindent tud, ezen felül mit tudnak még cseszni. De annyira nem érdekelt, hogy utánanézzek. Most már kicsit tisztább a kép, majd végigmegyek a tanfolyamokon, legalábbis az ingyeneseken.

Metin2 + HTML5 + CPP! 2018. március 22., csütörtök - 0:55


Korábbi bejegyzésem megtalálható ide kattintva.

Előzetes, régi hírek


Amúgy annak a végeredményét nem közöltem a bejegyzésben, ami annyi volt, hogy csináltam saját animációt Blenderben, itt egy rövidke videó róla. Hozzáteszem, amiatt, illetve azután tanultam meg a Blender alapjait. Modell formátuma COLLADA, annál döntöttem végül, az volt egyedül igazán jól kezelhető és megfelelő struktúrájú, még ha tárhely szempontjából nem is a legkevesebb helyet foglaló formátum (leírónyelvszerű, szerkeszthető is akár notepaddal).

Sok ideig pihentettem a dolgot, mert nagyon sok munka a továbbiakban, valamint időm sincs sok. Rengeteg dolog lefoglal mostanában. // suli, munka, család, betegség, kampányidőszak

Ezzel a HTML5-ös Metinnel kapcsolatban sok probléma merülhet fel. Boncolgattam magamban a kérdést, mitől Metin a Metin? Mi az a fő dolog, amitől olyan különleges (nem feltétlen jó értelemben) a többi játékhoz képest?

Én arra jutottam, hogy a grafikája. Egyszerűen az a kombó, ahogy kinéz a térkép + a karakterek + a textúrák + a gui. Erre még ugye rátesz részben a zene (de az kevésbé). Szóval a látvány összhatása adja azt a Metin-érzetet.

Már itt elkezdődnek a problémák.. Ugyanis ebből a játékból a legnehezebb kiszedni a dolgokat, eskü. Nem találkoztam még durvább fájltárolási módszert használó 3D játékkal (ami persze külső fájlokból szedi a cuccokat össze). Legtöbb game contentjének kiszedéséhez max. 2 program kell, általában 1 is elég, de ehhez? Van hozzá soktíz, és azok fele sem működik, vagy már nem érhető el sehol, vagy bizonyos dolgokhoz még azok is kevesek, ami van.

Na jó, reálisan: a textúrák, a modellek exportálhatóak, bár kell hozzá 2-3 program. A térképet is volt szerencsém sikeresen exportálni egy jó kis progival (ami BlackYuko-nak köszönhető). Azzal már összedobtam egy kis kék map1 felülnézet-forgatási kombót, úgy tesztből, amit itt meg lehet tekinteni. (Egyelőre textúrának a minimap van ráhúzva, és üres az egész.) Sőt, ebből csináltam egy FPS demót is, bár nagyon tré az egész, de egy 10 perces teszt, szóval ne várj sokat.

Viszont az animáció a modellekhez NEM nagyon exportálható. Ezért is csináltam teszt erejéig saját animációt, meg béna, összedobott irányítást, itt lehet megnézni. Firefoxra terveztem, Chrome-on nem igazán szeret indulni (lusta vagyok kijavítani, mert demó vacak) - a betöltési sorrend a hiba amúgy.

Aktuális


Nem rég DeFa olyat talált, hogy mocsok egy mód meglepődtem. És nem hogy nem mai, több, mint egy éves kezdeményezés, csak valahogy most kezd beindulni...


Valami török srác, aki saját elmondása szerint PopuGames nevű csapattal/csapatként már több éve (ha jól emlékszek 2014 óta) készít mobilos játékokat, főként jó/híres PC játékok átiratát... khm.. Unity-vel.
Jó, emiatt nem nézem le, mert a Unity egy jó dolog, csak más okokból kifolyólag úgy érzem, hogy ez a srác se programozás terén nincs a toppon (matekból sem hiszem), se úgy alapvetően bármiből, ami kellhet játékfejlesztéshez. De ne legyen igazam!

Az a lényeg, régóta fejleszti, és szó mi szó, működik, amit csinál, még ha .. konkrétan semmit nem is ő csinált az egészből, azon kívül, hogy pár alap Metines elemet összeválogatott Unity-ben.
Viszont az gáz, hogy az elmúlt kb 3 hónapban elvileg sokat dolgozott a játékkal, sőt, mostanában csak azzal foglalkozik, és semmi haladás nincs. Se egy új NPC nem került be, se állatok, se semmi. Csak harcos lehetsz egyébként, blabla.

Szóval nem igazán fejlődik a dolog, mégis hatalmas Metines tömegeket ér el, amit csinál. Emiatt irigy vagyok kicsit, ugyanis nemhogy meg tudnám én is csinálni ezt - de még jobban is, minden szempontból. És én haladnék is vele.

Ebben már csak az animáció exportálás hátráltat - ugyanis az eredeti animációk elengedhetetlenek, hogy meglegyen az összkép a Metinről. Rákérdeztem tehát a török srácnál, először YT-n, aztán FB-n, végül a webold(uk)on, ahol végre kaptam is választ, majdnem egyből. A kérdésem egyébként főleg annyi volt, hogy az animációt 3DS Max-szal exportálta?


Nájsz reszponz. Szóval, le lettem pattintva.
Megértem amúgy, bár azért vicces, hogy neki 18 hónapja van a projektben. Gondoltam, már csak emiatt is jó lenne kicsit reagálni erre válaszként, hogy "nekem x nap volt mindössze". Vagy legfeljebb pár hét, no persze beleszámolva a magánéletet is, meg a napi teendőket.

Lényeg a lényeg, feltámasztja bennem a versenyszellemet a dolog. Sok a dolgom, kevés az időm, de akkor is szeretném ezt a .. lehetőséget én megszerezni. Metines körben én akarok híressé válni, "hőssé", mint aki böngészős (ergo kis változtatással mobilos) Metint készített. Egyrészt, mint magyar, a törökkel szemben (azt is nézve, hogy internesönel is a törököknél a legnagyobb divat a Metin, nemhogy Magyarországhoz viszonyítva - és így mekkora lenne "legyőzni" őket..... Még az "őket" is idézőjeles.)

Az egyetlen dolog, ami ebben meggátol, az maga a modellek animációja. Amint azt (valahogy) tudnám exportálni én is (Blenderben használható formátumba, tehát legvalószínűbb, hogy COLLADA-ként) - azonnal nekifogok, és szánok rá napi { x | x ∈ ( 2 ≤ x < 5 ) } órát, vagy formálisan ilyesmi..

De ugye /Metinhez, működő/ program nincs, ami a .GR2 fájlokból exportálná az animáció adatait, ha a fájlban nem található Mesh információ, és Skeleton információ. Metin így csinálja ugye.

Viszont van egy kizárólag a modellt exportáló progi C++-ban írva, a Mesh converter, aminek történetesen a forráskódja is letölthető.. Nem fűztem sok reményt ilyesmihez, nem akarok mindenfélét megtanulni, hogy ezt végbevigyem, mert nincs annyi időm. Még ha kedvem lenne is..

De gondoltam, egy próbát megérhetne... Viszont az én GCC-m nem tudja az MSVC kódot fordítani.. És emiatt egy kb. 6+ gigás MS Visual Studio 2018-at letölteni? Fenét.. De nem bírtam ki, egy 2008-ast letöltöttem. És sikerült a buildelés!

Ezután szép sorban átbogarásztam, hogy mi kellhet nekem C++ téren, csak pár dolog volt. Tanulgattam kicsit legalább. Valamint rájöttem, hogy marhára sok segítségem van, lévén megvan a forráskód, de még a granny2.dll használatához is van egy struktúra fa fájl!

Ekkor rájöttem, hogy tulajdonképp ebben a Converter progiban már "minden" megvan így, ami a Granny Viewerben, csak nekem GUI nélkül. Az, hogy az anim exportra nem írtak rövid szkriptet, már más kérdés.. Szóval megírom én.. Egész pontosan az adatok exportálása már működőképes, már csak a .DAE fájlokat kell tanulmányoznom, hogy milyen formában, struktúra alapján mentsem el az adatokat fájlba, hogy aztán importálhassam őket mondjuk Blenderbe, vagy legalább 3DS Max 7-be..





A forráskódbővítésem lényegi része egyébként mindössze ennyi (1-1 változtatás még volt a fájlban, de ez a lényeg):



// Ha valami sikerül, folyt. köv.

Újabb végtelen térképgenerátor 2018. január 5., péntek - 1:47


... merthogy már csináltam hasonlót..  De hatalmas a különbség a kettő között.

Igaz, a suliban kezdtem el, de nem volt rá elég az idő, hogy ott be is fejezzem, ezért gondoltam így esti levezető időtöltésként befejezem. Rémálom GUI-t tervezni, hogy mások is tudják használni a dolgokat... (Bezzeg a suliban egy funkció kivételével a scriptet átirkálva is tökéletesen működött már... :P )

A korábbi, ami itt érhető el, az egy HTML5-ös bejárt, területet megjegyző, de ettől még új területet random generáló térképhez való megoldás volt. Amiben az volt a pláne, hogy a végtelenségig bármilyen irányba bővíthető a térkép (0-s koordináta alatt is).

Ez viszont nem (csak) működésben érdekes, hanem a dizájnja is nagyon szép. Sőt, igazából ez szinte csak grafika. Ugyanis ez tetszőlegesen testre szabható procedurálisan generált "terrain" (avagy annak textúrája, de heightmapként is használható, ha úgy van rá szükség) generáló, amihez Perlin zajt használtam fel. Nem elég, hogy – bár egyszerre csak kis szeletekben, de – végtelen méretű terrain generálható vele (a Perlin-féle módszernek köszönhetően), aminél az illesztések tökéletesen passzolnak, hanem semmi erőforrást nem igényel akármelyik koordináta megtekintése.

Lényegében mondhatjuk úgy, hogy bár pszeudo random generál egy 'seed' (kezdőérték) alapján domborzatot (de akár textúrákhoz is tökéletes, majd mutatok képet lejjebb), ezért akárhol le tudja az adott teret generálni. Az más kérdés, hogy egy nagyobb rész generálása nagyobb erőforrást igényel. (256x256 pixeles tér átlag ötszázad másodperc a laptopomon /ha be van lassulva, kéttizedig felmegy/, de pl. egy 1024x1024-es textúra már 2 másodperc (ami amúgy így sem sok), míg a 2048x2048-as textúra már közel 10 mp, nagyobbat meg csak egyet próbáltam, a dupláját, ki is akadt a gépem.. De jobb vas többet bír. Vagy kisebb darabokat elmentesz, arrébbmész a koordinátarendszeren, és a végén paintban egyberakod őket.. :P )

Ja, ahogy írtam - seed alapján generál, tehát ha egy tér megtetszik, megosztható bárkivel, SŐT, konkrétan a Te beállításaiddal átküldhető, így terveztem meg.

Miközben ezt a bejegyzést írom, még nem vagyok kész, az utolsó simítás következik.
Már menüből teljesen alakítgatható az egész, mindössze a rétegződés infója nincs még figyelembe véve (ugyanis van benne magasságkoordináta, tehát a 2D megjelenítés ellenére térbeli a generált struktúra - nem csoda, az egész generáló kód alapja a ThreeJS egyik példafájljából van (ami meg 3D terrain) - én meg ugyanazt csak canvasra rajzolom ki (amit textúrának használ eredetileg a cucc), meg adok hozzá GUI-t.)

No, kész is vagyok. Viszonylag. Íme a képek:
Első próbálkozás
Az ötletadó mintájára
Textúra is generálható

Valószínűleg emiatt - ha lesz egy kis kedvem még majd holnap, meg pár percem a suliban - hozzácsapom a 3D megjelenítést is (mivel az már csak egy copy-paste), hogy az amúgy épp legenerált térképet körbe is lehessen forgatni gyönyörűen, csak úgy poénból..

Edit: (2018. jan. 05.)
Volt kedvem, hozzá is csaptam a 3D-t. Lehet az oldalon váltani köztük (a tetején). Print:

És mobilon is tökéletesen működik.

Egyébként az ötletet végső soron egy weboldal adta, mikor egy tök érdekes szakdolgozat olvasása után (informálódás, tanulás céljából) rátaláltam, és tetszett az elképzelés, meg a megvalósítás, csak én sajátot akartam, ami valamivel jobb is.

4096x4096-os térkép itt.

Metin2 + HTML5? 2017. december 30., szombat - 17:40


Utolsó bejegyzésem az évben, és pont/megint Metin2 a téma. De ez van.

Már napok óta gondolkodok ezen - úgy csinálnék egy Metin2 klónt – még ha csak olyat is, hogy .. na, értitek.. Egy leegyszerűsített valamit szeretnék, amiben csak annyit akarok, hogy a modell(ek) az eredetik legyenek. Meg azok textúrája.

A terv az, hogy valahogy exportálok a Metin-ből néhány modellt, ThreeJS lesz a grafikus motor, Node.js + SocketIO lesz a hálózat alapja. Én meg hozzáadom a "programozást" (azt hiszem, hogy ezt inkább valami eseményvezérlésnek kéne nevezni, mert nem sok programozási tudás kell, ha már a grafikus rész megvan).

Instán közzé is tettem egy képet már, de nem túl szép (mobilfotó laptopképernyőről), ezért ide másikat rakok fel, azóta lett pluszba haja a karakternek:


Ez most egy térben körbeforgatható cukiság.

A probléma most az, hogy bár a 3dsmax7-tel  sok dolgot lehet kezdeni a Metin2-es, pack mappából kicsomagolt gr2 model- és skeleton infókat tartalmazó fájlokkal, de nem igazán sikerül magát a csontvázat exportálni. A hozzájuk tartozó textúra .DDS formátumban van, de azt a legelső online converter találat tökéletesen átdobja PNG-be.

A .GR2 fájlok viszont nem ilyen egyszerűek. Az egyetlen opció, hogy a "gr2meshconv1_3" stuffal át lehet őket dobni .SMD és .MS formátumba. Az előbbi a Half-Life 1 modellformátuma, az utóbbi pedig lefuttatható szkript a Max-hoz.

A helyzet az, hogy két modellezőt használok egyszerre, a 3DS Max 7-et és a Milkshape-et. Viszont egyik sem tudja importálni a .SMD fájlokat, hiába generálja/konvertálja őket a "meshconv". Hibásak, vagy ilyesmi. Nem megfelelő formátum. Pedig abban a csontváz- és animáció IS benne lenne... Micsoda véletlen.
Sajnos a .MS fájlokban csak a vertexek vannak, így mint látható a képen is - el tudtam menteni a modellt OBJ formátumba, de nincs hozzá csontváz, animáció..

Így állok most.. Keresgélem a megoldást. Legrosszabb esetben meganimálom én, bár abban nem lesz köszönet.. xD

Edit: (20:22)
Hát, nem lett megoldás. Ugyan a 3ds max betölt valami csontváz-szerűséget, ha a .GR2 fájlt egyből importálom, de ha azt tovább exportálom, onnantól nem bone-okként lesz mentve, hanem vertexekként, az meg nem poén. És nem nagyon találtam módot arra a problémára, hogy: triangle to bones. Hiába is írja a max, hogy azok bizony csontok.. (Csak szerinte.)

Ezért nekiálltam magam a csontváznak, az fél óra sem volt, gyönyörűen megcsináltam, viszont a megfelelő vertexeket hozzáilleszteni már művészet, annyira lassan is halad. Az autoweld nem igazán jöhet szóba, az ... sok egyéb (test)részt is a bone-hoz ragaszt, és idiótán néz ki a forgás, ezt bizony "manuálisan" kell csinálni.. Egy kar már kész, plusz a hát/has.. Hátra van a másik kar meg a két láb. A láb talán gyorsabb lesz, a karon sok kis bizbasz van (a nindzsa feketeszélen), aminek az alkarral kell forogniuk, így .. óvatosan haladok..


Edit: (12. 31.)
Sikerült elaludnom. Reggel 7-ig fent voltam, az ÖSSZES létező lehetőséget kipróbáltam, vagy letöltöttem. Egyszerűen hihetetlen, de NINCS működő, vagy én nem találtam. Mármint a .GR2 fájlok animációjának exportálására. Ugyanis ha a fájlban csak animáció van, de nincs se csontváz, se mesh, akkor kb. minden program beadja a derekát, nem próbálja meg visszakonvertálni, vagy hibával meghal.

Ezt olyan szinten mondom, hogy egy még félkész GitHub-os projektet töltöttem le, amit videókkal támasztott alá a srác (hogy nála már néha-néha működik), és ez nekem a karaktermodellt FBX-be átkonvertálta simán, de az animációs fájloknál kiakad. Egyébként a Neverwinter-hez készíti hivatalosan, nem Metinhez.
Ha az ő alkalmazását használom, ez a vége:


Aztán a Divinity-hez is készült valami cucc exportáló, ez nézett ki eddig a legpofásabban, de soha nem importálta még a .GR2-imet, mert hibás a header rész, tuti nem is gr2-t akarok használni (valójában). Semelyiket nem engedi, függetlenül, hogy van-e benne anim, vagy sem.

Ezen kívül még amihez nagyobb reményeket fűztem, az a Nexus Buddy 2 volt, ez pedig a Sid Meier féle Civilization V-höz készül(t), asszem', és itt, de főleg itt a fórum téma, ahol leírják részletesen, mi van. Nekem ez azért nem sikerült, mert maga a Nexus folyamatosan appcrashelt, olyan hibakóddal, amire mindenki azt írja neten, hogy "telepítsd újra a .NET keretrendszer 4.0-dat". Ez hülyeség. Főleg, hogy ezt a PC-men is kipróbáltam, ugyanaz a hiba, ezen a laptopon 4.5.2 van (asszem'), azon kerek 4, egyiken sem jó, illetve ugyanaz a hiba. Ha rosszul adod meg az indításnál általa bekért elérési utat, akkor crashel, DE a Regedit-ből a Firaxis-ra rákeresve megtalálhatod a kulcsát, valami ToolIzé sor, ha törlöd azt a sort (vagy az egész mappáját), újra kéri a Path-ot, tehát no crash.. Lehet próbálkozni a leírás alapján. (Talán este [máris mindjárt este van, miért keltem 15:00-kor?] letöltöm az egész Civilization V-t, úgy nem lehet hiba, hogy az Assetek mappát nem találja.)

És ezen kívül is próbálgattam mindenféle hülyeséget, csak egyet nem - a direkt skeleton exportálás nevű "gr2skanim_1_2_Max2008"-t. Mivel a nekem letöltött 3D Studio Max az csak 7-es verzió. De a másik gépre talán szintén este letöltöm a 2008-ast (utálom ezt a sok szemetet), és úgy esetleg működni fog.. Ide nem is írok többet ezzel kapcsolatban, csak ha sikerül. Már így is regény.


Node.js, Socket.IO - 2# alapok 2017. december 28., csütörtök - 16:34


Ahogy írtam, egy videó formájában szeretném ezt a fél órát kitölteni. Pár apróságot még írok majd a videó alatt, itt a bejegyzésben, hogy mik a használathoz elengedhetetlen parancsok/kódsorok.



A projekt


Az új projektedhez hozz létre egy mappát az előző fejezetben kitárgyalt "package.json" mellé.
Ebbe a mappába kell minden hozzá tartozó fájlt raknod - persze almappákat használhatsz benne.
Első sorban hozz létre egy "index.js" nevű fájlt. Ez lesz a szerver kódja, amit a Node futtat.
Tipp: Hogy ne kelljen mindig parancssorból elindítanod, csinálj egy "akármi.bat" (én server.bat-nak szoktam elnevezni) fájlt, amibe ennyit másolj bele:
node index.js
pause
Nyissuk meg az "index.js" fájlt, amibe pár alap sort kell gépelni. A videóban röviden elmondtam, hogy mi miért kell, de akit érdekel utánaolvashat (illetve valamennyire egyértelmű is):
const express = require("express");
const app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(express.static(__dirname));

/* új változókat, funkciókat itt hozz létre */

io.on('connection', function(socket) {
  /* ide jön a bejövő adatok vizsgálata */
});

http.listen(1337, function() {
  console.log('A szerver fut az 1337-es porton.');
});
A bejövő adatok vizsgálata részbe pedig funkciókat tudsz pakolászni, amik egy jelzésre figyelnek.
socket.on('test', function(data) {
  socket.emit('onlyForSender', data);
  io.emit('allConnected', data);
});
Ha a kliens küld a szerver felé egy 'test' "üzenetet", akkor a szerver csak neki visszaküld egy 'onlyForSender' nevű üzenetet, mindenkinek pedig (beleértve a küldőt is) egy 'allConnected' üzenetet. Így tudsz funkciókat létrehozni, valamint választ küldeni a szerver részéről a csatlakozó feleknek.

A kliens oldalon a "kötelező" dolog jóval rövidebb - be kell szúrni egy szkriptet a <body> után, lehetőleg minél közelebb:
<script src="/socket.io/socket.io.js"></script>
Ezen kívül a szkript elejére valahova, (ahol kezded) kelleni fog egy rövidke
window.socket = io();
sor, innentől pedig eléred a 'socket' paranccsal annak funkcióit. Példa az adat küldésére és fogadására:
socket.emit('test', 1);
// a küldött adat lehet szám, tömb, objektum, stb

socket.on('receive', function(data) {
  /* és itt tevékenykedhetsz,
     mi történjen a kapott data-val */
});
Röviden ennyi lenne, innentől a fantáziádra van bízva, mit hozol ki belőle.

Ide kattintva egy Google Drive mappa jön be, ahonnan letölthetitek a sablont a kezdéshez (azzal a pár sorral), meg a videó végén lévő kész kódot is, kipróbálhatjátok.

Sok sikert, jó próbálkozást, alkotást!

// Előző "fejezet"

Node.js, Socket.IO - 1# telepítés 2017. december 28., csütörtök - 2:33


Már ugyan volt valami alap Node.js leírás, de az elég egyszerűsített volt, ez meg végül lehet - majd - egy sorozat lesz, talán videóval (is).

Röviden - mi(k) ez(ek), mire jó?


A Node.js lényegében lehetőséget nyit szerver létrehozására, amit JavaScript nyelven írhatunk meg. Ez a szerver alapvetően olyan, hogy programokkal tudsz az új szervered nyitott portjára csatlakozni TCP/IP használatával, pl. a parancssorban - illetve én a teszteléskor telnettel csatlakoztam az így készült szerverre.
Azonban a Node.js kiegészíthető az 'express' nevű keretrendszerrel, ami webes elérhetőséget biztosít. Így már nincs szükség a parancssorra, készíthetünk webes játékot is. De valami még hiányzik.
A játékokhoz (is) általánosan használt socketek, hogy tudjunk menő szerver-kliens kapcsolatot kiépíteni, rendes csomagküldéssel-fogadással. Ehhez kell a Socket.IO. /* Más szavakkal, (akár) csinálhatsz HTML5 alapon MMORPG-t. */

Telepítésük

  1. a Node.js hivatalos oldaláról töltsd le az utolsó stabil kiadást (LTS), és telepítsd fel (csak next-next, semmi extra)
  2. ha feltelepült a NodeJS, akkor hozz létre a jövőbeni projektjeidnek egy mappát (lehetőleg az elérési útjában ne legyen ékezetes karakter, szóköz - az én ilyen mappám: "C:\Users\EProg\Documents\Projektek\socketio")
  3. hozz létre ebbe a mappába egy "package.json" nevű fájlt, majd nyisd meg, másold bele a következő sablonszöveget:
    {
      "name": "socket-examples",
      "version": "0.0.1",
      "description": "my socket.io apps",
      "dependencies": {}
    }
    (ebbe a fájlba fognak feljegyződni (automatikusan) - a dependencies részhez - a letöltött keretrendszerek)
  4. nyissunk egy parancssort (rendszergazdai jogosultságokkal lehetőleg), és abban lépjünk be ebbe a mappánkba (akár úgy is bele tudsz menni, hogy kimásolod a mappa címsorát, és a parancssorba beírod a cd utasítás után, így: "cd C:\Users\EProg\Documents\Projektek\socketio") – majd írjuk be ezt a rövid parancsot, ha a mappánkban vagyunk:
    npm install --save express@4.15.2
    ha sikerült, valahogy így nézhetett ki a parancs után a konzolod:

  5. még mindig ugyanabban a mappában maradva, ezt a parancsot is kövessük el:
    npm install --save socket.io
    ha sikerült, valahogy így nézhetett ki a parancs után a konzolod:
  6. amennyiben ez kész – akkor kész vagy a telepítéssel, a "package.json" fájlodban látható is a két framework a dependenciesnél (ha sikerült)
A telepítés ennyiből állt volna. Innentől ebbe a mappádba hozz létre újabb mappákat, minden egyes nodejs-socketio projekted számára. A példafájl kódja, ami mindjárt következik - úgy működik, hogy az adott mappában lévő összes fájlt (és további mappát, meg tartalmát) átküldi a böngészőnek (a kliens oldalnak), ha a szerver fut és elérhető – ezért is kell külön mappa minden projektnek.

// A következő "fejezet" egy videó formájában fog készülni - nagyrészt. Benne lesz, hogyan kezdj neki, mik az alapvető lehetőségek, a kész forrás működőképesen letölthető lesz.

Végtelen térkép generálás bármely irányba 2017. október 1., vasárnap - 23:03


Ahogy visszanéztem gyorsan, ez az első tényleg programozással kapcsolatos bejegyzésem. Amikor a blogot kezdtem, úgy voltam vele, hogy itt mindenféle elmélet és megoldás lesz ezen belül. És gondoltam, hogy azért előtte lesz pár bejegyzés, de hogy 51 bejegyzést írjak előtte (több, mint 1 éven át), amiből csak pár darab hajazott a programozásra.. :D (A node.js szenvedésem is csak hasonló volt, de ott a telepítésen volt a hangsúly, nem a használatán.)

Bevezető off.
Szóval:

Ahogy a cím is mutatja - a napokban elkezdtem a szabadidőmben (amikor épp nincs semmi fontos egyéb) egy Minecrafthoz hasonló, de 2D játékot csinálni. Mindezt természetesen multiplayer formába öntve, hiszen mit ér az alkotás, ha nem láthatja senki az eredményt? Mariocraft a kódneve, mert egyébként - jobb híján - Mario a főkarakter, egyelőre.
( Meg hát egy hálózaton játszható játék külön fényévekkel jobb, a legtöbb esetben. )


(Jobbra a kicsit újabb, árnyékos verzió látható.)

És ha már ilyen Minecraft-Terraria típusú játékba kezdtem, eszembe jutott egy olyan téma, amiről szívesen hallanám mások véleményét, megoldási módjait, hátha tanulhatok és/vagy van jobb, mint amit én ismerek. A Facebookos Amatőr játékfejlesztők csoportban feltettem a kérdésem, ami egy elég jó kis közösség - és pár aktív tagja között igazán nagy koponyák vannak, akik nagyon régóta űzik az ipart.


Kaptam is jó néhány választ, néhány még új információ is volt – tehát megérte a kérdést feltenni. Tanulhattam kicsit.

Összefoglalva: a kérdés, téma lényege az, hogy a legtöbb egyszerű játékban elég az, ha a játéktér térképe egy kétdimenziós tömb (főleg a csempéből felépülő játékoknál - erről van egy nagyon jó tutorial itt. Leír mindent, hogy miért jó ez, miért hasznos.).

Ez annyit tesz, hogy csak "egyirányúan" bővíthető a tér. A számítógépen a leggyakoribb módszer a 2D játékoknál (top-down view "felülnézetes", sidescroller "platform, mászkálós"), hogy a nullpont a bal felső sarok. Onnan indul ki a térkép összerakása, és tart egészen a jobb alsóig.
Ez pont kézenfekvő, hiszen a térképet tömbben szokás tárolni, a tömbök indexelése 0-tól indul, és tart N-ig. A tömb dinamikus is lehet, tehát nem lehetetlen, hogy akár játék közben IS nőhessen a pálya mérete. De csak (az előbbit alapul véve) jobbra, és lefelé.

És mi van, ha én egy Minecrafthoz hasonló játékot akarok, de oldalnézetből? Vagy valami katonás, akármilyen játékot felülnézetből? És mondjuk hasonló, generált térképpel, hogy az az érzésem legyen, hogy bármerre mehetek?

Erre több megoldás is van.

Volt, aki azt mondta pl. (Oli volt, csekkoljátok az oldalát, rengeteg jó játékot csinált már! Java és HTML5 főként. Az én kedvencem pl. a JAVA minigolf játéka.),
hogy ez megoldható azzal, ha a tömb elejére szúrunk be új elemeket (ha a mínusz irányokba haladunk), és/vagy csúsztatjuk a tömb elemeit (inkább ezt írta, csak nekem elsőre beszúrás ugrott be, de az sem butaság, amennyiben feljegyezzük, hogy mennyivel lett csúsztatva a pálya, és ezt minden koordinátájához hozzáadjuk. Akkor ránézésre nem mozdul semmi sehova, de mégis nő a pálya mérete.) Ha csak csúsztatunk az elemeken, és ami kicsúszik, az elvész, akkor nem jó az ötlet egy dinamikus pályával rendelkező játékhoz, de egyébként igen.

Volt, aki hasonló, indexeléses módszert írt, seed alapon generálással (így simán csak ugyanazt generálja a játék az adott helyen, ha visszatérünk oda). Ez akkor nem jó, ha változtatható a pálya. Mint jelen esetben.

Kaptam egy Circular buffer nevű módszert, amit még nem olvastam el részletesen, de ez is új infó nekem, ennek egy változatát már használtam, anélkül, hogy tudtam volna róla, meg arról, hogy mi ez.

Még páran írtak, egy elég jó kis beszélgetés lett belőle.

Az én módszerem annyi, hogy adott egy (Minecraft megnevezéssel) chunk, egy darabka, egy részlet a pálya egészéből. Ez magába foglal N*N további kis játékelemet, "csempét" (tile-t). A Minecraftban ez 16x16x16 méretet jelent (mert 3D), de a mérete mindegy. Lényegében ezen chunkoknak is van egy koordinátája, ami ugyanúgy 0, 1, 2, stb., de egy ilyen koordinátán N*N elem található. Úgy is mondhatjuk, hogy az 1/N-ed része a pályának egy chunk.
Bár a pályát, a chunkok tartalmát tömbökben tárolom én is, de magukat a tömböket objektumok értékeként. A tulajdonság pedig egy string, egy szöveg, ami tartalmazza a chunk koordinátákat is.
Mivel ez egy szöveg, ez mehet negatív egész számba is, hiszen az is szöveg. Hivatkozásképp van használva, kicsit úgy, mint egy asszociatív tömb. Így nem is lassít semmit (érzékelhetően), annak ellenére, hogy string.

Ez kicsit zagyva lehet, de épp ezért gyorsan megírtam működőben is, hogy tesztelhető, látható legyen, mire gondolok. Így nem elég, hogy "negatív indexbe", mármint koordinátára is mehetünk a játékon belül, de ez generálható a végtelenségig, mert ugyanúgy dinamikus, és még a tömböket sem kell birizgálni, ha újabb tér tárul fel, így nincs plusz processzorhasználat sem.

Ide kattintva megnézhető a kis tesztem.
Az irányítás is egyszerű: a kurzorbillentyűk a vörös téglalapot mozgatják. A WASD pedig az egész nézetet, amit csak látunk.

A vörös téglalap mutatja a játékos képernyőjét; ha ez egy játék lenne, azt a területet látná be a játékos. Ahogy látható, mindig előre betöltődik annyi, amennyi szükséges, a chunkokból. A kirajzolás persze nem így történne, hiszen ez nem túl takarékos, de a bemutató célja nem is az volt.
A két kék vonal szimbolizálja a nullpontot, az X és Y tengelyt, amitől "jobbra" és "lefelé" szokás a pályát építeni alapesetben - de itt ugye átléphető minden irányba, bármekkora távolságra.



Egyébként a barátommal beszélgettem, miközben beugrott egy sokkal egyszerűbb módszer is, ami ugyanezt eredményezi.


Ez pedig annyi, hogy négy térkép tömb van, ami tárolja a pályát. Általában egy van, de ha vesszük a két tengelyt, akkor az 4 részre osztja a pályát, és pont az a gond a tömbbel, hogy nincs negatív index.
De ha van egy topright, bottomright, bottomleft és topleft tömböm, amik a négy teret szimbolizálják, akkor már más a helyzet. A bottomright-ot használjuk ugyanúgy, mint alapból szokás. Az összes többi pedig a tükörkép. Mielőtt dolgoznánk a tömbünkben, előtte egy vizsgálat eldönti, hogy melyik tömbben dolgozunk a 4 közül. Ha negatív az X, akkor értelemszerűen left lesz, különben right. Ha az Y negatív, akkor pedig top lesz, különben bottom. És már csak annyi az extra, hogy a tömbhöz használt index-számot, ami egyébként koordináta (valószínűleg), annak az abszolút értékét használjuk, bármelyik tömbben is dolgozunk. Így a mínuszból plusz lesz, és egy sokkal egyszerűbb módszert kapunk a 4 irányba való generáláshoz, szintén végtelenségig (hiszen dinamikus ugyanúgy lehet mind).

De ezt most nem valósítom meg, el lehet képzelni. :)

Ezért szép a programozás, végtelen megoldás van ugyanarra a "problémára", még ha némelyik nem is a legjobb.

Randomcoin bányászat 2017. szeptember 24., vasárnap - 20:33


Akit érdekel, keressen rá részletesen, hogy mi ez, mire jó. Én is csak félig vagyok informált, mert annyira nem érdekel, hogy utánaolvassak. Annyit tudok, hogy ez valami virtuális, lenyomkövethetetlen pénznem, ami átváltható valós pénzre. Sok fajtája van. (A legelterjedtebb a bitcoin talán, mert azt látni a legtöbb helyen.)

Az elmúlt napokban minden FB programozói csoportban erről van szó. Röviden: ez a gyökér coin-hive.com (és még ki tudja milyen oldalak) JS formájában beépíthetőek a weboldalba.

Ez azt jelenti, hogy pénzt keresnek az oldalt látogató emberen, akik ezt használják.
Kb. mintha reklámok lennének az oldalon. A reklám megtekintése miatt az oldal tulajdonosa zsebeli a sok pénzt (nem sokat, de pl. 1 millió ember után 1 Ft is egy milla...).

Sajnos a sok (jól működő) reklámblokkoló beépülő modul ennek keresztbe tett. És úgy tűnik, most ez lesz az új módszer. Ez a kriptovaluta bányászat izé.

Mi ezzel a probléma? Te jól jársz, mert az oldalon ott van, amit keresel (filmezz.eu-n vettem észre én pl. elsőként), és az oldal is, hisz neked semmibe nem kerül a dolog, de ők is pénzt keresnek vele.. Frászt.

Két baj van. Az első, hogy pörgeti a géped processzorát 100%-on. Ez hamar károsodáshoz vezethet (hosszú távon), de legalábbis mindenképp negatív hatása van. Másrészt amíg foglalja a procit a sz@ros weblap, addig egy mappát nem fogsz tudni megnyitni, olyan lassú is lehet a géped. Jobb esetben átadja az erőforrást a böngésző más dolgoknak, de az előző dolog még mindig elég baj..


Ha van adblock a böngésződben, hozzáadható kivételként az egész coin-akármi weblap.
Nyisd meg a szűrőbeállításokat, majd ott Saját szűrők, Szűrő csoport felvétele gomb. Adj valami nevet, mondjuk "rohadtCoinShit", vagy hasonló.. Mindegy.
Katt a létrehozott szűrő izédre, és a másik sávban Szűrő hozzáadása gomb.
Ha nincs ilyen gomb, CTRL+R-t nyomj, vagy jobb kattintás, és Szűrők megjelenítése/elrejtése gomb.
Végül írd be ezt: https://coin-hive.com/*
Ugyanígy ezt is írd be: https://coinhive.com/*
(A két oldal ugyanaz, de mivel más a domain cím, mindkettőt tiltólistára kell tenni, hogy mindkettőt tiltsa. Értelemszerűen..)

És végül is kész. Ha most mész erre a weboldalra (katt ide), és az egész kizárólag fehér alapon fekete szöveg (esetleg kékes aláhúzott hivatkozásokkal), és minden bal oldalt van, akkor jól csináltad. Innentől nem tölt be semmit erről az oldalról, pl. a gépedre nézve ártalmas kódokat a böngésződ..


Még annyit - a filmezz.eu-n sincs ám mindenhol ott ez a f0sc0in bányászat. Csak azon a részén, ahol az indítható film is megjelenik. Van azért eszük. Így úgy tűnik, mintha a film foglalná a gépet.. Ja, 100%-ot folyamatosan. Valószínű is..

Továbbá ez most (ahogy gyors körbenéztem)  igaz minden illegális tartalmat futtató weboldalra, amit nem hatalmas cég üzemeltet. Értendő: ahol sok film, zene található ingyen pl. (ugyanis ez nem legális, még akkor sem, ha csak más oldalról idézi be önmagára őket, és lista-szerűen kigyűjtögetve van rá).
Tehát az Indavideo az nem káros valószínűleg, mert az Index üzemelteti, ellenben a sorozatbarát az igen. És a többi..

További részletes információk itt.

Sulis marhaságaim (webes cumók) 2017. július 7., péntek - 22:54


Az évek alatt összegyűlt sok, az iskolában elkezdett "kacat", amiket - lévén, hogy a szakmai évemet megkezdve egy szervergéphez kerültem az idő nagy részében, integrált videókártyáshoz (így az emulátoros DOS játékokon kívül sok minden nem működik rajta) - böngészőre hoztam létre, mert az minden platformon és hardveren lefut, bármilyen gyenge is - max. kicsit lassabb lesz. Ezeket szeretném összeválogatni most.

Szóval ezek nagyrésze pointless, céltalanok, de némelyik jól néz ki. Van, amelyik hasznos/használható/játék. A játékokat, játék-kezdeményeket és kis ügyességi (?) programokat (amiket már lehet irányítani egérrel vagy nyilakkal) egy őő.. vastagított címmel jelzem (szóval ami nem csak szép, oszt nézni kell):


Rock2JS Rockstar ezotérikus prog.nyelvet JS-ként, futtatható formába "konvertáló" tool. Itt elérhető a GitHub projekt hozzá.
BUÉK Lényegében az első nyilvános próbálkozásom ES6 használatra.
Linkrövidítő Rövid ideig tárolja a cuccot, ha jól rémlik, 5 perc, szóval nagyon sietős esetben használható csak..
Array 1D-2D átváltás A többdimenziós tömbök valójában 1 dimenziósak, ez pedig egy bemutató az 1 és 2 dimenziós közti váltás működésére - hogy érthetőbb legyen. (Valójában ez jó rég készült, de elfelejtettem kirakni..)
FakeOS Kamu Win7 klón weblapos formában. A neve Fake Operating System, röviden csak FakeOS, vagy FOS... Ha egyszer befejezem, menő lesz; már az ablakkezelés most is nagyon az.
Steins;Gate karakter Lehet forgatni, telón is. Pislog, lélegzik. Jee. Fel-le nyíllal megnézhető, meg enterre lecsukja a szemét. Bátyámnak készült, a chatbot-ötletéhez.
Bögretervező Lehet forgatni, telón is. Gépen fel-le mozgatva az egeret más szögből is nézhető. Még nem csinál mást, nem lehet tervezni vele.
Buborék rendezés Sok ilyen YouTube videó van, ahol egy-egy sorba rendező algoritmust bemutatnak lassítva. Ez tök látványos. Szóval lemásoltam. Mobilon is jó (viszonylag). Kattintásra indul.
Településnév generátor Az alapot 12 perc volt megírni. Aprót módosítottam az alaphoz képest, az még talán 4-5 perc, de poén az egész. Gondolkodtunk ezen a volt osztálytársakkal korábban, és most eszembe jutott, és gépnél ültem.
Nac mac fígli névgenerátor Volt egy ilyesmi bejegyzés Terry Pratchettnél, a könyv írójánál, csak angolul, én meg megcsináltam ezt a névgenerátort, magyarul, amennyire sikerült.
Dragon Racing 1.0 Egy srác vagy 20 éve csinált egy GM 5.0-s játékot. Ezt végre meg tudtam szerezni egy ismerőstől, így portolhattam HTML5-be. Pöpec játék, érdemes egyszer végigtolni. 15-20 perc max.
3D heightmap teszt - Izé. Metin2. Körbeforgatható Metin-térkép nézegető. 50% részletességű, mert így is zabálja az FPS-t, egészben kirajzolva. Csak teszt. De készült belőle FPS nézetű, "mászkálós" verzió. Ha a linkben a mapot átírod, más térképet is betölt.. (de mivel lusta voltam, csak kettő elérhető: map1_jinno, sohan, yongbi és hwang)
XOR titkosító - Anno kerestem xor crypt/decryptet online, de valahogy nem működött, szóval csináltam reggel 2 óra alatt a suliban egy működőt - a Matrix letterfall cuccomból kimásolva a text2binary- és vissza részt.
Cóher VS. Smitt - Hátő. osztálytársakból harcos történetgenerátor, elég részletes.
Végtelen terraingen - Textúragenerátornak is jó, pszeudo random, procedurális heightmap generátor, így terrainnak is megfelel, Perlin zaj alapján
Prímszám számoló - Ez egy beidőzíttetett, lelassított prímszám-számoló. Ami mutatja a folyamatot, hogyan számolja a prímeket. Állítható sebességű!! Jó nézni, na.. Megkeresheted vele a kedvenc számodhoz legközelebb álló prímszámot pl..
Végtelen mapgen - Nyilak + WASD. Egy bemutató, hogyan oldható meg a végtelen map generálás bármelyik irányba. Kommentelve van a forrás, tesztből átírható az összes init érték is, érdekes dolgok jöhetnek ki.
Névtetszés összehasonlító - Ha esetleg van párod, akivel nem tudtok közös tetsző (akár gyerek)nevet találni, ez segíthet..
Okey - Metin2 Okey kártyajáték szimulátor - videó róla itt, infó itt
Bináris konvertáló - Igazából binárisba alakítja a szöveget, meg vissza, de Mátrixos betűeső háttérrel
3d kocka (henger) - Haszna és értelme nincs, kattints a kockára valahova. Látványosság mindössze.
CSS autó - Egyszer beszélgettem egy baráttal, hogy milyen kocsit tartok szépnek. Nem értek a kocsikhoz, de gondoltam rajzolok neki egyet, hogy körülbelül milyet.
A világ legpontosabb diagramja - Volt egy ilyen vicc kép, eredetileg angol nyelven. Én csak azért másoltam le HTML-be, hogy meg tudjam csinálni (elég bénán) azt, ami történik, ha rákattintasz a kerek részére.
Pixdrawing - Egy nagyon egyszerűsített téglalapos rajzprogi(utánzat).
Circdrawing - Hasonló az előzőhöz, de itt már körökből rajzol, billentyűnyomásra jön elő a menü, és menőbb.
Karácsonyi minijáték - Ez egy tényleges játék. Hibásak a falak, felfelé át lehet őket ugrani, na mindegy.
Csillagok - Galaxis látkép generátor
Dungen - Véletlenszerűen generált 3d perspektívás kis játékocska, labirintus-szerű kijutós. Végtelen szinttel, szóval felesleges csalni a szint számával. A lépcsőre lépve nyomj entert a továbbjutáshoz.
Fog of war - Egy srácnak kellett segítség, illetve demonstráció, hogy mi a jó megoldás a FoW-ra (stratégiai játékokból ismerős lehet, mint a HOMM, vagy a Warcraft/Starcraft) - szóval bemutattam, hogy a tiled. Bal klikk kijelöli az unitot, jobb klikk mozgat.
Géza - Géza, a nem túlkomplikált chatbot. Elég leegyszerűsített, de működő.
Harcgenerátor (DBZ) - Legenerál egy kódot a harchoz, egy CRC-szerű ellenőrzőkóddal, így nem hamisítható. Egy játékomhoz csináltam, hogy lehetséges-e ez a megoldás, ez alapján igen. Később még jól fog jönni.
Havas táj - Bemutató jellegű, megmutattam egy osztálytársamnak, hogy mennyire egyszerű egy ilyen kis animáció izét csinálni.
HB - Ezt szoktam elküldeni a legtöbb szülinapos barátomnak.
HTML5 Logo - Az Imagine Logo HTML5 változata. Nem tökéletes, de igazából elég jól sikerült.
Infinite path - Ahogy nézegettem a feladatkezelő teljesítmény fülét, kb. ezt képzeltem el róla, és gondoltam megvalósítom.
Kártyás - A lehető legegyszerűbb párkereső játék, mindössze színekkel. Még kisgyerekeknek is tökéletes.
Közmondás generátor - Régen bátyám csinált egy ilyen android alkalmazást, ez annak reprezentációja, csak kevésbé értelmes sokszor (a generált mondat).
Lólépés - Anno a volt osztályfőnököm adta a feladatot a páromnak, én meg gondoltam megoldatom programmal. Lólépésből bejárni a sakktáblát úgy, hogy ugyanoda nem lépünk többször, és ne maradjon ki mező. Harmadik nekifutásra sikerült papíron, a program még 63 lépésnél messzebb nem jutott (64 a max), mert mindig random generál, nem jegyzi le a rossz útvonalat. (Elég sok memóriát igényelne amúgy is, a sakkról nem is beszélve) - a megoldás egyébként, hogy körkörösen haladj előre.
Póniló reptető - Iskolai bemutató napon a leendő diákoknak demonstráltuk Photoshop tudásunkat, hát - én szebbet is alkottam a füvesháttér-pónilószárnyakkal montázsnál. Az url= rész után beírható bármilyen kép címe, így az is repkedhet.
Japán szógenerátor - Japán szógenerátor. Van egy elmélet (vagy tény? nem tudom, elvileg tény.. :D), hogy ha egy adott nyelv szótagjait véletlenszerűen összerakod, akkor olyan szavakat kapsz, mint amik az adott nyelven íródtak. Szóval japán szógenerátor.
Magyar szógenerátor - Ugyanaz a szógenerátor, magyarul.
Történet generátor - Egy egész komplett középkori történetgenerátor, név alapján (és még ragoz is, magyarul!). Unalmamban készült, senki ne vegye komolyan.
RMG - Ennek van egy már készebb változata, csak nem tudom hol. Véletlenszerű Wormshoz hasonló pályabontós kis izé, kattintásra lő, nyilakkal mozog.
Snake - Volt valami fél órás challenge, hogy csinálj HTML5-ben snake játékot. Nekem 37 perc volt, de nem ideális körülmények között, a suliban (amit egy szünet is megszakított).
Space counter - Suliban sokat versengtünk, hogy mekkora WPM-mel gépelünk magyar nyelven. Az enyém az osztályomban a 3. leggyorsabb csak, olyan 113 szó per perccel, vagy ilyesmi. Ez most ugyanaz, csak szóközök lenyomását méri.
Spektrum - Egy szimpla kamu spektrum generáló. Ne keresd benne az értelmet, csak szép és kész.
Starmove - Emlékszel rá biztos, hogy WinXP-n volt az a csillagos képernyőkímélő. Nem emlékszel? Itt egy igen béna másolata.
Szépvagy - Unatkoztunk.. xD
Szövegelő - Érdemes F11-et nyomni, teljes képernyőn menőbb. Reprezentáltam a prezentációkat, weblapon. Akár egy film vagy játék intrója is lehetne - a szöveg változtatható, egy sima tömbben tárolom.
VfIDG - Vidman táblázata sem rossz, de azt most letölteni Google Drivera szenvedés, ez gyorsabb. ^^
Wolves - A páromék osztályáról mintáztam, ha már a farkas volt a motívumuk a diáknapjukon. Érdemes teljes képernyőn. (Unreal Tournament '99-es a hangok egy része [vagy mind, már nem emlékszek].) Érdemes teljes képernyőn nézni (F11).
Szép/csúnyaszavak - Ez egy gyűjtőoldal, ahol jelzőket gyűjtök, pozitívat és negatívat is. Játékhoz kellettek, azaz chatbothoz.
E-Cset - Saját chatkészítő programom, beágyazhatóan. Egyszerű használni, és bárhogyan dizájnolható, nem úgy, mint a fizetős cbox. (Azt megutálva csináltam ezt.)
Képpöttyöző - Az ötletet az useless/pointless oldalakat látogatva találtam meg egyszer, Mona Lisa kirakódik kis karikákból. Gondoltam, ezt én is meg tudom csinálni.. Menő lett.
Játékötlet generátor - Ha épp nincs ötleted, milyen játékot kéne csinálni, ez majd segít.
Zeneötlet generátor - Osztálytársamnak készült anno. Ha nincs ötleted, milyen zenét csinálj.
Szófelhő generátor - Egész komoly szófelhő generátor. Ezt képzeld el úgy, hogy feltöltesz egy képet, és a képet kirajzolja ide-oda méretezett szövegekből - elég menő. Nem tökéletes, úgy állj hozzá.
PIM - Aknakereső kicsit másképp. Nyilakkal mozogsz, balkatt zászló. Eredetileg bátyám ötlete, még anno Opera Widgetként hozta létre.
Varázsfa - Egy feladvány, amit anno szintén a volt osztályfőnököm adott. Ezt szerencsére egyszerűbb legenerálni, demonstrálni, mint a sakktáblás lólépésest.

A nodeJS és Patrik szenvedése 2017. január 16., hétfő - 18:26



Egyszer réges-régen, még az ős-... na, szóval úgy tavaly nyáron (2016) - kipróbáltam a Node.js-t.
Ez a - képen látható - example.js és run.bat fájlban merült ki, amik egyébként egy netről kimásolt TCP/IP-s hellót-viszlátot kiíró program volt, attól függően, hogy valaki pl. böngészővel megnyitja-e a kapcsolatot, vagy (illetve utána) bezárja-e.

De most, ma nekiestem újonnan. Az inspirációt egy Tibia nevű 1996 óta futó játék adta, ami egyébként ~30 MB-ot foglal, és van flash alapú kliensprogramja. Eszembe juttatta, hogy lassan ott járok, hogy kéne csinálni egy MMORPG-t, s még ha nem is egy túlzottan komolyat, de legalább 2D-ben valami RPG Makerhez hasonlót, mint az előbb említett, német(ek által elkövetett) játék.

Szóval az lett a végeredmény, hogy szinte lemásoltam egy neten fent lévő nodejs chatprogramot, de azért mégis tisztább lett. Már nem a kódra értem a tisztaságot, inkább működésre.

Azért volt jó, hogy nem CTRL+C - CTRL+V-t használtam, mert így lépésenként felfogtam, hogy tulajdonképp hogy is működik a kis rendszere. Elég egyszerű.

De arról még nem írtam, hogy mi is az a nodejs. Akit érekel, úgyis utánaolvas, de röviden egy webszerverek készítésére létrehozott JS-ben írható eseményalapú aszinkron szoftverrendszer.
-> Szóval tudsz vele csinálni valós idejű kapcsolatot weben, ergo MMORPG-t.

Erről (a témáról, a haladásomról, stb) majd még írok, ugyanis ez az első programozással ténylegesen foglalkozó bejegyzés, amióta a blogolást elkezdtem, ha jól emlékszek, pedig eredetileg a blogomat főként ilyen témára hegyeztem volna ki, de hát mindegy. Végül itt egy print a kész dologról, működés közben, tesztelve (telnettel parancssorban csatlakoztam a szerverhez, és cmdben történt az összes interakció is, mivel TCP/IP szervert csináltam, nem webest.)


Ja, egyébként ha valakinek kéne ez a kód, ami amúgy.. nem egy nagy dolog - de ki tudja, akár tesztelésből -, ide egy szövegdobozba bemásolom, másolható formátumba:




( A szervert egy sima parancssori "node server.js" paranccsal indíthatod, ha telepítve van a nodejs. De legyél a cmd-vel a futtatandó fájllal közös mappában. Ha csatlakozni akarsz, legyen telepítve a telnet a  vezérlőpult -> programok -> szolgáltatásokban (Telnet ügyfél), ez WinXP-n alap, de 7+ nincs telepítve on default. Csatlakozni pedig cmd-ből a "telnet *IP* *PORT*" paranccsal tudsz, szóköz van az IP és port közt, nem kettőspont. )