Herní návrhový vzor Datové soubory v balíku
Z CHWiki
Obsah |
Účel
Používá se k uložení herních dat pohromadě kvůli úspoře místa a případně k ochraně před krádeží
Jiné názvy
Tuto funkcionalitu často implementují herní souborové systémy
Motivace
Hry většinou mají tisíce datových souborů. Tyto soubory se za běhu hry pouze čtou a proto není třeba využívat funkce souborového systému v OS které umožňují rychlou změnu velikosti souboru za cenu větších nároků na skladovací prostor. Proto se tyto soubory umístí do jednoho nebo více velkých souborů, balíků.
Balíky se dají dají navíc i šifrovat nebo komprimovat a tím se ztíží možnost vykrádání herních dat.
Přidáváním dalších balíků lze dosáhnout možnosti rozšíření hry.
Použití
Vzor Datové soubory v balíku použijeme:
- Pokud chceme zjednodušit přenos a případně aktualizaci herních dat
- Chceme-li umožnit změnu nebo rozšíření vlastností hry (grafika, skripty...), použití tohoto vzoru to umožňuje provést změnou jediného (nebo omezeného množství) souboru.
- Vadí-li nám možnost uživatele vykrádat herní data, můžeme datový soubor zašifrovat
- Když chceme urychlit načítání, protože komprimované soubory se čtou rychleji, pokud se zvolí nějaká rychlá komprese (např. zlib). Samotné čtení z disku je obecně pomalejší než dekomprimace v paměti.
Důsledky
Vzor Datové soubory v balíku nabízí tyto výhody:
- Umožňuje jednodušší distribuci aktualizovaných herních dat
- Umožňuje herní data zkomprimovat a tak zmenšit jejich objem
- Šetří místo na disku i bez komprimace
Balíky nemusíme ale používat jen pro datové soubory. Lze je využít i pro ukládání hry v případě, že náš ukládací mechanismus používá více souborů. Šifrované balíky s uloženou hrou zabrání podvádění. Pokud implementujeme v engine jak podporu pro čtení, tak pro vytváření balíků, je to vzor Editor naprogramovaný v engine
Implementace
Při implementaci musíme vyřešit tyto záležitosti:
- Načítání dat z datového souboru, tedy de facto napsat vlastní funkce typu fopen, fread apod. nebo vytvořit streamové třídy
- Pokud chceme použít kompresi, vyplatí se použít nějaké běžné knihovny jako například zlib
- Použití šifrování ochrání (alespoň trochu) herní data, ale spotřebovává více systémových prostředků při dešifrování
Příklad
Známá použití
- Většina her, už od doby Doom, který používal balíky s příponou WAD a umožňoval modifikace přidáním uživatelských WAD balíků.
- Podobně fungovaly i Quake 1 a 2, které používaly velmi jednoduchý formát svých balíků s příponou PAK. Nyní Quake 3, Doom 3 a další od id Software používají běžný ZIP.
- Unreal Engine používá více packů, každý pro jeden typ souborů a pro určitou skupinu (např. textury egypt)
Příbuzné vzory
Komprimace a šifrování lze snadno implementovat s pomocí OOP návrhového vzoru Dekorátor.
