Herní návrhový vzor Datové soubory v balíku

Z CHWiki

Přejít na: navigace, hledání

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:

  1. Umožňuje jednodušší distribuci aktualizovaných herních dat
  2. Umožňuje herní data zkomprimovat a tak zmenšit jejich objem
  3. Š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:

  1. Načítání dat z datového souboru, tedy de facto napsat vlastní funkce typu fopen, fread apod. nebo vytvořit streamové třídy
  2. Pokud chceme použít kompresi, vyplatí se použít nějaké běžné knihovny jako například zlib
  3. 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.

Odkazy