Simplex – rok a půl (sporadického) vývoje
Zdravím osazenstvo Krevety!
V tomto příspěvku se chci věnovat největšímu projektu, na kterém jsem pracoval – svému hernímu enginu, silně orientovaném na tvorbu RPG her, nazvaném prostě Simplex (složenina slov simple a complex – cíl enginu je přinést jednoduchá řešení pro složité problémy).
Projekt Simplex postupně vznikl z prostého programu, jehož cílem bylo vytvořit herní inventář pro některou z mých nedokončených her, která v toku času ztratila jméno, nebo si na něj nepamatuji. Na gitu se první commit Simplexu datuje k pátému červnu 2015, ale na disku jsem ho mohl mít o dobrého půl roku déle. Repositář nesl jméno „Dragon rise 3“, což měla být poměrně nespecifická hra, kterou jsem chtěl vytvořit. Engine okolo prvního commitu vypadal takto:Není tam toho sice moc, ale pamatuji si, že jsem z funkcionality měl hroznou radost. Po obrazovce se pohybovala animovaná postava, inventář uměl stackovat předměty, byla možnost je přesouvat, ukládat a vybírat z truhel, používat je.
Asi o třicet commitů později vypadalo celé demo o něco lépe, přidal jsem první, naivní implementaci stromů, změkčených dlaždic, raritu předmětů, zbraně, resp. zbraň, která šla nasadit a velmi vtipně se vykreslovala a v neposlední řadě pokus o formulář equipmentu:
O dva měsíce později se začala formovat první verze UI programu. Do světa přibili slimáci, kteří se už od své první implementace chovali poměrně chytře, takže hráč nebyl osamělý. NPC postavy získaly schopnost zobrazovat dialogy, byť prozatím bez možnosti odpovědí.
Kolem commitu 80 vznikl ukazatel zkušeností, první forma minimapy a také první kouzlo – ohnivá koule. Hráč mohl sprintovat a celkově se zlepšily kolize.
Asi po čtyřiceti commitech se výrazně zlepšil inventář, byť vypadal stále hrozně. Také vznikl bestiář, který se visuálně moc nelišil od dnešní podoby.
Následovaly úkoly a hráč konečně mohl reagovat na povídání ostatních postav.
Potom šel vývoj ráz na ráz a v poměrně krátké době jsem implementoval spoustu věcí – statusMenu, atributy, perky, výrobu, obchody a mnoho dalšího. Kromě toho vzniklo více kouzel, minimapa dostala nový vzhled a hlavní hrdina se schoval pod kapuci.
Někdy v téhle době, okolo commitu 200 začala vznikat v Simplexu hra Fate of hero, která nedlouho nato úspěšně vybrala potřebné prostředky na její vývoj na Startovači. Kromě toho jiné studio na Simplexu vytvořilo hru Shuups – adventuru na android, která je k dostání na Google play.
Potom přišla neskutečně úmorná doba, ve kterém jsem zjistil, že engine je plný chyb, často se chová poměrně záludně. Následujících 150 commitů jsem strávil převážně opravami těchto chyb, optimalizací, rozšiřováním komponent a API. Vznikla také spousta méně výrazných komponent jako ovlivnění, páčení zámků, portály, třes obrazovky, databáze overall shaderů, ocenění, házení předměty, cyklus dne a noci a mnoho dalšího. Engine se taky naučil rendrovat jeskyně. Databáze předmětů měla přes 50 předmětů a nově se daly opravovat. Výroba a přidružené možnosti předmětů prošly velkou aktualizací.
V commitu 400 jsem uvolnil zcela nové UI enginu, vzdušnější a lépe vypadající, všechny menu a formuláře prošly změnami. Hrdina nově zobrazuje předměty, které má na sobě a inventář dostal další velkou aktualizaci. Mimo jiné umí automaticky porovnávat předměty. Databáze předmětů měla 80 položek.
A tím jsem došel až k současnému stavu, engine momentálně vypadá přibližně takto. Vývoj samozřejmě pokračuje dál, skoro na denních commitech. Jelikož jsem vcelku spokojen s jeho možnostmi, plánuji v brzké době vložit na Startovač kampaň, ukazující hru, kterou v Simplexu tvořím. Co se marketingu týče, Simplex je duálně licencovaný, dostupný pod GPL3 licencí pro nekomerční projekty a pro studia s komerčními plány je možnost koupit si licenci. Někde okolo commitu 300 se oddělila legacy větev, který je dostupná jak pro komerční tak i nekomerční projekty pod LGPL, ale není aktualizovaná.
Simplex v jádru podporuje GMS1, LGM a naše vlastní SimplexIDE. Momentálně ale probíhá přechod na GMS2, takže LGM nebude v budoucnu bohužel podporováno. Kombinace GML a C# umožňuje velmi rapidní vývoj her. Engine je silně optimalizovaný a použité demo běhá na nejvyšší detaily na středně výkonném počítači na 350 fps, při snížení detailů až 600.
Na závěr přikládám krátké video, které ukazuje něco z nového UI v pohybu: https://www.facebook.com/simplexengine/videos/931553133614095/
Git projektu: https://github.com/lofcz/SimplexRpgEngine
Budu rád za případné komentáře, postřehy či kritiku.
10 komentářů
Vypadá to hodně pěkně ! Super !
Koukám na video, Nevšiml jsem si tam pohyb po uhlopříčkách.
Nechceš ho tam přidělat ?
V čem ten engine vytváříš ? C# ?
Aha. Tak už to vidím. GM Studio. Ale pěkné !
Je to kombinace gml a C# – 70 / 20% (+ minoritně glsl, nsis a další). Pohyb po úhlopříčkách není součástí enginu a není ani plánovaný.
Díky za pozitivní komentář.
Tak jsem to zkousel.Kdyz to delam podle Tveho navodu, (To zkopirovani mistnosti, a prepsani toho kodu v create mistnosti) tak mi vyskoci chybova hlaska.
Kdyz ale do te mistnosti vlozim manualne objekt hrace, tak se mi uz engine spusti.
Muzu hrace ovladat, otevirat inventar. Ale vpravo nahore nemam ty „ukazatele zivota, many,… Nebo co to znaci“ Ale mam tam kulatou mapu s nejakyma ikonkama.
Pisu z telefonu,pak muzu hodit i nejake screeny.
Tutoriály, co jsou k dispozici jsem psal hrozně dávno, vážou se snad k verzi pre 1.0RC1, takže nemusí fungovat. Spíš, jestli si s tím chceš hrát, pracuj s místností mapDemo. Ty kulaté ukazatele byly součástí starého UI, v novém je minimapa, jak píšeš. Mimochodem se o tom zmiňuji v originálním příspěvku. Nicméně není potřeba se bát, všechny staré ukazatele jsou chytře schované v ní. Jinak, ten engine toho umí víc, než otevírat inventář. Doporučil bych se mrknout do objektu oHUD, draw event, odtamtud se volá většina GUI akcí.
Zkrátka je to ve vývoji, momentálně je tam RC5 a vím, že jsou v tom chyby, takže zanedlouho přijde RC6. Čas plně zaplňuje vývoj jako takový a technická podpora pro klienty se zaplacenými licencemi, kteří potřebují, aby jim to šlapalo. Ale jakmile se mi podaří protlačit stabilní 1.0, vrhnu se na ref. dokumentaci a tutoriály. Krom toho občas streamuju, takže k Simplexu budou i video návody.
Jestli se s tím ale chceš naučit, resp. na tom něco udělat, můžeš určitě využít náš Git issues systém, za zpětnou vazbu jsme rádi a hlášené problémy opravujeme ve velmi krátké době, můžeš tam i žádat o nové komponenty, pokud ti v enginu něco chybí.
Popř. mě můžeš kontaktovat na fb / někde jinde, určitě si na tebe udělám čas.
Budeš na enginu stavět i nějakou ukázkovou hru? Anebo to necháš na lidech?
O jeden amatérský počin se skrytě pokouším, ale je to hrozně složité, oproti psaní jádra. Mapování mi jde pomalu, designovat herní ekonomiku je zdlouhavé, potom všechny npcčka, atp. Ale pokud se mi povede konečně vydat stabilní release (momentálně RC6), chtěl bych se tomu věnovat. Jenže psát engine v podstatě sám mi přijde docela v pohodě, je to udržitelná práce. Psát sám hru je tak obrovské, že nechápu, jak to zvládáte. Mám problém s tím, že mi nikdy nestačí featury, neustále musím rozšiřovat jádro a k psaní hry samotné se moc ani nedostanu.
Tak já nečekám, že tam postavíš megahru… Ale postavit na tom engine nějaký menší příběh, který bude ukazovat jeho funkce – to je věc, která k tomu přiláká další lidi a uživatele. 🙂
Já k tomu pouze takhle po srazu, kde jsem to mohl vidět v chodu a s vysvětlením, musím uvést, že to vypadá hodně nadějně! Jen poprosím myslet i na másla a editaci udělat nějak jednoduchou a jasnou. Případně to celé doplnit kupou tutoriálů. Každopádně bych se nebál v tom něco dělat. 🙂
Díky, sraz pro mě byl velmi přínosný, musím na srozumitelnost pro koncového uživatele více myslet. Potom jsem tam ještě ukazoval práci s externími nástroji toho enginu, ale to už jsi tam nebyl. Ty by to měly výrazně zjednodušit. Potřebuji ten engine dostat do stabilního stavu, udělat release (momentálně už RC7) a věnovat se natáčení tutoriálů.
Jen pro představu, jak vypadá hlavní IDE enginu:
https://s23.postimg.org/4dpghz2pn/Noname.png
Kompiluje se buď invokem GMS (kliknutí na tlačítko) / použitím mého kompileru, který vychází z otevřené Enigmy. S EDL mám ještě trochu větší plány, chci přidat silné typování a trochu víc GML upravit pro profesionální potřeby. Ideálně by se psalo přímo v C# a ten by se interně konvertoval na GML. Každopádně, s výkonem který poskytuje Enigma / YYC, není problém v GMS dělat vskutku obrovské projekty, protože výsledná rychlost je rovna nativnímu C++.
Jediná mrzutost je, že jakmile to bude nějakým způsobem fungovat, stabilizuje se struktura GMS2 a budu celé externí IDE předělávat pro novou syntax.