HTML5 a Roguelike hry
HTML5 a Roguelike hry
Ideální symbióza
Ondřej Žára, @0ndras
O čem to bude?
- Technologie pro webové hry
- Žánr roguelike
- Technologický mix
- Knihovna rot.js
Hry ve webovém prohlížeči
JavaScriptová rozhraní
- Vše stojí a padá na dostupných API
- Storage: localStorage, indexedDB, FileReader, FileWriter
- Síť: XHR, WebSocket, WebRTC
- Zvuk: HTML5 Audio
- Obraz: DOM, HTML5 Canvas (2D + WebGL)
Výkon?
- Problém
- Kombinace HW + OS + prohlížeče + interpretu JS
- WebWorkers pro paralelní zpracování, problematické řešení
- WebGL akcelerováno, 2d canvas jen někdy
Mobilní zařízení
- Neporovnatelné s desktopovým prohlížečem (např. "WebKit")
- Často neúplná podpora API
- Slabší výkon
- Otázka návrhu UI
Žánr roguelike
Rogue-like
- Více či méně inspirované hrou Rogue (1980)
- Specifické rysy, zcela mimo mainstream
- Uzavřená, ale široká komunita
- NetHack, Angband, ADOM, ToME, Dungeon Crawl
Specifika žánru
- Procedurally-generated content
- ASCII / tiled
- Tahová herní mechanika
- Permadeath
- Komplikované ovládání
- Výše uvedené neplatí dogmaticky
Vzhled
- Historické dědictví
- Méně vzhledu, více ostatního
- Studna vs. hvězdy?
- Jednoduchý ≠ hnusný
Procedurally-generated content
- Snaha o vysokou znovuhratelnost
- Lenost vše navrhovat předem
- Strojově (tj. náhodně) vytvářené postavy, mapy, questy, svět...
- Minecraft, Terraria, Dwarven Fortress...
Ovládání
- Klávesnice (např. ADOM)
- Ještě více klávesnice (modifikátory)
- Šipky, problém na noteboocích (vim-keys)
- Jen pro hardcore hráče?
A teď to dáme dohromady…
Roguelike v prohlížeči
- Nízký nárok na výkon
- Nízký nárok na datové přenosy
- Rozumné hotové API pro práci s myší a klávesnicí
- JavaScript
JavaScript
- Dynamický, expresivní jazyk
- Duck typing, monkey patching
- Komu nevyhovuje syntaxe, sáhne po CoffeeScriptu
- Komu nevyhovuje beztypovost, sáhne po TypeScriptu
- HTML5 poskytuje řadu základních API
Implementace
- Programování řízené událostmi
- Otázka velikosti "obrazovky"
- Otázka ovládání na mobilních zařízeních
- Stavět na zelené louce, nebo využít nějakou knihovnu?
Knihovna, framework, toolkit, engine...
- Je otázka, na jaké úrovni brát
- Ve světě roguelike je de facto standardem libtcod
- Sada project-neutral funkcí
- API pro C, C++, C#, Python, Lua
rot.js
rot.js
- Sada funkcí pro vývoj roguelike her v JavaScriptu
- OSS, GitHub
- Testy, dokumentace, manuál, tutoriál
- Několik her postavených na rot.js
Komponenty rot.js
- Polyfilly a rozšíření jazyka (cíl: bez nutnosti dalších knihoven)
- Canvas-based display (rectangular, hexagonal)
- Generátory úrovní
- FOV, LOS, osvětlení, pathfinding
- Turn scheduling
- Užitečné drobnosti (RNG, šum, ...)
ROT.Display
- Výstup do HTML5 Canvasu, potenciálně akcelerovaný
- Pravoúhlá a šestiúhelníková mřížka
- Console-like API
- Vlastní fonty
- Práce s proměnlivým viewportem
ROT.Display
ROT.Map
- Sada generátorů herních map
- Prázdná místa, zdi, místnosti, chodby, dveře
- Ukázky: maze, cellular, dungeon
ROT.FOV
- Výpočet viditelné oblasti
- Algoritmus Precise shadowcasting, postavený na výpočtu stíněných oblastí
- Topologie 4, 8
- Topologie 6