ArmA 2 - Edytor Kampania
W karierze każdego chyba missionmakera przychodzi w końcu taki moment, że zaprojektuje sobie własną kampanię, wymyśli fabułę i tak dalej. Dużo bardziej skomplikowaną i czasochłonną sprawą jest oczywiście stworzenie najważniejszego - misji. Jeśli uda się nam przebrnąć przez ten proces, pozostaje nam tylko połączenie naszych misji w kampanię. I o tym traktuje niniejszy poradnik.Na początek należy wiedzieć, że wszystkie dodatkowe kampanie (tj. cała reszta oprócz "fabrycznych") przechowywane są w folderze o nazwie Campaigns, znajdującym się w głównym katalogu gry. Jeśli go nie masz - po prostu go sobie stwórz. Następnie w jego wnętrzu będziesz musiał utworzyć kolejny folder, do którego wrzucimy wszystkie pliki potrzebne do prawidłowej pracy kampanii - misje, Description, overview i obrazek do niego. Strukturę folderu kampanii przedstawia poniższy obrazek:
Jak widać, do folderu Missions wrzucamy gotowe katalogi misji prosto z edytora, tj. z lokalizacji Moje Dokumenty\ArmA 2\Missions. Nie należy nic pakować do .pbo.
Teraz omówimy Description kampanii na przykładzie tego oto kodu, który umieszczamy w pliku.
class MissionDefault
{
lives = -1;
lost = ;
end1 = ;
end2 = ;
end3 = ;
end4 = ;
end5 = ;
end6 = ;
};
class Campaign
{
name = "Moja Nowa Kampania";
firstBattle = Beginning;
class Beginning
{
name = "The Beginning";
cutscene =;
firstMission = Misja1;
end1 = ;
end2 = ;
end3 = ;
end4 = ;
end5 = ;
end6 = ;
lost = ;
class Misja1: MissionDefault
{
end1 = Misja2;
end2 = Misja1;
end3 = Misja1;
end4 = Misja1;
end5 = Misja1;
end6 = Misja1;
lost = Misja1;
template = Misja1.Chernarus;
};
class Misja2: MissionDefault
{
end1 = Misja3;
end2 = Misja2;
end3 = Misja2;
end4 = Misja2;
end5 = Misja2;
end6 = Misja2;
lost = Misja2;
template = Misja2.Chernarus;
};
class Misja3: MissionDefault
{
end1 = Misja4;
end2 = Misja3;
end3 = Misja3;
end4 = Misja3;
end5 = Misja3;
end6 = Misja3;
lost = Misja3;
template = Misja3.Chernarus;
};
class Misja4: MissionDefault
{
end1 = Misja5;
end2 = Misja4;
end3 = Misja4;
end4 = Misja4;
end5 = Misja4;
end6 = Misja4;
lost = Misja4;
template = Misja4.Chernarus;
};
class Misja5: MissionDefault
{
end1 = ;
end2 = Misja5;
end3 = Misja5;
end4 = Misja5;
end5 = Misja5;
end6 = Misja5;
lost = Misja5;
template = Misja5.Chernarus;
};
};
};
Wyjaśnię teraz "po kawałku", co oznaczają kolejne linijki kodu.
class MissionDefault... - klasa bazowa, niezbędna do działania kampanii. Nie ustawiamy tu nic, po prostu umieszczamy tę klasę.
name = "Moja Nowa Kampania"; - tu wpisujemy nazwę, jaka będzie się wyświetlać w menu wyboru kampanii. Możemy dać odniesienie do stringtable.xml, jeśli chcemy zróżnicować nazwę dla wersji językowych.
class Beginning
{
name = "The Beginning";
cutscene =;
firstMission = Misja1;
- do firstMission wpisujemy oczywiście nazwę pierwszej misji, która ma być odpalona w kampanii. Możemy także wpisać coś do cutscene. Będzie to misja/przerywnik filmowy, który ruszy przed włączeniem firstMission i nie będzie go można odpalić później w wyborze misji kampanii. Atrybutu Name nie ruszamy.
class Misja1: MissionDefault - wpisujemy tu nazwę (zamiast Misja1) konkretnej misji, na której będzie pracować reszta description. Nie musi być taka sama, jak nazwa folderu z misją. Misja RS1_01.Chernarus może być tu nazwana np. C1.
end1 = Misja2... - tutaj ustalamy, co ma nastąpić (jaka misja ma być następnie włączona) po aktywacji określonego zakończenia. Raczej oczywista sprawa. Jest to dość potężne narzędzie, dzięki któremu można stworzyć nieliniowe lub zapętlające się kampanie.
template = Misja1.Chernarus; - nazwa folderu z misją (znajdującego się w podkatalogu Missions kampanii), którą aktualnie tu definiujemy. Należy zauważyć, że tylko w tym miejscu TRZEBA wpisać prawdziwą nazwę misji.
I tak dalej... Klas misji może być oczywiście dowolna ilość. Należy zauważyć, że w description kampanii możemy umieszczać rozmaite definicje używane w misjach. To znaczy, że jeśli na przykład zdefiniujemy jakąś ścieżkę muzyczną, będzie ona dostępna we wszystkich misjach, które umieściliśmy.
Kampania już działa i jest grywalna. Jeśli nie wierzycie, możecie sprawdzić to własnoręcznie. Trzeba teraz tylko zatroszczyć się o overview. Tworzymy go identyczną metodą, jak w pojedynczych misjach, opisaną w tym artykule.
Teraz omówimy Description kampanii na przykładzie tego oto kodu, który umieszczamy w pliku.
class MissionDefault
{
lives = -1;
lost = ;
end1 = ;
end2 = ;
end3 = ;
end4 = ;
end5 = ;
end6 = ;
};
class Campaign
{
name = "Moja Nowa Kampania";
firstBattle = Beginning;
class Beginning
{
name = "The Beginning";
cutscene =;
firstMission = Misja1;
end1 = ;
end2 = ;
end3 = ;
end4 = ;
end5 = ;
end6 = ;
lost = ;
class Misja1: MissionDefault
{
end1 = Misja2;
end2 = Misja1;
end3 = Misja1;
end4 = Misja1;
end5 = Misja1;
end6 = Misja1;
lost = Misja1;
template = Misja1.Chernarus;
};
class Misja2: MissionDefault
{
end1 = Misja3;
end2 = Misja2;
end3 = Misja2;
end4 = Misja2;
end5 = Misja2;
end6 = Misja2;
lost = Misja2;
template = Misja2.Chernarus;
};
class Misja3: MissionDefault
{
end1 = Misja4;
end2 = Misja3;
end3 = Misja3;
end4 = Misja3;
end5 = Misja3;
end6 = Misja3;
lost = Misja3;
template = Misja3.Chernarus;
};
class Misja4: MissionDefault
{
end1 = Misja5;
end2 = Misja4;
end3 = Misja4;
end4 = Misja4;
end5 = Misja4;
end6 = Misja4;
lost = Misja4;
template = Misja4.Chernarus;
};
class Misja5: MissionDefault
{
end1 = ;
end2 = Misja5;
end3 = Misja5;
end4 = Misja5;
end5 = Misja5;
end6 = Misja5;
lost = Misja5;
template = Misja5.Chernarus;
};
};
};
Wyjaśnię teraz "po kawałku", co oznaczają kolejne linijki kodu.
class MissionDefault... - klasa bazowa, niezbędna do działania kampanii. Nie ustawiamy tu nic, po prostu umieszczamy tę klasę.
name = "Moja Nowa Kampania"; - tu wpisujemy nazwę, jaka będzie się wyświetlać w menu wyboru kampanii. Możemy dać odniesienie do stringtable.xml, jeśli chcemy zróżnicować nazwę dla wersji językowych.
class Beginning
{
name = "The Beginning";
cutscene =;
firstMission = Misja1;
- do firstMission wpisujemy oczywiście nazwę pierwszej misji, która ma być odpalona w kampanii. Możemy także wpisać coś do cutscene. Będzie to misja/przerywnik filmowy, który ruszy przed włączeniem firstMission i nie będzie go można odpalić później w wyborze misji kampanii. Atrybutu Name nie ruszamy.
class Misja1: MissionDefault - wpisujemy tu nazwę (zamiast Misja1) konkretnej misji, na której będzie pracować reszta description. Nie musi być taka sama, jak nazwa folderu z misją. Misja RS1_01.Chernarus może być tu nazwana np. C1.
end1 = Misja2... - tutaj ustalamy, co ma nastąpić (jaka misja ma być następnie włączona) po aktywacji określonego zakończenia. Raczej oczywista sprawa. Jest to dość potężne narzędzie, dzięki któremu można stworzyć nieliniowe lub zapętlające się kampanie.
template = Misja1.Chernarus; - nazwa folderu z misją (znajdującego się w podkatalogu Missions kampanii), którą aktualnie tu definiujemy. Należy zauważyć, że tylko w tym miejscu TRZEBA wpisać prawdziwą nazwę misji.
I tak dalej... Klas misji może być oczywiście dowolna ilość. Należy zauważyć, że w description kampanii możemy umieszczać rozmaite definicje używane w misjach. To znaczy, że jeśli na przykład zdefiniujemy jakąś ścieżkę muzyczną, będzie ona dostępna we wszystkich misjach, które umieściliśmy.
Kampania już działa i jest grywalna. Jeśli nie wierzycie, możecie sprawdzić to własnoręcznie. Trzeba teraz tylko zatroszczyć się o overview. Tworzymy go identyczną metodą, jak w pojedynczych misjach, opisaną w tym artykule.