Modułowa struktura misji to taki pomysł, który przyszedł mi do głowy kiedy zdałem sobie sprawę, że w gruncie rzeczy misje składają się (lub też mogą składać się) z całkowicie niezależnych od siebie elementów. Tworzenie misji może przypominać składanie klocków, wystarczy utworzyć coś w rodzaju biblioteki takich modułów.
Jako moduły traktuję jednostki, grupy, punkty trasy, wyzwalacze wraz z komendami skryptowymi, które stanowią, logiczną wzajemnie powiązaną całość i na tyle uniwersalną że można je przerzucić z misji do misji metodą kopiuj/wklej (ew. z poddając drobnej modyfikacji).
Na przykład takim modułem może być patrol czyli grupa (o losowej liczebności lub losowym prawdopodobieństwie występowania) wraz z punktami trasy (każdy z rozrzutem) tworzącymi pętle, która za pomocą wyzwalacza jest przerywana i kieruje patrol w konkretne miejsce (np. jeśli gracze zajmą objective patrol jest przerywany i grupa udaje się do objective'u go odbić). Coś takiego jest całkowicie niezależne od innych elementów misji i łatwe do przeniesienia, bo nie związane z innymi elementami. Niemal w każdej misji jest jakiś patrol, który wykonuje zadanie do momentu spełnienia określonego warunku (lub likwidacji tego patrolu).
Oczywiście to jest bardzo prosty przykład, ale mogę być bardziej skomplikowane rzeczy. Na przykład może być oddział żołnierzy strzegący jakiegoś obszaru (objective'u). Można zrobić trzy grupy po 3-4 (losowość) żołnierzy wykonujące patrol (trasa nieco losowa) wokół objective'u (w większej odległości np. jako dwie grupy po kole o promieniu ok. 500 metrów i jedna po kole o promieniu ok. 250 m). Przerywałyby patrol w przypadku aktywacji wyzwalacza reagującego na obecność wroga w objective'ie. W samym objective kolejna grupa o losowej liczebności, która w przypadku wykrycia wroga (wyzwalacz) przechodzi do punktu trasy "szukaj i zniszcz", a jeśli zostanie w niej dwóch żołnierzy (kolejny wyzwalacz typu przełącz) wycofuje się (po prostu ucieka, dzięki czemu nie trzeba się bawić w szukanie po krzakach ostatniego wroga, który blokuje wyzwalacz). Do tego wyzwalacz wykrywający nieobecność wroga i zaliczający graczom wykonanie celu. Można jeszcze dodać grupę przyjeżdżającą wesprzeć obrońców (grupa, jej punkty trasy i stosowny wyzwalacz) i parę innych drobiazgów. Powstaje coś jakby gotowy template.
Jeszcze jeden przykład. Wstawiamy śmigłowiec sojuszniczy i dbamy o to by zaczął na ziemi. Dodajemy wyzwalacz aktywowany radiowo (przez gracza dowódcę) i łączymy z punktem trasy. Następny punkt trasy typu szukaj i zniszcz może być gdziekolwiek, bo korzystając z wstawionego wcześniej wyzwalacza dodajmy komendę przenoszącą tenże punkt na pozycje gracza. Jego też synchronizujemy z wyzwalaczem typu przełącz i z warunkiem dotyczącym uszkodzeń maszyny (jest mocno uszkodzony - wraca do bazy, można też dać jakiś informacje w postaci chatu). Kolejny wyzwalacz aktywujący się gdy hela jest z zniszczona i umieszczający na jej pozycji marker, dodający graczom cel "sprawdzić wrak heli i ustalić czy załoga zginęła", ustawiający stosowną zmienną. Kolejny wyzwalacz przenoszony (setpos) na pozycję wraku heli (w chwili gdy hela zostanie zniszczona), reagujący na przybycie graczy i zaliczający im cel. Można jeszcze mnożyć kolejne wyzwalacze sprawiając np, że jeśli załoga przeżyje to po przyjściu graczy dołączą się do grupy, trzeba ich odstawić za swoje linie żeby zaliczyć kolejny niespodziewany cel misji (chociaż dużo prościej ich ubić w chwili katastrofy heli). Można na przykład wyspawnować grupę wrogów wokół wraku heli co by utrudnić wykonanie zadania itd.
W efekcie mamy moduł w rodzaju wsparcie śmigłowcowe dla graczy. Od ich decyzji zależy czy z niego skorzystają (losowo występujące szyłki mogą go strącić). Ten element też można przenieść bez problemu z jednej misji do drugiej. Jedyne na co trzeba zwrócić uwagę to na nazwy zmiennych i liczbę celów w misji.
To do czego dążę i co jest celem mojego projektu to stworzenie paru dziesięciu takich modułów, a potem w całkiem lamerski sposób poskładanie ich w misje. Zazwyczaj taki moduł to cel misji wraz z elementami potrzebnymi do jego osiągnięcia, przeszkodami oraz wyzwalaczami i zmiennymi kontrolującymi stan wykonania celu i zmiany w sytuacji. Taki moduł to mogą być nawet dwa wyzwalacze - jeden sprawdza czy gracze dotarli w określony rejon, a drugi czy zostali wykryci nim tam dotarli. Jak dotarli i nie zostali wykryci cel jest zaliczony.
Poza tym modułami mogą być np. patrole wroga, oddziały sojusznicze wykonujące dane działanie w określonych warunkach (wspomniany śmigłowiec), czy np wyzwalacze i obiekty będące "bazę" do której można wrócić aby zakończyć/przerwać misję.
Takie moduły można testować i upewniać się, że działają niezależnie od samej misji i tym samym nie testując misji jako skomplikowanej całości (aczkolwiek to i tak trzeba później zrobić), a w ten sposób łatwej wyłapać błąd i ustalić jego przyczynę.
Zamierzam zakładać tematy dotyczące poszczególnych modułów (w gruncie rzeczy są to mini poradniki pt. jak rozwiązać problem x). Będzie można proponować swoje rozwiązania danego problemu czy testować, a przede wszystkim wykorzystywać coś co działa i czego działanie rozumiemy.
Na koniec dodam że jest jeszcze jedna rzecz oprócz modułowości którą chcę wprowadzić (przynajmniej we własnej praktyce tworzenia misji). Jest to opracowanie pewnych standardów tworzenia misji między innymi ujednolicających nazewnictwo zmiennych i grup, zakładających tworzenie dokumentacji opisującej misje i dołączanej jako plik txt do plików pbo. Już wielokrotnie przekonałem się że zapominam jak właściwie funkcjonuje misja którą stworzyłem jakiś czas temu, a gdybym ktoś kogo misję mam przetestować (czy usunąć z niej bug'a) stosował takie standardy, byłoby mi o wiele łatwiej.
Tyle na dzisiaj, bo już mi się zwoje lasują. Jutro albo pojutrze dodam parę opisów "modułów" i inne pomysły.
Jako moduły traktuję jednostki, grupy, punkty trasy, wyzwalacze wraz z komendami skryptowymi, które stanowią, logiczną wzajemnie powiązaną całość i na tyle uniwersalną że można je przerzucić z misji do misji metodą kopiuj/wklej (ew. z poddając drobnej modyfikacji).
Na przykład takim modułem może być patrol czyli grupa (o losowej liczebności lub losowym prawdopodobieństwie występowania) wraz z punktami trasy (każdy z rozrzutem) tworzącymi pętle, która za pomocą wyzwalacza jest przerywana i kieruje patrol w konkretne miejsce (np. jeśli gracze zajmą objective patrol jest przerywany i grupa udaje się do objective'u go odbić). Coś takiego jest całkowicie niezależne od innych elementów misji i łatwe do przeniesienia, bo nie związane z innymi elementami. Niemal w każdej misji jest jakiś patrol, który wykonuje zadanie do momentu spełnienia określonego warunku (lub likwidacji tego patrolu).
Oczywiście to jest bardzo prosty przykład, ale mogę być bardziej skomplikowane rzeczy. Na przykład może być oddział żołnierzy strzegący jakiegoś obszaru (objective'u). Można zrobić trzy grupy po 3-4 (losowość) żołnierzy wykonujące patrol (trasa nieco losowa) wokół objective'u (w większej odległości np. jako dwie grupy po kole o promieniu ok. 500 metrów i jedna po kole o promieniu ok. 250 m). Przerywałyby patrol w przypadku aktywacji wyzwalacza reagującego na obecność wroga w objective'ie. W samym objective kolejna grupa o losowej liczebności, która w przypadku wykrycia wroga (wyzwalacz) przechodzi do punktu trasy "szukaj i zniszcz", a jeśli zostanie w niej dwóch żołnierzy (kolejny wyzwalacz typu przełącz) wycofuje się (po prostu ucieka, dzięki czemu nie trzeba się bawić w szukanie po krzakach ostatniego wroga, który blokuje wyzwalacz). Do tego wyzwalacz wykrywający nieobecność wroga i zaliczający graczom wykonanie celu. Można jeszcze dodać grupę przyjeżdżającą wesprzeć obrońców (grupa, jej punkty trasy i stosowny wyzwalacz) i parę innych drobiazgów. Powstaje coś jakby gotowy template.
Jeszcze jeden przykład. Wstawiamy śmigłowiec sojuszniczy i dbamy o to by zaczął na ziemi. Dodajemy wyzwalacz aktywowany radiowo (przez gracza dowódcę) i łączymy z punktem trasy. Następny punkt trasy typu szukaj i zniszcz może być gdziekolwiek, bo korzystając z wstawionego wcześniej wyzwalacza dodajmy komendę przenoszącą tenże punkt na pozycje gracza. Jego też synchronizujemy z wyzwalaczem typu przełącz i z warunkiem dotyczącym uszkodzeń maszyny (jest mocno uszkodzony - wraca do bazy, można też dać jakiś informacje w postaci chatu). Kolejny wyzwalacz aktywujący się gdy hela jest z zniszczona i umieszczający na jej pozycji marker, dodający graczom cel "sprawdzić wrak heli i ustalić czy załoga zginęła", ustawiający stosowną zmienną. Kolejny wyzwalacz przenoszony (setpos) na pozycję wraku heli (w chwili gdy hela zostanie zniszczona), reagujący na przybycie graczy i zaliczający im cel. Można jeszcze mnożyć kolejne wyzwalacze sprawiając np, że jeśli załoga przeżyje to po przyjściu graczy dołączą się do grupy, trzeba ich odstawić za swoje linie żeby zaliczyć kolejny niespodziewany cel misji (chociaż dużo prościej ich ubić w chwili katastrofy heli). Można na przykład wyspawnować grupę wrogów wokół wraku heli co by utrudnić wykonanie zadania itd.
W efekcie mamy moduł w rodzaju wsparcie śmigłowcowe dla graczy. Od ich decyzji zależy czy z niego skorzystają (losowo występujące szyłki mogą go strącić). Ten element też można przenieść bez problemu z jednej misji do drugiej. Jedyne na co trzeba zwrócić uwagę to na nazwy zmiennych i liczbę celów w misji.
To do czego dążę i co jest celem mojego projektu to stworzenie paru dziesięciu takich modułów, a potem w całkiem lamerski sposób poskładanie ich w misje. Zazwyczaj taki moduł to cel misji wraz z elementami potrzebnymi do jego osiągnięcia, przeszkodami oraz wyzwalaczami i zmiennymi kontrolującymi stan wykonania celu i zmiany w sytuacji. Taki moduł to mogą być nawet dwa wyzwalacze - jeden sprawdza czy gracze dotarli w określony rejon, a drugi czy zostali wykryci nim tam dotarli. Jak dotarli i nie zostali wykryci cel jest zaliczony.
Poza tym modułami mogą być np. patrole wroga, oddziały sojusznicze wykonujące dane działanie w określonych warunkach (wspomniany śmigłowiec), czy np wyzwalacze i obiekty będące "bazę" do której można wrócić aby zakończyć/przerwać misję.
Takie moduły można testować i upewniać się, że działają niezależnie od samej misji i tym samym nie testując misji jako skomplikowanej całości (aczkolwiek to i tak trzeba później zrobić), a w ten sposób łatwej wyłapać błąd i ustalić jego przyczynę.
Zamierzam zakładać tematy dotyczące poszczególnych modułów (w gruncie rzeczy są to mini poradniki pt. jak rozwiązać problem x). Będzie można proponować swoje rozwiązania danego problemu czy testować, a przede wszystkim wykorzystywać coś co działa i czego działanie rozumiemy.
Na koniec dodam że jest jeszcze jedna rzecz oprócz modułowości którą chcę wprowadzić (przynajmniej we własnej praktyce tworzenia misji). Jest to opracowanie pewnych standardów tworzenia misji między innymi ujednolicających nazewnictwo zmiennych i grup, zakładających tworzenie dokumentacji opisującej misje i dołączanej jako plik txt do plików pbo. Już wielokrotnie przekonałem się że zapominam jak właściwie funkcjonuje misja którą stworzyłem jakiś czas temu, a gdybym ktoś kogo misję mam przetestować (czy usunąć z niej bug'a) stosował takie standardy, byłoby mi o wiele łatwiej.
Tyle na dzisiaj, bo już mi się zwoje lasują. Jutro albo pojutrze dodam parę opisów "modułów" i inne pomysły.