Polda 1 - parsování datového souboru #2

03. května 2024 - Hry

Po dlouhé době pokračování s parsováním dat v binárním souboru originálního Polda 1. Dlouho jsem na soubor nesáhl, ale je to teď pár týdnů zpátky, kdy jsem náhodně soubor otevřel v hex editoru a objevil další zajímavosti! Pokud vás zajímají předchozí zjištění, tak skočte na první článek.

Texty

První objev, který zase vše odstartoval, tak bylo kódování textu. Uvědomil jsem si, že v době MS-DOS se používala lokální kódování. Jediné co zbývalo, najít to správné. Usilovné prohledávání Wikipedie nakonec přineslo úspěch. Kódování textu je v Kamenický encoding.

Trefil jsem se posledně i do začátku textů. Bohužel stále nemám tušení, co před samotnými texty je. Stále odhaduji, že půjde o jakousi mapu, kam nejspíš texty patří apod. Možná samotný font?

Mapa dat

Textová reprezentace hlavičky souboru vypadá takto:

SleepTeam (c) resource file....

Následuje čtveřice byteů. Zkoumal jsem je už na začátku, zkoušel jsem různé varianty, ale tehdy jsem nepřišel na smysl. Až po rozhovoru s pár lidmi jsem si uvědomil, že by to mohl být offset, možná relativní, který povede na mapu dat. Je nesmysl, aby v době MS-DOS se načetl celý soubor do paměti nebo aby se postupně prošel.

Ačkoliv jsem už v prvním článku psal o pořadí byteů little-endian, uvědomil jsem si tuhle skutečnost až nyní v případě offsetů. Čtyři bytey po hlavičce jsou následující E7 B9 1F 26 což interpretováno jako little-endian dává 26 1F B9 E7. Výchozím bodem je offset 00 00 00 1F, což je byte hned za hlavičkou souboru. Součtem 1F a 26 1F B9 E7 dostanete 26 1F BA 06 a zde začíná mapa dat!

Bohužel je tu porušen můj předtím objevený vzor RR RR 00 00 XX 03. Mapa dat (po skoku na offset 26 1F BA 06) začíná FA 03 a předtím jsou čtyři nuly. Poté následuje 12 byteů, které jsem ještě nedokázal identifikovat. První nápad byl velikost mapy (první čtyři bytey), ale hrubou silou jsem vytáhl 1455 dat (obrázky, hudba...), ale podle byteů by měl být počet 3584. U zbylých 8 byteů je vzor stejný 40 00 00 00 12 00 00 00.

Mapa samotná je ve velmi jednoduchém formátu:

  • 4 byte = resource number
  • 4 byte = offset (relativně k offsetu 00 00 00 1F)
  • 4 byte = velikost

Všechny data, která jsem přes mapu extrahoval, tak přesně souhlasí. Ověřil jsem je převážně na obrázcích a hudbě.

Paleta barev

Ještě před objevením mapy dat jsem přišel na paletu barev. Předchozí teorie o FD 03, F5 03 a F6 03 byly chybné. Paleta je označena jako EA 03. Protože jsou obrázky v odstínech šedi, i počet byteů v paletě toto reflektuje. 256 barev v RGB formátu, tedy 768 byteů v paletě.

Co ještě nemám vyřešené, jaká paleta se používá pro jaký obrázek, ale to může být klidně namapované natvrdo v kódu.

Ostatní

Na offsetu 00 35 A5 80 jsem našel text Pro Tebe Lucinko, což je možná jakýsi "Easter Egg" vývojářů.

Některá data dokonce porušují původní odhad RR RR 00 00 XX 03. Místo 03 končí na 04.

Odhalené typy dat:

  • EB 03 obrázek
  • EA 03 paleta barev
  • FF 03 hudba
  • F7 03 část souboru
  • E9 03 texty
  • F7 03 ???
  • F2 03 ???
  • FD 03 ???
  • 00 04 ???
    • 4 byte neznáme
    • 00 00
    • 2 byte velikost dat
  • 02 04 ???

Stále netuším, co z toho jsou animace nebo dabing. Otevřením souboru v Audacity jsem našel namluvenou pohádku o Jeníčkovi a Mařence, ale nedokážu přesně vypočítat, kde tohle v souboru začíná. Náhodně jsem i vyextrahovaná data v Audacity otevíral, ale mám pocit, že dabing v nich nikde není, a ani pohádka.