Instanssit

Eri objektien instanssit ovat pelin perusyksiköitä. Pelin aikana voit muuttaa monia näiden ominaisuuksia. Voit myös luoda uusia instansseja ja tuhota niitä. Aiemmin mainittujen liikemuuttujien ja myöhemmin mainittavien piirtämismuutttujien lisäksi jokaisella instanssilla on myös seuraavat muuttujat:

object_index* Objektin, jonka instanssi nykyinen instanssi on, indeksi. Tätä muuttujaa ei voi muuttaa.
id* Instanssin uniikki tunnisteluku (>= 100000). (Huomaa, että huoneita suunnitellessa hiiren alla olevan instanssin id-arvo näytetään ikkunan tilarivissä.)
mask_index Kuvan, jota käytetään törmäysmaskina, indeksi. Anna tälle muuttujalle arvoksi -1, jolloin siitä tulee sama kuin sprite_index.
solid Ilmoittaa, onko instanssi kiinteä. Tätä voidaan muuttaa pelin aikana.
persistent Ilmoittaa, onko instanssi pysyvä, jolloin se ilmestyy aina seuraavaan huoneeseen sinne siirryttäessä. Voit usein haluta kytkeä pysyvyyden pois päältä (esimerkiksi, kun haluat palata ensimmäiseen huoneeseen).

Instanssien käsittelyssä on yksi ongelma. Yksittäisten instanssien määritteleminen ei nimittäin ole niin helppoa. Niillä ei ole nimiä. Kun jonkin objektin instansseja on vain yksi, voit käyttää objektin nimeä, mutta muutoin sinun tarvitsee selvittää instanssin id. Tämä on siis instanssin uniikki tunnisteluku. Voit käyttää sitä with-lauseissa ja objektin tunnisteena. Onneksi on muutamia muuttujia ja keinoja, jotka helpottavat instanssien id-arvojen löytämistä.

instance_count* Huoneessa silloisella hetkellä olevien instanssien lukumäärä.
instance_id[0..n-1]* Tietyn instanssin id-arvo. Tässä n tarkoittaa instanssin numeroa.

Huomaa, että instanssien asettaminen instanssien id-arvoihin muuttuu koko ajan, joten et voi käyttää edellisten askelten arvoja. Oletetaan esimerkiksi, että jokaisella yksiköllä pelissäsi on tietty voima ja haluat löytää vahvimman. Voit silloin käyttää seuraavaa koodia:

{
  maxid = -1;
  maxpower = 0;
  for (i=0; i<instance_count; i+=1)
  {
    iii = instance_id[i];
    if (iii.object_index == unit)
    {
      if (iii.power > maxpower)
        {maxid = iii; maxpower = iii.power;}
    }
  }
}

Silmukan jälkeen maxid sisältää yksikön, jolla on suurin voima, id-arvon. (Älä tuhoa instansseja tällaisen silmukan aikana, koska ne poistetaan automaattisesti taulukosta ja tällöin alat ohittamaan instansseja.)

instance_find(obj,n) Palauttaa (n+1):nnen obj-tyypin instanssin id-arvon. obj voi olla objekti tai avainsana all. Jos sitä ei ole olemassa, funktio palauttaa erikoisobjektin noone. Huomaa, että instanssien asettamisjärjestys tähän vaihtuu joka askeleella, joten et voi käyttää edellisten askelten arvoja.
instance_exists(obj) Ilmoittaa, onko obj-tyypin instanssia olemassa. obj voi olla objekti, instanssin id-arvo tai avainsana all.
instance_number(obj) Palauttaa obj-tyypin instanssien lukumäärän. obj voi olla objekti tai avainsana all.
instance_position(x,y,obj) Palauttaa instanssin, joka on tyyppiä obj ja on sijainnissa (x,y), id-arvon. Kun sijainnissa on monta instanssia, ensimmäisen id palautetaan. obj voi olla objekti tai avainsana all. Jos objektia ei ole sijainnissa, funktio palauttaa erikoisobjektin noone.
instance_nearest(x,y,obj) Palauttaa instanssin, joka on tyyppiä obj ja on lähinnä sijaintia (x,y), id-arvon. obj voi olla objekti tai avainsana all.
instance_furthest(x,y,obj) Palauttaa instanssin, joka on tyyppiä obj ja on kauimpana sijainnista (x,y), id-arvon. obj voi olla objekti tai avainsana all.
instance_place(x,y,obj) Palauttaa instanssin, jonka nykyinen instanssi sijaintiin (x,y) sijoitettaessa tapaisi, id-arvon. obj voi olla objekti tai avainsana all. Jos sopivaa objektia ei ole olemassa, funktio palauttaa erikoisobjektin noone.

Seuraavilla funktioilla voidaan luoda ja tuhota instansseja.

instance_create(x,y,obj) Luo objektin obj instanssin sijaintiin (x,y). Funktio palauttaa uuden instanssin id-arvon.
instance_copy(performevent) Luo kopion nykyisestä instanssista. Argumentti ilmoittaa, suoritetaanko kopiolle luomistapahtuma (Create). Funktio palauttaa uuden kopion id-arvon.
instance_destroy() Tuhoaa nykyisen instanssin.
instance_change(obj,perf) Muuttaa instanssin objektin obj instanssiksi. perf ilmoittaa, suoritetaanko tuhoamis- (Destroy) ja luomistapahtumat (Create).
position_destroy(x,y) Tuhoaa kaikki instanssit, joiden kuva koskee pistettä (x,y).
position_change(x,y,obj,perf) Muuttaa kaikki sijainnissa (x,y) olevat instanssit objektin obj instansseiksi. perf ilmoittaa, suoritetaanko tuhoamis- ja luomistapahtumat.