Generování map z klienta: Porovnání verzí
(init page, konverze z ipb verze, grrrh už ani někdy nejde nahrát obrázek ebylo možné zkopírovat soubor „/tmp/phppHx7nS“ na „temp/20080215191705!Vytvareni-map-prepocet1.png“.) |
m (fix obrázků) |
||
Řádek 24: | Řádek 24: | ||
* Projití všech položek ve WMA | * Projití všech položek ve WMA | ||
* Každá mapa ve wow je složena z 12 fragmentů, jedná se o 3 řádky po 4 sloupcích, toto je zachováno u každé mapy. Takto získáme slepou mapu (bez vyplněných detailů jako když je postupně objevujete ve wow) | * Každá mapa ve wow je složena z 12 fragmentů, jedná se o 3 řádky po 4 sloupcích, toto je zachováno u každé mapy. Takto získáme slepou mapu (bez vyplněných detailů jako když je postupně objevujete ve wow) | ||
− | + | <gallery> | |
+ | Soubor:Generovanimap-skladani1.jpg|Vytváření mapy z jednotlivých částí | ||
+ | Soubor:SearingGorge-slepa-mapa.jpg|Hotová "slepá" mapa | ||
+ | </gallery> | ||
* V první řadě skript složí v paměti z těchto fragmentů celou mapu. Poté se prochází soubor WorldMapOverlay a hledají se dílčí detailní části této mapy (dle id), jsou zapsány do pole fragmentů a poté samostatně zpracovány. | * V první řadě skript složí v paměti z těchto fragmentů celou mapu. Poté se prochází soubor WorldMapOverlay a hledají se dílčí detailní části této mapy (dle id), jsou zapsány do pole fragmentů a poté samostatně zpracovány. | ||
− | |||
* Jednotlivé detailní části (fragmenty) jsou složitější na zpracování, z dbc je možné vyčíst jeho velikost a umístění na mapě. Vlastní rozdělení do souborů je nutné rozpočítat podle velikosti. Jeden soubor nemá nikdy větší rozměry než 256x256px. Jednotlivé soubory fragmentů jsou pak takto zpracovány a zapsány na příslušné pozice do mapy. Jsou vynechávány tzv. pixelfix fragmenty a některé další soubory, které způsobovaly individuální problémy. | * Jednotlivé detailní části (fragmenty) jsou složitější na zpracování, z dbc je možné vyčíst jeho velikost a umístění na mapě. Vlastní rozdělení do souborů je nutné rozpočítat podle velikosti. Jeden soubor nemá nikdy větší rozměry než 256x256px. Jednotlivé soubory fragmentů jsou pak takto zpracovány a zapsány na příslušné pozice do mapy. Jsou vynechávány tzv. pixelfix fragmenty a některé další soubory, které způsobovaly individuální problémy. | ||
− | + | <gallery> | |
+ | Soubor:Generovanimap-skladani2.jpg|Ukázka jednoho fragmentu | ||
+ | Soubor:SearingGorge-plna-mapa.jpg|Hotová mapa | ||
+ | </gallery> | ||
=== Generování map skriptem === | === Generování map skriptem === | ||
Řádek 74: | Řádek 79: | ||
Toto zřejmě někteří nepochopíte, využívá se zde analytické geometrie a experimentálních zjištěnísmile.gif | Toto zřejmě někteří nepochopíte, využívá se zde analytické geometrie a experimentálních zjištěnísmile.gif | ||
− | Budu vycházet z obrázku: - | + | Budu vycházet z obrázku: [[Soubor:Generovanimap-prepocet1.png]] |
+ | |||
z obrázku vyplívá jednak to, že souřadnicové systémy, na kterém budeme projektovat a ze kterého vycházíme má osy inverzní a ještě prohozené (x,y <=> y,x). Na obrázku jsou naznačeny nám známé body, levý horní roh má své wow souřadnice X0,Y0 a v projektovém světě je to počátek tedy 0,0. Koncový pravý dolní bod je rovněž znám. Dále známe souřadnice zobrazovaného bodu Xx,Yx, ale neznáme souřadnice v druhé soustavě a,b. Využil jsem dvou vektorů z počátku a z konce, které si jsou v obou souřadnicových systémech geometricky podobné. | z obrázku vyplívá jednak to, že souřadnicové systémy, na kterém budeme projektovat a ze kterého vycházíme má osy inverzní a ještě prohozené (x,y <=> y,x). Na obrázku jsou naznačeny nám známé body, levý horní roh má své wow souřadnice X0,Y0 a v projektovém světě je to počátek tedy 0,0. Koncový pravý dolní bod je rovněž znám. Dále známe souřadnice zobrazovaného bodu Xx,Yx, ale neznáme souřadnice v druhé soustavě a,b. Využil jsem dvou vektorů z počátku a z konce, které si jsou v obou souřadnicových systémech geometricky podobné. | ||
Z vektoru Va vyplívá (sorry chybí mě tu čárka nad rovnicí, ale tohle fórum vzorečky nebere a já sem línej) | Z vektoru Va vyplívá (sorry chybí mě tu čárka nad rovnicí, ale tohle fórum vzorečky nebere a já sem línej) | ||
Řádek 87: | Řádek 93: | ||
všechny změny ve stejných vektorech jsou navzájem uměrné, pokud se Va zvětší, zmenší se Vb. proto využijeme poměr | všechny změny ve stejných vektorech jsou navzájem uměrné, pokud se Va zvětší, zmenší se Vb. proto využijeme poměr | ||
Va / Vb = konst. | Va / Vb = konst. | ||
+ | |||
+ | [[Soubor:Generovanimap-prepocet2.png]] | ||
Praktické použití najdete v souborech jinamapa.php a pouzevypocet.php | Praktické použití najdete v souborech jinamapa.php a pouzevypocet.php | ||
− | |||
== Externí odkazy == | == Externí odkazy == | ||
* [http://www.wowresource.eu/index.php?showtopic=7062&hl= Původní téma na fóru] | * [http://www.wowresource.eu/index.php?showtopic=7062&hl= Původní téma na fóru] | ||
− | * [http://www.wowresource.eu/index.php?act=attach&type=post&id=333 | + | * [http://www.wowresource.eu/index.php?act=attach&type=post&id=333 Balíček na worldmapy] |
− | * [http://www.wowresource.eu/index.php?act=attach&type=post&id=336 | + | * [http://www.wowresource.eu/index.php?act=attach&type=post&id=336 Balíček na minimapy] |
Pozn.: mapy a ostatní grafika jsou (C) spol. Blizzard Entertainment | Pozn.: mapy a ostatní grafika jsou (C) spol. Blizzard Entertainment |
Verze z 16. 2. 2008, 10:41
K vygenerování map z klienta budete potřebovat:
- WoW klient
- PHP (www.php.net), knihovna GD2
- na minimapy také MyWarcraftStudio (nebo jiný univerzální extraktor MPQ souborů)
- troška pochopení a znalost programování / matematiky
Obsah
Generování WorldMap (textury shodné s klasickými mapami
Obsah balíčku (viz externí odkazy)
- Složka extract:
- extractMapsGB.bat - extrahuje mapy a dbc z enGB klienta
- extractMapsUS.bat - extrahuje mapy a dbc z enUS klienta
- MPQE - extraktor z MPQ souborů (autorem je the WRS)
- BLPconverter - převádí wow BLP formát na použitelný PNG
- Složka php:
- dbcreader.php - třída k načtení dbc souborů
- loader.php - mezistupeň mezi dbc a vlastním skriptem (zachováno z historických důvodů. dříve jsem parsoval csv, tvořený pomocí DBCutil)
- maps.php - vlastní skript na vytvoření map, skript je co nejvíce komentován pro pochopení činnosti
Princip činnosti skriptu
- Načtení souboru WorldMapArea.dbc - obsahuje název zóny, její id a wow koordináty (pro danou mapu, lze je použít pro přesné zobrazení npc/hráčů na této HQ mapě)
- Projití všech položek ve WMA
- Každá mapa ve wow je složena z 12 fragmentů, jedná se o 3 řádky po 4 sloupcích, toto je zachováno u každé mapy. Takto získáme slepou mapu (bez vyplněných detailů jako když je postupně objevujete ve wow)
- V první řadě skript složí v paměti z těchto fragmentů celou mapu. Poté se prochází soubor WorldMapOverlay a hledají se dílčí detailní části této mapy (dle id), jsou zapsány do pole fragmentů a poté samostatně zpracovány.
- Jednotlivé detailní části (fragmenty) jsou složitější na zpracování, z dbc je možné vyčíst jeho velikost a umístění na mapě. Vlastní rozdělení do souborů je nutné rozpočítat podle velikosti. Jeden soubor nemá nikdy větší rozměry než 256x256px. Jednotlivé soubory fragmentů jsou pak takto zpracovány a zapsány na příslušné pozice do mapy. Jsou vynechávány tzv. pixelfix fragmenty a některé další soubory, které způsobovaly individuální problémy.
Generování map skriptem
- nakopírujte obsah složky "extract" do adresáře DATA ve vašem wowu, a poté otevřete extractMapsGB / extractMapsUS podle jazykové lokalizace vašeho klienta. vyčkejte na dokončení operací až se okno zavře
- někam na disk nahrajte složku php. do složky worldmap přehrajte všechny soubory, které jsou v adresáři u wow - MPQOUT\Interface\WorldMap\, dbc soubory nahrejte k souboru maps.php
- otevřete příkazový řádek ve složce, kde se nachází soubor maps.php, zadejte cestu k vašemu souboru php.exe s parametrem maps.php (např: c:\php\php.exe maps.php nebo "c:\program files\xampp\php\php.exe" maps.php)
- čekejte až skript skončí činnost
- výsledek je vygenerovaný ve složce out.
Generování minimap
Obsah balíčku (viz externí odkazy)
- Složka extract:
- BLPconvertor - konverze BLP na PNG
- konverze.bat - dávková konverze BLP souborů
- Složka php:
- minimap.php - vytvoření minimap ze souboru md5translate.trs
- jinamapa.php - příklad zobrazení na mapě, připraven princip detekce zóny dle obdelníkových bloků
- imagestripper.php - DEPRECATED, see doimg.php
- blocksgen.php - načtení "bloků" do db
- doimg.php - roztrhání velkých textur na jednotlivé zóny
- minispecs.php - předvytvořené pole informací o rozměrech jednotlivých zón, pokud změníte nastavení v souboru doimg.php je nutné toto upravit na základě nového soubor out-minimaps.txt
- transports.php - testovací soubor, načítá DBC TaxiPathNode.dbc
- pouzevypocet.php - příklad a vysvětlení výpočtu pozice na mapě z WOW souřadnic
- konverzejpeg.php - konverze PNG map na JPEG formát
Princip činnosti skriptu
- Je načten soubor md5translate.trs, který obsahuje informaci o původním názvu souboru a jeho md5 podobně, vše je řazeno pod skupiny.
- Klasické mapy jsou vytvořeny ze znalosti, že mapa je utvořena mřížkou 64x64 tilů, 1tile v texturách má velikost 256x256px. WMO světy nejsou prozatím implementovány
Generování map skriptem
- Za pomocí MyWarcraftStudio vyextrahujte následující složky/soubor:
- common.mpq - složka "textures/Minimap/*.*"
- patch.mpq - složky "textures/Minimap/*.*" a "Textures/Minimap/*.*" (ano jsou tam dvě s různým počátečním písmenem!)
- patch-2.mpq - složka "textures/Minimap/md5translate.trs"
- pokud máte nějaký další patch soubor nebo uvnitř MPQ souboru složku textures/Minimap rovněž je vyextrahujte
- nakopírujte BLPconvertor a konverze.bat k minimapám ve formátu BLP, zapněte konverzi a vyčkejte (celkem se jedná o cca 17000 souborů, konverze může zabrat i hodinu! průběžně můžete kontrolovat počet zbývajících BLP souborů souborovým manažerem)
- rozpakujte někam balíček, přehrajte tam soubor md5translate.trs
- do složky Minimap (u rozpakovaného balíčku) nahrajte zkonvertované textury minimapy (nyní ve formátu PNG)
- konzolově spusťte soubor minimap.php, některé mapy (Azeroth, Expansion01 a Kalimdor) jsou velmi velké, doporučuji vypnout vše ostatní a nechat tento soubor v klidu proběhnout, špičkové využití RAM paměti se vzhledem k velkým rozměrům textury v truecolor režimu může vyšplhat až na 1GB +-)
- konzolově spusťte soubor konverzejpeg.php (platí shodné upozornění jako u předchozího souboru)
- konzolově spusťte soubor doimg.php (optimální krok, po tomto se vygenerují mapy jednotlivých zón)
Přepočet WoW souřadnic na zobrazitelné body na mapě
Toto zřejmě někteří nepochopíte, využívá se zde analytické geometrie a experimentálních zjištěnísmile.gif Budu vycházet z obrázku:
z obrázku vyplívá jednak to, že souřadnicové systémy, na kterém budeme projektovat a ze kterého vycházíme má osy inverzní a ještě prohozené (x,y <=> y,x). Na obrázku jsou naznačeny nám známé body, levý horní roh má své wow souřadnice X0,Y0 a v projektovém světě je to počátek tedy 0,0. Koncový pravý dolní bod je rovněž znám. Dále známe souřadnice zobrazovaného bodu Xx,Yx, ale neznáme souřadnice v druhé soustavě a,b. Využil jsem dvou vektorů z počátku a z konce, které si jsou v obou souřadnicových systémech geometricky podobné. Z vektoru Va vyplívá (sorry chybí mě tu čárka nad rovnicí, ale tohle fórum vzorečky nebere a já sem línej)
Va = XxX0 = X0 - Xx
ale také pro druhý souřadnicový sytém (je použito b, protože souřadnice jsou inverzní viz vpravo nahoře)
Va = b0 = = 0 - b
Z vektoru Vb vyplívá
Vb = XxX1 = X1 - Xx
ale také pro druhý souř.s.
Vb = bh = h - b
všechny změny ve stejných vektorech jsou navzájem uměrné, pokud se Va zvětší, zmenší se Vb. proto využijeme poměr Va / Vb = konst.
Praktické použití najdete v souborech jinamapa.php a pouzevypocet.php
Externí odkazy
Pozn.: mapy a ostatní grafika jsou (C) spol. Blizzard Entertainment