Mission Editor

Digital Combat Simulator (DCS) -series: A-10C Warthog & Ka-50 Black Shark
http://www.digitalcombatsimulator.com/
juuba
Viestit: 317
Liittynyt: Ti Touko 13, 2008 14:59
Handle: Juuba
Laivue: Suomi Finland
Etunimi: Juho
Sukunimi: Järvinen
Paikkakunta: Tampere

Mission Editor

Viesti Kirjoittaja juuba » Ma Helmi 13, 2012 12:53

Moi,

Tuosta mission editorista on kuulunut monelta suunnalta kysymyksiä eri asioista..
(Ideana olisi saada lisää lennettävää, lennettävä/tehtävät loppuu kohta kesken!)

Laitelkaas konkarit ideoita ja huomioita, kikkoja ja muita tännekin!

Yallu ainakin kyseli siitä muodostelmasta joskus. Aika tiukassa muodostelmissa ajelevat noi tankit ja rekat tuolla. Galwranilla oli ainakin jotain, mitä hän oli tehnyt..
Oliko jotain "templateja", joiden avulla pysty omia muodostelmiaan käyttämään nopeasti ja kivasti.
- Juuba, Osasto Lagus
"Sometimes I Amaze even Myself."

juuba
Viestit: 317
Liittynyt: Ti Touko 13, 2008 14:59
Handle: Juuba
Laivue: Suomi Finland
Etunimi: Juho
Sukunimi: Järvinen
Paikkakunta: Tampere

Re: Mission Editor

Viesti Kirjoittaja juuba » Ma Helmi 13, 2012 13:00

Täällä:
http://forums.eagle.ru/showthread.php?t=82161
on jotain valmiita kokonaisia joukkoja, en tiedä muodostelmista.
- Juuba, Osasto Lagus
"Sometimes I Amaze even Myself."

Bushmanni
Viestit: 256
Liittynyt: To Marras 17, 2011 18:42
Etunimi: Petri
Sukunimi: Auvinen
Verkkosivu: http://

Re: Mission Editor

Viesti Kirjoittaja Bushmanni » Ma Helmi 13, 2012 18:57

Templateja voi käyttää muodostelmina kun valitsee muodostelmaksi custom ja sitten sivussa aktivoituvasta drop-down valikosta haluamansa templaten. Templaten pohjois-suunta on kulkusuunta eli sen mukaan kannattaa asetella joukot. Kun muodostelmaa vaihtaa niin yksiköillä on joku aikaraja jonka aikana niiden pitää ehtiä uuteen muotoon tai ne jää niille sijoilleen mutta kyllä sen aikarajan pitäisi sen verran iso olla jotta varmaan useammassa tapauksessa tila loppuu ennemmin kesken kuin aika. Aina kun muodostelmassa oleva joukko muuttaa suuntaa niin se pysähtyy siksi aikaa, että muoto saadaan käännettyä uuteen suuntaan.

acd
Viestit: 3
Liittynyt: Ti Marras 15, 2011 14:51
Handle: acdarc
Etunimi: Asmi
Sukunimi: Kuppila
Verkkosivu: http://

Re: Mission Editor

Viesti Kirjoittaja acd » Ti Helmi 14, 2012 11:00

Jos saa toivoa, niin missioihin olisi kiva saada niiden vaikeampien targettien lisäksi sellaista selkeää cannon fodderia mitä tällaiset aloittelevat puikkomagneetit voisivat tiputella.

Bushmanni
Viestit: 256
Liittynyt: To Marras 17, 2011 18:42
Etunimi: Petri
Sukunimi: Auvinen
Verkkosivu: http://

Re: Mission Editor

Viesti Kirjoittaja Bushmanni » Pe Helmi 24, 2012 23:04

Perus ärsytys netistä ladatuissa pelaajien itse tehdyissä tehtävissä on epäselvät briefit ja väärällä tavalla sekava tehtävän eteneminen. Taistelu on sekavaa perusluonteensa mukaan koska vastustaja tuppaa tekemään mitä lystää ja yleensä jotain mitä ei osannut ennakoida mikä sotkee omat suunnitelmat ja joudutaan improvisoimaan. Tämä on sitä oikeaa sekavuutta. Väärä sekavuus on sitä että ei pysty hahmottamaan taistelukentän tapahtumien merkitystä mistä seuraa, että millään ei ole mitään väliä. Pelaajien pitäisi saada selkoa omien ja vihollisen joukkojen päämääristä ja toimintakuvioista, omista joukoista tietenkin yksityiskohtaisemmin. Pelaajalle pitää antaa edellytykset priorisoida maaleja ja suunnata huomionsa oikeisiin asioihin taistelukentällä. Tehtävänannossa pitäisi tulla selville sekä itse tehtävä kuin myös tehtävän tarkoitus. Lisäksi pelaajan pitäisi saada jotakin selkoa tehtävän luonteesta, etenkin läpäisyn kannalta kriittisitä seikoista. Esim. jos tehtävä on pitkä ja vaatii paljon polttoainetta tai jotain tiettyjä aseita on syytä jotenkin selvästi asia tuoda esille briefissä. Ylipäätään olisi hyvä ohjeistaa pelaajaa jotenkin pelaamaan tehtävää tehtävän tekijän tarkoittamalla tavalla tai ainakin olemaan pelaamatta tyylillä joka vaikeuttaa tai helpottaa tehtävän läpäisemistä kohtuuttomasti. Hyvä brieffaus on taitoa vaativaa taidetta joten ei tarvitse masentua vaikka ei täydellistä heti ensimmäisellä yrityksellä saisikaan aikaan. Kunhan yrittää tosissaan jotta kehittyy.

Toinen brieffaukseen läheisesti liittyvä tekijä on tehtävän aikana jotenkin antaa pelaajalle palautetta siitä mitä hän on tehnyt. Eli jos pelaaja puuhastelee jotain muuta kuin mikä edistää tehtävän etenemistä tämä jotenkin ilmaistaisiin pelaajalle ennen kuin on 2h lennetty ja mitään ei ole tapahtunut.

Satunnaisuutta tehtäviin saa triggereillä kohtuullisen helposti nykyversiossa. Satunnaistamisen perusideat ovat seuraavat:
1. Mission start tyyppisellä triggerillä arvotaan flagin arvo 0-(n-1) väliltä, ruleksi random(100%) joka on siis aina totta
2. Editorissa luodaan n määrä grouppeja joiden kaikkien aktivoitumisaika laitetaan vähintään 1 päivä tehtävän alkamispäivää kauemmas.
3. Tehdään n kappaletta mission start tyyppisiä triggereitä joista jokainen aktivoi yhden groupeista sen mukaan mikä arvo satunnaisflagilla on.

Satunnaistus triggerit on helppo testata laittamalla jokaiseen aktivointitriggeriin myös joku message actionehin mukaan jolloin triggerin aktivoitumisen näkee heti tehtävää käynnistäessä. Se on tosin huomattava, että jos mission start tyyppisien triggereiden laukaisemia tekstiviestejä on useampi, vain viimeisin niistä näkyy ruudulla eli listassa alimman lauenneen triggerin viesti.

Itse teen satunnaistettavat groupit niin, että luon ensin perus groupin ja copypastella (ctrl-c ctrl-v toimii myös tehtäväeditorissa) kopsaan siitä n kappaletta versioita ja sitten muuttelen eri grouppien yksiköiden paikkoja ja tyyppejä ja ehkä määriäkin mieleni mukaan. Jos haluan satunnaistaa reittejä niin voi olla hyvä luoda reitti pohjagroupille valmiiksi jolloin sekin kopioituu groupin mukana ja työtä voi olla vähemmän. Tietekin jos reittiä joutuu niin paljon muokkaamaan, että on helpompaa tehdä se kokonaan uusiksi alusta niin ei silloin kannata monistettavalle groupille reittiä rakentaa.

Toinen tapa satunnaistamiseen on tehdä jokaiselle groupille oma satunnaisesti laukeava mission start tyyppinen triggeri. Jos esim tekee 30 groupia ja jokaiselle laittaa 33% aktivoitumistodennäköisyydeksi saa keskimäärin 10kpl yksikoitä satunnaisissa paikoissa ja taatusti uniikkeina kombinaatioina. Varjopuoli on että triggereitä saa tehdä melkoisen läjän.

Copypastella saa myös nopeasti monistettua lisää clientejä tehtäviin joilla on kaikilla samat aseet, waypointit, ym. joille tarvitsee vain nimet ja numeroinnit itse muuttaa.

Bushmanni
Viestit: 256
Liittynyt: To Marras 17, 2011 18:42
Etunimi: Petri
Sukunimi: Auvinen
Verkkosivu: http://

Re: Mission Editor

Viesti Kirjoittaja Bushmanni » Ti Helmi 28, 2012 23:21

Tässä muutamia ideoita tehtävän testauksesta. On itsellä käynyt jo sen verran monta kertaa nolosti kun oma tehtävä on moninpelitestissä jumiutunut johonkin typerään triggerilogiikka virheeseen, että tuli tässä mietittyä muutamia suunnittelu/testaus/debug menetelmiä ongelmien löytämiseksi ja korjaamiseksi sekä synnyn estämiseksi.

Ensinnäkin kannattaa tehtävä suunnitella ensin konseptina paperilla/notepadissa eikä aloittaa suoraan väsäämään ensimmäistä ideaansa. Eli merkkaa ylös mitä haluaa tehtävässä tapahtuvan ja sitten jonkinlainen suunnitelma triggereistä mitä tapahtumien aikaansaamiseksi tarvitaan. Vähänkään monimutkaisemman ja monivaiheisemman tehtävän triggerit leviävät käsittämättömäksi sekasotkuksi josta on vaikeaa saada selkoa kun joutuu lisäilemään uusia triggereitä entisten väliin ja muuttelemaan olemassa olevia. Etenkin käytössä olevien flagien numeroiden muistaminen ja mitä mikäkin flagi tekee on työlästä selvitellä jos niiden numeroinnissa ei ole mitään logiikkaa. Yksi hyvä tapa on kirjoittaa triggerissä käytettävät flagien numerot triggerin nimeen jolloin eri flagit löytyvät nopeasti listasta eikä tarvitse koluta jokaista triggeriä lävitse erikseen. Sama pätee waypointien taskeissa käytettäviin ehtoihin. Toinen hyvä tapa on tehdä notepadilla, excelillä, tms. editorilla lista käytössä olevista flageista sopivalla kuvauksella flagin toiminnasta/käyttötarkoituksesta höystettynä.

Suunnittelu kannattaa tehdä huolella koska se siihen panostettu vaiva tulee korkojen kera takaisin testausvaiheessa. Testaaminen on hidasta ja työlästä verrattuna triggerien suunnittelemiseen ja tekemiseen. Paras tapa tehtävän kulun ja triggerien testaamiseen on yksinpeli koska ajannopeutus toimii vain yksinpelissä. Ajannopeutuksella pystyy nopeasti käymään läpi pitempiäkin tehtäviä ilman tuskastuttavaa odottelua. Toinen näppärä apu on tehdä F10 menuun triggereitä joilla saa vihollisryhmiä tuhottua ym. tapahtumia aikaan joiden tekeminen itse lentämällä ja ampumalla veisi kymmeniä minuutteja eikä välttämättä aina onnistuisi. Testitriggerit kannattaa nimetä selkeästi jotta ne osaa tuhota sitten kun tehtävä on valmis. Muutkin triggerit on hyvä nimetä viisaasti jotta niistä tietää vielä myöheminkin mikä niiden tarjoitus on.

Suunnitteluvaiheessa on hyvä miettiä ns. kriittinen polku eli jutut mitä pitää tapahtua jotta tehtävä etenee ja varmistaa, että niihin liittyvät triggerit toimivat kuten pitää. Samalla on hyvä varmistaa, että myös pelaajalla on tarvittavat tiedot hoitaa oma osansa tästä polusta. Eli kirjoittelee briefingiin tarvittavat jutut ja ehkä lisäilee tehtävään radioviestejä jotka selventävät asioita.

Client lentokoneet kannattaa lisäillä vasta kun tehtävä on muuten valmis eikä muuta tekemistä ole jäljellä koska client ja player lentokoneita ei voi olla samaan aikaan. Jos kuitenkin tehtävää tarvitsee testailla yksinpelissä client koneiden luomisen jälkeen niin helpoin tapa saada player kone luotua on ensin muuttaa client koneet AI koneiksi.

Jos triggerin laukeaminen ei näy heti ilmiselvästi pelissä kannattaa niihin lisätä jonkinlainen viesti actioni josta testivaiheessa pystyy näkemään triggerin laukeamisen tai laukeamattomuuden.

Triggerilogiikan suunnitteluun kannattaa myös laittaa hieman aikaa ja löytää mahdollisimman yksinkertainen ratkaisu koska jälleen kerran pieni vaiva ajattelemisessa tulee korkojen kera takaisin toteutus- ja testivaiheessa.

Bushmanni
Viestit: 256
Liittynyt: To Marras 17, 2011 18:42
Etunimi: Petri
Sukunimi: Auvinen
Verkkosivu: http://

Re: Mission Editor

Viesti Kirjoittaja Bushmanni » Su Huhti 15, 2012 11:37

Radiomenun F10 triggerit resetoituvat tällä hetkellä kun hostaava pelaaja kuolee mistä syystä pitää olla joku vara suunnitelma jolla ko. triggereiden funktion pystyy toteuttamaan ilman radio menua. Itse olen tehnyt omaan tehtävääni esim. helikopterin orbitin päättämisen niin, että kopterin läheltä ohi pyyhkäisemällä heko jatkaa lentoaan jos radiotriggeri jostain syystä bugaa. Yksinkertaisessa tapauksessa voi olla mahdollista tehdä triggeri joka lisää radiotriggerin uudestaan kun hosti lähtee uudelleen lentoon. Tämän voisi toteuttaa esim. tekemällä zonen johonkin lentokentän lähelle jonka yli matalalla lentämällä switched condition tyyppinen triggeri lisää radio triggerin uudestaan. Matalalento vaatimus sen takia, että triggeri ei turhaan lisäile uusia radiotriggereitä kun joku zonesta lentää yli vaan sen pitää olla sellainen että ei vahingossa laukaise triggeriä.

yallu
Viestit: 99
Liittynyt: Ma Maalis 12, 2012 20:04
Handle: yallu
Etunimi: Jan
Sukunimi: Sandholm
Verkkosivu: http://

Re: Mission Editor

Viesti Kirjoittaja yallu » Ma Huhti 01, 2013 14:53

Puska: oli eilen puhetta vultsauksen estämisestä. Tuli mieleen (ja testasinkin periaatteessa toimivaksi äsken), että tietty voisi Clienttiin laittaa taskin "Immortal(true)" ja kutsua AI TASK:lla aina kun on kenttäalueella zonen sisällä, zonesta poislähtiessä voi taas kutsua "Immortal(false)". Jos tarvis, zonea voisi lisäksi rajoittaa korkeussuunnassa Unit's Altitude -testillä. Riittäisikö?

Bushmanni
Viestit: 256
Liittynyt: To Marras 17, 2011 18:42
Etunimi: Petri
Sukunimi: Auvinen
Verkkosivu: http://

Re: Mission Editor

Viesti Kirjoittaja Bushmanni » Ma Huhti 01, 2013 21:42

Tuota voisi kokeilla

yallu
Viestit: 99
Liittynyt: Ma Maalis 12, 2012 20:04
Handle: yallu
Etunimi: Jan
Sukunimi: Sandholm
Verkkosivu: http://

Re: Mission Editor

Viesti Kirjoittaja yallu » Pe Huhti 05, 2013 19:59

Zone:n omistus ("area control") ja Lua?

En ole editorin Lua:an/Mist:iin tutustunut, joten ennenkuin jatkan tutustumista - onko tällainen edes mahdollista tehdä... Pelkillä editorin triggereillä ei viitsi edes yrittää (liikaa triggereitä). Kartalla on paljon Zone:ja (lähes 100). Ne on nimetty numeerisina merkkijonoina ("11"-"99"), joten nimet konvertoivissa merkkijonosta kokonaisluvuiksi (jolloin Zone:n nimeä voi suoraan hyödyntää Flag:ien nimissä). Zonen "omistus" (area control:a siis haetaan) vaihtuu sen mukaan kumman puolen tietyt Unit:t (nimenomaan tietyt Unit:t, ei Group:t) on viimeksi olleet Zone:ssa - ja riippuen siitä, onko vastapuolella mitään yksiköitä samassa Zone:ssa. Zone:n saa itselleen, jos sen sisällä on tiettyjä Unit:ja, mutta ei lainkaan vihollisen yksiköitä. Jos samassa Zone:ssa sekä omia että vihollisia (ihan mitä tahansa Unit:ja), Zone on "contested". Vaikeus on Zone:jen suuressa määrässä...

Zone:n tilan tarkistus ja lippujen päivitys tehdään esim. kerran minuutissa parissa, ei tarvetta kovin tarkkaan reaaliaikaisuuteen. Seuraavan pseuko-koodin tyylisesti:

onOncePerMinuteEvent:

Koodi: Valitse kaikki

function unitInZone(unit_list, zone) { // is any listed unit inside zone
	for each (unit in unit_list) {
		if (unit inside zone) {
			return true
		}
	}
	return false
}

function groupInZone(group_list, zone) { // is any listed group (partly or fully) inside zone
	for each (group in group_list) {
		if (group inside zone) {
			return true
		}
	}
	return false
}

for each (zone in zone_list) { // MAIN
	hasBlueUnits = unitInZone(blue_units, zone) // are any of the named blue units occupying this zone
	hasBlueGroups = groupInZone(blue_groups, zone) // is part of named blue groups occupying this zone
	hasRedUnits = unitInZone(red_units, zone) // are any of the named red units occupying this zone
	hasRedGroups = groupInZone(red_groups, zone) // is part of named red groups occupying this zone
	
	if (hasBlueGroups and hasRedGroups) {
		setFlag(strToInt(zone) + 100, true) // zone is contested
		setFlag(strToInt(zone) + 101, false)
		setFlag(strToInt(zone) + 102, false)
	}
	else if (hasBlueUnits and not hasRedGroups) {
		setFlag(strToInt(zone) + 100, false)
		setFlag(strToInt(zone) + 101, true) // blue owns zone
		setFlag(strToInt(zone) + 102, false)
	}
	else if (hasRedUnits and not hasBlueGroups) {
		setFlag(strToInt(zone) + 100, false)
		setFlag(strToInt(zone) + 101, false)
		setFlag(strToInt(zone) + 102, true) // red owns zone
	}
}
Ym. vaihtoehdon heikkous on se, että kerran minuutissa käydään paljon Zone:ja läpi = aiheuttanee lagia? Koska Zone:jen tilan päivityksen ei tarvitse olla täysin reaaliaikainen, parempi ratkaisu olisi käynnistää yksi event sekunnin parin välein ja tarkistaa siinä vain yksi Zone, sitten seuraavalla iteraatiolla seuraava Zone - mahdollista? Tai sitten jollain muulla paremmin optimoidulla tavalla - esim. käymällä ensin läpi Group:t ja palauttamalla per Group missä kaikissa Zone:ssa kyseisen Group:n osia on - mahdollista? Group:ja olisi huomattavasti vähemmän kuin Zone:ja...

Pointereita? Koodiesimerkkejä? Kiitos :)

Vastaa Viestiin