Zamyšlení nad GMS

Krátké zamyšlení nad tím, proč nefungují projekty jako Enigma a Simplex. Takřka striktně technický pohled na věc, kdybych někdy zase dělal „engine“, šel bych na to asi takhle.

K substituci proprietárního enginu funkcionálně ekvivalentní náhradou otevřeným softwarem je třeba problém rozdělit na více částí. Uvažujme následovně:

GMS tvoří množina komponent. Rozdělme je na uživateli exponované a interní. Části nám přístupné jsou tedy:

  • GML
  • Editory (pro každý resource typ)
  • Content pipeline

GML obsahuje seznam funkcí. Pro nahrazení je třeba replikovat tento seznam pouze v takovém rozsahu, aby byla zachována klíčová funkcionalita.

Mezi klíčové prostory patří draw_ instance_ math_

Lze nahlédnout, že frakci prostorů můžeme nahradit již existujícími knihovnami.

Ex:

Json_ => newtonsoft json

Steam => SteamSDK

 

Další části jsou již nativně zabudovány v jazyku do kterého konvertujeme.

Ex: Math, Cast/Convert

 

Složitější konstrukty jazyka, například objekt, můžeme snadno simulovat zvolením vhodného frameworku. Ex: objekt obsahuje sprite, definujme použitím MonoGame:

public Sprite(Texture2D texture, int rows, int columns)

{

    Texture = texture;

    Rows = rows;

    Columns = columns;

    currentFrame = 0;

    totalFrames = Rows * Columns;

    // další vlastnosti, x/y origin, etc.

}

 

Pro zbývající jmenné prostory můžeme opět vytvořit wrapper pod nižší technologií.

 

Složitost jazyka

Pokud v novém enginu budeme psát pod vyspělejším jazykem, je potřeba počítat s konstrukty, které GMS neobsahuje, ale které výrazně usnadňují práci. Další výhodou jsou zabudovaná generika, které dalce převyšují ds_ prostor.

 

Editory

Pro místnosti se nabízí využít nástroj Tiled, který je v aktivním vývoji. Oproti GMS2 editoru obsahuje více funkcí, csv/Binary export a MonoGame.Extended pro něho má přímou podporu.

 

Objekty

Editor objektů je výhodnější mít v podobě kódu, kdy eventy jsou definovány jako override base.

 

Sprity

Pro GIMP2.10 je možné vyexportovat nastavení, které ho přeměňují na pixel editor.

 

Paths

Nejlépe replikovat vnitřně, je to jednoduchý editor a implicitní aplikace přináší více možností.

 

Timelines

Merge nástroje nikdo nepoužívá, timeline je pouze abstrakce asociativního pole. Lze používat pouze kódem

 

Zvuky

Editor neobsahuje příliš užitečných možností, Audacity není optimální, ale stále dostatečná nahrážka.

 

Content managment

MonoPipeline je skvělý nástroj pro udržování zdrojů, formou připomíná GMS.

 

Výkon

Využitím C# / Kotlin / Python získáme několikanásobný výkon v elementárních operacích. Jazyk lze volně doplňovat via NuGet / PIP / etc. Apt managery.

 

Abstrakce

Engine takto seskládaný z více nástrojů se vrací ke kořenům herních enginů. Tedy k fragmentaci. Nástroje se rozvíjejí bez našeho vstupu, nezávisle na nás a pokud neobsahují breaking-changes můžeme je snadno importovat. Vstupní práce je minimalizovaná, pouze „lepíme“ části k sobě, případně tvoříme vyšší míru abstrakce, což je vždy jednodušší než abstrahovat opačným směrem (viz. tvorba lexeru / kompileru)