Operation Flashpoint -editointiopas, osa 2

Lipunryöstö

Viime kerralla käytiin läpi perusteet ja tehtiin yksinpelitehtävä. Tällä kerralla opetellaan miten tehdään moninpelitehtävä.

Oppaassa oletetaan että editorin perusasiat, kuten yksiköiden lisääminen on jo hallussa, joten kaikkea ei selvitetä perusteita myöten.

Lipunryöstöä varten tarvitaan vähän tavallisesta tehtävästä poikkeavia asioita.

- Kaksi lippua.

- Pelin aloittava triggeri.

- Pisteytysjärjestelmä, joka antaa yhden pisteen vihollisen lipun ryöstäneen ja sen omaan tukikohtaan vieneen tiimin jokaisella jäsenelle.

- Triggerit, jotka päättävät tehtävän kun joko aika- tai pisteraja on täyttynyt.

- Molempien lippujen tilaa seuraavat triggerit.

Karttana käytetään edellisestä oppaasta tuttua Everonia, mutta tällä kertaa Saint Philippen kaupungin ympäristöä.

Ennen mitään muuta pitää tehtävällä antaa muutamia määritelmiä. Luo niitä varten tehtävän hakemistoon Notepadilla tiedosto description.ext. Sisältö näyttää seuraavalta:

respawn=3

respawndelay=30

onLoadMission="Pelit harjoitus 2 - Capture the Flag"

titleParam1 = "Time:";

valuesParam1[] = {10000, 300, 600, 900, 1200, 1500, 1800, 2700, 3600, 7200};

defValueParam1 = 1800;

textsParam1[] = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "45 min", "1 hour", "2 hours"};

titleParam2 = "Score to win:";

valuesParam2[] = {10000, 5, 7, 10, 15, 20, 25, 30};

defValueParam2 = 5;

textsParam2[] = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};

};

Respawn=3 määrittelee, että pelaaja herää henkiin ennalta määrättyyn paikkaan ja respawndelay=30 laittaa heräämisen viiveeksi kolmekymmentä sekuntia.

OnLoadMission="Pelit harjoitus 2 - Capture the Flag" on teksti, joka näkyy ruudulla kun tehtävää ladataan.

Seuraavat rivit säätävät aika- ja pisterajat.

titleParam1 = "Time:"; kertoo hostille ensimmäiseksi muuttujaksi ajan.

Seuraavat rivit antavat valittavat aikarajat sekunneissa, niiden oletusarvon sekä selkokieliset tekstit, jossa aikarajat näkyvät minuutteina.

valuesParam1[] = {10000, 300, 600, 900, 1200, 1500, 1800, 2700, 3600, 7200};

defValueParam1 = 1800;

textsParam1[] = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "45 min", "1 hour", "2 hours"};

Samat asiat pisteille, joilla peli päättyy tehdään seuraavasti:

titleParam2 = "Score to win:";

valuesParam2[] = {10000, 5, 7, 10, 15, 20, 25, 30};

defValueParam2 = 5;

textsParam2[] = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};

Viimeinen rivi }; päättää tiedoston.

Tallenna tiedosto ja varmista, ettei notepad anna sille .txt-päätettä.

Description.ext-tiedostossa voi myös antaa pelille mahdolliset uudet, itse tehdyt äänet sekä muita pelin lisäherkkuja. Eri osiot on jaettu luokkiin, jotka täytyy laittaa tiedostoon tietyssä järjetyksessä. Tässä tehtävässä emme kuitenkaan lisää uusia ääniä, vaan keskitymme olennaiseen. Tarkka selostus description.ext-tiedoston sisällöstä löytyy pelit.fi:n tiedostoalueilta Flashpointin Open Source Guidesta (OpenSourceGuide.zip).

Seuraavaksi luodaan liput ja sijoitetaan ne oikeille paikoille.

NATO-tiimille hyvä lipun paikka löytyy Saint Philippen kylästä koordinaatista DG16.

Side: Empty

Class: Objects

Unit: Flag

Name: FlagW

Init: this setflagtexture "usa--vlajka.pac"; this setflagside west

Viimeinen rivi laittaa lipputankoon NATO:n lipun ja kertoo, että NATO-tiimi omistaa lipun.

Neukkujen lippu laitetaan bensa-asemalla koordinaatissa EB22.

Name: FlagE

Init: this setflagtexture "rus--vlajka.pac"; this setflagside east

Muut arvot ovat samat NATO-lipun kanssa.

Seuraavaksi tehdään pelin pisteytyksen ja lippujen statuksen lähtötilanteeseen palauttava triggeri.

Axis a: 0

Axis b: 0

Text: Init

Condition: true

On Activation: WScore=0; EScore=0; ownerW=objnull; ownerE=objnull; WFlagTaken=false; EFlagTaken=false; TimeEnd=0

Viimeinen rivi palauttaa kaikki muuttujat alkuun, varmistaa, ettei kukaan kanna lippuja ja laittaa pisteet nollille. Init-triggeri ajetaan aina heti tehtävän alussa.

Pisteytys

Pisteiden jakelu rakennetaan sarjalla triggereitä. Hyvä paikka niille on karkeasti kentän keskellä, eli lippupaikkojen puolessa välissä.

Trigger 1: Länsi ryöstää lipun

Axis a: 0

Axis b: 0

Set to Repeatedly

Text: FlagscoreW

Condition: (ownerE in list FlagSwitchW) and not WflagTaken

On activation: Flagcarrier=ownerE; ownerE=objNull; FlagE setFlagOwner objNull; WScore = WScore + 1; titletext[format ["Piste NATO:llenScore : NATO %1 - Neukut %2", WScore, EScore], "Plain down"]; EFlagTaken=false; "--x addScore 5" forEach units group Flagcarrier

Effects: Sounds: Anonymous: Russian: American Evils

Set to Repeatedly tarkkailee triggerin tilaa jatkuvasti.

Condition-rivi aktivoi triggerin vain, jos neukkujen lipunkantaja on tuonut lippunsa takaisin tälle alueelle ja jos kukaan ei kanna NATO-lippua.

On Activation -rivi tarkoittaa kirjaimellisen suomennoksena karkeasti, että neukkujen lipun kantajasta tehdään pelin logiikan mielestä "lipunkantaja", jota käytetään pisteytyksessä. Neukkulipun kantajaa ei enää ole. Neukkulippu ei ole kenenkään hallussa. NATO:lle annetaan yksi piste. Näytetään viesti "Piste NATO:lle" ja seuraavalla rivillä "Score: NATO 1 - Soviet 0". Neukkulippu ei ole enää ryöstetty. Kaikki lipunryöstäjän tiimissä saavat viisi pistettä, jotka näkyvät pelin loppuessa.

Yksinkertaistettuna rivi lisää NATO:lle pisteet lipunryöstöstä ja näyttää pistetilanteen kaikille.

Effects-osassa soitetaan aiheeseen sopiva ääni.

Trigger 2: Neukut ryöstävät lipun

Axis a: 0

Axis b: 0

Set to Repeatedly

Text: FlagscoreE

Condition: (ownerW in list FlagSwitchE) and not EflagTaken

On Activation: Flagcarrier=ownerW; ownerW=objNull; FlagW setFlagOwner objNull; EScore = EScore + 1; titletext[format ["One point for SovietnScore : NATO %1 - Soviet %2", WScore, EScore], "Plain down"]; WFlagTaken=false; "--x addScore 5" forEach units group Flagcarrier

Effects: Sounds: Anonymous: Bastards 1

Kakkostriggeri tutkii samanlaisilla komennoilla NATO-lipun statuksen ja jakaa tarvittaessa pisteet neukkutiimille.

Trigger 3: Pisteet radiolla

Axis a: 0

Axis b: 0

Activation: Radio Alpha

Set to Repeatedly

Text: Score

Condition: this

On Activation: titletext[format ["Score : NATO %1 - Soviet %2", WScore, EScore], "Plain down"]

Kolmostriggerin tehtävä on näyttää pistetilanne Alpha-radiokutsulla (radiovalikosta 0-0-1).

Trigger 4: Sijoitetaan NATO-lipun päälle

Axis a: 10

Axis b: 10

Activation: West

Set to Repeatedly

Text: West Flag Switch

Name: FlagSwitchW

Condition: this

Triggeri aktivoituu, jos yksikään NATO:n pelaaja on sen alueella. Triggeriä käytetään muuttujana toisessa triggerissä.

Trigger 5: Sijoitetaan neukkulipun päälle

Axis a: 10

Axis b: 10

Activation: East

Set to Repeatedly

Text: East Flag Switch

Name: FlagSwitchE

Condition: this

Trigger 6: NATO-lipun palautus

Axis a: 0

Axis b: 0

Set to Repeatedly

Text: NATO-lippu palautettu

Condition: (isnull flagowner flagW) and WflagTaken

On Activation: WFlagTaken = false; titletext["NATO:n lippu palautettu","Plain down"]

Kutostriggeri aktivoituu, jos NATO-lippu ei ole kellään mukana, mutta se ei myöskään ole omalla paikallaan.

Trigger 7: Neukkulipun palautus

Axis a: 0

Axis b: 0

Set to Repeatedly

Text: Neukkulippu palautettu

Condition: (isnull flagowner flagE) and EflagTaken

On Activation: EFlagTaken = false; titletext["Neukkulippu palautettu","Plain down"]

Seitsemäs triggeri aktivoituu, jos NATO-lippu ei ole kellään mukana, mutta se ei myöskään ole omalla paikallaan.

Trigger 8: NATO-lippu ryöstetty

Axis a: 0

Axis b: 0

Set to Repeatedly

Text: NATO-lippu ryostetty

Condition: (not isnull flagowner FlagW) and flagowner FlagW != ownerW

On Activation: ownerW = flagowner FlagW; titletext[format ["%1 vei NATO:n lipun", name ownerW], "Plain down"]; WFlagTaken=true

Kasitriggeri aktivoituu vain, jos NATO-lippu on omalla paikallaan, eikä kukaan kanna sitä.

Trigger 9: Neukkulippu ryöstetty

Axis a: 0

Axis b: 0

Set to Repeatedly

Text: Neukkulippu ryostetty

Condition: (not isnull flagowner FlagE) and flagowner FlagE != ownerE

On Activation: ownerE = flagowner FlagE; titletext[format ["%1 vei neukkulipun", name ownerE], "Plain down"]; EFlagTaken=true

Lopetustriggerit

Seuraavat triggerit seuraavat aika- ja pisterajojen täyttymistä.

Trigger 10: Kahden minuutin varoitus

Axis a: 0

Axis b: 0

Text: Time1

Condition: (Param1<10000) and (Param1>=120) and ((Param1-time)<=120)

On Activation: hint"aikaa jaljella 2 minuuttia"

Condition-rivi tutkii minkä verran aikaa on jäljellä. Se aktivoituu vain, jos aikarajaksi on laitettu joku muu kuin ääretön ja aikaa on jäljellä annettu aikaraja vähennettynä kuluneesta ajasta plus 120 sekuntia.

Activation-rivi varoittaa ruudulla, että aikaa on jäljellä vain kaksi minuuttia.

Trigger 11: Viiden minuutin varoitus

Axis a: 0

Axis b: 0

Text: Time2

Condition: (Param1<10000) and (Param1>=300) and ((Param1-time)<=300)

On Activation: hint"aikaa jaljella 5 minuuttia"

Trigger 12: Kymmenen minuutin

Axis a: 0

Axis b: 0

Text: Time3

Condition: (Param1<10000) and (Param1>=620) and ((Param1-time)<=600)

On Activation: hint"aikaa jaljella 10 minuuttia"

Trigger 13: Kahdenkymmenen minuutin varoitus

Axis a: 0

Axis b: 0

Text: Time4

Condition: (Param1<10000) and (Param1>=1200) and ((Param1-time)<=1200)

On Activation: hint"aikaa jaljella 20 minuuttia"

Trigger 14: Puolen tunnin varoitus

Axis a: 0

Axis b: 0

Text: Time5

Condition: (Param1<10000) and (Param1>=1800) and ((Param1-time)<=1800)

On Activation: hint"aikaa jaljella 30 minuuttia"

Trigger 15: Tunnin varoitus

Axis a: 0

Axis b: 0

Text: Time6

Condition: (Param1<10000) and (Param1>=3600) and ((Param1-time)<=3600)

On Activation: hint"aikaa jaljella 60 minuuttia"

Trigger 16: Lopetus 1

Axis a: 0

Axis b: 0

Type: End#1

Text: Lopetus ja Outro.sqs

Condition: TrueEnd

On Activation: ForceEnd

Ensimmäinen lopetus laukeaa kun muuttuja TrueEnd on voimassa. ForceEnd lopettaa tehtävän välittömästi.

Trigger 17: Lopetus ajan tai pisteiden takia

Axis a: 0

Axis b: 0

Text: Aika tai pisteet

Condition: (param1<10000 and ((time >= param1) or (TimeEnd >= param1))) or (param2<10000 and ((WScore>=param2) or (EScore>=param2)))

On Activation: TimeEnd=time; publicVariable "TimeEnd"; titletext[format ["Tehtava ohinPisteet : NATO %1 - Neukut %2", WScore, EScore], "Plain"]; player exec "Outro.sqs"

Condition-rivi tutkii täyttyikö piste- tai aikaraja.

Activation-rivi tutkii muuttujan TimeEnd-tilanteen, näyttää loppupisteet ja ajaa skriptin Outro.sqs.

Henkiin heränneet

Koska laitoimme alussa pelaajat heräämään henkiin ennalta määrätyistä paikoista, täytyy myös luoda sopivat paikat.

Aloituspaikat kannattaa laittaa sopivan matkan päähän lipuista, mutta kuitenkin niin etäälle, että kuoleman jälkeen ei synny heti lipun läheisyyteen ja ettei aloituspaikasta ole näköetäisyyttä lipulle.

NATO lähtee talojen luota Saint Philipen pohjoispuolella, koordinaatti DG-13.

Luodaan paikalle markeri.

Name: Respawn—west

Set to Ellipse

Color. Green

Fill: Grid Diagonal

Axis a: 20

Axis b: 20

Markerin nimen kanssa on syytä olla tarkkana. Peli määrittelee paikan, jossa pelaajat heräävät henkiin markerin nimen mukaan. Vaihtoehtoja ovat:

Respawn_west: NATO

Respawn_east: Neukut

Respawn_guerilla: Vastarinta

Respawn_civ: Siviilit

Neukkujen lähtöpaikka on mestän laita koordinaatissa EA24. Luodaan sinnekin markeri.

Name: Respawn_east

Set to Ellipse

Color: Red

Fill: Grid Diagonal

Axis a: 20

Axis b: 20

NATO-puolen markerin lähelle luodaan seitsemän sotilaan ryhmä.

Officer

Machine Gunner

Sniper

Soldier

2xLAW Soldier

Engineer

Kaikille laitetaan seuraavat arvot:

Control: playable

Init: GroupW = group this

Upseerille laitetaan muita korkeampi sotilasarvo. Muilla asetuksilla ei merkitystä. Tarkista että kaikki kuuluvat samaan ryhmään.

Neukkuryhmä tehdään samalla tavalla.

Officer

Machine Gunner

Sniper

Soldier

2xRPG Soldier

Engineer

Arvot:

Control: playable

Init: GroupE = group this

Molemmille ryhmille luodaan kolme Trabantia ja yksi PV3S Civil -kuorma-auto. Kaikki tyhjinä. Arvoiksi laitetaan

Side: Empty

Class: Car

Vehicle Lock: Default

Lisäksi kannattaa luoda molempiin aloituspaikkoihin muutama erilainen ammo crate. Niiden luominen ja aseiden lisääminen niihen käsiteltiin editointioppaan ekassa osassa.

Tehtävän testauksen aikana kannattaa laittaa yhden sotilaan Control-kohtaan "player", jolloin yksiköiden tarkkaa sijoitusta ja tehtävän toimintaa voi kokeilla. Samalla säästyy editorin jatkuvalta herjaamiselta siitä ettei tehtävässä ole pelaajaa.

Ruudussa EA 18 on tukikohta, jonne sijoitetaan kaksi T-55-tankkia ja kaksi Vulcan IT -vaunua. Nämäkin kaikki tyhjinä. Tehtävässä ei ole ilmavoimia, mutta Vulcan on uusi yksikkö, jota on mukava kokeilla. Tukikohta on karkeasti puolessa välissä ja sen idea on saada tiimit kisaamaan siitä kumpi saa ensin raskasta kalustoa käyttöönsä.

Samalla tukikohdan ympärille kehkeytyy heti toimintaa matsin alussa. T-55 ja Vulcan ovat vain esimerkkejä. Kalustoa voi laittaa kukin makunsa mukaan, mutta kannattaa välttää ripottelemasta liikaa roinaa, koska silloin herkästi lipunryöstö unohtuu ja liika kalusto hidastaa peliä kohtuuttomasti.

Näillekin laitetaan arvoiksi:

Side: Empty

Class: Armored

Vehicle Lock: Default

Waypointit AI-sotilaita varten

Jos tehtävää halutaan pelata yksin tietokoneen ohjaamien sotilaiden kanssa, on niille syytä luoda waypointit, koska muuten ne eivät osaa hakea lippua.

Tee molempien ryhmien komentajalle ensimmäinen waypoint noin puoleenväliin lippupaikkojen väliin seuraavilla arvoilla:

WP type: Move

Combat mode: Open fire, Engage at will

Molempien ryhmien toiset waypointit luodaan vastapuolen lipun päälle. Waypointin tarkoitus on käskeä tietokonepelaajan ryöstämään lippu.

NATO-ryhmän ryöstö-waypoint:

WP type: Move

Description: Ota lippu

Condition: (local this) and this != player and (this distance FlagE < 6)

On Activation: this action ["TAKE FLAG", FlagE]

Set to Show in Cadet mode

Condition-rivi tutkii onko tietokoneen pelaaja riittävän lähellä lippua. Aktivointirivi käskee ottamaan lipun. Distance-käskyllä voi mitata kahden paikan välistä etäisyyttä ja action-käskyllä voi suorittaa erilaisia toimintoja, kuten tässä tapauksessa lipun nappaamisen. Show in Cadet mode laittaa waypointit näkymään vain, jos pelaa cadet-vaikeusasteella.

Neukkujen ryöstö-waypoint on melkein samanlainen.

WP type: Move

Description: Ota lippu

Condition: (local this) and this != player and (this distance FlagW < 6)

On Activation: this action ["TAKE FLAG", FlagW]

Set to Show in Cadet mode

Molempien puolten kolmas waypoint on tavallista MOVE-tyyppiä ja se laitetaan tismalleen oman lipputangon kohdalle. Neljännet waypointit laitetaan taas kentän puoleenväliin ekojen waypointien viereen ja annetaan tyypiksi "CYCLE", jolloin pelaajat ryöstelevät iloisina lippuja hamaan loppuun asti.

Tee vielä markerit molempien lippupaikkojen päälle.

NATO-lipulle:

Name: FlagWest

Icon: Flag

Color: Green

Text: NATO-lippu

Neukkulipulle:

Name: FlagEast

Icon: Flag

Color: Red

Text: Neukkulippu

Briefingien tekeminen neuvotaan jutun loppuosassa. Voit käyttää tätä tehtävää harjoitustyönä, joten jätän tekstit ja selitykset muuten auki, mutta markereiden nimien kanssa kannattaa olla tarkkana:

NATO-lippu

Neukkulippu

Intro ja outro

Pelin alkuun ja loppuun tehdään hyvin yksinkertaiset kamerakikat.

Luo Notepadilla tekstitiedosto init.sqs ja tee sen sisälle vain yksi rivi:

titleCut ["","BLACK IN", 3]

Rivi tekee yksinkertaisen feidauksen pelin alkuun.

Outro.sqs pyöräytetään pelin lopussa. Tee sekin Notepadilla ja muista jälleen kerran tarkistaa ettei Windows tee turhia .txt-päätteitä.

enableRadio false

_camera = "camera" camCreate [1300.443237,5970.769540,10]

_camera cameraEffect ["internal","back"]

_camera camSetTarget FlagW

_camera camSetFOV 0.700

_camera camCommit 0

@camCommitted _camera

~5

TrueEnd=true

~2

player cameraEffect ["terminate","back"]

camDestroy _camera

Outrossa luodaan eräänlainen virtuaalikamera ja ohjataan sitä. EnableRadio false poistaa häiritsevät radiopölinät. --camera -rivit luovat kameran, määrittelevät kuvakulman oletusarvoon "internal ja back", laittavat kohteeksi NATO-lipun, laittavat kameran näkökentäksi 0.70, mikä on samalla kameran oletusarvo. CamCommit ja @camCommitted --camera kertovat miten pehmeästi kuvakulmasta toiseen siirrytään. ~5 luo viiden sekunnin viiveen. TrueEnd lopettaa Outron. Kaksi viimeistä riviä poistavat kameran.

Kameroilla ja efekteillä voisi kikkailla loputtomiin, mutta niistäkin saa listätietoa pelit.fi:n tiedostoalueilta löytyvistä oppaista. Parhaiten opeilee kikkailemalla ja kokeilemalla.

Kun kaikki on valmista, anna vielä tehtävällä säätila ja vuorokaudenaika oikeasta yläkulmasta. Tehtävä tallennetaan lopuksi valitsemalla "Save" ja "Export to multiplayer missions".

Kun lipunryöstön runko on kertaalteen tehty, sitä voi käyttää myös monenlaisten muunnelmien tekemiseen. Esimerkiksi lassoamalla hiirellä kaikki kartalla näkyvät yksiköt, markerit, triggerit ja muut sekä käyttämällä normaaleita leikkaa-, kopioi- ja liitä-näppäimiä (CTRL-X, CTRL-C, CTRL-V) voi kaiken siirtää uuteen paikkaan tai vaikka vaihtaa karttaa välissä ja liittää roinat sinne. Yksiköiden määrää, tyyppiä ja muita voi myös muutella suhteellisen vapaasti. Pitäkää kimppakivaa.

Valtaosa oppaan koodista on kylmäverisesti nyysitty osoitteesta www.3dactionplanet.com/flashpoint.

Lisää aiheesta