Obsah
1. Historie počítačových her (62. část – knihovny pro vývoj roguelike her)
2. Algoritmy, které je nutné implementovat
3. Hardcore přístup: přímé využití knihovny curses, ncurses či PDCurses
4. Robots: jedna z nejjednodušších roguelike her
6. Knihovna JADE aneb Java strikes back
8. Obsah dalšího pokračování seriálu – Dwarf Fortress
1. Historie počítačových her (62. část – knihovny pro vývoj roguelike her)
V dnešní části seriálu o historii vývoje výpočetní techniky se seznámíme s některými knihovnami, které je možné použít pro vývoj roguelike her. Na první pohled by se možná mohlo zdát, že roguelike hry patří z hlediska složitosti implementace mezi velmi jednoduché hry (v určitém ohledu je tomu skutečně tak), ovšem opak je pravdou, protože v roguelike hrách je většinou nutné použít poměrně velké množství algoritmů počítačové grafiky i umělé inteligence. Z tohoto důvodu postupně vznikly knihovny, které dokážou vývoj ulehčit a navíc je dosti velké množství roguelike her postaveno na stejném enginu – jedná se například o hry odvozené od herního titulu Angband (viz též předchozí část tohoto seriálu), které sice mohou hráčům nabízet jiný příběh, odlišné postavy i monstra, než je tomu v originálním Angbandu, ovšem základní jádro, na němž je hra postavena, se ve skutečnosti příliš nemění.
Obrázek 1: Ve hře ADOM (zde je zobrazena verze pro operační systémy DOS) jsou implementovány i algoritmy pro generování zemského povrchu, protože se herní příběh neodehrává pouze v dungeonu složeném z obdélníkových místností a pravoúhlých chodeb. Tyto algoritmy, i když v dokonalejší formě, jsou použity například i ve hře Dwarf Fortress.
Klasické roguelike hry byly a většinou i dodnes jsou vyvíjeny s využitím programovacích jazyků Pascal (VMS Pascal atd.) a unixové varianty byly přepsány do céčka. U některých novějších roguelike her můžeme vidět odklon od tohoto tradičního jazyka, protože se nad jádrem hry mohou použít skripty naprogramované například v Pythonu či ve skriptovacím jazyku Lua (knihovna libtcod). Zajímavé je taktéž použití Javy (viz též knihovna JADE a hra ADOM II popsaná v dalším textu) a existují i roguelike hry implementované s využitím JavaScriptu ve webových prohlížečích.
Obrázek 2: Ve hře Dungeon Crawl je použit algoritmus, který zjistí (a patřičně zobrazí) tu část dungeonu, kterou hráč může v daném okamžiku vidět.
2. Algoritmy, které je nutné implementovat
V předchozí kapitole jsme si řekli, že v roguelike hrách bývají použity i poměrně sofistikované algoritmy. Jedná se především o algoritmy použité pro vytváření herního světa. Snahou tvůrců je sice vytvořit jednotlivá patra dungeonu náhodně, ovšem dungeon musí být vytvořen bez izolovaných místností, chodby musí mít většinou od místností vzdálenost minimálně jeden znak atd. atd. (někdy se začíná tak, že se vypočítají pozice schodů a monster a posléze se okolo nich vytvoří místnosti a chodby). Podobně při generování zemského povrchu se tvůrci většinou snaží vytvořit „logický“ svět s lesy, vodními plochami, nezbytnými skalami apod. Pro generování herního světa se používají různě složité algoritmy, někdy je dokonce generování spojeno s vytvářením historie důležitých objektů ve hře (Dwarf Fortress). Další důležitou součástí roguelike her je výpočet viditelnosti, který se používá jak pro postupné odhalování dalších částí dungeonu (nelze vidět za roh apod.), tak i pro zjištění, ve které chvíli je možné, že monstra hráče objeví (pokud tedy na sebe neupozorní hlukem starého rezavého brnění).
Obrázek 3: Tvorba charakteristiky hlavního hrdiny ve hře NetHack.
Tyto algoritmy se většinou označují souslovím Line of Sight (LoS, implementován například známým Bresenhamovým algoritmem pro vykreslení úsečky) nebo Field of Vision (FoV). Dále je většinou zapotřebí na určitých místech dungeonu vytvořit město s obchody nebo speciální patra s předem známou strukturou. Taktéž je zapotřebí si promyslet a nějakým způsobem implementovat persistenci světa, tj. ve chvíli, kdy hráč přejde do jiného patra je buď možné zapomenout všechny informace o původním patru, nebo si je naopak zapamatovat (pozice monster a předmětů, informace o dveřích a pastích a další věci). Samostatnou kapitolou jsou algoritmy řídicí pohyb monster, kde lze využít například jednoduchou AI založenou na konečném automatu, ovšem některé roguelike hry používají i implementačně složitější neuronové sítě nebo ad-hoc algoritmy. Nesmíme zapomenout ani na systém zlepšování charakteristik hráče, kde dodnes panují spory, jak má být implementován – buď se hráč neustále zlepšuje a tomu též odpovídají silnější monstra, nebo není vylepšování vlastností tak rychlé, takže není zapotřebí v nižších patrech vytvářet supersilné protivníky.
Obrázek 4: Tvorba charakteristiky hlavního hrdiny ve hře Dungeon Crawl.
3. Hardcore přístup: přímé využití knihovny curses, ncurses či PDCurses
První funkcí, kterou je nutné v roguelike hrách implementovat, je zobrazení herního světa. Dnes se využívají převážně čtyři možnosti – použití ASCII terminálu, zobrazení světa ve formě grafických dlaždic, použití isometrického promítání (označované taktéž jako 2,5D grafika) a konečně plnohodnotné 3D zobrazení, kde se využívá například knihovna OpenGL či Direct3D. Nejčastěji se stále používá vykreslení herního světa v textovém terminálu, protože je tento způsob implementačně velmi jednoduchý, hru je možné spustit vzdáleně přes ssh a především jsou hráči roguelike her na ASCII zobrazení zvyklí (navíc si každý uživatel může vybrat svůj font a jeho velikost). Vzhledem k tomu, že jednotlivé textové terminály a jejich softwarové emulátory se ovládají rozličnými řídicími znaky, vznikla v roce 1980 knihovna curses, kterou vytvořil Ken Arnold, jenž je mj. tvůrcem hry Rogue a jednoduché hříčky Robots, s níž se seznámíme v další kapitole.
Obrázek 5: Roguelike hra, jejíž zdrojový kód není delší než 512 bajtů.
Původní verze knihovny curses využívala databázi termcap, podobně jako některé další celoobrazovkové aplikace, zejména (dobový) textový editor vi a později byla tato knihovna zařazena do BSD Unixu, odkud se rozšířila na další komerční a později i nekomerční Unixy. Dnes se pro roguelike hry používá například PDCurses, která je dostupná na adrese http://pdcurses.sourceforge.net/. Knihovna curses, přesněji řečeno nějaká její většinou open source varianta, je využita i ve hře 512byte_roguelike, což je vlastně technologické demo ukazující, že ve zdrojovém kódu, jehož velikost nepřesahuje 512 bajtů, je možné naprogramovat hru s pohybem hráče, automatickým (náhodným) pohybem protivníků i s generováním herního světa.
Obrázek 6: Každý program obsahuje alespoň jednu chybu…
Odkazy na stránky s knihovnou PDCurses a technologickým demem 512byte_roguelike:
- A Roguelike in less than 512 Bytes
http://locklessinc.com/articles/512byte_roguelike/ - Public Domain Curses
http://pdcurses.sourceforge.net/ - PDCurses (Wikipedia)
http://en.wikipedia.org/wiki/PDCurses
4. Robots: jedna z nejjednodušších roguelike her
Jedním z důležitých algoritmů, které je nutné v roguelike hrách implementovat, je algoritmus řídicí pohyb monster. Existuje poměrně velké množství algoritmů, které dokážou na mapě (což je vlastně graf) najít nejkratší cestu mezi pozicí hráče a pozicí monstra (monster). Jedná se například o Dijkstrův algoritmus či algoritmus A*. Tyto algoritmy je možné využít i pro řízení pohybu hráče v některých roguelike hrách, například ve hře Diablo (o tom, jestli se v tomto případě jedná o roguelike hru či nikoli, se pořád vedou spory). Ovšem existují hry, které si vystačí s mnohem jednoduššími postupy. Příkladem je hra Robots, jejímž autorem není nikdo jiný než výše zmíněný Ken Arnold. Robots pochází z roku 1980, stejně jako knihovna curses, a její herní svět je tak jednoduchý, že se monstra (roboti) mohou pohybovat nejbližší cestou k hráči.
Obrázek 7: Herní svět hry Robots je skutečně jednoduchý.
Princip hry Robots je jednoduchý – hráč sice nemá k dispozici žádné zbraně, ale pokud do sebe dva roboti (znak +) narazí, promění se v hromadu šrotu (znak *), do níž je možné chytrým manévrováním nasměrovat další roboty. Navíc se hráč může v případě nouze teleportovat na náhodné místo na obrazovce. Tato velmi jednoduchá hra byla později několikrát reimplementována, některé verze však nesou jiné jméno, například Zombies atd. Na to, jak je řízen pohyb ve hře, se můžete podívat na stránce http://svnweb.freebsd.org/csrg/games/robots/move.c?revision=60840&view=markup s částí zdrojového kódu.
Obrázek 8: Tento robot není moc chytrý, narazí příštím tahem do svého rozbitého kolegy.
5. Knihovna libtcod
Pro rozsáhlejší a komplikovanější roguelike hry může být výhodnější a samozřejmě taktéž mnohem rychlejší, když vývojář nebude implementovat všechny potřebné algoritmy ručně, ale použije nějakou knihovnu, která v sobě bude kombinovat větší množství funkcionality a pomocných nástrojů. Jednou z těchto knihoven je libtcod, neboli „The Doryen Library“. Tato knihovna nabízí vývojářům roguelike her podporu pro zobrazení herního světa s využitím SDL namísto klasického textového terminálu. Použít je možné buď zobrazení s využitím znaků vykreslovaných jako výřezy bitmap, popř. lze namísto znaků použít dlaždice vytvořené v libovolném grafickém rastrovém editoru. Textově/grafický výstup navíc není omezen na 8 či 16 barev, ale lze použít libovolnou barvu z barvového prostoru RGB (true color, 224 barev), podporováno je taktéž kódování Unicode, takže hra není omezena pouze na možnost vykreslení 256 znaků.
Ze vstupních zařízení je podporována klávesnice i myš, protože v některých novějších roguelike hrách se myš může použít při míření a následnou střelbu. Funkce z knihovny libtcod lze volat z céčka či C++, popř. z dalšího kompilovaného jazyka (Free Pascal), ovšem mnohem zajímavější je existence rozhraní pro Python (všechny funkce libtcod) a Lua (zde ještě některé funkce chybí). Ovšem to není zdaleka vše, protože ke knihovně libtcod je dodáváno velké množství dalších více či méně užitečných utilit, například nástroj pro tvorbu výškových map (modelování terénu), nástroj pro výpočet FoV (viditelnost), algoritmus pro vyhledávání nejkratší cesty ve scéně či nástroj pro tvorbu podzemí s využitím algoritmu BSP (Binary Space Partitioning). Ke knihovně libtcod existuje třináctidílný seriál, v němž jsou jednotlivé funkce i vybrané nástroje podrobně vysvětleny, přičemž příklady jsou naprogramovány v Pythonu.
Odkazy na stránky s dokumentací ke knihovně libtcod a tutoriálem:
- Dokumentace ke knihovně libtcod
http://doryen.eptalys.net/data/libtcod/doc/1.5.1/index2.html - Complete Roguelike Tutorial, using python+libtcod
http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod - Complete Roguelike Tutorial, using python+libtcod (part 1/13)
http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod,_part1 - Informace o fontech s ohledem na knihovnu libtcod
http://doryen.eptalys.net/data/libtcod/doc/1.5.1/html2/console_set_custom_font.html?py=true
6. Knihovna JADE aneb Java strikes back
Další knihovna, o níž se v tomto článku musíme zmínit, je knihovna nazvaná JADE neboli Java-based Ancient Domains Engine. Tento název vlastně již naznačuje, že tato knihovna bude mít něco společného se hrou ADOM popsanou minule. Skutečně – za vývojem JADE totiž stojí německý vývojář Thomas Biskup, který vytvořil i populární ADOM. Na rozdíl od původního ADOMu, což je pravděpodobně céčkový program, je knihovna JADE vytvořena v programovacím jazyku Java, čímž je zaručena jak tak často vzpomínaná přenositelnost (prozatím s malými problémy kvůli odlišné implementaci JWS), tak i poměrně jednoduše použitelné aplikační programové rozhraní (není zapotřebí se starat o dealokaci objektů atd.). Knihovna JADE je navržena takovým způsobem, aby kladla vývojářům při tvorbě herního světa co nejmenší překážky, takže například neexistuje omezení pro velikost dungeonu, lze definovat nové rasy či předměty, taktéž je možné vytvářet různé questy, monstra mohou nést předměty atd.
Odkazy na stránky s dokumentací ke knihovně JADE:
- JADE
http://www.adom.de/jade/index.php3 - JADE JavaDoc
http://www.adom.de/jade/javadoc-jade-005/index.html
7. ADOM II
Hra ADOM II, jenž je založená na knihovně JADE, je prozatím ve vývoji, ale už při vyzkoušení současných verzí je patrné, že tato hra bude oproti původnímu ADOMu do značné míry vylepšena. Herní svět je nyní mnohem větší (v podstatě jde o celou zemi Ancardii), takže bylo možné ho rozdělit na kontinenty s proměnlivým počasím. Při startu hry se buď celý svět vytvoří znovu s využitím generátoru náhodných čísel, nebo lze načíst jeden z předpřipravených světů. Hráč má taktéž velkou svobodu jednání, buď může prozkoumávat svět stejně jako v dalších roguelike hrách, nebo si může postavit vlastní hrad, pracovat jako farmář apod. S tím souvisí i možnost transformace do jiné osoby. Hra se spouští s využitím technologie Java Web Start, což znamená, že byste měli mít správně nakonfigurovaný Java plugin v prohlížeči. Alternativně je možné balíčky stáhnout a spustit z příkazové řádky (javaws), to je však v současnosti ještě problematické.
Další informace o hře ADOM II lze najít na stránkách:
- ADOM II Home Page
http://www.ancientdomainsofmystery.com/ - ADOM II
http://roguebasin.roguelikedevelopment.org/index.php?title=ADOM_II
Obrázek 9: ADOM II – zobrazení herního světa s využitím enginu JADE.
8. Obsah dalšího pokračování seriálu – Dwarf Fortress
V navazující části tohoto seriálu se budeme zabývat jednou z nejpropracovanějších roguelike her. Jedná se o hru Dwarf Fortress, která vlastně kombinuje dva různé typy her – roguelike zkoumání světa se simulací vývoje trpasličího dolu. Jednou z největších předností Dwarf Fortress je propracované generování herního světa (volit lze jeho velikost, počet civilizací a měst, četnost monster, četnost jednotlivých minerálů a prvků, které je možné těžit atd.), včetně jeho podrobné historie, které je vhodně kombinováno se svobodou jednání, protože si hráč může sám vybrat, zda se bude věnovat spíše dobrodružnému prozkoumávání okolí, nebo zda spíše bude stavět doly, trpasličí obydlí apod. Hra zobrazuje herní svět s využitím ASCII znaků vykreslovaných buď do terminálu nebo do vlastního grafického okna, ovšem alternativně existují balíčky, které dokážou hru zobrazit i v plnohodnotné grafice (i když upřímně řečeno je mi ASCII varianta mnohem bližší).
9. Odkazy na Internetu
- Dwarf Fortress main page
http://www.bay12games.com/dwarves/index.html - Dwarf Fortress feature page
http://www.bay12games.com/dwarves/features.html - The Dwarf Fortress Wiki
http://dwarffortresswiki.org/index.php/Main_Page - A Game from a Parallel (and Better?) Universe
http://playthisthing.com/dwarf-fortress - DwarfFortress.cz
http://www.dwarffortress.cz/ - Phoebus' Graphic Set
http://www.bay12forums.com/smf/index.php?topic=57557.0 - ADOM II Homepage
http://www.ancientdomainsofmystery.com/ - ADOM Downloads
http://www.adom.de/adom-ii/downloads/javawebstart/index.php - Roguebasin: ADOM II
http://roguebasin.roguelikedevelopment.org/index.php?title=ADOM_II - libtcod
http://doryen.eptalys.net/libtcod/ - libtcod features
http://doryen.eptalys.net/libtcod/features/ - libtcod games
http://doryen.eptalys.net/games/ - Develop a roguelike from scratch
http://www.adom.de/forums/showthread.php/1214-Develop-a-roguelike-from-scratch - Robots (BSD game)
http://en.wikipedia.org/wiki/Robots_(BSD_game) - Robotron: 2084
http://en.wikipedia.org/wiki/Robotron:_2084 - Angrenost – brána do světa J.R.R.Tolkiena (nejedná se o popis hry)
http://www.angrenost.cz/ - Angband na rephial.org
http://rephial.org/ - Angband.oook.cz
http://angband.oook.cz/ - Angband – stránka s možností downloadu hry
http://angband.oook.cz/download.php - Angband a její klony (varianty)
http://angband.oook.cz/variants.php - Další seznam klonů hry Angband (podrobnější)
http://roguebasin.roguelikedevelopment.org/index.php?title=List_of_Angband_variants - Angband (pevnost ve Středozemi)
http://en.wikipedia.org/wiki/Angband - Angband (hra)
http://en.wikipedia.org/wiki/Angband_(video_game) - Doom, the Roguelike
http://doomwiki.org/wiki/DoomRL - Roguelike evolution
http://roguebasin.roguelikedevelopment.org/index.php?title=Tree_of_roguelike_evolution - Roguelike (Wikipedia)
http://en.wikipedia.org/wiki/Roguelike - Brogue Home Page
https://sites.google.com/site/broguegame/ - Brogue (Roguelike wiki)
http://roguebasin.roguelikedevelopment.org/index.php?title=Brogue - Zangband.org
http://www.zangband.org/ - Dungeon crawl (Wikipedia)
http://en.wikipedia.org/wiki/Dungeon_crawl - Don D. Worth Home Page
http://worth.bol.ucla.edu/ - Beneath Apple Manor (PC verze)
http://worth.bol.ucla.edu/applemanor.ZIP - Beneath Apple Manor (Moby Games)
http://www.mobygames.com/game/beneath-apple-manor - Chronology of roguelike video games (Wikipedia)
http://en.wikipedia.org/wiki/Chronology_of_roguelike_video_games - Roguelike wiki
http://roguebasin.roguelikedevelopment.org/index.php?title=Main_Page - Rogue Temple (fórum)
http://www.roguetemple.com/forums/index.php - Top MUD Sites
http://www.topmudsites.com/ - MUD Connector
http://www.mudconnect.com/ - MUD (Wikipedia)
http://en.wikipedia.org/wiki/MUD - Multi-User Dungeon – British Legends
http://www.british-legends.com/CMS/ - Support/peripheral/other chips – 6800 family
http://www.cpu-world.com/Support/6800.html - Motorola 6845
http://en.wikipedia.org/wiki/Motorola_6845 - The 6845 Cathode Ray Tube Controller (CRTC)
http://www.tinyvga.com/6845 - IBM Monochrome Display Adapter
http://en.wikipedia.org/wiki/Monochrome_Display_Adapter - Color Graphics Adapter
http://en.wikipedia.org/wiki/Color_Graphics_Adapter - ASCII-GAMES – Play and Review
http://ascii-games.org/ - Tribute to text-mode games
http://www.textmodegames.com/ - RGB Classic Games
http://www.classicdosgames.com/video/ascii.html - ZZT (Moby Games)
http://www.mobygames.com/game/zzt - Levely pro ZZT
http://autofish.net/video_games/creation/zzt/zgames.html - ZZT (Wikipedia)
http://en.wikipedia.org/wiki/ZZT - Text-based game (Wikipedia)
http://en.wikipedia.org/wiki/Text-based_game - THE OFFICIAL LIERO FAQ
http://www.gamesover.com/walkthroughs/liero.txt - Historie vývoje počítačových her (3.část – hry v textovém režimu)
http://www.root.cz/clanky/historie-vyvoje-pocitacovych-her-3-cast-hry-v-textovem-rezimu/ - Historie vývoje počítačových her (4.část – zlatá éra textovek)
http://www.root.cz/clanky/historie-vyvoje-pocitacovych-her-4-cast-zlata-era-textovek/ - Historie vývoje počítačových her (5.část – textovky společnosti Level 9)
http://www.root.cz/clanky/historie-vyvoje-pocitacovych-her-5-cast-textovky-spolecnosti-level-9/ - The History of Computer Role-Playing Games Part 1: The Early Years (1980–1983)
http://www.gamasutra.com/features/20070223a/barton01.shtml - The History of Computer Role-Playing Games Part 2: The Golden Age(1985–1993)
http://www.gamasutra.com/features/20070223b/barton_pfv.htm - Dungeon (video game)
http://en.wikipedia.org/wiki/Dungeon_(computer_game)