Historie počítačových her (62. část - knihovny pro vývoj roguelike her)

24. 1. 2013
Doba čtení: 14 minut

Sdílet

V dnešní části seriálu se již potřetí budeme zabývat roguelike hrami. Řekneme si základní informace o vývoji těchto her, resp. o knihovnách, které vývoj mohou urychlit. I když by se na první pohled mohl zdát vývoj roguelike her velmi jednoduchý, používají se i zde poměrně sofistikované algoritmy.

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

5. Knihovna libtcod

6. Knihovna JADE aneb Java strikes back

7. ADOM II

8. Obsah dalšího pokračování seriálu – Dwarf Fortress

9. Odkazy na Internetu

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:

  1. A Roguelike in less than 512 Bytes
    http://locklessinc.com/ar­ticles/512byte_roguelike/
  2. Public Domain Curses
    http://pdcurses.sourceforge.net/
  3. 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/ga­mes/robots/move.c?revision=60840&vi­ew=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:

  1. Dokumentace ke knihovně libtcod
    http://doryen.eptalys.net/da­ta/libtcod/doc/1.5.1/index2­.html
  2. Complete Roguelike Tutorial, using python+libtcod
    http://roguebasin.rogueli­kedevelopment.org/index.php?ti­tle=Complete_Roguelike_Tu­torial,_using_python%2Blib­tcod
  3. Complete Roguelike Tutorial, using python+libtcod (part 1/13)
    http://roguebasin.rogueli­kedevelopment.org/index.php?ti­tle=Complete_Roguelike_Tu­torial,_using_python%2Blib­tcod,_part1
  4. Informace o fontech s ohledem na knihovnu libtcod
    http://doryen.eptalys.net/da­ta/libtcod/doc/1.5.1/html2/con­sole_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:

  1. JADE
    http://www.adom.de/jade/index.php3
  2. 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:

bitcoin školení listopad 24

  1. ADOM II Home Page
    http://www.ancientdomainsof­mystery.com/
  2. ADOM II
    http://roguebasin.rogueli­kedevelopment.org/index.php?ti­tle=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

  1. Dwarf Fortress main page
    http://www.bay12games.com/dwar­ves/index.html
  2. Dwarf Fortress feature page
    http://www.bay12games.com/dwar­ves/features.html
  3. The Dwarf Fortress Wiki
    http://dwarffortresswiki.or­g/index.php/Main_Page
  4. A Game from a Parallel (and Better?) Universe
    http://playthisthing.com/dwarf-fortress
  5. DwarfFortress.cz
    http://www.dwarffortress.cz/
  6. Phoebus' Graphic Set
    http://www.bay12forums.com/smf/in­dex.php?topic=57557.0
  7. ADOM II Homepage
    http://www.ancientdomainsof­mystery.com/
  8. ADOM Downloads
    http://www.adom.de/adom-ii/downloads/javawebstart/index.php
  9. Roguebasin: ADOM II
    http://roguebasin.rogueli­kedevelopment.org/index.php?ti­tle=ADOM_II
  10. libtcod
    http://doryen.eptalys.net/libtcod/
  11. libtcod features
    http://doryen.eptalys.net/lib­tcod/features/
  12. libtcod games
    http://doryen.eptalys.net/games/
  13. Develop a roguelike from scratch
    http://www.adom.de/forums/show­thread.php/1214-Develop-a-roguelike-from-scratch
  14. Robots (BSD game)
    http://en.wikipedia.org/wi­ki/Robots_(BSD_game)
  15. Robotron: 2084
    http://en.wikipedia.org/wi­ki/Robotron:_2084
  16. Angrenost – brána do světa J.R.R.Tolkiena (nejedná se o popis hry)
    http://www.angrenost.cz/
  17. Angband na rephial.org
    http://rephial.org/
  18. Angband.oook.cz
    http://angband.oook.cz/
  19. Angband – stránka s možností downloadu hry
    http://angband.oook.cz/download.php
  20. Angband a její klony (varianty)
    http://angband.oook.cz/variants.php
  21. Další seznam klonů hry Angband (podrobnější)
    http://roguebasin.rogueli­kedevelopment.org/index.php?ti­tle=List_of_Angband_varian­ts
  22. Angband (pevnost ve Středozemi)
    http://en.wikipedia.org/wiki/Angband
  23. Angband (hra)
    http://en.wikipedia.org/wi­ki/Angband_(video_game)
  24. Doom, the Roguelike
    http://doomwiki.org/wiki/DoomRL
  25. Roguelike evolution
    http://roguebasin.rogueli­kedevelopment.org/index.php?ti­tle=Tree_of_roguelike_evo­lution
  26. Roguelike (Wikipedia)
    http://en.wikipedia.org/wi­ki/Roguelike
  27. Brogue Home Page
    https://sites.google.com/si­te/broguegame/
  28. Brogue (Roguelike wiki)
    http://roguebasin.rogueli­kedevelopment.org/index.php?ti­tle=Brogue
  29. Zangband.org
    http://www.zangband.org/
  30. Dungeon crawl (Wikipedia)
    http://en.wikipedia.org/wi­ki/Dungeon_crawl
  31. Don D. Worth Home Page
    http://worth.bol.ucla.edu/
  32. Beneath Apple Manor (PC verze)
    http://worth.bol.ucla.edu/ap­plemanor.ZIP
  33. Beneath Apple Manor (Moby Games)
    http://www.mobygames.com/game/beneath-apple-manor
  34. Chronology of roguelike video games (Wikipedia)
    http://en.wikipedia.org/wi­ki/Chronology_of_roguelike_vi­deo_games
  35. Roguelike wiki
    http://roguebasin.rogueli­kedevelopment.org/index.php?ti­tle=Main_Page
  36. Rogue Temple (fórum)
    http://www.roguetemple.com/fo­rums/index.php
  37. Top MUD Sites
    http://www.topmudsites.com/
  38. MUD Connector
    http://www.mudconnect.com/
  39. MUD (Wikipedia)
    http://en.wikipedia.org/wiki/MUD
  40. Multi-User Dungeon – British Legends
    http://www.british-legends.com/CMS/
  41. Support/peripheral/other chips – 6800 family
    http://www.cpu-world.com/Support/6800.html
  42. Motorola 6845
    http://en.wikipedia.org/wi­ki/Motorola_6845
  43. The 6845 Cathode Ray Tube Controller (CRTC)
    http://www.tinyvga.com/6845
  44. IBM Monochrome Display Adapter
    http://en.wikipedia.org/wi­ki/Monochrome_Display_Adap­ter
  45. Color Graphics Adapter
    http://en.wikipedia.org/wi­ki/Color_Graphics_Adapter
  46. ASCII-GAMES – Play and Review
    http://ascii-games.org/
  47. Tribute to text-mode games
    http://www.textmodegames.com/
  48. RGB Classic Games
    http://www.classicdosgames­.com/video/ascii.html
  49. ZZT (Moby Games)
    http://www.mobygames.com/game/zzt
  50. Levely pro ZZT
    http://autofish.net/video_ga­mes/creation/zzt/zgames.html
  51. ZZT (Wikipedia)
    http://en.wikipedia.org/wiki/ZZT
  52. Text-based game (Wikipedia)
    http://en.wikipedia.org/wiki/Text-based_game
  53. THE OFFICIAL LIERO FAQ
    http://www.gamesover.com/wal­kthroughs/liero.txt
  54. 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/
  55. 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/
  56. 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/
  57. The History of Computer Role-Playing Games Part 1: The Early Years (1980–1983)
    http://www.gamasutra.com/fe­atures/20070223a/barton01­.shtml
  58. The History of Computer Role-Playing Games Part 2: The Golden Age(1985–1993)
    http://www.gamasutra.com/fe­atures/20070223b/barton_pfv­.htm
  59. Dungeon (video game)
    http://en.wikipedia.org/wi­ki/Dungeon_(computer_game)

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.