Stylizace enginu
Zdravím zdejší komunitu,
už delší dobu tvořím RPG engine pro GMS. Konkrétně mám zatím hotový inventář, truhly a dokončuji equipment. Cíle enginu jsou jak vysoká profesionalita, tak i user-friendly přístup. Jakkoli jsou tyto dvě věci částečně protichůdné, zatím se mi je dařilo spojovat. Engine by měl být vhodný i pro game designery, což zejména v GM často znamená jen minimální schopnost programovat. Rád bych se tedy poradil o optimalizaci uživatelských vstupů, poněvadž se mi v poslední době přestali líbit. Následovat bude pár ukázek kódu s vysvětlením, od Vás bych rád názor, zdali je to pro common-users přijatelné, popř. radu, kterak to zjednodušit. Občas mám tendenci chtít po koncovém uživateli přílišné znalosti.
EDITOVÁNO – Úpravy jsou na konci článku
- Inicializace:
/// Initialise cargo
// ****************** Edit part *****************
slots = 9; // počet políček
slots_row = 3; // rozdělení do řad
unlocked = 1;
open_key = „E“;
active_dis = 64; // optimalizace
open_dis = 32; // aktivační zóna
locked_message = „Tak tahle truhlička je zavřená, hóšo.“;
//**********************************************
scrChestIni();
Truhla si detekci kolizí, správného natočení hráče, sebrání i opakované vložení itemů vyřeší sama, není potřeba žádný vstup.
- Přidání výchozích itemů do truhly:
scrLoot(0,oTestItem,4); // id,objekt,počet
scrLoot(1,oTestItem,2);
scrLoot(2,oTestItem3);
Inventář
- Vytvoření
slots = 27;
draw_inventory = 0;
draw = 1;
drag_alpha = 1;
drag_controll = 0;
close_text = „Zavřít“;
drop_text = „Zahoď“;
inventoryCreate(slots);
Toť vše, inventář si vykreslování jak sebe, tak equipmentu ohlídá sám.
Itemy
- Pokročilý create využívající bodového ohodnocení k přizpůsobení vzácnosti itemu:
/// Initialize item
scrItemSetUp(0,0);
scrItemBasic(3); // id
//*********** Prefix **************
image_index = 3;
randomize();
//****** Item settings ************
itm_stackable = 0;
itm_sprite_number = 3;
itm_info_head = „Dřevěný meč“;
itm_info_text = „Ok, já chápu, že nevypadá jako meč…#ale who cares?“;
itm_options[0] = „Nabídka 1“;
itm_options[1] = „Nabídka 2“;
itm_sprite = sprite_index;
itm_equip_slot = „zbraň“;
pre = irandom_range(0,100);
if (pre >= 0 && pre < 40) {vlastnost[vlastnost_poskozeni] = 5; points += 1;}
else if (pre > 40 && pre < 70) {vlastnost[vlastnost_poskozeni] = 6; points += 2;}
else if (pre > 70 && pre < 90) {vlastnost[vlastnost_poskozeni] = 7; points += 4;}
else if (pre > 90 && pre <= 100) {vlastnost[vlastnost_poskozeni] = 8; points += 6;}
if (points < 2) {itm_info_color = rarity_junk;}
else if (points < 4) {itm_info_color = rarity_normal;}
else {itm_info_color = rarity_fine;}
//*********** Suffix *****************
scrItemOptions();
itemRarity();
//************************************
- Jednoduchý create:
/// Initialize item
scrItemSetUp(0,1)
scrItemBasic(1);
//****** Item settings ************
itm_stackable = 1;
itm_info_head = „Nice, white item“;
itm_info_text = „Guten morgen!#knock#knock#knock“;
itm_options[0] = „***** option 0“;
itm_options[1] = „***** option 1“;
itm_sprite = sprite_index;
scrItemOptions()
//*********************************
Dále musí uživatel definovat v itemu event user 0 událost, ve které provede akce po sebrání itemu, většinou:
/// After pick up
instance_destroy();
Axis mapa
Uživatel může konfigurovat počet a umístění jednotlivých equip slotů pouhým zásahem do konstant:
Konstanty určující polohu slotu mají prefix equ_axis_
Změna vlastností, rarit a samotných templatů inventáře funguje na stejné bázi. Např. přidání nové vlastnosti, se kterou můžeme pracovat provedeme pouhým přidáním nové konstanty (např. vlastnost_hodnocení), přiřazením správného indexu a editací indexu udávající celkový počet vlastností:
V základu je definováno 16 polí, přidání dalšího do jádra funguje na copy and paste systému:
// Draw right hand slot ——————————————————————————————————————-
if (oPlayer.equ_draw_right_hand)
{
draw_sprite(sSlotTexture,1,xx+equ_axis_right_hand_x,yy+equ_axis_right_hand_y);
if (oInventory.equiped[0] = 1) { draw_sprite(sRarityEffect,itemRarityEffect(equiped_image[0,2]),xx+equ_axis_right_hand_x,yy+equ_axis_right_hand_y); }
draw_sprite(equiped_image[0,0],equiped_image[0,1],xx+equ_axis_right_hand_x,yy+equ_axis_right_hand_y)
if (mouse_in(xx+equ_axis_right_hand_x,xx+equ_axis_right_hand_x+32,yy+equ_axis_right_hand_y,yy+equ_axis_right_hand_y+32))
{
draw_hover_block(xx+equ_axis_right_hand_x,xx+equ_axis_right_hand_x+32,yy+equ_axis_right_hand_y,yy+equ_axis_right_hand_y+32);
if (mouse_check_button_pressed(mb_left))
{
if (oInventory.equiped[0] = 1) {equipmentUnequip(0);}
}
}
Uživatel pouze změní ID slotu.
Abych nezapomněl na samotné skriptování optionboxu itemů:
Uživatel pouze edituje switch statement. Case označuje ID rodiče, number vybranou vlastnost.
/// scrAction(id,option_numer)
idd = 0;
number = 0;
if (argument_count > 0) {idd = argument[0];}
if (argument_count > 0) {number = argument[1];}
switch(idd)
{
case (1):
{
if (number = 0)
{
show_message(„optionbox is working!“);
}
if (number = 1)
{
show_message(„fucking option 1!“);
}
break;
}
default:
{
show_message(„Something in scrAction, switch statement went wrong :/#(probably unassigned action, check inventoryActions)“);
break;
}
}
Uživatel má také přímý přístup k vykreslování polí (bool):
Pokud chce nějaký slot vypnout změní 1 –> 0.
equ_draw_head = 1;
equ_draw_left_plate = 1;
egu_draw_right_plate = 1;
equ_draw_body = 1;
equ_draw_right_hand = 1;
equ_draw_left_hand = 1;
equ_draw_left_ring1 = 1;
equ_draw_left_ring2 = 1;
equ_draw_right_ring1 = 1;
equ_draw_right_ring2 = 1;
equ_draw_crown = 1;
equ_draw_trophy1 = 1;
equ_draw_trophy2 = 1;
equ_draw_trophy3 = 1;
equ_draw_special1 = 1;
equ_draw_special2 = 1;
equ_draw_belt = 1;
equ_draw_left_boot = 1;
equ_draw_right_boot = 1;
Inventář podporuje standardní API obsahující: Drop,Contains,Number,Delete,Add.
Switch itemů si inventář řeší vnitřně.
Pokud chceme s vybraným itemem manipulovat jinak zakážeme v požadovaném stepu proměnnou able_to_switch, která slouží jako hlavička switche.
Inventář podporuje loot systém, kdy itemy nemají vlastnosti podle ID. Tím se liší od většiny konkurence (Davidův inventář), výpočetní nezávislostí na počtu itemů (HaRRiKiRi se sekal u 30 itemů, můj holdne 2 000 instancí bez reálného dopadu) a kompatibilitou s GMS.
Celý systém jsem koncipoval po vzoru svého oblíbeného PHPBB 3.1
Uživatel by neměl mít starost o práci s jednotlivými vrstvami kódu a systém rozšiřovat pomocí code-injection. To mimo jiné zajístí vysokou stabilitu systému. Na i5 běhá stabilně na 800-900 fps.
Těším se na Vaše nápady a názory. 🙂
EDITOVÁNO:
Dokončil jsem systém kombinování itemů. Uživatel kombinovatelným itemům přidá do optionboxu vlastnost a přidá indexy kombinací:
switch(id1)
{
// Dřevěný meč
case(3):
{
// Dřevěný meč
if (id2 = 3)
{
slot_vlastnosti[slot2,vlastnost_poskozeni] += slot_vlastnosti[slot1,vlastnost_poskozeni];
inventoryDrop(slot1,-1,-1);
}
break;
}
}
Provádí pouze rozšíření switch konstrukce. U funkce inventoryDrop přetížení -1,-1 (argumenty x,y pro odhození) značí smazání itemu. Ukázaná kombinace využije dva dřevěné meče, které hráč vybral, první odstraní a druhému přidá poškození rovné poškození druhého meče. Př: meč 1 – 6 bodů poškození, meč 2 – 4 body. Označení meč 1 -> meč 2. Meč 1 je odstraněn a meč 2 má 10 bodů poškození. První kombinace, která mě napadla byly brousky na zbraně…
Po výběru možnosti „kombinovat“ se fade-in alpha přechodem zbarví sloty (0.3 na zelené a žluté, 0.1 na červené). Efekt trvá 10 stepů (při 60 fps 1/6 s.) Žlutý slot je kombinovaný item, zelená pole značí kombinovatelné itemy, červené nekombinovatelné. Ještě přemýšlím o přidání náhledu výsledku. Poté uživatel pouze klikne na zvolený item a tím provede kombinaci. Kvůli systému dynamického zobrazování proměnný se mi podařilo vyškrtnout z create eventu itemů tento (a podobné) inicializační řádky:
itm_info_text += „#Poškození: „+string(vlastnost[vlastnost_poskozeni]);
Upravené itemy mají nový typ vzácnosti „vytvořené“, s žlutým nadpisem.
Tato mechanika by měla sloužit k hand-craftingu, na zmar určitě nepřijde. K věcem jako alchymie, kovářství, atp. budou sloužit speciální stroje, fungující na bázi slotů. Uživatel vloží a mašinka vyhodí výsledek. U ručních kombinací může být další využití např. skládání klíče v dungeonu.
53 odezev
No, tak jo. Trocha konstruktivní kritiky na tvoji hlavu. 🙂
Myslím, že sis akorát napsal hezký systém ke svému Dragon Rise. Univerzální inventář by podle mého měl být pouze databázový systém se samostatným editorem té databáze. Pokud je program větší, těžko tam budu dělat hard-coded pasáže z cizího kódu, jako vyžaduje tohle. Ve svém programu bych pak chtěl použít jen sadu funkcí. Typicky „load_database“, „spawn_item“… Případně si snadno moci přepsat chování nebo vykreslování po svém.
Použití bych si představoval tak, že otevřu editor, naklikám v něm itemy, jejich kategorie, typy slotů, povolení kam co smí a podobně. Do své hry nahraji tahle data a při designu úrovní bych sázel jakékoli své prvky a když bych z nich zavolal funkci z inventáře, tak by byly slotem nebo itemem, nebo by upravily stav něčeho. Např. projdu dveřmi od svatyně a mohu z inventáře odstranit prokletý předmět. Takže bych v databázi měl u itemů vytvořenou vlastnost „remove_allowed“. Prokletý item by ji měl false. Po průchodu dveřmi ( nějaký vlastní event – inventář by neměl sahat na kolize ve hře ! ) bych se zeptal databáze na seznam prokletých předmětů ve slotech s vlastnictvím „player“. Tento seznam bych předal funkci, která mění vlastnosti itemů s tím, ať nastaví „remove_allowed“ na true.
Ale možná si jen neuvědomuji výhody tvého řešení. Docela bych chtěl vidět instruktážní video na použití tvého inventáře takříkajíc „from scratch“.
Nad tvým stanoviskem o inventory enginech přemýšlím už od začátku. Koukal jsi kolik pokusů a tu a tam i her vzniklo na Davidově enginu? Mrkni na počet stažení, navíc se všude po netu válejí mizerné kopie či modifikace. Celkově se na netu dají najít tři dobré a volně dostupné inv systémy (pro GM/S) – Davidův,Harakiri a Ultimate (od Ravena? Už nevím.) Podívej se na všechny (většinu) 3D MMORPG a na jejich inventáře. Je to furt to samé. Můj systém samozřejmě není pro všechny. Cílil jsem na (nemalou) skupinu lidí, která využívá jeden z tří předchozích systémů. Profíci si samozřejmě napíšou na míru vlastní. Tvůj systém taky zabíjí (imho) reálnou možnost úpravy jádra. Když hráč přidá novou mechaniku, tak si s tím externí editor neporadí. U mě změny jen zaneseš do maker. Přiznám se, že nemám rád klikání. U tebe jsem si na to prostě zvykl, ale obvykle nemají klikátoři v GM na sepsání RPG šanci. Ten kdo chce používat můj engine by měl umět základy skriptování.
Představme si situaci, kdy má pole „vlastnost“ 60 indexů (to je reálné, v obrázku jsem od boku střelil asi 40). U tebe uživatel otevře (listbox?) a bude hledat v 60. sloupcích ten správný…?
V mém systému dodržíš hlavičku a patičku. Do těla vypíšeš modifikátory, ke kterým máš snadný přístup kvůli konstantám.
Chci ještě zahrnout systém dialogů (včetně odpovědí), combat, atp.
Uživatel si pak jen vybere komponenty, přidá příběh, vše rychle vyplní podle patternu a má hru… to je můj cíl. Nezavání to RPG makerem?
Jo a hard-coded jsou jen equipment sloty, protože tam for cykl nestál za námahu (vytvoření dalšího pole k uchování axis mapy a jeho následná iterace…)
Svůj engine bych popsal slovy: „Tady máš několik krajíců chleba. Tady je marmeláda, šunka, máslo, sýr… Je na tobě, aby sis udělal sendvič. Když na sebe dáš sýr a šunku tak se ti sendvič nerozjede, ale systém „slepí“ přísady vrstvou másla.
To tvoje samozřejmě není špatné a do spousty projektů vhodnější než moje. Jen bych tyhle projekty mírně posouval k arkádám. To moje je pro hry, kde je inventář a spol. hlavní mechanikou, kolem které se točí hra (lootovačky).
Video třeba i časem udělám. 🙂
Ps: Ale s DR jsi to trefil, jestli někdy budu dělat trojku, tak jsem myslel na tento engine.
Možná je to věc názoru. Připouštím, že netuším kolik mizerných klonů nějakého něčího systému se válí po netu. A tušit nechci. Že mnou nastíněná koncepce zabíjí nějaké možnosti úprav je nepravda. Pokud z toho chceš mít NěcoMaker, tak bys měl myslet zejména na klikače. U slov „cílil jsem na nemalou skupinu“ jsem se pobavil. Kolik myslíš lidí v České Republice je schopno psát GML a aktivně to dělá? Pokud by si všichni stáhli a použili tvůj kód, tak bych možná mluvil o nemalé skupině. Mluvit v daných souvislostech o „profících“ nebo profesionalitě je vůbec eufemismus.
Nechci to vydávat pro ČR. Ve vláknu na yoyo sandboxu si to může stáhnout kdokoli. Klidně i emzák z páté galaxie. 🙂
Otázka spíše je, kolik lidí to dělá dobře. Spousta lidí se o něco snaží, dělám o GML už pár let přednášky po školách a vždy mám plno.
Jsou přece i lidé, kteří na hrách z GMS postavili funkční živnost. Netvrdím, že jich je mnoho. Ale pokud se tím dokáží živit, tak jsou profíci i kdyby neuměli nic, než klikat na ikonky.
Taky jsem chtěl vždycky pracovat pro emzáky z páté galaxie. 🙂
Přednášky po školách lze mít opravdu s čímkoli. Přišla mi dokonce pracovní nabídka, jestli nechci učit učitele MS Office. Prý není ani potřeba doložit znalosti. 😀 😀
Na celém Game Makeru nejvíc vydělali lidi, kteří prodali něco jako knihu „Jak udělat hru v Game Makeru“. Fakticky budu mít problém jmenovat tři lidi, kteří se uživí psaním her v GML.
No vidíš, ta škola umí rozpoznat talent. 😀
Ale tebe by byla na MS škoda.
Já neříkám, že je to kdoví co, jen že zájemců a tudíž potencionálně v GML píšících je dost. Opět neříkám, že kvalitně.
Jop, s tímhle máš pravdu. Game makers companion a apprentice byly výborné knížky, jen škoda, že jsem je četl tak pozdě (před rokem).
Jenže škola do toho nemá co mluvit. 🙂 To je o zájmových skupinách obsluhujících dojnou krávu našeho školství. Ze státního rozpočtu se naberou peníze na rozšíření IT vzdělanosti na školách. Bohulibý čin. Pak se z toho alibisticky zaplatí levné kurzy. Agentury pořádající tyto kurzy shrábnou hlavní díl balíku peněz a jejich nejdůležitější činnost je evidence. Logicky se snaží vydělat co nejvíc, tak nabízejí místa lektorů každému, kdo alespoň trochu smrdí ajťákem. Učitelé rovněž o takové kurzy nestojí, ale hodí se jim papír o tom, že ho navštívili. Všichni fixlují a všichni jsou v pohodě. Z této motivační smyčky nemají úniku. Leda by řekli Ne.
Hm… já se s cílovou školou vždy dohodnu mailem (rozesílám), ta mi většinou zdarma půjčí prostor a studenti si vstup hradí sami (u mě 50 / 4 hod. kurz za osobu).
Jedinou nepříjemností je nutnost přítomnosti jejich učitele, ale ten tam jen sedí a kouká…. má kurz zadarmo.
Je to sice trochu mimo, ale když se tu řešil úspěch s GM, tak se vyplatí třeba zmínit Vlambeera, což je jeden z vlivnějších nezávislých autorů. Dál třeba autor Hyper Light Drifteru. Vybral na hru v GM 645 000 dolarů. Dále autor hry Nidhogg se určitě také nemá zle. Hotline Miami je původně také v GM. Autorovi hry Battleships Forever, kterou dělal v GM to vyneslo nominaci v IGF a pak dostal práci v renomovaném studiu Bungie (tj. to studio, co dělalo třeba na hře Destiny). Autor hry Gunpoint po vydání prohlásil, že vydělal tolik, že už by nikdy nemusel pracovat. Elias Viglione měl 2 roky zpátky asi 200 000 stažení svých her a velký výdělek z reklamy. … Věřím, že bych jistě mohl dohledat víc a pokračovat… Zrovna ve videohrách je všem asi skutečně jedno, kdo to v čem dělá. Podstatný je výsledek a někdy mám pocit, že vlastně ani na kvalitě a výsledku moc nezáleží. Někdy stačí mrkavý a trochu praštěný nápad, který probouzí fantazii… K inventáři snad zítra.
Dále třeba MoaCube nebo Fiolasoft..
Inu, zrovna u těch dvou si nejsem jistý, jestli si skutečně vydělávají nebo jenom trochu přivydělávají. MoaCube asi skutečně vydělává. Na Fiolasoft je moc brzy. Každopádně jsem nikde neslyšel nic o masivních prodejích, o konci starostí o peníze… Což mě trochu mrzí, ale spíš se obávám, že chyběl kus pověstného štěstí…
Autoři, které jsem uváděl o kus výš, jsou skutečně úspěšní. Vyhráli ceny. Vydělali stovky tisíc dolarů. Čili nejde o situaci, kdy se parta lidí dohodne, že udělají hru, poplatí pár nezbytných věcí z úspor/půjček/jiných zdrojů, dělají na tom zadarmo (bez platu) a spíš ve volném čase při DALŠÍ PRÁCI, a doufají, že věc udělá dostatečný zářez, aby mohli pokračovat na plný úvazek.
Jinými slovy loterie. Myslel jsem spíš situaci, že umíš, makáš a vyděláš, než umíš, makáš a když vyhraješ, něco dostaneš. Jako když se třeba naučíš brousit diamanty a makáš, tak si vyděláš. Když se naučíš pilotovat Boeing a makáš, tak si vyděláš. Když se naučíš programovat v GM a makáš, tak možná někde vyhraješ a možná si tě někdo všimne a možná tě k něčemu pozvou. Nemám ale tak dobré informace o vývojářích nezávislých her, jako máš ty. Třeba bys mohl udělat článek o současné situaci.
EDIT: Těším se na tvůj názor stran tvorby inventáře, protože máš už ledacos odehráno a určitě jsi pěkných pár zajímavých inventářů viděl. To je možná taky téma větší než malý koment za hromadou off-topicu. 🙂
Ano, je to z velké části loterie. To nepopírám. Jenže to platí pro herní vývoj obecně. Je sice pravda, že kdo umí, plácnu, v Céčku, v Javě atp. najde práci asi vždycky, zatímco ten kdo dělá v GML asi spíš nikdy. Game Maker je už z povahy svého účelu (Game Maker) odsouzený k tomu, že se buď chytneš ve vývoji her, nebo máš smůlu. Čili to nutně musí být loterie.
O inventáři zkusím sepsat samostatný článek, je to docela zajímavé téma, ale to tedy bude na delší chvíli, pokud to nemá být strojové a nečitelné. 🙂 Ale k užitečnosti hotového řešení asi tolik, že čím míň se s tím pak mám patlat, tím lépe. Radši eventuálně přizpůsobím hru inventáři než obráceně. Pokud bych měl ale na výběr mezi řešením, kde si opravdu JEDNODUŠE můžu zaklikat hodně parametrů a nastavení (jestli spíš ve stylu japonských RPG, adventur nebo diablovek, kolik kolonek a které atd.) a ono to pak poběží správně, určitě bych volil nějaké takové řešení. Čili spíš něco jako navrhoval TomBen s tím, že by se mi líbilo nějaké jednoduché nastavení a různé typy „standardnějších“ inventářových řešení.
Nebo ještě jinak: zkrátka buď dělám originální hru, a pak potřebuji trochu jiný typ inventáře, nebo to chci mít hotové rychle a relativně tradičně s důrazem na „originální“ příběh, a tehdy chci co nejsnazší zavedení hotového systému, kam jen nacpu předměty. 🙂
Už jsem zmínil Davidův inventář. K dnešnímu dni má skoro 7 500 stažení jen z oficiálních stránek… i přesto jak je špatný na něm tisíce lidí zkoušeli něco postavit. Včetně mě. Můj engine je v jádru podobný, jen je optimalizovaný, bez kritických chyb a umí toho mnohem víc. Dát lidem do RPG inventář, ale nedat jim k němu equipment mi přijde… špatné.
Asi bude lepší pak pokračovat u článku, který problém inventáře trochu zproblematizuje. K počtu stažení asi tolik, že když mi bylo asi 14, hledal jsem hotové řešení na inventář jako zběsilý a vzal bych ho i s chybami. Nebylo. Udělal jsem tedy inventář vlastní (mimochodem pomocí ikonek). Čili věřím, že na světě určitě budou tisíce dětí a mladistvých, kteří to ocení. Kdo ví, možná i nějaký zkušenější tvůrce, který dělá standardní RPGčko a ocení to. Každopádně tvou volbu nezpochybňuji, jen říkám svůj názor na věc, který jsi nakonec slyšet chtěl. 🙂
EDIT: Možná by pomohla videoukázka nebo hratelná ukázka toho inventáře. Jakože bez toho bych ho stejně „nekoupil“. Důležité jsou často spíš věci jako způsob sbírání předmětu, způsob vyndání předmětu, způsob práce s předmětem v rámci inventáře atd., tj. jakým tlačítkem se kliká, jakým ne atd.
Videoukázku udělám jakmile refactornu systém komentování kódu. 😀
To co mám v komentech napsáno teď by nebylo do veřejně dostupného videa vhodné… sekce komentované názvy písniček, které jsem zrovna poslouchal, názory k nim, záznamy o tom jaké je vedro… když něco nešlo objeví se koment typu „A dost! Jdu pást husy.“… Komentáře je tam teď dost, jen jeho informační hodnota je mizivá. 😀
A díky za názory, moc si jich vážím.
Zajímavý ale docela nepřehledný. Dalo by se to určitě napsat líp. My teď v teamu investovali do CSV extension za pár dolarů. Takže itemy si loadujeme z excel tabulek. Loadujeme všecko včetně spritů (do tabulky stačí zadat jen link na obrázek a je připravená funkce která pak všechny obrázky stáhne a bude stačit přetáhnout je jako included files do gm. Ale to až před vydáním :D) Má to výhodu že není potřeba při přidání itemu pořád dělat novej build. Stejně řešíme i texty. Kdykoliv lze přidat novej jazyk bez nutnosti dělat znova build 😀
Tak to vypadá, že každý uživatel se po nějaké době snaží obejít GUI Game Makeru. Myšlenka s CSV je dobrá, asi ji taky někdy použiji.
Tak, ono to neni přímo obcházení. CSV neni vlastně nic jinýho než texťák s hodnotama oddělenejma čárkou. Kdybych nebyl tak strašně línej, neni problém napsat si na to funkci čistě v gm 😀
Hm… normální zdroje (sprity,pozadí) mám externě a loaduji normálně, vestavěnými funkcemi. Na zvuky používám SGAudio, které sice spotřebovává dost RAMky, ale nic hrozného. Na texty používám zásadně externí json strukturu, hrál jsem si i s XML, ale na menší věci mi json osvědčil víc.
1predicated
custom dissertation writing services https://professionaldissertationwriting.org/
masters dissertation help https://helpwithdissertationwritinglondon.com/
online dissertation help https://accountingdissertationhelp.com/
dissertation thesis writing https://examplesofdissertation.com/
help with writing dissertation proposal https://writing-a-dissertation.net/
buy dissertation online https://bestdissertationwritingservice.net/
phd dissertation writing service https://customdissertationwritinghelp.com/
proposal and dissertation help plan https://writingadissertationproposal.com/
dissertation help service binding https://dissertationhelpspecialist.com/
dissertation writing service online https://dissertationhelperhub.com/
best dissertation help services https://customthesiswritingservices.com/
why online gambling is more dangerous than casino gambling https://download-casino-slots.com/
resorts online casino app https://firstonlinecasino.org/
blackjack 21 online blackjack multiplayer casino https://onlinecasinofortunes.com/
nj online casino reviews https://newlasvegascasinos.com/
online casino sweepstakes https://onlinecasinosdirectory.org/
casino online slots https://9lineslotscasino.com/
hollywood online casino pa https://free-online-casinos.net/
aladdin online casino https://cybertimeonlinecasino.com/
el royale casino online https://vrgamescasino.com/
twin river casino online https://casino-online-roulette.com/
md live online casino https://casino-online-jackpot.com/
best online casino deposit bonus https://onlineplayerscasino.com/
harrah’s online casino pa https://casino8online.com/
free avast vpn license key https://freevpnconnection.com/
free new zealand vpn https://shiva-vpn.com/
should i buy a vpn https://freehostingvpn.com/
vpn blocker https://ippowervpn.net/
best vpn free trial https://imfreevpn.net/
buy pia vpn https://superfreevpn.net/
free vpn germany https://free-vpn-proxy.com/
buy vpn with perfect money https://rsvpnorthvalley.com/