Blueova konzole (1.3)

Sem vkládejte editovatelné kusy kódu a tutoriály.
Odpovědět
Uživatelský avatar
DDL Blue
Živý stín
Příspěvky: 431
Registrován: srpen 6, 2011, 7:21 pm

Blueova konzole (1.3)

Příspěvek od DDL Blue » červen 9, 2012, 10:36 pm

Blueova konzole
[/b][/size]v 1.3

Obrázek

Někteří jste tuto věcičku určitě viděli na srazech při mých prezentacích. Já jsem ji teď ještě o něco vylepšil a dávám to sem na stažení i pro ostatní ;).
Jak už název napovídá, jde o konzoli pro testy. Určitě při testování hry znáte ten moment, kdy potřebujete zadat do hry nějaký gml příkaz, nebo chcete vypisovat nějakou hodnotu na obrazovku. Právě k tomu slouží tato konzole.

Co to umí?
V momentálním stádiu má konzole celkem 36 řádků. Každý řádek má svoji barvu a barvu pozadí. Když vypnete v nastavení hry vyhazování chybových hlášek (global game settings -> errors -> Display error messages), konzole chyby automaticky 'odchytává' a zobrazuje. Konzoli lze jednoduše skrýt i zobrazit (výchozí klávesa F12). Konzolí lze pomocí příkazu přesouvat. Tlačítky Page up a Page down se můžete vracet k předchozím zadaným příkazům (obdobně, jako u příkazového řádku šipky).
Konzole má dva módy - klasický, a GML. Lze mezi nimi snadno přepínat (příkaz e). V klasickém módu konzole reaguje na příkazy zapsané ve skriptu _consoleDO. Lze velice jednoduše přidávat vlastní příkazy. Pár příkazů už je předprogramováno. V módu GML konzole vykoná GML kód, který do konzole napíšete.
Ovládání konzole lze velmi jednoduše měnit. Instalace konzole je navíc vyloženě primitivní.


S čím musím počítat?

Konzoli jsem dělal původně sám pro sebe a ne pro ostatní, proto obsahuje několik nedostatků a věcí, které prostě musíte vzít na vědomí.
- Samotný kód konzole není bůhvíjak strukturovaný a okomentovaný. Komu se ji povede nějak víc modifikovat, má u mě respekt :) .
- Rozměry konzole jsou poměrně velké. Pro místnosti menší, než jaké jsou výchozí je to už poněkud nepraktické. Už ve výchozích rozměrech se do místnosti nevejde konzole celá, ale furt se dá pohodlně používat.
- Při zobrazení konzole se automaticky vyprázdní proměnná keyboard_string. Celá konzole s ní pracuje velmi často. Takže pokud jste v části hry, kde se tato proměnná taky jistým způsobem využívá, raději nechce konzoli schovanou - mohlo by to dělat neplechu. V schovaném stavu kžádným kolizím docházet nebude.
- Konzole se neumí pořádně vypořádat s dlouhými texty. Jak v zadávacím poli, tak přímo v konzoli. Za to se omlouvám, ale neplánuju tuto chybu zatím řešit. Konzole je tak široká, že při běžném používání mi to nikdy nevadilo.
- Je to tak trochu kombinace češtiny a angličtiny.


Jak na instalaci?

Tak, prvně si konzoli stáhněte: (644KB)

DOWNLOAD
mirror

Ve staženém raru máte 3 soubory: gmk (gm8) ukázku, .gmress a pro starší verze GM .gml soubor.
Stačí tedy pouze otevřít vaši hru a v menu File zvolit Import game resources. Všechny potřebné věci se vám nahrají do hry (skripty, font a jeden objekt).

V případě starší verze GM nahrajte skripty ze souboru .gml. Vytvořte objekt a do jeho eventů create, draw a step dejte skripty _consoleInit(); _consoleStep(); a _consoleDraw();. Vytvořte font s názvem FtConsole velikosti 8 a rozsahu 0-255 (All). Doporučuju Curier New.

Příkazy spojené s konzolí
_consoleInit(); - Nastaví konzoli. Bez něj ostatní příkazy fungovat nebudou. Na začátku lze nastavit několik věcí.

_consoleStep(); - skript, který by mělprobíhat ve stepu objektu. Na jeho konci lze měnit ovládání konzole.

_consoleDraw(); - skript, který by měl probíhat v draw eventu objektu. Vykresluje celou konzoli.

_consoleNewLn(text,color,bccolor); - vypíše text (v uvozockách!) do konzole. Zbylé dva argumenty jsou barva textu a barva pozadí.

_consoleToggle(n); - zobrazí / skryje konzoli. Za n se dosazuje 0,1, nebo 2. 0=skrýt, 1=zobrazit a 2=přepnout.

_consoleDO(prikaz); - Skript, ve kterém jsou sepsány všechny příkazy konzole. Lze ho volat i přímo ze hry (do argumentu se v uvozovkách píše příkaz), ale jeho hlavní funkce je, že se v něm dají upravovat a hlavně přidávat příkazy. Místo, kam příkazy psát je jasně vyznačeno i se vzorem. Jedná se o obyčejný switch.

_consoleDoHelp(); Skript, ve kterém je napsána nápověda (příkaz Help). Můžete si sem dopisovat vysvětlivky k vlastním příkazům, nebo prostě co chcete...

Ostatní skripty jsou interní, tj. jsou nezbytné pro běh konzole, ale vám může být jejich smysl ukradený :P .

Více screenshotů:
Spoiler: ukázat
Obrázek
Obrázek

Ták, to je všechno, doufám, že se vám tahle věcička bude hodit 8-) . Pro vaše otázku a připomínky tu máte celý vlákno, tak se vyjádřete ;). Budu rád i za každou negativní i pozitivní (konstruktivní) kritiku atd. znáte to :).

ps: V tom vzorovým .gmk souboru je o jeden objekt navíc. Zkuste si ho přidat do místnosti ;). Nuda okolo včerejší půlnoci :D.
Zkoukněte moji hudební galerii ;). Nebo vyzkoušej můj generátor akordů!
Řikejte mi prostě Blue...

Uživatelský avatar
Loric
Příspěvky: 208
Registrován: srpen 6, 2011, 9:01 am

Re: Blueova konzole (1.3)

Příspěvek od Loric » červen 10, 2012, 10:48 am

Dovolil jsem si tvoji konzoli trochu upravit, snad ti to nebude vadit :D. Nejspíš ji brzy použiju ve své hře, líbí se mi :)

Co je tam nového:
  • Po ukončení se keyboard_string vrátí na původní hodnotu před zapnutím
  • Změnil jsem F12 na F2, je to více přístupné tlačítko (aspoň pro mě :D)
  • místo PageUp a PageDown je tam šipka nahoru a dolů, tak jak to v konzolích bývá
  • Více příkazů v historii
  • Font jsem změnil na Consolas
  • zrušil jsem přepínání módu pro psaní GML. Teď na to slouží příkaz !. Všechno co je za ! se bere jako GML kód, takže například !show_message("Ahoj") zobrazí zprávu Ahoj.
  • Úplně jsem překopal způsob definování příkazů. Má to jen jednu nevýhodu a to, že pro každý příkaz musí být vytvořený skript, jinak to má samé výhody :)
  • každý příkaz může mít libovolný počet argumentů (oddělené mezara). více v ukázce
  • Objekt konzole má nastavené Persistent, aby byl ve hře dokud ho nezničíme
  • odstranil jsem všechny globální proměnné, protože skripty se provádí v objektu Console
  • mírně sem upravil vzhled
  • Při inicializaci se může nastavit výška a šířka konzole
  • počet řádků se sám nastaví podle zadané velikosti výšky a velikosti písma
  • funguje text na více řádků
Příkaz _consoleInit jsem rozdělil na dva příkazy: _consoleConfigure a _consoleCreate.
consoleConfigure se musí zavolat jako první - nastaví některé proměnné
consoleCreate nastaví zbytek
Důvod proč jsem to tak rozdělil je ten, že když chcete změnit třeba velikost konzole za běhu, tak stačí nastavit přes příkaz ! třeba šířku: !width=500 a pak už jen spustit znovu _consoleCreate, opět pomocí příkazu !, takže !_consoleCreate(). A je to.. :D Bez toho _consoleCreate by to dělalo problémy...
Pro přidání vlastních příkazů běžte to skriptu _consoleInitCommand a tam nakonci skriptu už uvidíte co dál...

Ještě plánuju udělat surfacy, aby nebylo tak nízké fps, protože se vypisuje tolik textu.
Tady je ten gmk soubor:
https://dl.dropbox.com/u/16233725/Game% ... e1.3.1.gmk

Uživatelský avatar
DDL Blue
Živý stín
Příspěvky: 431
Registrován: srpen 6, 2011, 7:21 pm

Re: Blueova konzole (1.3)

Příspěvek od DDL Blue » červen 10, 2012, 3:58 pm

Wow, tak teď si mě dostal. Vypadá to, že tu máme na vch první vážně open-source projekt :). Jen mi hlava nebe, jak si moh za tu chvíli stihnout to takhle překopat... Každopádně fakt dobrá práce, povedlo se ti za pár hodin udělat to, na to já byl línej 8-). Chvíli mi to zabralo, než sem se tím celým prohrabal a zjistil, co k čemu je a že mýho kódu už tam zas tak moc neni :D.

Ale k technickým věcem:
- Ta změna počtu řádků už tam tak nějak byla, ale ne automatická, no.
- Pokud sem to dobře pochopil, tak tam máš furt ten systém, že text na víc řádků je furt na jednom řádku a pod ním sou prázdný řádky, žejo?
- Do surfaces bych se tady moc nepouštěl. FPS to žere jen když je zapnutá a na některejch počítačích to může blbnout. Když sem prezentoval na srazu hru At Last, tak sem si musel pučit cizí notebook, protože na tom sestry, co sem měl z domova mi úplně blbla grafika. Pro představu ta hra je s čistě procedurální grafikou a surfacy s blend módama a dalšíma kreslícíma šílenostma sou tam na každým kroku. Když už, tak bych tam dal možnost vypínání/zapínání surfaců v nastavení.
- Nemůžu si pomoct, ale ty příkazy po scriptech mi nepřídou až tak šikovný. Sice pak při používání je to rozhodně super, ale to přidávání a práce s argumentama je možná trochu neohrabaná. Udělal bych třeba příkaz _consoleGetArgument(id). Líbí se mi ta automatická tvorba nápovědy 8-) .
- Jen detail, ale zesvětlil bych už napsanej text. Ta šedá je tam hrozně špatně vidět.
- Výška těch obdélníku, co barví pozadí textu musí bejt o 1px menší ;).
- page up a down sem tam měl proto, že hra, která se testovala se ovládala šipkama :) .

Jestli by ti to nevadilo, tak až/jestli doděláš ještě nějaký změny, tak bych si tu tvojí verzi vzal k sobě, trochu to přetřídil pro snažší používání, dodělal věci, co sem tady psal a přepsal ten článek nahoře.
O credity by sme se asi zatím dělili my dva + pokud někdo příde s nějakým převratným vylepšením.

Jen, kdyby náhodou do toho chtěl někdo zasahovat, tak není problém, ale ohlídejte si, aby zároveň neměli rozpracovanou novou verzi 2 lidi. Pak by se to těžko dávalo dohromady.


edit: verze 1.3.2

* opraveno zvýrazňování textů
+ zesvětlen text zadaný uživatelem
+ příkazy _consoleGetArg(id,typ); a _consoleGetArgCount();
+ přidána podobná úvodní zpráva, jako byla v původní verzi.
+ přidán poloprůhledný bílý rámeček, aby byla konzole vidět i na černém/tmavém pozadí.
+ přidán příkaz vypis, který vypisuje lokální i globální proměnné.

download: https://dl.dropbox.com/u/84481037/console1.3.2.gmk
Zkoukněte moji hudební galerii ;). Nebo vyzkoušej můj generátor akordů!
Řikejte mi prostě Blue...

Uživatelský avatar
Loric
Příspěvky: 208
Registrován: srpen 6, 2011, 9:01 am

Re: Blueova konzole (1.3)

Příspěvek od Loric » červen 10, 2012, 7:04 pm

Takže pár poznámek...
  • k vkládání textu na více řádků: ano, text je na jednom řádku, zbytek jsou prázdné řádky.. v podstatě jsi to měl dobře udělané, jen to nějak špatně zjišťovalo počet řádků
  • výška pozadí na řádku bude problém... Asi to záleží na grafické kartě. Mě to teď špatně zobrazuje, když si to zmenšil o 1px : Obrázek
  • uznávám, že práces argumentama je docela na nic.. Ty skripty co jsi tam přidal to zpřehlednily...
Co teda zkusím udělat
  • vylepšit práci s argumentama - vylepším stávající funkce
  • přidám možnost nastavit některé barvy konzole

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host