Hello,
A Steam page publikálásának alkalmából szeretném bemutatni a játékomat, ami a Heidentor névre hallgat, és a szakmánál maradva beszélni egy kicsit a fejlesztésről. Volt már erről a játékról szó egy másik Redditen, ahol rengeteg jelentkezés érkezett, hogy NPC-ként valahogy bekerüljenek a játékba, amolyan easter eggként, de sztoriba illően. Jelentem, ennek eleget tettem: több mint 120 NPC létezik a játékban, és jó pár tucat quest ehhez kapcsolódóan.
A játék Godot-ban készül, ez talán a legérdekesebb része a projektnek fejlesztői oldalról, mert az Unreal és a Unity-val szemben Godot-hoz lényegében semmit se tudunk a polcról levenni egy MMORPG-hez.
Én Backend/DevOps/Networking vonalról jövök, de összefoglalva egy 3D MMORPG játék fejlesztéséhez az alábbi dolgok kellenek:
- Game engine
- 3D karakterek + rig + animációk
- 3D assetek
- SFX (hangok)
- VFX (vizuális effektek)
- Rengeteg kliensoldali kód
- Rengeteg szerveroldali kód
- Rengeteg kód azokhoz a toolokhoz, amikkel a játékot fejleszted
Mi a stack?
Kliensoldalon Godot 4.7.2, kezdetben GDScripttel ment a fejlesztés, de az első smoke network tesztnél kiderült, hogy az ide nagyon kevés lesz, így átkerült minden lényeges elem C#-ba. A teljesítmény most kielégítő, de a Garbage Collector még mindig be tud zavarni, viszont nagyon sikeresnek kéne lennie a játéknak, hogy innen továbblépjünk a C++ modulokhoz.
Szerveroldal, itt minden is van: .NET, C++, Bun, PSQL, Redis, egy macro-service architektúrában. Itt a cél az volt, hogy semmiképpen ne kelljen headless Godot-ra támaszkodni, tehát a játék/editor terrain/map mesh ugyanazt a modult használja, illetve a játék fizikája is egy nagyon limitált rendszerre épül. Ez sokat segít kliensoldalon is, hogy a 3D physics engine lényegében mérési határon kívül esik, annyira kevés erőforrást használ.
Toolok: Godot pluginek (C#, Gdscript), Python scriptek, és újabban .SKILL-ekről is van szó. A Skilleket emelném ki: rengeteg olyan folyamat van, ahol a kezdetektől tweakelt Skillek már képesek szinte determinisztikusan hozni az outputot.
Assetek:
Ezek szinte kizárólag fizetős assetek, sokat sikerült Humble Bundle-ön megszerezni. Próbálkoztam Tripo/Meshy kombóval használható asseteket gyártani, de minőségben elfogadható assetet gyártani ezekkel a toolokkal rengeteg idő. Az összes játékban felhasznált assetet Unity/Unreal-ből kellett Godot-ba átimportálni. Ez kezdetekben még az LLM-eken is kifogott, sokat kellett trükközni köztes stage-ekkel a konvertálás alatt, manuális review-t csinálni minden assetnél, mire az összes glitch-re meglett a megoldás. Ma már ezt „szerencsére” olyan 95%-ban megoldották a frontier modellek, de még azért egy-egy nap el szokott menni, ha valami új típusú asset packot szeretnénk betenni a játékba.
Hangok / SFX:
Számomra ez az egyik legnehezebb feladat, elég botfülem van, és az audio mint olyan mindig kívül állt az érdeklődési körömön.
Vibe coding:
Egy jó 10+ éve vagyok szoftverfejlesztő. A szakmai érdeklődésem egy hullámvasút: először csak az volt a cél, hogy működjön -> minél hatékonyabban tudjak fejleszteni, utána pedig, amikor már ezek mentek, akkor mentem át a low-level dolgokra. Jöttek az LLM-ek, amikkel kinyílt a világ, és tudtam olyan dolgokkal foglalkozni, ahol addig részleges tudásom volt, de a vakfoltok megtanulására sose volt motivációm.
Szeretném azt hinni, hogy voltak olyan problémák a játék eddigi fejlesztése során, amiken a rutin meg az évek tudtak továbbdobni, de valószínűleg csak meggyorsították a folyamatot.
Nagy vonalakban azt mondom, a fejlesztés annyit nem változott, mint amennyit a programozás maga. Régebben, amikor éppen nem a projektemen dolgoztam, akkor arról szereztem be információt, hogyan kell XY dolgot megírni, hogyan működik, hogyan lehet optimalizálni, van-e valami out-of-the-box megoldás... Most arról szerzek be információt, mi egy játék esszenciája, mik azok a mechanikák, amik működnek, mik azok, amik nem, sikeres és megbukott játékok jó és rossz megoldásai. Időben ugyanannyi elmegy ezekre, hogy az irányt megtaláljam, merre haladunk, közben az implementálása egy-egy dolognak hetekről/hónapokról percekre/órákra meg napokra változott.