Teeme ise RTSi 4.osa
Nii. Meil on juba päris kõva tükk tööd tehtud, oleks aeg oma mootorit pisut korrastada.


1. Teeme kõigepealt kindlaks, kes kuhu liigub.

Võta ette oma palli DRAW event.



Siin on meil juba natuke koodi olemas. Lisame selle koodi ETTE need read:

draw_set_color(c_lime);
draw_line(x,y,minex,miney);
draw_rectangle(minex-1,miney-1,minex+1,miney+1);

Ehk siis joonistame joone sihtpunktini ja sihtpunkti 3x3 suurusega ruudukese.
Nüüd näeb asi palju arusaadavam välja:



Päris kena, eksole. Täpselt nagu Red Alert 2-s või C&C: Tiberian Sun'is.

2. Segadus valimisega? Pole probleemi.

Praegu saame klõpsuga valida üksikut palli. Ja kasti tehes lisada veel palle.
See ei ole kuigi otstarbekas.

Seepärast võta lahti oma script "tee_kast" ja kirjuta kogu olemasoleva koodi ETTE:

with (pall)
 vali = 0;

See peaks juba olema tuttav kood eelmistest osadest: ta käib kõik pallid läbi ja teeb mittevalituks.

Nüüd, kastiviisi valides, valib AINULT need pallid, mis kasti sisse jäid.
Ja kui meil on palle valitud, saame suvalisse kohta vasaku nupuga klõpsides pallid mittevalida.
Suvalisse, kus pole parajasti palli, loomulikult.

Hämmastav, kui palju saab tehtud nii vähese koodiga...

3. Nüüd on aeg hakata pallidest tegema tõsisemaid asju: üksusi.

Selleks on aga vaja teada, mis mänguga tuleb tegu. Meie näite tarvis otsustasin, et teeme pealtvaates
RTSi, WarCraft 1 moodi. Unititeks inimesed, katapuldid ja muu taoline,  majadeks talud, kasarmud...
Esimene üksus saab olema mõõgamees.  Tema puhul on tähtsad kaks asja: ta võitleb lähedalt ja
saab ennast kaitsta kilbiga.

Teeme uue SCRIPTI, nimega "tee_yksus".

See script tuleb karmimat sorti - argumentidega.
Ja hakkame scripti ritta panema muutujaid, mis meie üksusi iseloomustavad...

if  (argument0 = "mõõgamees")
{
nimi = "Mõõgamees";
elu = 100;
rynnak = 6;
kaitse = 3;
kogemus = 0;
tyyp = 1;
rynnatakse = 0;
valve = 100;
vaenlane = 0;
kiirus = 1;
kaitsev = 50;
}


Otsustasin teha suht keerulise süsteemi, kus mõõgamehel on olemas ka kilp ja võimalus end sellega kaitsta.
Seletan lahti oma muutujad:

- põhilised muutujad:

nimi - üksuse nimetus. Seda saame hiljem mängus kasutada. Kuna muutuja väärtuseks on TEKST, tuleb panna jutumärkidesse.
elu - mehe tervis. Kui langeb 0-ni, mees sureb.
rynnak - löögitugevus mõõgaga.  Seda muutujat saame hiljem parandada, tehes näiteks mingi maja kust saab parema
               mõõga ja muuta mees nii tugevamaks.
kaitse  - mehe kilbi tugevus. 
kogemus - Samuti suht huvitav muutuja. Selle abil saame kaua elus püsinud üksused teha "algajatest" paremaks. 
tyyp - määrab kas mees on lähivõitleja või laskur. Väärtus 2 on siis laskuri jaoks.
rynnatakse - määrab ära kas keegi kipub selle üksuse elu kallale hetkel või ei. Et siis vastu rünnata kui vaja.

- erilised muutujad

valve - määrab ära, kui kaugele mees näeb, pikslites. Kui keegi tuleb temast määratud kaugusele, asub käsku ootamata ründele.
vaenlane - kui mees kedagi ründab, saab ta sellest muutujast teada, keda rünnata. Väga tähtis värk, aga sellest hiljem.
kiirus - mehe kõndimise kiirus. Mõõga ja kilbiga mees on raske ja aeglane, aga teised üksused võivad tulla kiiremad.

- supererilised muutujad

kaitsev - võimalus protsentides ennast mõõgaga kaitsta. Võib-olla teeme süsteemi, kus kogenum sõjamees kaitseb ennast tihedamini.

Nüüd ei jää muud üle, kui oma esimest pallist teha mõõgamees. Selleks ava CREATE event ja kood, mis me sinna panime:



Ja kirjuta, ükskõik kuhu

tee_yksus("mõõgamees");

Nagu näed, andsime siin scriptile ka argumendi. Ja mis juhtus? GM käivitas scripti tingimusel, et argument0 väärtuseks on "mõõgamees".

Nüüd, scripti sisu kontrollides, täidab ta vaid neid käske, mis on antud tingimusel, et argument0  = "mõõgamees".
Seda, kui hästi see töötab, näed pärast ise.

4. Nüüd aga natuke joonistamist - meie mõõgamees ei saa enam olla miski mõttetu pall!
Eeldusel, et sul on GM 6.1 ja registreeritud (see on tähtis!), võid teha valmis mehele sprite, kus ta kõnnib.

Mina tegin sellise:



Hea lihtne animeerida. Tähele tuleks panna, et see on kõndimise animatsioon ja suunaga paremale.
Nii tee oma pilt ka. Nimeks panin talle s_m66k_k

s siis nagu sprite
m66k nagu mõõgamees (game maker ei tunnista täpitähti)
ja k nagu "kõnnib".

ÄRA UNUSTA ka nihutada sprite algpunkt sprite keskele - vt. teise osa viimast punkti.

5. On aeg teha pallist mees.

Võta lahti oma tee_yksus  script ja täiusta mõõgamehe tegemise koodi uue muutujuga:
(kirjuta kuhugi nurksulgude vahele)

tavaline = s_m66k_k

ja animeerimise tarbeks

image_speed = .3;

mis näitab ära, kui kiiresti mehe animatsioon töötab. 1 on täiskiirusel, ehk sprite editori previews kiirusel 30.  null-koma-kolm on 30% sellest, ehk sama mis kiirusel 10.
Nii on mugav  umbkaudu ära määrata, mis kiirus panna ja kuidas see mängus hakkab olema.

On kaval hoida oma spritede nimed iga objekti muutujas: nii ei pea igale objektile eraldi seletama, millised tema sprited on.
Küll aga pead võtma palli objekti ja panema tema spriteks mehe oma, niimoodi

Nüüd võtame ette palli DRAW eventi ja paneme vastava koodi. Kui meil oli seal enne kood palli joonistamiseks, peame selle ära kustutama. 
Joonte joonistamise osa võiksid siiski jätta.
Uus draw eventi kood hakkab välja nägema nüüd niimoodi:

if (vali = 1)
 draw_circle(x,y,8,1);

draw_sprite_ext((tavaline),image_single,x,y,1,1,direction,c_white,1);

See on märksa keerulisem joonistamisefunktsioon.
Esiteks, asendasime "valitud" seisundi puhul teise frame joonistamise hoopis sellega, et joonistame mehe alla rohelise ringi.

Teine käsk joonistab meile muutuja "tavaline" väärtuseks oleva sprite, selle frame, mis on muutujas image_single, kohale x ja y
mõõtmetes üks-ühele, keeratuna suunda direction, blendides valge värviga (üks mõttetumat sorti värk ) ja täiesti läbipaistmatuna.

Need oli draw_sprite_ext argumentide seletused siin reas :D
Aga nagu näed, saame seda käsku näppides teha mehe läbipaistvaks, suuremaks või väiksemaks, keerata teda teise suunda, jne, jne.

No igatahes sai suur töö ära tehtud küll seekord.

Selle osa GM6 (game maker 6.1 regatud)