25. října 2015

Vektorové písmo v Game Maker Studiu

Vektorové písmo v Game Maker Studiu


Dneska jsem si hrál s písmy v GMS. Jak asi většina lidí ví, písma ( fonty ) mohou být vektorová nebo rastrová. Rastrová jsou uložena po obrazových bodech ( pixelech ) jako běžné obrázky. Vektorová písma mají zaznamenány souřadnice čar, kterými se písmena nakreslí.


Rastr

Vektor

Obojí způsob má své výhody a nevýhody, ale světu písma dominuje v současnosti vektorový záznam ( např. díky Windows stále oblíbené TTF - TrueType ), Proto je poněkud divné, že Game Maker Studio narozdíl od svého předchůdce GM8 používá rastrový záznam a to i tehdy, když zdrojem písma v operačním systému je vektorový font. GMS prostě ( nebo možná sprostě ) vykreslí písmena v dané velikosti do rastrové textury a ty pak používá. Výsledkem je obrovská spotřeba paměti a nutnost ukládat různá rozlišení písem zvlášť. Přepočítání velikosti ( škálování ) je u rastrových písem dost vidět. Především pokud jde o zvětšování. Kdyby písmo zůstalo vektorové, zabíralo by minimum paměti a nebyl by problém ho vykreslit hladce v téměř jakémkoli rozlišení. Ale frajeři u Yoyogames asi usoudili, že uživatelé GMS stejně nic nepoznají a rastr se jim lépe programoval. Tak jaképak copak.

Při honbě za fičurami se nějak seběhlo, že byla do GMS začleněna částečná podpora pro formát SWF, což je formát vektorový a tak mě zajímalo, jak to vlastně bude vypadat, když do GMS nahraji nějaké to SWF. Nahrává se to do sprite editoru jako otevřít sprite. První, co člověk zjistí, je fakt, že většina někde stažených SWF souborů skončí errorem, vypadá jinak než má nebo prostě není vůbec vidět. Je opravdu vzácnost, když nějaké náhodné swf vypadá správně. Já jsem se zajímal o písma a tak jsem přišel na způsob, který alespoň trochu dává výsledky.

V balíčku SWFTools lze najít spustitelný soubor swfc.exe, který je třeba spouštět z příkazové řádky ( run - cmd ). Jako parametr se uvede textový soubor obsahující příkazy pro vytvoření swf. Jednoduché příklady jsou ZDE. Takto vzniklý soubor SWF lze načíst v Game Makeru Studio, pokud neobsahuje nějaké efekty. Čisté písmo se mi načíst podařilo. Sprite editor ho neumí editovat, neumí ho ani pořádně zobrazit, ale v hrách to částečně použít jde. Pokud člověk touží po písmenech přes celou obrazovku v rozlišení full HD nebo větší, tak asi stejně nic moc jiného nezbývá. Naopak při malých velikostech písma dával Game Maker překvapivě špatné výsledky. Vykreslování se odbývá funkcemi rodiny draw_sprite a není nijak závratně rychlé.

Výsledky pokusů s SWF písmem jsou k vidění v Code Garage. Soubory Text.exe a BigText.exe pracují s vektorovým SWF, TextClassic.exe to řeší normálním fontem v resource Fonts. Je třeba poznamenat, že zatímco u Classic je velikost na pokraji možností, importované SWF mělo pořád ještě velikostní rezervu. Je ovšem jasné, že jen málo aplikací či her bude nutně potřebovat tak zvětšené písmo.

3.11.2015 Opraven link. Teď už tam fakt ukazuje. :-)

20. října 2015

Draci na niti

Draci na niti


Dneska celkem náhodou při nějakých pokusech s úplně jinou záležitostí vznikl specifický způsob pohybu článkových řetězů, až jsem neodolal a udělal z toho exe v GM8. Cílem je provést kuličku ( pomocí WASD ) k zelenému terčíku ( přibližně na jeho střed ).

>DOWNLOAD<

16. října 2015

Programátorská pohádka v GML

Uvědomil jsem si, že známá Pohádka byla přeložena do většiny programovacích jazyků, ale její verzi v GML ( Game Maker Language ) jsem nikde nenašel. Tak jsem vyvinul trochu snahy a tuto mezeru doplnil. :-)

 

Surface v GML

Kreslení do surface v Game Makeru

( překlad anglického slova "surface" /m.č. surfaces/ do češtiny je "povrch" )

Pod pojmem povrch si každý asi představí něco jiného, tak bych se spíš držel anglického slova surface, které používá Game Maker. Jde o kousky dočasné paměti, do které lze v GM ukládat obrazové informace. Lze si to představit jako malá okna, do kterých jde něco vykreslit a ony si to pak pamatují.

Příklad použití surface:

Řekněme, že chci vykreslit během hry obrázek slunce vykreslováním jednotlivých paprsků pomocí funkcí draw_line a draw_circle. Fajn. Udělám něco okolo stovky paprsků a vypadá to celkem dobře - Game Maker to stíhá i rozumně vykreslit.

Jenže co když budu chtít takových sluncí víc ( ve hře třeba bude hráč sbírat sluníčka :-) )?
Z ukázky je vidět, že už tři slunce srazí FPS ( počet snímků za vteřinu ) celkem výrazně:



FPS ze tří tisíc možných kleslo na 163!
A to mám v malém okně pouhé tři objekty a nějaké to vypisování!

Pomocí surface je to zatraceně velký rozdíl!
Když si slunce ovšem vykreslím nejprve do surface, můžu ho ve hře mít spoustukrát a prakticky žádný výkon to nesežere.

Screenshot z ukázky to dokládá:

















Je vidět, že takto bych v pohodě měl mnoho sluncí a ještě by výkon zbyl.
>DOWNLOAD UKÁZKY< 

Vzhledem k tomu, že ve spolupráci s LoF vyvíjím editor, v němž půjde myší navrhnout rozmístění surfaces po ploše, objeví se zde brzy i článek, jak to dopadlo. Měly by tím jít snadno udělat zajímavé efekty. Těšte se!




10. října 2015

Jsem z5!

Jsem zpět! :-)


Včera jsem se vrátil ze špitálu, kde mě rozřezali tak, že se z toho budu ještě dlouho regenerovat ( asi bych potřeboval trochu trolí krve, aby to šlo rychleji ). Ale protože všechno zlé je k něčemu dobré, mám pár pozoruhodných postřehů z daného prostředí. Jeden z těch postřehů má vztah i k tvorbě her a tak se tady s ním hezky uplatním. Je zajímavé jak jsou věci zároveň v rovnováze a zároveň pestré. Synergie jako vyšitá.

Všiml jsem si, že zdravotnictví funguje velice podobně jako armáda. Vlastní uniformy, přísně hierarchický systém řízení, výjimky ze zákonů, vlastní terminologie, uzavřené a nebo pro nezasvěcené málo přístupné objekty, vysoká společenská priorita a z toho plynoucí prestiž, pokročilá technika, svěřepě dodržované postupy. Z hlediska her by bylo možná atraktivní, předělat nějakou vojenskou strategii na zdravotnickou strategii víceméně 1:1. Místo boje by byl boj s chorobami. Budovy by produkovaly lidi, služby, výzkum atd. Ideální by byl koncept z UFO:ENEMY UNKNOWN. Základny by nahradil zdravotnický komplex, ten by se plnil budovami, přísun peněz by byl podle úspěchů a ekonomiku by doplňovaly nějaké akční mise. Například likvidace epidemie ( léčení a hledání zdroje nákazy ), záchrana života v nebezpečném prostředí, složitá operace významné osoby, atd. Úplně to vidím před sebou. :-) Je možné, že něco takového už existuje a já o tom nevím. Hry jako Theme Hospital mě vždy nechávaly chladným. Přesto myslím, že modelovat celé zdravotnictví podobným způsobem jako válečnou mašinerii, by mohl být zajímavý přístup k věci.

No, ale teď mám dost co dělat, tak ten nápad asi nechám u ledu.