Ovenbird-pelin tiedostodokumetti versio 0.50 ************************************ "rooms.map" - kenttädata 24000 tavua Huoneita on 10 x 10 matriisi. Yksi huone on 20 x 12 blokkia. Huoneet on järjestetty kartalle siten, että jos halutaan siirtyä yksi rivi alemmas kartalla, täytyy karttaosoittimeen lisätä 20*10 = 200. Yksi tavu vastaa yhtä grafiikkablokkia, joita on 256 erilaista. Kartalla blokkeja on yhteensä 24000, joka on siis tarvittavan muistin koko tavuina. ********************************************** "objects.map" - kentän objektidata 48000 tavua Kaksi kertaa tiedoston "rooms.dat" koko. Kaksi tavua vastaa yhtä huoneblokkia. Kahden tavun muodostamalla sanalla määrätään, monesko objekti esiintyy kohdassa. Arvo 0 tarkoittaa, ettei kohdalla ole esinettä. Tämä määrää, monesko objekti haetaan objektilistasta. ******************************************* "objects.dat" - objektien lista 30000 tavua Köyhän miehen linkitetty lista. Yhden objektin tiedot vievät 30 tavua. Objekteja voi olla 1000 kappaletta. Muistintarve = 1000 * 30 tavua. Ensimmäinen objekti indeksillä 0 jätetään käyttämättä, jotta objektien hakeminen objektikartan perusteella olisi selkeämpää. Jos objektikartassa on arvo 1, niin silloin haetaan objekti 1. Jos objektikartassa on arvo 0, niin silloin ei haeta mitään. Esimerkkirakenne tavukohtaisesti: 0-1 = ei käytössä 2 = objektin tyyppi (0-8) 3 = tyypin arvo (0-29) (selitys alempana) 4 = tekstin järjestysnumero (0-255) 10 = pelaajan saama avain (0-16) (vihollinen voi omistaa, 0=ei mitään) 11 = pelaajan saama ase (0-10) (viholliselle määritellään tässä) 12 = mille aseellle (0-10) pelaaja saa 13 = tämän ammusmäärän (0-99) 19 = herääkö vihollinen henkiin (0=ei, muuten aika, 1=sekunti, 2=2 sek) 20 = hissin alkukohta x 21 = hissin alkukohta y 22 = hissin loppukohta x 23 = hissin loppukohta y 30-31 = ei käytössä, objekti 2:n tiedot alkavat... Obj. tyyppi | Tyypin arvo | Selitys -------------+-------------+-------- 0 null | 0 | ei objektia 1 esine | 0-29 | esineen järjestysnumero 2 vihollinen | 1 | pelaajan aloituskohta 2 vihollinen | 2-10 | vihollisen järjestysnumero 3 teksti | 0-255 | tekstin järjestysnumero 4 ovi | 0-16 | oven järjestysnumero 5 hissi | 0-16 | hissin järjestysnumero 6 energiaa | 0 | energian latauspaikka 7 kauppa | 0 | kaupan sisäänkäynti 8 lopetus | 0 | pelin lopetuskohta ***************************************** "texts.dat" - tiedotustekstit 20480 tavua Pelissä voi näytölle ilmaantua 255 erilaista tiedotustekstiä. Jos pelaaja saapuu kohtaan, johon on liitetty tiedotusteksti, niin se näytetään. Pelaajan poimiessa esineen esinedatassa oleva kuvaus näytetään, mikäli linkitetyn objektilistan tekstin arvo on 0. Jos pelaaja tappaa vihollisen, sen mahdollinen teksti näytetään. Lukitun oven avaamisyrityksessä näyttetään mahdollinen tiedotusteksti. Yksi tekstirivi vie 80 tavua. Ensimmäinen teksti indeksiarvoltaan 0 ei ole käytössä. Tiedostomuoto: 0-79 ei käytössä 80-159 = teksti 1 160- = teksti 2... ************************************ "pickups.dat" - esinedata 3000 tavua Pelissä voi olla 30 erilaista esinettä. Yhden esineen tiedot vievät 100 tavua. Koko esinedata vie 30 * 100 = 3000 tavua. Tiedoston rakenne tavukohtaisesti: 0-29 = esineen 1 nimi (30 merkkiä) 40-41 = pisteet (2 tavua, arvo välillä -32768..0..+32767) 42-43 = energia (2 tavua, -100..0..+100) 44-45 = raha (-32768..0..+32767) 80 = grafiikkablokin numero (0-58) 100-139 = esineen 2 nimi... **************************************** "enemies.dat" - vihollisdata 16000 tavua Pelissä voi olla 10 erilaista hahmoa, pelaaja ja 9 vihollista. Yhden vihollisen tiedot vievät 1000 tavua. Ensimmäiset tiedot ovat pelaajan. Pelaaja käsitetään "vihollisena". Koko vihollisdata vie 10000 tavua. Vihollisdatan rakenne tavukohtaisesti: 0-29 = vihollisen 1 nimi (30 merkkiä) 40-41 = pisteet (-32768..0..+32767) 42-43 = raha (-32768..0..+32767) 46-47 = vihollisen energia (0-100) 48-49 = vihollisen animaatioviive (0-255) 50-51 = vihollisen nopeus (0-8) 52-53 = vihollisen lyöntivoima (0-100) 54-55 = vihollisen taso (1-5) 56-57 = hypyn pituus pikseliä per frame 58-59 = hypyn korkeus pikseliä per frame 90-91 = framejen määrä (1-48) 92-93 = vihollisen leveys (8-64) pikseleinä 94-95 = vihollisen korkeus (16-64) pikseleinä 100-139 = oikealle (120-139 = action framet) 140-179 = vasemmalle 180-219 = kiipeä ylös 220-259 = kiipeä alas 260-299 = hyppy oikealle 300-339 = hyppy vasemmalle 340-379 = lyönti oikealle 380-419 = lyönti vasemmalle 420-459 = potku oikealle 460-499 = potku vasemmalle 500-539 = esineen poiminta 540-579 = kuolema 580-619 = henkiinherääminen **************************** "guns.dat" - aseet 90 tavua Pelaajalla ja vihollisilla voi olla 10 erilaista asetta. Pelaajalla on heti pelin alussa ase 1, joka käsitetään yleensä lyöntinä ja potkuna. Aseelle 1 ei voida määritellä ammusta. Aseen esittelygrafiikka ja ammukset otetaan status-kuvasta. Yhden aseen tiedot vievät 10 tavua. Asedatan rakenne: 0 = ammuksen 2 nopeus (0-16), 0 = paikallaan 1 = ammuksen kestoaika (0-255) 1/50 sekuntia, 50=1 sek 2 = ammuksen iskuvoima (0-255) 3 = seinät läpäisevä (0-ei tai 1-kyllä) 10 = ammuksen 3 nopeus... =========================================== "frames.iff" - vihollisten grafiikan kuvaus Kaikki hahmojen (pelaaja ja 9 vihollista) grafiikka on yhdessä IFF-tiedostossa, jonka leveys ja korkeus voivat vaihdella. Kuva on Old Chip Set:n eli Amigan alkuperäisen grafiikkapiirin 64:n värin EHB-tilassa. Saman hahmon kaikki framet ovat saman kokoisia. Saman hahmon framet tulevat samalle vaakatasolle. Vihollisen grafiikkojen alkukohta saadaan, kun lasketaan sitä edeltävien vihollisten korkeudet yhteen. ======= Avaimet Avaimina toimivat esineet ja viholliset. Esineen keräämällä tai vihollisen tappamalla voi saada avaimen. Nämä tapahtumat määritellään listassa, ei esine- tai vihollisdatassa. ============== Ovet ja hissit Jos pelaaja on löytänyt avaimen 1, niin hän voi avata kaikki ykkösovet. Avaaminen tapahtuu lyömällä ylälyönti. ================= Animaation kuvaus Yhteen toimintoon on varattu 20 frameosoitinta, joiden arvo voi olla välillä 0-255. Jos osoittimen arvo on 4, niin kuvadatan alun offset-arvoon lisätään vihollisen leveys (pikseleinä) * 4. Framelistaa kuljetaan eteenpäin, kunnes arvoksi tulee 255 tai ollaan kohdassa 20, jolloin lista aloitetaan alusta. Kun frameosoittimeen lisätään 20, osoitin osoittaa niin sanottuun "action frame"-listaan, joka on jokaisella toiminnolla. Eli kun oikealle liikkumiseen on varattu 40 tavua, niin 20 jälkimmäistä määrittävät ne framet 10:stä ensimmäisestä, joiden kohdalla tapahtuu toimintaa. Tässä esimerkiksi kävelyanimaatio: 0123456789 Animaatioon kuuluu 10 framea. Framejen 3 ja 7 kohdalla ---x---x-- vihollisen x-koordinaattia muutetaan. Vihollisten kuvadatan muodostuminen Jokaiselle viholliselle on varattu 48 framea (bob). vihollinen 1 = 1-48 (Pelaaja) vihollinen 2 = 49-96 vihollinen 3 = 97-144 vihollinen 4 = 145-192 vihollinen 5 = 193-240 vihollinen 6 = 241-288 vihollinen 7 = 289-336 vihollinen 8 = 337-384 vihollinen 9 = 385-432 vihollinen 10 = 433-480 ================================== Vihollisten ajonaikaiset muuttujat Pääohjelmassa on globaalisti varattu muistialue vihollisten muuttujille. Yhden vihollisen muuttujat vievät 1000 tavua. Muistia varataan 5000 tavua, joten ruudulla voi olla yhtäaikaa 5 vihollista. Pelaajan eli vihollisen numero 0 muuttujat sijaitsevat aina muistialueen alussa (tavut 0-999). Pelaaja ohitetaan joissakin vihollisrutiineissa. Osa tiedoista, kuten asetiedot, tulevat objektien tiedoista. Rakenne tavuittain: 0 = vihollisen numero (0-5, jos 0 niin listan loppu) 2-3 = x-koordinaatti 4-5 = y-koordinaatti 6-7 = frame eli bob image eli animaation kuva 8-11 = karttaosoitin (map pointer) 12-13 = action eli toiminta (100 - kävely...) 14 = action index eli toiminta-animaatioindeksi 15 = action delay eli toiminta-animaation kuvan viive 16 = target delay eli ajonaikainen muuttuja animaatioviiveeseen 20 = x-suunta (0-oikea, 1-vasen) 22 = nopeus 23 = lyöntivoima eli hitpow 24 = korkeus 25 = leveys 26 = taso 28 = jump x eli hypyn pituus pikseleinä per frame 29 = jump y 40-41 = energia 42-43 = energianlisäys tai vahinko (-32768..0..32767) 50 = onko vihollinen elossa (0-2, 0=ei,1=on,2=inaktiivinen) 52 = putoaako vihollinen (0=ei, muuten määrä, >39 vahingoittaa) 54 = herääkö vihollinen henkiin (0-ei, muuten aika) 56 = pelaajan saama avain (0-16, 0-ei avainta) 58 = pelaajan saama ase (0-10) 60 = mille aseelle (1-10) pelaaja saa 62 = tämän ammusmäärän (0-99) 70 = tekstin järjestysnumero (0-255) 72-75 = offset alkuperäiseen sijaintiin objektikartalla 80 = duration (0/1) eli kestoanimaatio kuten hyppy 82 = duration suunta 0-oikea,1-vasen,2-ylös,3-alas,4-oikyl,5-vasyl,6-oikal,7-vasal 84 = onko animaatio käyty läpi (0/1) 85 = ajonaikainen muuttuja lyönnille (0-lyönti, 1-potku) =============== Vihollisen taso Pelaajan taso osoittaa, kuinka voimakkaita iskut ovat. Laskukaava on (((taso-1)*3) + lyöntivoima). Kaikkien vihollisten potkuun lisätään tehoa 2 enemmän kuin lyöntiin. Muiden kuin pelaajan taso kertoo vihollisen taitavuuden, eli sen, mitä vihollinen voi tehdä. Ylempi taso sisältää alempien tasojen ominaisuudet. Tasot: 1 = kävely, lyöminen, lattian avaus, ei osaa varoa kuoppia (vain 1) 2 = kiipeäminen, hyppy 3 = uiminen 4 = lentäminen ====================== Blokit ja ominaisuudet Pelissä voi olla 256 erilaista grafiikkablokkia, joiden seassa objektit sijaitsevat. Blokeilla on erikoisominaisuuksia niiden järjestysnumerosta riippuen. Blokkinumerot ja ominaisuudet: 0-79 = taustagrafiikkaa, läpi liikkuminen mahdollista 80-89 = uitavia, nesteitä 90-99 = uitavia, nesteitä, jotka vahingoittavat 100-109 = läpäistäviä, vähän vahingoittavia 110-119 = läpäistäviä, pahasti vahingoittavia 120-139 = kiivettäviä, tikkaita 140-159 = hajotettavat blokit, joista ei pääse hajottamatta läpi 160-255 = läpi liikkuminen ei mahdollista ================================= Kaksoispuskuroinnin päivityslista Pelissä käytetään AMOS-kielen tarjoamaa kaksoispuskurointia. Hitauden vuoksi ei koko näyttöä voida joka ruudunpäivityksellä kopioida uudelleen, joten ajonaikainen lista kertoo, mitkä alueet tarvitsee päivittää. Alueita voi olla 256 kappaletta. Yhden alueen tiedot vievät 10 tavua, joten muistia täytyy varata 2562 tavua, kun kaksi ensimmäistä tavua ovat listan tietoja. Listan muoto: 0 = listalla olevien alueiden määrä (0=ei yhtään) 1 = listan tarkistuskerta, lista käydään läpi kaksi kertaa, jotta päivitys tulee sekä näytettävään että loogiseen ruutuun 2-3 = alku-x (listalla 0-1) 4-5 = alku-y (2-3) 6-7 = leveys pikseleinä (4-5) 8-9 = korkeus (6-7) 10-11 = käyttämätön (8-9) 12-13 = alku2-x...