22. listopadu 2015

Funny Physics

Tato drobná aplikace je vlastně taková hra-nehra. Stavíte kostičky a poléváte je barvou. Nemá to žádný smysl ani cíl. Jen je to hrozně legrační. Když jsem to naprogramoval, tak jsem si s tím ještě celé hodiny hrál a bavilo mě to. Moje děti se kolem mě tlačily a braly mi z ruky myš, že si to chtějí taky zkusit.

Tak si myslím, že to stojí za FREE DOWNLOAD.




Ovládání:

SPACE: nalít barvy

LMB na nádrže: změnit barvu
RMB na nádrže: povolit/zakázat

LMB kdekoli na plochu: postavit kostky
RMB na kostku: zničit ji

klávesa 'R': restart


CTRL+LMB: udělat trvalou kostku

klávesa DELETE: zničit všechny kostky, které nejsou trvalé

SHIFT+LMB na kostku: přidat do výběru pohyblivých kostek
ALT+LMB na kostku: odebrat z výběru pohyblivých kostek

kurzorové klávesy: pohyb výběru pohyblivých kostek

prostřední myš ( na některých myších kolečko ): změnit trvalou kostku na vypouštěcí kostku

RMB na vypouštěcí kostku: zničit ji


----------------------------------------------------------------------------------------------------------















20. listopadu 2015

Showroom

Showroom




 > DOWNLOAD SHOWROOM <




Spustitelná přehlídka částicových efektů vytvořených pomocí Particle type editoru umožňující vybraný efekt stáhnout a použít v Game Makeru Studio.

Užijte si ukázky efektů ( procházet můžete ručně nebo si zapněte autoplay a prostě se dívejte ), vyberte si pěkný efekt a kliknutím vpravo na obdélník "download link" se otevře v prohlížeči odkaz na soubor s efektem. Jde vždy o zip obsahující několik souborů. Soubor .ini se dá nahrát do PTE a editovat, pokud chceme efekt nějak změnit, ale pro použití efektu samého není editor nutný.

Pokud chceme efekt použít v Game Makeru do svého projektu, tak se prostě všechny soubory ze zipu odtahají do okna GMS ( dělejte to po jednom ) a tím se přidají do resources ( měly by přiskákat do složek v levé části okna GMS ). Pokud se Game Maker u něčeho zeptá, ukládejte vždy jako Include File soubory .ini a .png. Soubor s koncovkou .gml je sada skriptů ( je nutná k běhu efektů, ale stačí ji mít jen jednou i přesto, že je přibalena ke každému efektu ) a soubor s koncovkou .gmx je gamemakerovský objekt. Objekt pak stačí vložit do místnosti (room) a tím je vše prakticky hotovo. Nativně běhá efekt za myší, takže pokud chceme aby zůstal v místnosti tam, kde leží, tak je třeba v Create eventu nastavit proměnnou follow_mouse=false ( najdete ji v bloku označeném jako mouse motion ). Soubory ini jsou lidsky čitelné a lze je v Include Files poklikáním otevřít a ručně změnit. Efekt se pak změní také.

POZOR! Některé efekty v přehlídce nebudou vypadat po stažení na první pohled stejně. Je to proto, že některé triky byly vytvořeny poskládáním více efektů přes sebe ( např. fountain ) a některé se pohybují specifickým způsobem ( např. short explosion ), což mění jejich výsledný vzhled. Vždy ale platí, že ke stažení je dostupný právě ten efekt, ze kterého byla přehlídka vytvořena. 

Efekt MulticolorPapers obsahuje tzv. secondary particles, takže pro editaci v PTE je potřeba trochu si PTE vyzkoušet a pochopit, jak se secondary particles ovládají.
Efekt Hemoglobin je sprite_particle a tak pro editaci vždy kopírujte do stejného adreáře i animovaný 14ti snímkový png: animated_particle_strip14.png, který je v zipu přiložen.




Particle Type Editor 1.2

Particle Type Editor 1.2


Tak konečně je to tady. Editor definicí částic pro Game Maker je hotový a funkční. Je to na jednoho člověka obří program, tak asi nějaké bugy obsahovat nutně bude, ale doufám, že snad ne nijak fatální. Koneckonců už jsem v něm vyrobil dost pěkných částicových efektů, takže vím, že se to dá používat.


Něco málo o částicových efektech obecně

Dneska jsou částicové efekty ( částice je anglicky "particle" ) nedílnou součástí skoro všech her a občas se dostanou i do jiného software. Jde o princip vytváření dynamických grafických prvků. Typicky všemožné záře, ohňostroje, třpytky, záblesky nebo třeba tekoucí voda se často vytvářejí pomocí částic. Myšlenka částicových efektů je v tom, že neprogramujete chování jedné každé částice, ale nastavíte jen mezní hodnoty jejich chování. Řeknete, že hejno bílých teček v počtu od 100 do 200 má poletovat rychlostí nejméně tolik a nejvíce tolik. Neřešíte chování jedné tečky. Výsledek je pak pro počítač velmi efektivní a můžete si dovolit vykreslovat desetkrát i možná i stokrát víc prvků než použitím GM objektů. Nevýhodou je, že například nemůžete snadno ověřit, jestli hráč na jednu z částic nekliknul, protože částice tuto kontrolu nemají.

O Particle type editoru

Při tvorbě PTE jsem vycházel ze způsobu, jakým se nativně v Game Makeru ( GMS verze 1.4 ) částice programují. Takže, když se naučíte používat tento editor, vlastně tím budete zároveň umět i programovat částice přímo v GML, protože názvy jednotlivých parametrů se prakticky shodují. Editor jen umožňuje lepší přehled o nastavených hodnotách a rovnou ukazuje, co se stane a částečně napovídá, jaké hodnoty kam zadat.

Co v editoru je a co není

Všechny nefyzikální částicové efekty používají jako základ definici jedné částice. Ve skutečnosti ale nejde o jednu částici jako takovou, ale o jeden typ částic. Samotných částic pak mohou být klidně stovky z tohoto jednoho typu. Neznamená to však, že by všechny částice jednoho typu byly stejné. Například pokud definujeme "modrobílou částici" jako všechny částice v odstínech od sytě modré do namodralé bílé, bude to jeden typ a přitom spousta částic ve všech možných odtínech mezi těmi dvěma barvami. PTE umožňuje vytvořit právě definici typu částic.
Aby částice byly vidět, je třeba s nimi udělat tzv. emisi ( prostě je odněkud na obrazovce sypat ) a to editor neřeší. Pro snadné vytváření jednoduchých emisí částic je k dispozici gamemakerovský objekt ( editor ho při exportu vyrobí ) a ten pouhým zkopírováním do vaší hry potřebné emise zajistí. To vám ovšem nebrání si naprogramovat vlastní způsob emisí částic. Další věc, co editor neřeší je fyzika částic. Tzv. soft body particles mají zcela jinou logiku vytváření a počítám s tím, že se jim budu věnovat samostatně. Takže bublina s tekutinou uvnitř reagující na zatřepání šplouchnutím se v tomto editoru nekoná. Nicméně většina běžných efektů je bez fyziky a na ty se editor perfektně hodí ( navíc běžné GM kolize a objektová fyzika s celým efektem možné jsou ).
( Pozn. jediný parametr nefyzikálních částic, který v editoru chybí obdoba GM funkcí part_type_colour_hsv a part_type_colour_rgb, které dělají částice s uzamčenou barevnou složkou. Například částice s konstatní hodnotou saturace a proměnlivým odstínem. Vzhledem k tomu, že způsob obarvení mix a blend je používanější, nechal jsem tyto dvě funkce stranou a teoreticky se mohou objevit v případných dalších verzích PTE. )
Editor neexportuje videa ani obrázky částic, protože takové funkce se editace netýkají a brzdily by vykreslování částic. Pokud bude zájem, můžu napsat nějaký jednoduchý rekordér pro převod efektu na sadu png ( včetně alfa kanálu ).

Jak editor použít

Princip použití je extrémně jednoduchý. V editoru si naklikám efekt, který se mi líbí. Kliknu na tlačítko Export. Soubory, které Export vytvoří, natahám drag&drop do Game Makeru, přímo do projektu s nějakou svou hrou. Ve GM resource složce Objects tím přibude objekt s názvem podle názvu částice. Když objekt umístíte do místnosti (room), tak ve hře generuje daný efekt. V základní podobě se efekt pohybuje spolu s kurzorem myši. Pokud toto chování nechcete, stačí v objektu přepnout proměnnou follow_mouse na hodnotu false ( najdete ji v Create, v kódu s názvem mouse motion ). Pak bude efekt následovat polohu objektu samotného. Když tedy budete chtít aby efekt například připlul zleva doprava, stačí v objektu nastavit hspeed=1 a stane se. Tím, že je efekt vázaný na objekt, jde s ním dělat všechny triky, co jdou dělat s objektem. Pokud chcete efekt klikatelný, dejte mu průhledný sprite a do eventu Draw přidejte funkci draw_self().

Systémové požadavky, download a licence

Licence:
Program Particle Type Editor (PTE) je pod licencí CreativeCommons, konkrétně CC-BY 3.0 CZ. To stručně řečeno znamená, že se program smí šířit a upravovat s podmínkou uvedení autora ( code: TomBen, gui graphics: TomBen & Likandro ), země původu ( CZ ) a s uvedením případných vlastních úprav původního programu. Efekty vytvořené v programu ( soubory .ini ) jsou vaše a jste jejich autoři. Kód exportovaného objektu je ale součástí programu PTE a tudíž také pod licencí CC-BY.

Požadavky:
Ke spuštění editoru v předpřipravené spustitelné podobě, potřebujete OS Windows ( testováno na Win7 ) a jelikož zdrojový kód GML obsahuje některé win-only funkce, pro úspěšnou portaci je třeba víc než jen vlastnit exportní plugin. Výkonnostně by neměl být problém s libovolným PC vyrobeným po roce 2005 ( čili deset let starý ) a omezení bude vidět jen na množství částic, které se podle výkonu počítače mění. Viděl bych to jednoduše tak, že na čem rozjedete Game Maker Studio, na tom PTE pojede taky. K uplatnění efektu ve hrách budete potřebovat Game Maker Studio Proffesional nebo Master. Teoreticky lze asi rozjet vytvořené efekty i na verzi Standard ( zdarma ), ale není to ověřeno.


Download:

Spustitelný portable .exe pro Windows:  STÁHNOUT
Zdrojový kód .gmz pro GameMakerStudio 1.4.( vytvořeno na 1657 r40001 ) : STÁHNOUT
Obojí v zipu:  STÁHNOUT


15. listopadu 2015

Solitér

Solitér



Solitér je hra pro jednoho hráče a tento solitér je jeden z nejznámějších a nejstarších vůbec. Letitost mu ovšem nijak neubírá na popularitě. Úkolem je přemístit černé na místa bílých a naopak. Posouvá se jen vodorovně nebo svisle. Vždy jen na prázdné pole. Buď na sousední pole nebo lze přeskočit jednu figurku. Prázdné pole přeskočit nelze.

 Zpracoval jsem to v Game Makeru Studio 1.4.1657 a na svobodném fóru je k nahlédnutí jeho zdrojový kód s mým komentářem. Zde je k dispozici spustitelná verze pro Windows ( testováno  na sedmičkách ) ...  > EXE ke stažení < .

Edit 17.11.2015: na svobodném fóru byl přidán odkaz na Android apk, takže lze i na telefonu
Edit 9.5.2016: svobodné fórum zašlo na úbytě, tak jsou odkazy nefunkční. Máte-li zájem o Android verzi
nebo máte nějaké dotazy na zdrojový kód, napište si sem do komentáře pod článek.


13. listopadu 2015

Messenger (GML)

Messenger (GML)

Dneska jsem při nějaké své práci vyrobil další věc, která si zasloužila uložení do Code Garage tady: ( přímý link na složku Messenger ). Jde o jednoduchý a extrémně účinný systém oznamování zpráv uvnitř hry. Občas je totiž třeba, aby hra uprostřed svých jiných akcí zastavila všechny činnosti, ohlásila hráči nějakou událost a teprve po odklepnutí - potvrzení hráčem vše pokračovalo tam, kde to skončilo.

Moje řešení obsahuje 1 objekt a 1 skript ( objekt používá k vypisování skripty set_font ( vlastní ) a clr (inspired by LoF), které najdete v sadě Essentials verze3, ale lze je snadno nahradit, protože jen nastavují font a barvu. Celé to funguje tak, že z kteréhokoli vlastního objektu spustíte skript message, všechny objekty zastaví práci, aktuální obraz zůstane v podkladu a přes něj se zobrazí poloprůhledný rámek se zprávou. Po odkliknutí zpráva zmizí a hra běží dál.

Jednoduchá ukázka je přiložena a z ní je myslím vše jasné. Počítá se s tím, že si v objektu messenger každý nastaví vzhled okna zprávy podle svého ( normálně v eventu Draw ) a tak je to ponecháno hodně minimalistické.


10. listopadu 2015

Záložky

Záložky

Třeba se bude někomu hodit game makerovský objekt vykreslující záložkové přepínatelné okno.














Klikání levou myší na ušátka záložek přepíná obsah v okně. Projekt obsahuje dva objekty. Objekt vykreslující záložkové okno a objekt obsahu. Záložkové okno se v Create Eventu nastauje, v Draw vykresluje a v eventu globální myši zajištuje přepínání záložek. Proměnná vybrano pak obsahuje číslo záložky, která je zvolena myší. Obsahový objekt si na začátku zapamatuje svoji polohu vzhledem k záložkovému oknu a podle vybrané záložky mění vlastní obsah. Lze mít samozřejmě i víc záložkových oken a v obsahových objektech pomocí proměnné link určit id okna, ke kterému patří.

>DOWNLOAD z Code Garage<


5. listopadu 2015

Vícerozměrná pole v Game Makeru

Game Maker v nynější verzi (1.4.1629) nepodporuje větší počet rozměrů než dva. Napsal jsem si proto základní skripty umožňující s vícerozměrnými poli pracovat. >DOWNLOAD SADY SKRIPTŮ<

///array_create(array,value,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12);
tento skript naplní pole ( maximálně 12 rozměrů ) hodnotou value
array je název pole a to je potřeba inicializovat,
např.:
 A[0]=0;  //inicializace
array_create(A,'@',10,10); //pole A se naplní 10 krát 10 zavináči

Pozn: ve skutečnosti nejde o vytvoření vícerozměrného pole, ale o jeho převod na jednorozměrné pole. Čili například u dvourozměrů leží obsah jednotlivých řádků za sebou. V indexu [0] je uložen string obsahující informaci o počtu rozměrů a jejich velikosti. Jde o čísla převedená na string, spojená do jednoho a odsazená čárkou. Například u čtyřrozměrného pole 8x8x8x8 tam bude '8,8,8,8'.

///array_get_dimensions(array);
když je potřeba zjistit počet rozměrů uložených do pole vzniklého pomocí array_create, stačí zavolat tento skript a on vrátí potřebnou hodnotu jako číslo.

///array_dimension_size(array,dimension 1..N);
tento skript vrací velikost pole v daném rozměru.
Pokud tedy například máme pětirozměrné pole A o velikostech 3x2x5x1x8, pak:
array_dimension_size(A,5) == 8

///array_whereis(array,D1,D2,D3...);
pokud je někdy potřeba zjistit, kde ve skutečném jednorozměrném poli leží nějaký index, skript array_whereis to dokáže zjistit. Je dobré si uvědomit, že array_whereis(array,0,0,0...samé nuly) dává vždy 1, protože na nultém indexu je uložena informace o velikosti pole. Pokud ovšem používáme následující skripty pro čtení a zápis, není skript array_whereis vůbec potřeba znát.

///array_read(array,D1,D2,D3...);
tento skript jednoduše vrací hodnotu z pole podle daných indexů. Pokud je index mimo pole, objeví se error hláška "Array out of bounds." Indexy startují od nuly.

///array_write(array,value,D1,D2,D3...);
tento skript zapisuje hodnotu value do pole na patřičné umístění. Pokud je index mimo pole, objeví se error hláška "Array out of bounds." Indexy startují od nuly. Skript vrací minulou hodnotu, která byla v poli před přepsáním. Tato vlastnost se hodí například při výměně obsahů dvou míst v poli.

Příklad použití včetně zdrojového kódu si lze stáhnout zde: >DOWNLOAD UKÁZKY<
Jde o třírozměrné pole 5x5x5 s uloženými barvami. V poli se lze pohybovat klávesami a barvy měnit.