Prince Of Persia
törések
Mielött elkészült volna a mapeditor, kikisérleteztük, hogyan is lehet kézzel pályát készíteni.
Ez az oldal több hónapi lelkes csapatmunka eredménye. És bár kész a pályakészítő, mégis nagyon hasznos lehet mindazoknak, akik szintén pályakészítőt szeretnének készíteni akár ehhez, akár másik játékhoz.
És persze elengedhetettlenül fontos mindenkinek, aki pályát akar készíteni a Prince Of Persia 1-hez, hiszen még sok ismeretlen rész maradt, és nem mindent lehet az editorral módosítani. Mindemellet nem árt tudni, hogyan és épülnek fel a pályát.
Jó szórakozást!
Eddigi eredményeinket letöltheted itt:
popdoc.doc (Word 6.0 27 kbyte) (utolsó módosítás: 2000. XII. 13.)
popdoc.zip (7 kbyte)
A pálya a LEVELS.DAT-ban van. Minden képernyő 3×10 egységből áll. A képernyők között nincs választóvonal.
Egy szint 2304 byte-ból áll. A szint byte-inak értéke összeadódik, és egy állandót adnak. A szint felépítése a következő:
|
Ellenőrző kód | 00-FF |
|
|
A pályaelemek (24 kép × 30 elem) | 34, 14, 01, 21, stb... |
|
|
A pályaelemek attribútuma | 00!, 01-0F, FF |
|
|
Ajtókapcsoló függvények első része | 89, 9A, stb.. |
|
|
Ismeretlen (22+215?) | 89, A9, 00, FF, stb... | |
|
Ajtókapcsoló függvények második része | 00, 20, 40, 60, 80 | |
|
Ismeretlen (22+215?) | 89, A9, 00, FF, stb... | |
|
A képernyők elrendezése | 00-18 |
|
|
Egyenlőre ismeretlen | 18, 19, 10, 11, stb... | |
|
Prince induló poziciója (kép, elem, irány) | 00-1D, FF |
|
|
Őrök elhelyezkedése a 24 képen | 00-1D, 1E, ha nincs |
|
|
Őrök iránya a 24 képen | 00-jobbra, FF-balra (jobbrább áll) | |
|
Ismeretlen* | ált. FF | |
|
Ismeretlen | 00, FF | |
|
Őrök játékereje képenként | FF, 00-0A | |
|
Ismeretlen | FF, ha * nem FF, akkor 00 | |
|
Őrök színe képenként | FF, 00-07 | |
|
Ismeretlen | 00, FF | |
|
Lezárás (néhol csak 1 byte: 09, az elötte levő részek 1 byte-al hosszabbak) | 0F 09 |
Az ellenőrző kód:
A pálya HEX számai összeadódnak (a kóddal együtt). A pálya elején lévő kódot mahinálva lehet variálni a pálya felépítését. Tehát ha valahol növeljük az értéket, akkor ezt a számot annyival kell csökkenteni. Az érték 00-FF változhat. Ez alatt v. felett túlfordúl, csak az utolsó két helyiérték számit. Az elötte levők nem.
Az egységek:
Az egységek száma 00-1E-ig terjed, majd 20-tól kezdve ismétlődik. Így a 00 megegyezik a 20, 40, 60, stb.. is. Ez némileg segíthet az ellenőrző kódban. Bizonyos egységek csak bizonyos színteken lehetnek! Ezt mindig feltüntetjül.
00 | Semmi |
01 | Járat |
02 | Járat + tüske |
03 | Oszlopos járat |
04 | Ajtó jobb oldalt |
05 | Járat, enyhén süllyesztett |
06 | Ajtó záró lap |
07 | járat, a jobb szélén faliszőnyeg (csak palota: 4, 5, 6, 10, 11) |
08 | óriás oszlop alja (csak palota: 4, 5, 6, 10, 11) |
09 | óriás oszlop teteje (csak palota: 4, 5, 6, 10, 11) |
0A | Ital |
0B | Leeső járat |
0C | semmi, a jobb szélén faliszőnyeg (csak palota: 4, 5, 6, 10, 11) |
0D | Tükör (csak a 4. pályán) |
0E | Járat + törmelék (nincs: 12, 13) |
0F | Ajtó nyitó |
10 | Nagy ajtó bal fele |
11 | Nagy ajtó jobb fele |
12 | Fogsor-csapda (nincs: 1) |
13 | Járat + fáklya |
14 | Fal |
15 | Járat + csontkupac (csak 1, 3, 7, 8, 12) |
16 | Járat + kard |
17 | járat, a háttérben "erkély" bal oldala (pl 6-os szint) (csak palota: 4, 5, 6, 10, 11) |
18 | járat, a háttérben "erkély" jobb oldala (pl 6-os szint) (csak palota: 4, 5, 6, 10, 11) |
19 | boltívtartó oszlop (csak palota: 4, 5, 6, 10, 11) |
1A | boltív törzse (csak palota: 4, 5, 6, 10, 11) |
1B | keskenyebb boltív (csak palota: 4, 5, 6, 10, 11) |
1C | szélesebb boltív bal fele (csak palota: 4, 5, 6, 10, 11) |
1D | szélesebb boltív jobb fele (csak palota: 4, 5, 6, 10, 11) |
1E | Járat + törmelék + fáklya |
1F | nincs ilyen egyik pályán sem |
Szöveges megjegyzések:
Az 1A-1D boltívek természetesen nem járatok, hanem hátterek. Kétféle boltív létezik. A boltívelemek szabadon elhelyezhetők.
A 08-09 és a 17-18 párok együttesen alkalmazandók, különben nem tudja rendesen megrajzolni a képernyőt.
A 03 oszlopos járat a palota részen két oszlopos járat, egy oszlop elöl, egy hátul van. Ezzel szemben a 19 boltívtartó egy olyan járat, amelyen egy oszlop van, ezt akkor használja a programíró, amikor felette 1A boltívtörzs van.
A faliszőnyeg amolyan vékony fal, nem tudom, hogy a róla induló boltívdarab a része-e az egységnek, valószínűleg igen.
A pályaelemek attributumai:
Na, következzen az a második réteg. Szóval itt a bizonyos elemekhez "alelemet" rendelhetünk. Legegyszerűbben a 0A (ital) elemmel mutatható be.
Ha a pályaelemeket tartalmazó 720 bájtos rész mondjuk negyedik eleme 0A, vagyis ital, akkor a 'második réteg' negyedik eleme mondja meg, hogy
milyen típusú ital. Ez persze nemcsak a megjelenítésnél számít, a hatást is ez határozza meg. A második rétegnél eszerint lehet:Ital (0A)
00 | buborék nélküli pia (hatástalan) |
01 | piros pia |
02 | piros anfóra |
03 | zöld anfóra (lassú esés) |
04 | zöld amfóra (fejtetőre állított képernyő) |
05 | kék pia |
06 | kék pia (hatástalan) |
07 | piros pia (hatástalan) |
Ezután ismétlődik. Megjegyezendő, hogy pl. a kódellenőrző szinten (amelyik az első és a második szint között van, a levels.dat-ban viszont ezt
definiálták utolsóként) is 05-ös italok vannak, mégsem hagyományosan (-1 élet) működnek.
Hasonlóan a 00 (üres) és a 01 (járat) elemhez ezek tartoznak:
00 | semmi |
01 | téglaháttér |
02 | téglaháttér #2 |
03 | ablak (01-járat esetén téglaháttér) |
A palotarészen bonyolúltabb az ügy, más helyen más jelentést kap, lehet, hogy azzal függ össze, hogy az alsó és a felső vagy pedig a középső sorban van (ahol ez eltérést okoz, ott ezt perjel jelzi): | |
00 | üres / díszcsík |
01 | díszcsík / üres |
02 | díszítés a csíkon |
03 | ablak (01-járat esetén téglaháttér) |
A fűrészfog csapda (12) attribútuma 00, ám ha ezt megváltoztatjuk, akkor álló fűrészfogakat kapunk:
00 | semmi |
01 | félzár |
02 | zár - ez az egy gyilkol! |
03 | háromnegyedrészt zárt |
04 | nyitot |
05 | háromnegyedrészt nyitott |
06, 07 | ugyan az, mint a 05 |
Ebből két érdekesség adódik:
1. talán a működés animálása az attribútum változtatásával történik
2. a csapdák 'időzítése' itt nincs definiálva
01 | induláskor nyitva |
02 | induláskor zárva |
Ajtó nyitó (0F), záró (06) kapcsoló
00-11 | a kapcsoló által meghívott függvény |
00 | működéshez kötelező attributum |
Ajtók és kapcsolók működése
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 | Az elso számhoz hozzáadódik a képelem szám, tehát például az 5. képernyo 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. |
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: | 3_ | 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.... |
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.
A képernyők elrendezése
A képernyők térképét pofonegyszerűen csinálták meg!! A képernyők ugye 30 bájtból állnak, és egy adott sorrendben követik egymást a levels.dat-ban.
Legyen az először definiált képernyő sorszáma 01, a másodiké 02, és így a 24. legyen 18 (hexában vagyunk!). Na most jön az a 96 bájt, ahol 4-4 bájt definálja egy adott képernyő szomszédait. A 4 bájt sorrendje:
Bal, jobb, fenti, lenti képernyő száma.
Vagyis az első négy bájt az elsőként definiált képernyő szomszédait írja le.
A szomszédokra a sorszámával hivatkozunk, ha nincs szomszéd egy irányba, akkor 00-t írunk.
Megfigyelhető, hogy minden képernyőnél külön definiáljuk a szomszédjait, vagyis előfordulhat, hogy Y képernyő bal oldali szomszédja X, miközben X oldal jobb oldali szomszédja nem Y.
Amelyik képernyőre semmelyik másik pályaképernyő nem mutat, azt nem látjuk a játék során, mégha az amúgy 'szomszédjának tekint' néhány látható képernyőt. [[Ugye ért valaki?]]
Természetesen szintenként újra kell definiálni ezeket a kapcsolatokat.
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.
Őrök
Az őröket képernyőhöz kötve definiáljuk. Egymás utáni 24 bájt a 24 képernyőt jelenti, illetve az ezekről induló őröket. Négy tulajdonságot definiálunk.
1. Van-e őr, és ha igen, a képernyő mely pontján?
1E, ha nincs; a hely: 00-1D-edik képelem.
2. Merre néz induláskor az őr?
Jobbra: 00; balra: FF (ez esetben eggyel jobbra áll az őr).
3. Milyen kardozási stílusa van?
00 | level1 szintű , pancser |
01, 02, 03 | level 2 szintű |
04 | plusz 1 élet a többiekéhez képest |
05 | erős, pl. Fat |
06 | erős |
07 | nem támadó |
08 | elállja az utat, de nem harcol |
09 | nagy csatázó, pl. Jaffar |
0A | még nagyobb csatázó |
0B | ez is elég csatázó (?) |
0C, 0D, 0E, 0F | ezek elég gyengék |
4. Milyen színű?
Az őrök színe 01-07-ig változik. Az FF színnel érdekes "árnyéklovagot" hozhatunk létre, sajnos azonban kiszíneződik, ha másik (színes) őrrel találkozunk útközben.
00 | totál fekete |
01 | kék |
02 | piros |
03 | sárga/narancs |
04 | zöld |
05 | kék |
06 | lila |
07 | sárga |
Az őrök életerejét nem a levels.dat fájlban határozzák meg. A prince.exe adja meg, hogy adott szinten az őröknek hány "élete" van, ehhez képest egy élettel mindig többel bír a 04-es harcstílusú őr. Az életek száma az egyes szinteken:
Level 1-2 | 3 élet (level1: guard2.dat is kell) |
Level 3 | Csontváz, végtelen élet (skel.dat) |
Level 4-5 | 4 élet, level5: +1 is (level4: guard1.dat is kell) |
Level 6 | Fat, 5 élet (fat.dat) |
Level 7-8 | 4 élet |
Level 9-11 | 5 élet, level10,11: +1 is |
Level 12 | Önmagam, 4 élet (shadow.dat) |
Level 13 (12/b) | Jaffar, 6 élet (vizier.dat) |
Level +1 | Nincs őr definiálva |
A speciális őrök (csontváz, kövér, tükörkép, jaffar) nem a levels.dat alapján szerepelnek, az egyes szintekhez a prince.exe rendeli hozzá, hogy melyik fájlból vegye az őr mintázatát, az adott szinten minden őr ilyen. A "normál" őröket a guard.dat írja le, illetve időnként ezt kiegészíti a guard1.dat és a guard2.dat.
Ahhoz, hogy kövér őrt kapj, szükséged lesz egy 00 színű FAT stílusú őrre. Ezzel már van is egy kövérkéd. Jaffarral ugyanez kell, csak Jaffar stílusban.
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:
|
|
|
|
||||
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ha bármilyen kérdésed van, azt itt teheted fel: http://index.hu/forum/forum.cgi?a=t&t=9011167&uq=40
Vissza