Ajtók és kapcsolók
Az ajtók induláskor nyitva (01 attrib.) vagy zárva (02) is lehetnek. Az ajtókat 18 "függvény" működteti. Ezeket hívják meg a nyitó vagy záró kapcsolók (hex.) 00-11 attribútummal. Minden függvény két bájtból áll, ezek egymástól 256 bájtra vannak. Az 1-1 egymást követő 18, ajtót működtető bájt sorrendben a 18 függvény 1-1 adata. A két adat együttesen az alábbi három tényezőt adja meg:
* hányas sorszámú (hex. 01-18) képernyőn lévő ajtót működtet,
* azon a képernyőn hanyadik elem (hex. 00-1D) az adott ajtó,
* egy ajtót működtet a kapcsoló, vagy többet is.
Tehát nem szerepel, hogy nyitásról vagy zárásról van-e szó, ezt kizárólag a kapcsoló típusa határozza meg. Szintén nincs adat arra, hogy meddig maradjon nyitva az ajtó, ez talán állandó. Ha több ajtót működtet egy kapcsoló, akkor ez kiderül a két bájtból: ilyenkor a következő "függvényt" is végrehajtja a kapcsoló, így már két ajtó nyílik vagy záródik. Természetesen ha a második 2 bájt is lehetővé teszi a következő olvasását, akkor már 3 ajtó mozog egyszerre.
A két bájt egyike rendszerint 89, A9, 29, A5 és hasonló, változatos szám, a másik csak 00, 20, 40, 60, 80 és A0 lehet. Most álljon itt egy matematikai képlet az ajtókra való hivatkozáshoz. Az első bájtot A-val, a másodikat B-vel jelölöm. A képletet hexadecimálisan adom meg.
A={[M(x/4)]*2+8}*10+y ahol M az osztás maradékát jelenti
B=[E(x/4)]*2*10 ahol E az egész részt jelenti (lefele kerekítés)
ahol x a képernyőszám (01-18) és y a képelem szám a képernyőn (00-1D)
Ha azt akarjuk, hogy a következő 2 bájtot is értelmezze a kapcsoló (dupla ajtómozgatás), akkor az első képletből a +8-at ki kell hagyni. A gyakorlatban ez a következőt jelenti. Például
1. képernyő: A_ 00 duplázás esetén: 2_ 00
2. képernyő: C_ 00 duplázás esetén: 3_ 00
3. képernyő: E_ 00 duplázás esetén: 6_ 00
4. képernyő: 8_ 20 duplázás esetén: 0_ 20
5. képernyő: A_ 20 duplázás esetén: 2_ 20
6. képernyő: C_ 20 duplázás esetén: 4_ 20
7. képernyő: E_ 20 duplázás esetén: 6_ 20
8. képernyő: 8_ 40 duplázás esetén: 0_ 40
és így tovább...
Az első számhoz hozzáadódik a képelem szám, tehát például az 5. képernyő második sorának utolsó eleme esetén (20. elem) hex. 13, így ez esetben a hivatkozás B3 és 20, vagy duplázás estén 33 és 20 lesz.
A nagyajtóra ugyanígy hivatkozunk, a képelemnek a nagyajtó bal oldali eleme (10-es kód) számít. (Ennek az elemnek 00 az attribútuma.) Ha azon a képernyőn, amelyről adott szinten indulunk, nagyajtó van, akkor az a szint kezdetekor automatikusan "bezáródik". Ezt az ajtót is ki lehet ugyan nyitni később, ám akkor nem lesz benne lépcső, és nem lehet rajta "bemenni". Vagyis a továbbmenetelhez szükséges nagyajtó nem lehet az induló képernyőn.
Ha rálépünk egy 0F- nyitó kapcsolóra, abból ideiglenesen 01- normál járat lesz, ha egy 06- záró kapcsolóra lépünk, akkor az 05- süllyesztett járat lesz.
Honnét indul adott szinten a játékos?
Erre a válasz mindössze 7 bájt. Az első a képernyő szám (01-18), a második a képelem száma a képernyőn (00-1D). A harmadik bájt megadja, merre néz a legelső pillanatban Prince:
FF: jobbra; 00: balra.
Ezt három 00 bájt követi, majd a 7. bájt tartalmazza a végső állapotot, hogy merre néz Prince az induláskor: szintén FF a jobbra és 00 a balra. Gyakori ugyanis, hogy a szint kezdetén Prince "fordul egyet". Bizonyos szinteknél azonban a prince.exe némileg felülbírálja ezt, például az 1-es szinten mindenképp esik Prince, hasonlóan a 7-es szinten is.
A LEVELS.DAT eleje és vége
A levels.dat fájlban a "nulladik" szint 2304 bájtja előtt 6 bájt van. [ 25 90 00 00 82 00 ] Az első kettő (25 90) az utolsó pálya utáni részre hivatkozik, e két bájt felcserélve a levels.dat végső részének elejét (hex. 9025) adja meg. Ezt két 00 bájt követi, majd a 82 a végső rész hosszát adja meg hexadecimálisan. Ezután még egy 00 van, majd kezdődnek a szintek.
A levels.dat végén, a kód szint után találjuk annak meghatározását, hogy az egyes szintek hol találhatók a fájlban. A szintet leíró 2304 bájt első bájtjának hexa címére kell két bájtban hivatkozni, ez esetben is felcserélve a két bájtot. Összesen 16 pálya van. A "nulladik" a bemutató szint, ezt követik a normál pályák. A 13. (hexa D) a level 12 második része, a 14. az utolsó szint és a 15. a kód szint. Az utolsó bájtok tehát:
szint 2.b. 1.bájt
02 10 00
D0 07 06 00 00 00 01 09
D1 07 08 09 00 00 01 09
D2 07 0A 12 00 00 01 09
D3 07 0C 1B 00 00 01 09
D4 07 0E 24 00 00 01 09
D5 07 10 2D 00 00 01 09
D6 07 12 36 00 00 01 09
D7 07 14 3F 00 00 01 09
D8 07 16 48 00 00 01 09
D9 07 18 51 00 00 01 09
DA 07 1A 5A 00 00 01 09
DB 07 1C 63 00 00 01 09
DC 07 1E 6C 00 00 01 09
DD 07 20 75 00 00 01 09
DE 07 22 7E 00 00 01 09
DF 07 24 87 00 00 00 09