Jak se předělává hra do Windows
1. Nápad a nadšení
Nemusím připomínat, že k tomu aby člověk se začal pokoušet předělat staré zdrojáky dosové hry do windows potřebuje jednak nápad (musí ho to vůbec napadnout), a taky nadšení. Nelze očekávat, že výsledek jeho práce bude finančně odměněn, proto se to dělá pro zábavu, pro tu jednoduchou, až skoro dětinskou radost z toho, že to nakonec funguje, a že to někdo hraje.

Nápad převést hru do Windows vznikl prakticky ihned po vydání hry. V tu chvíli však vůbec nikdo nevěděl, jak na to. Nezapomeňme, že v té době je aktuální Windows98, DirectX je ještě v počátečních fázích, o to méně informací o něm jsem měl já. První pokusy s DirectX vůbec neukazují na to, že by převod byl jednoduchý. V následujících odstaveci rozebereme jaké problémy se při konverzi mohou objevit.
Ale zpět k nápadu, postupem času člověka napadne, jak vše co má k dizpozici za ty roky praxe v programování zkombinovat. Co však v tu chvíli chybí je to nadšení. Hra, kterou již skoro nikdo nezná, proč bych se snažil? Nadšení se objevuje až po tom, co na internetu objevím jiné mutace známých DOSových, například Transport Tycoonu. Co to takhle zkusit? Shodou okolností mám v zaměstnání podobnou práci, kdy skoro 5 let staré zdrojáky musím převést do nového systému a kompletně přeorganizovat.
Tak, hurá na věc!
Očekávané problémy
Podívejme se, kde lze očekávat problémy při konverzi:

Zkousne to překladač?

Spousta assembleru
- V prvé řadě otázka. Zkousne to překladač? Jak moc se liší Watcom C od MSVC? Naštěstí rozdílů není mnoho, díky tomu, že hra je napsaná kompletně v C. Další výhodou je, že Watcom C byl 32-bitový překladač, stejně jako MSVC.
- Skeldal obsahuje mnoho kódu v ASM. Co s tím? MSVC má možnost vkládat inline assembler, ale trochu v jiném formátě -> přepsat -> a neudělat chybu. Některé assemblery se přepisují do C, protože v této době už znám schopnosti optimalizace MSVC a vím, že je leckdy lepší, než optimalizace ruční.
- Paměťový manager. Skeldal byl dělán pro počítače s paměti pod 16MB. Pokud neměl paměť swapoval. Naštěstí ve windows toto dělat nemusí, takže stačí swapovací knihovnu vykuchnout úplně, a tvářit se, že hra má 2GB volné paměti.
- Další na řadě je grafika. Přiznám se, že jsem si poprvé zahrával s možností použít GDI nebo GDI+. Ale DX9 nakonec vyhrál. Původní DOSový Skeldal předpokládá, že má obrazovku plně pod svojí kontrolou. To nelze ve Windows použít. DirectX však umožňují toto emulovat. Vykuchané grafické knihovny je mi líto, měl jsem jí rád, ale musela pryč. Jeden čas jsem si na ní dával dost záležet.
- Barvy. Vzpomínáte? Skeldal běží v 15-bitovém HICOLOR. Poslední patche sice
uměli pracovat v 16-bitovém HICOLOR, ale byla to jen taková emulace přes
celkem objemnou tabulku barev. A co ve windows? Naštěstí odpadají grafické
režimy, většina dnešních grafických karet umí 16b HICOLOR. A jak převést
15-bitovou grafiku na 16-bitový HICOLOR. Jednoduše.
c16=c15+int(c15/32)*32; //kde int je celá část.
Tento vztah lze v assembleru spočítat dvěmi instrukcemi (dokonce naráz pro dva body na obrazovce). I tento problém se zdá vyřešen. - Není všem dnům konec. Další problém je vstup uživatele. Klávesnice a myš. Asi nebude fungovat přímý přístup na klávesnici, a stejně tak nemohu očekávat, že mi windows poskytnou něco jako DOSový ovladač myši.
- S tím souvisí problém češtiny. Hra má integrovaný driver české klávesnice v kódu Kamenických. V tuto chvíli se zdá, že tento driver zůstane zachován, protože windowsům nevadí. Podmínkou je, že uživatel má nastavenou anglickou klávesnici. Proto si Skeldal při spuštění změní klávesnici na En
- A teď nás čeká opravdu oříšek. Zvuky. Skeldal obsahuje kompletní driver pro několik zvukovek a mixovací zařízení. Po delší úvaze docházím k závěru. Všechno vykuchat, a napsat zvuky znova, kompletně v DirectSound.
Zdá se, že jsme prošly všechny problémy. Další problémy se ukazují. Například ladící konzole, která umožňuje cheaty. Tato konzole by měla být zachována i ve Windows verzi, bohužel pracuje v DOS-okně. Ale hra pod windows žádné DOS okno nemá. Celá tato konzole se musí předělat, použít okénka atd.
Fáze hledání zdrojáků
Nebudete mi věřit, ale jeden čas hrozilo, že se zdrojáky navždy ztratily. CD, na
kterém byly uloženy jsem nemohl dlouho najít. O to horší to bylo, když jsem našel
prázdný obal od CD. Vlastní CD pak bylo v jiném obalu, to si neumíte představit,
jak mi spadl kámen ze srdce.
A zde je, 5 let staré CD. Bude ještě čitelné?

CDčko se našlo
Naštěstí bylo.
Můj deníček
05.04.2004 - Zacala prace na konverzi SKELDALU do Windows Instalace SkeldaluInstalace zdrojaku a vytvoreni projektu
Vzniklo nekolik novych zdrojovych souboru pro prizpusobeni Skeldalu k windows s funkcemi, ktere nahradi nektera puvodni systemova volani
Zaver: Dostal jsem se do stavu, kdy vse lze prelozit, ale ne slinkovat. Chybi vsechny ASM knihvny... priste.
Ač se to nezdá, to byl docela úspěch. Ještě vůbec ale není jasné, zda se neobjeví problém, který by znemožnil konverzi.
06.04.2004 - Zaklad hry oziven. Spoustu veci jeste existuje jako prazdne volani, napriklad animace, zvukova knihovna.
Nicmene DirectX wrapper je napsany a Skeldal se spusti, zobrazi mysicku a zustane stat. Duvodem je prazdna implmentace task_sleep ktery by mel spustit hru.
Jak je vidno, pouze jeden den trvalo napsat DX wrapper, tj. knihovnu, která simuluje grafický režim pod Windows. DX wrapper je ale v tuto chvílí v plenkách, umí jen základní věci, spoustu věcí ještě není napsáno.
task_sleep - o tom trochu blíže. Skeldal používa přepínání úloh. Avšak toto přepínání je řízené samotnou hrou, nikoliv operačním systémem, jak je to ve Windows. To je docela zásadní problém, který vlastně způsobil to dlouhé čekání, než jsem vůbec začal o konverzi přemýšlet. Až po nějaké době jsem objevil, že jádro Windows (od verze 98) obsahuje knihovnu "Fibers". Fibers je přesně to co dokáže nahradit přepínání úloh ve Skeldalu. Vždy, když hra potřebuje přepnout na jinou úlohu (třeba při čarování, kdy se zobrazuje animace, hra neustále přepíná mezi přehravačem animací a hrou, a na obrazovce se zobrazuje kombinace obou částí), požádá knihovnu Fibers, která to zajistí. Tím se tato část nejen zjednodušila, ale je také mnohem stabilnější, než v originále.
09.04.2004 - Většina hry oživena. Lze chodit mapou, bojovat s nestvůrama, dialogy, obchody, celý herní cyklus pracuje
Nefunguje. Chození se zoomem, šipky na klávesnici, ukládání hry, předměty v inventáři mají špatné barvy, Control + Myš na rozdělování skupiny
Samozřejmě nefungují zvuky (nejsou napsané) a přehravač videa (padá).
Pracuje uspokojivě přecházení mezi windowsama a hrou ve fullscreenu
Po přepsání task_sleep se opravdu hra spustila a začlo to všechno fungovat! Bylo ještě nutné napsat ovladače klávesnice a myši, v tuto chvíli je to ale zjednodušená verze.
11.04.2004 - zvuky, hudba, animace kouzel a zbraní, šipky, a rozdělování skupiny controlem.
nefunguje: videosekvence, zoomovani a otaceni.
Zvuky by bylo dobre odskouset na mem pocitac P350

Dialogy nastavení
Mezi 9.4. - 11.4. se psala celá zvuková knihovna. Hra využívá DirectSound. Tam si alokuje 33 kanálů, z toho 32 mono a 1 stereo. Na stereo kanále běží hudba v pozadí, na ostatních kanálech se mixují zvukové efekty. Protože nastavování hlasitosti v DirectSound je asynchroní, má bohužel zvuková knihovna dodnes takové malé chybky ve formě artefaktů. Při rychlé chůzi městem můžete občas slyšet, že na okamžik zazní hluk z náměstí, i když se člověk na náměstí nenachází. Je vždy v situaci, kdy se na některý kanál nahrává jiný zvuk, na kterým předtím hrál nějaky hlasitý zvuk (i když už nehraje). Snad časem tuto chybu opravím.
Oproti originálu má windows verze trošku jinou tlumící charakteristiku zvuku.
18.04.2004 - funguje jiz temer vse nefunguje: Chozeni s lodkou. Background v mapach (nebude fungovat ani v budoucnu] dodelat: nastaveni, cheaty, rozsireni.
Po týdnu práce jsem dodělal některá nová rozšíření. Zdá se, že už zbývají maličkosti, začínají se lovit chyby.
27.04.2004 - většina věcí v nastavení funguje, nejde jen zobrazování runy
Tohle je poslední záznam ve vývojářském deníčku. Další záznam by byl nejspíš "všechno funguje jak má". Nyní se už hledají chyby. Také se píše instalační program a dialog nastavení.
Kukátko na vývojáře?
Takhle to vypadá na obrazovce, když se pracuje na konverzi.
Když se ladí Skeldal, vývojář má k dispozici záznam běhu hry. Do takového záznamu se píší události, které nastaly při běhu hry. Pouhým pohledem lze pak poznat, zda se hra chová tak jak má a zda náhodou nesměřuje k blízkému pádu. Ve Windows je možné tento záznam sledovat "online". (takový luxus v při vývoji DOSové verze nebyl)

Pro zajímavost - zde popis
- sloupeček - číslo úlohy, -1 znamená hlavní.
- sloupeček - čas, důležité na posouzení, jak dlouho to trvalo.
- sloupeček - jméno knihovny, nebo části knihovny, která pracovala.
- sloupeček - Text a popis události
No a je to za námi - co dál?
No a je to za námi. Člověk se docela zapotí. Ale jsem rád, že se to nakonec povedlo.
Co dál?
Nevím, co si budou hráči přát. Z originálu mi chybí jeden dluh. Vždy mě vadilo, že dobrodružství nemůže obsahovat hudbu. Dnes by stačilo, kdyby bylo možné ve hře přehrávat MP3 a jako video třeva AVI. Co myslíte? Uvidíme.
Aspoň doufám, že jsem někomu udělal radost. Všem děkuju za ohlasy i za podporu. Ať se Vám dobře hraje.
Ondra