sobota 18. října 2008

Tvoříme hru 3: Ren'Py, co to je a k čemu je to dobré?

Už jste se tedy rozhodli vyrobit vlastní Ren'Ai hru, ujasnili jste si, proč se do toho bláznivého projektu pouštíte, a máte alespoň částečnou představu, o co ve hře půjde. Než se ale vrhnete rovnou do díla, měli byste si ujasnit, jak se vaše výtvory vlastně rozpohybují. Na výběru programovacího jazyka totiž závisí technická omezení, např. formát obrázků či hudby.
Můžete samozřejmě všechno od základu programovat sami, ale tak jen zbytečně zahodíte desítky až stovky hodin práce.

Pro tvorbu Ren'Ai her existuje několik již hotových enginů, od komerčních po volně dostupné. Autoři zdarma zveřejněných her si velmi často vybírají engine Ren'Py (na webu je momentálně seznam 110 her). Zkušenějším možná název napoví, že Ren'Py je založený na programovacím jazyce Python. Ale nebojte se, nemusíte umět programovat, stačí vám jen několik základních zásad a Ren'Py se o zbytek postará za vás, dokonce vaše hry budou fungovat na Windows, MacOS i Linuxu. Aktuální verzi Ren'Py, podrobný manuál i spoustu užitečných odkazů najdete na webu renpy.org.

Ve zkratce se podíváme, co Ren'Py umí. Jak čekáte, umí zobrazovat obrázky na pozadí, obrázky postav (oboje zvládá v běžných formátech GIF, PNG, JPEG), různě je umisťovat a posunovat po obrazovce a pomocí filtrů upravovat. Dále samozřejmě ukazuje texty s možností změny barviček, písma apod. K tomuto druhu her určitě patří různá rozhodování hráče a větvení příběhu. Všechno můžete doplnit zvuky a hudbou (opět běžné formáty - MP3, WAV, Ogg) a okořenit videem (tady narazíte na omezení na formát MPEG-1). U enginu najdete jednu krátkou ukázkovou hru a jednu skoro hru, která představuje různé možnosti využití.
Zkusíme jen tak lehce vytvořit zárodek nové hry.

Směle do hry

Stáhněte si aktuální verzi Ren'Py, rozbalte a spusťte. Přivítá vás hlavní nabídka, část This Project obsahuje nástroje pro aktuálně vybraný projekt, v Change Project můžete podle očekávání vybrat jiný projekt. Klikněte tedy na New Project a template, poté zadejte název svého nového projektu (je to jméno adresáře, ne přímo jméno hry, takže je praktické omezit se jen na znaky bez diakritiky). Založme si tedy pro novou hru Devil's Alternative, projekt devil. Ještě si můžete vybrat základní barevné ladění nabídek a textů hry. Barvy můžete později samozřejmě upravit, jak se vám zlíbí. A poté už se opět ukáže hlavní nabídka, jen podle velkého nadpisu Devil poznáte, že se něco změnilo.

V hlavní nabídce klikněte na Edit Script a otevře se základní šablona skriptu hry ve vestavěném editoru. Pokud vám nevyhovuje, můžete samozřejmě použít i jiný textový editor. Všechny soubory hry najdete v adresáři devil/game v adresáři Ren'Py. V základní šabloně dostanete soubory dva - options.rpy s různými volbami (na ten se podíváme později) a script.rpy se samotným skriptem hry. Větší hry je vhodné rozdělit na několik scén a pro každou z nich mít samostatný skript, je to přehlednější.

Takže se vrhněme na script.rpy, alespoň pro začátek doporučuji používat vestavěný editor, který zvýrazňuje syntaxi a pomáhá vám udržovat základní pravidla pro psaní kódu. To nejzákladnější zmíním hned. Jelikož Ren'Py vychází z Pythonu, musíte dodržovat pravidla Pythonu - jednotlivé bloky (např. rozhodování, jednotlivé části skriptu) se odsazují čtyřmi mezerami. Je to vidět i v šabloně, kterou máte před sebou.

V části init můžete nastavit postavy, obrázky, pozadí, hudbu, zvuky, proměnné, prostě všechno, co hodláte během hry využít. Vytvoříme si tři postavy, každou s obrázkem a dva obrázky na pozadí. Znakem # začínají komentáře.


init:
# postavy
$ a = Character(u'Adam', color='#51b7cd')
$ e = Character(u'Eva', color='#fdee00')
$ h = Character(u'Had', color='#d568ba')
# obrázky postav
image adam = "adam.png"
image eva = "eva.png"
image had = im.Scale("had.png", 250, 346)
# obrázky pozadí
image bg_raj = "raj.png"
image bg_brana = "brana.jpg"


Tady máte kus kódu, který můžete klidně zkopírovat (pozor na mezery). A trochu si ho rozebereme.

a, e, h jsou názvy proměnných jednotlivých postav. Budete je používat poměrně často, ušetříte si tedy psaní, pokud budou krátké. Asi jste pochopili, že první parametr je jméno postavy. U našich tří postav to není potřeba, ale to u před textem označuje, že následuje Unicode text s diakritikou. Druhý parametr je barva, kterou se zobrazí jméno postavy. Kromě těchto můžete přidávat i další, ale pro začátek si vystačíme.

S obrázky postav i pozadí je to jednoduché, v základní podobě postačí zapsat jméno souboru. Můžete ale použít různé upravující funkce, např. změna velikosti (jak je vidět u hada), překlopení obrázku, změna barevnosti apod.

Chtělo by to nějakou akci

Začátek bychom měli, pusťme se do samotné hry.

label start:
play music "conquest_of_paradise.ogg"
scene bg_raj with fade
"Bylo nebylo, za šesti horami, šesti řekami a šesti údolími se rozkládala rajská zahrada."
"Spokojeně v ní tábořili Adam s Evou."
show adam at left
a "Nazdar."
show eva at right
e "Ahoj."
"Jenže jednoho dne se připlazil had."
show had at Position(xpos=360,ypos=430)
h "Ssss."


Prozatím nám toto jako ukázka postačí. Klíčovým slovem label začíná jeden blok textu a jako první se spustí blok pojmenovaný start. Potom si spustíme hudbu, která bude hrát na pozadí. Vypne ji příkaz stop music. Příkaz scene, doplněný o název proměnné obrázku, zobrazí pozadí. Za slovo with můžete doplnit několik efektů, vyzkoušíme postupné zobrazení.

A konečně texty, nejdůležitější prvek hry. Co řádek, to jeden text zobrazený ve hře. Každý řádek tedy musí hráč odkliknout. Pokud před text přidáte proměnnou postavy, zobrazí se nad textem jméno postavy. Pro přehlednost můžete samozřejmě vkládat mezi kusy skriptu prázdné řádky (ale nezapomeňte, že i prázdný řádek musí začínat čtyřmi mezerami).

Příkaz show zobrazí odpovídající obrázek, za slovem at můžete určit, kde přesně se obrázek ukáže. Pro nejčastější pozice vlevo, vpravo a uprostřed můžete použít prosté left, right, center. Pokud chcete umístit obrázek na přesné místo, samozřejmě máte svobodu (jak je naznačeno u hada, kterého umístíme tak, aby se šinul ze stromu na pozadí).

Sofiina volba

Výborně, kus máme za sebou, ještě přidáme rozhodování.


h "Dáš si jablíčko, Evo?"
menu:
"Jasně, sem s ním."
jump vyhnat
"Ani náhodou."
jump nechat


Snad to vypadá jasně. Začnete příkazem menu:, poté vypíšete jednotlivé možnosti volby (odsazené o čtyři mezery) a pod každou volbou následuje kus kódu, který se provede při výběru této možnosti. Tady máme jen skok na nějaký blok skriptu, ale příkazů můžete napsat více. Např. můžete počítat počet "správných" odpovědí a až na konci hry podle počtu provést nějakou akci. Příklad z Fest Tripu: během hry se odehrály čtyři scénky a pokud hráč "správně" vyřešil všechny čtyři, na konci šťastně sbalil Gábinu.

Teď už jen dopíšeme zbytek textu.


label vyhnat:
a "Je to dobrý nápad."
e "Jablko je určitě dobré."
"Jako každý správný sadař se Bůh naštval, že mu kradou ovoce, a Adama s Evou z ráje vyhnal."
scene bg_brana with fade
"A to je konec."
return

label nechat:
"A žili šťastně až do smrti. Nebo spíš do doby, kdy utrhli nějaké jiné ovoce."
return


A můžete se pokochat, jak to všechno vypadá v pohybu, stačí kliknout na tlačítko Launch.

Slíbil jsem vám i popis základního nastavení, podíváme se tedy na soubor options.rpy.
Velice užitečné nastavení pro vývoj je config.developer = True, přímo při hře máte přístup k několika "cheatům", které vám usnadní testování a ladění všech zákoutí hry.

Pomocí config.window_title můžete upravit titulek okna, ve kterém hra poběží, a config.main_menu_music nastavuje hudbu, která hraje v hlavním menu. Jelikož je celé Ren'Py v angličtině, budou anglicky i texty v hlavní nabídce, nastavení hry, ukládání apod.

Hlavní menu si můžete přeložit a zároveň upravit pomocí nastavení config.main_menu. Zde na ukázku přikládám hlavní nabídku Fest Tripu, všimněte si parametrů start a credits u dvou možností. Asi jste uhodli, že to jsou názvy bloku, který se spustí při kliknutí na tlačítko.


config.main_menu = [
(u"Spustit hru", "start", "True"),
(u"Načíst hru", _intra_jumps("load_screen", "main_game_transition"), "True"),
(u"Nastavení", _intra_jumps("preferences_screen", "main_game_transition"), "True"),
(u"Autoři", "credits", "True"),
(u"Konec", ui.jumps("_quit"), "True")
]


Stejně tak můžete přeložit i nabídku s nastavením, uložením a načtením pozice a další texty enginu. V přiloženém souboru najdete překlady z Fest Tripu, stačí je připojit do vašeho souboru options.rpy.

Ven s tím

Nakonec už nám zbývá jen jedna věc - hru vydat. Nejprve přepněte config.developer na False, ať hráči nemohou podvádět. Pak klikněte na Tools. Sice jsme nepoužili žádnou funkci call pro skoky mezi jednotlivými částmi (jump používejte v rámci jedné scény, call pro skok na další scénu), ale stejně je dobré si zvyknout před sestavením hry kliknout na Add From to Calls. Balíček sestavíte kliknutím na Build Distributions, nejprve se vaše skripty automaticky zkontrolují a dozvíte se o případných chybách. Pokud program žádné chyby nenajde, ukáže se vám hezká statistika počtu slov apod. a klikněte dvakrát na Yes. Poté zadejte požadované jméno souboru a seznam souborů, které nechcete do balíčku přidat (ve výchozím nastavení se nepřidávají záložní soubory). Poté už jen počkejte a za chvíli dostanete balíčky s hrou ve verzi pro Windows, Linux a MacOS.

V článku jsem zmínil jen základy a pár tipů. Pokud vás zajímá více, podívejte se na doporučené odkazy, případně se ptejte (zde v diskusi, na IRC, e-mailem). Pokud budu vědět, rád vám poradím. Můžete si stáhnout část skriptů Fest Tripu (hlavní skript a první kapitolu, kde uvidíte i trochu rozhodování).

Doporučené odkazy:

Žádné komentáře:

Okomentovat