O hře › Jak vzniká mapa a mise
Jak vzniká mapa a mise v City Defense
Každá hra v City Defense je mise: místo na mapě, bráněná plocha, líhně nepřátel a pravidla. Mapa se nestahuje předem ani se nekreslí ručně – ulice a budovy si hra za běhu vezme z mapových dlaždic OpenStreetMap, které načte pro zobrazení mapy. Proto jde misi postavit téměř kdekoli na světě.
City Defense hraješ zdarma přímo v prohlížeči – bez stahování a bez registrace. První mise: Brno, náměstí Svobody.
Hrát zdarmaCo je mise
- Hrací plocha
- kruh kolem zvoleného středu, poloměr 300 až 1 000 m (Brno 600 m)
- Bráněná plocha
- mnohoúhelník, kam nepřátelé nesmí dojít – v Brně kruh o poloměru 30 m uprostřed náměstí Svobody
- Líhně
- místa na okraji hrací plochy, odkud nepřátelé vycházejí; každá má váhu
- Pravidla
- peníze, životy, počet vln, obtížnost, druhy nepřátel a bossové
- Vzhled
- výchozí téma, předvolba „historické centrum“ (dlažební kostky) a region vzhledu města
Mise si pamatuje jen souřadnice a pravidla, ne mapu. Ulice i budovy se při každém spuštění postaví znovu z aktuálních mapových dat.
Od mapových dlaždic k síti ulic
Když misi otevřeš, stane se v prohlížeči tohle:
- Mapa najede na hrací plochu a počká, až se načtou vektorové dlaždice OpenFreeMap (schéma OpenMapTiles, data OpenStreetMap).
- Hra z načtených dlaždic vytáhne ulice a budovy – nic dalšího nestahuje a nemá vlastní mapový server.
- Ulice ořízne na kruh a opraví díry. Čáry, které se v datech jen těsně míjejí, spojí; body blíž než 2,5 m slije do jednoho uzlu.
- Postaví graf ulic s vahami podle třídy: silnice 1,0, pěší zóna a chodník 1,1, obslužná komunikace 1,3, polní cesta a ostatní stezky 1,5. Nepřátelé tak dávají přednost silnicím, ale zkratku přes chodník nebo průchod domem využijí.
- Z bráněné plochy udělá brány. Každá hrana sítě, která protíná hranici plochy, se v průsečíku rozdělí a z bodu na hranici je brána. Uzly uvnitř plochy se z hledání cesty vyřadí.
- Spočítá nejkratší cesty ze všech bran najednou (Dijkstrův algoritmus s více zdroji). Každé místo sítě pak ví, kudy k nejbližší bráně.
- Přichytí líhně k síti (do 30 m), nebo je navrhne samo.
Na čtyřech skutečných dlaždicích Brna to hlídá regresní test: když změna kódu zhorší síť, test neprojde.
Jak hra navrhuje líhně
Kandidáti na líheň jsou místa, kde ulice protíná okraj hrací plochy a odkud se dá dojít k bráně. Kruh se rozdělí na pět výsečí a v každé vyhraje kandidát s nejmenší oklikou – hlavní ulice mají malou výhodu. Vyřadí se trasy, které by se od bráněné plochy cestou vzdálily o víc než 5 m. V editoru pak líhně posuneš, přidáš nebo smažeš.
Váha líhně určuje, kolik nepřátel z ní přijde. Každá líheň má vlastní proud nepřátel. Víc líhní nebo vyšší váhy znamenají víc nepřátel ve zhruba stejném čase.
Budovy a jejich výška
Budovy hra čte ze stejných dlaždic: půdorys a výšku render_height z OpenMapTiles. Kusy budov rozdělené na hranicích dlaždic znovu spojí a z výšek postaví výškovou mapu s krokem 1 m. Z ní počítá výhled věží a dráhy střel. Ve 3D se kreslí jen hrací plocha a 60 m okolo – v Brně asi 1 100 budov. Víc o tom, odkud výšky jsou, najdeš v článku o mapových podkladech.
Editor mise: vlastní mapa pro každého
Přibalená mise je zatím jedna (Brno – náměstí Svobody). Další si vytvoří kdokoli v editoru mise přímo ve hře, bez registrace:
- Místo – vyhledání adresy, „Moje poloha“, nebo klik do mapy, střed pak jde i táhnout; velikost hrací plochy 300–1 000 m.
- Plocha a líhně – hra navrhne bráněnou plochu se 4 až 8 vstupy (nejbližší pěší plochu u středu, velké náměstí ořízne kruhem) a líhně, ty je upravíš tažením.
- Obtížnost a vzhled – předvolba Lehká, Normální, nebo Těžká, bossové a vlny, ve kterých přijdou, případně vlastní čísla, název a popis.
- Test a uložení – zahraj si misi (mezi vlnami v ní jde upravit líhně; po návratu do editoru rozehraná hra počká a „Pokračovat ve hře“ ji pustí dál), nech ji otestovat botem, ulož ji do „Moje mise“ a pošli odkazem.
Kontroly běží průběžně: hra hned hlásí chybějící brány, neplatné líhně nebo síť, která do bráněné plochy nevede. Podrobný návod je v článku Tower defense ve vlastním městě.
Sdílení odkazem a test botem
Sdílený odkaz nese celou misi zkomprimovanou za znakem # v adrese. Tahle část adresy se na server vůbec neposílá, takže mise nikde neleží. Příjemce uvidí kartu s názvem, autorem a popisem a může misi hrát, nebo si upravit vlastní kopii.
Test botem zahraje misi dvěma počítačovými hráči – jeden staví věže, druhý je navíc vylepšuje. Běží ve Web Workerech na pozadí, takže editor mezitím funguje. Podle toho, jak boti dopadnou, dostane mise štítek Lehká, Normální, Těžká, nebo Velmi těžká. Boti nejdřív zjistí, kolik nepřátel půjde ze které líhně, a věže staví tam, kde obrana ještě chybí. Mise Brno vyjde jako Normální. Její test trvá na rychlém počítači se čtyřmi a více jádry zhruba 35–40 sekund, na slabším počítači déle a na telefonu i 1,5–2,5 minuty. Mise s mnoha vlnami trvá ještě déle, protože boti odehrají každou vlnu, kterou přežijí.
Známá omezení
- Hra je tak dobrá jako data OpenStreetMap. Chybějící ulice nebo výška budovy se projeví i ve hře.
- Nepřátelé chodí jen po zmapovaných čarách. Otevřené náměstí napříč nepřecházejí.
- Sdílená mise se u příjemce staví z jeho aktuálních dlaždic. Když se mezitím změní data OSM, může vypadat trochu jinak.
- Velká plocha (blízko 1 000 m) se do malého okna nemusí vejít; hra pak varuje.
Časté otázky
Co je brána a co líheň?
Líheň je místo na okraji hrací plochy, odkud vycházejí nepřátelé. Brána je bod, kde ulice nebo chodník protíná hranici bráněné plochy – když tam nepřítel dojde, bereš ztrátu života.
Proč se stejná mise může u někoho jiného lišit?
Mise nese jen souřadnice a pravidla. Síť ulic a budovy se u každého hráče staví z aktuálních dat OpenStreetMap, takže změny v mapě se projeví i ve hře.