HTML

Naptár

november 2018
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

Blogajánló

Az Éjgoblin szív örökké dobog...
 Megtévesztő cím, breton is van ott
Csata és Taktika
Plastic Fantastic
MazeLab Szabolcs Mathematicája
CRPGAddict a megszállott (angol)

Utolsó kommentek

  • pocokman: Srácok, valaki el tudná küldeni nekem azt az x-kutato.zip-et? smidla@gmail.com, már nincs fent meg... (2016.06.09. 11:09) Félmunkák: X-Kutatócsoport
  • Varga Matein: Nagyon szépen köszönöm. :) (2015.08.07. 08:02) Árak, bérek, pontok
  • Tilinger Ádám: @Varga Matein: Megtörtént! (2015.08.07. 02:26) Árak, bérek, pontok
  • Tilinger Ádám: @Varga Matein: Igen, ez volt a tervem eredetileg is. Az utóbbi napokban volt pár szabad estém, úgy... (2015.08.04. 00:22) Árak, bérek, pontok
  • Varga Matein: Ha kész leszel a Nothingam szabályrendszerrel, akkor feltöltenéd az oldalra? (2015.08.02. 21:54) Árak, bérek, pontok
  • Utolsó 20

Ezer világ teremtése

2014.04.06. 23:17 Tilinger Ádám

Miután a grafikus motort átvettem a másik projektből, gyorsan definiáltam az osztálystruktúrát. Szerettem volna egyből valami látványosat, ezért a terepelem osztályokkal kezdtem az implementációt. Maguk az osztályok hipp-hopp készen is lettek, de hamar kiderült, hogy ez csak nagyon apró lépés az igazi látványos haladáshoz. Ugyanis ezekkel az elemekkel valahogy hihető módon be is kell népesíteni a világot.

screen_1.png

Mivel a végleges játéknak is fontos eleme a véletlenszerű világgenerálás, ezért úgy gondoltam, hogy miért ne vágjak bele most. A látványos előrelépés egyre csak motivál - gondoltam. Tapasztalatom nem volt a területen, így nekiálltam az első eszembe jutó algoritmus implementálásának. Ez a (mint a későbbi keresgéléseim alapján kiderült, "fault method"-nak nevezett) módszer egyszerűen sokszor egymás után véletlenszerűen elfelezgeti a térképet, és az egyik felét megemeli/lesüllyeszti. Pofonegyszerű, de kicsit lassú algoritmus. A lassúsága nem olyan elviselhetetlen probléma, a generálás csak egyszer fut le játékonként, ezalatt pedig a játékos pedig amúgy is a küldetés/kerettörténet olvasásával lesz elfoglalva.

Sajnos a világok minősége nagyon változó. Vannak játéktechnikai szempontból jónak tűnő, és totálisan pocsék világok is. És nagyon nehezen irányítható a generálási folyamat.

fault.png

Mit volt mit tennem, "kutatni" kezdtem. Az első google-körök alapján két elterjedt módszert találtam: a "midpoint displacement"/"diamand-square" és a "Perlin zaj"/"simplex zaj" algoritmusokat. Az első párost kizártam, mivel a végeredményük legtöbbször egy nagy hegy a térkép közepén, ez pedig nem valami változatos. A második párosból a szimplex módszert próbáltam ki, a moderneb csak jobb:

simplex.png

 

Az oktávok hangolásával láthatóan nem sok időt töltöttem.

Nem voltam meggyőződve, hogy szebb világokat gyárt, de sokkal gyorsabb módszer, nagyobb térképeknél sem száll el az idővel. Évekig játszhattam volna az oktávok természetesnek tűnő beállításával, de ehelyett belevágtam a hidraulikus erózióba (eső, víz általi természetes terepformálás szimulálása). Szépen megfodrozta a terepeimet és bődületesen lassú volt.

erosion.png

Kezdett alakulni a terep, de komolyan zavart, hogy ezeknél a módszereknél nehézkes irányítani a terepgenerálást. Könnyen paraméterezhető világgenerálásra nem tudtam hatékonyan rákeresni, így aztán beleolvastam egy rakás fura cikkbe, míg végül egy homlokegyenst más írás megihletett: a Dawn of Worlds egy szerepjáték, amivel isteneket megszemélyesítve világokat teremthetnek a játékosok. Mivel ezt nagyjából akkor olvastam, amikor az erdők növesztését implementáltam (egy magból szétszórtam véletlen irányokba), s így összeállt a módszer, ami gondolatban nagyon megtetszett:

A világgenerálás paramétere egy seed-lista. Ezek a magok definiálják, hogy milyen típusú terepet növesszenek, és ettől függően egyéb plusz paramétereket. Egy hegyvonulatot például annak középvonala és magassága határoz meg, egy erdőt a középpontja, egy tavat egy középpont, vagy középvonal és a mélysége...

A magok pedig képesek a földrajzi elemeket felhúzni a világra. A három említett magot gyorsan implementáltam is a generáló algoritmusaikkal együtt, és a végeredmény tetszett. Egészen hihető és játéktechnikailag is használhatónak tűnő alakzatokat hoztak létre:

screen.png

Utolsó simításként a seed-lista generálása maradt hátra. Először véletlenül szórtam el a terepelemeket. Ez persze nagyon kiegyensúlyozatlan világokat eredményezett:

seeds.png

 

A víz-magok generátora hagy még kívánnivalót maga után.

Nem lenne olyan rossz, de a nagy mezők unalmasan mutatnak a játékképernyőn. Egy kicsit változtatni kellett, hogy egyenletesebb legyen az eloszlás! Egy egyszerű megoldást találtam: felparcelláztam a világot egyenlő négyszögekre, és ezekbe szórtam le egy-egy (prioritásokkal) véletlenül kiválasztott magot.

A végeredmény ilyen:

seeds_uni.png

Talán kicsit zsúfoltnak tűnhet, de a játék szabályaihoz szerintem tökéletesen illeszkedik. És klasszul irányítható. Az olyan küldetéseknél, ahol kötött elemek is kellenek (mint az eredeti Wilderness Campaign-ben a hegy a varázsló várával), akkor ezeket könnyedén ledobhatom a kívánt helyre.

Még a folyók, városok és utak hátra vannak, de előtte kicsit csiszolok az állapotgépen, és próbaként egy "encounter"-t is implementálnék.

Szólj hozzá!

Címkék: számítógépes játékok

A bejegyzés trackback címe:

https://adamblog.blog.hu/api/trackback/id/tr855890575

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.