ROZDZIAŁ 1: do czego służą skrypty SQF i jak je uruchamiać?

Skrypty SQF są używane w grach serii ARMA oraz ich "poważnym" kuzynie - symulatorze treningowym VBS. Tu skupimy się na Armie, ale w obu przypadkach ich cel i sposób wykorzystania jest podobny. Służą do tego, by podczas rozgrywki działy się rzeczy, których gra sama z siebie nie robi. Mogą zmieniać zachowanie AI, generować, przenosić bądź kasować obiekty, zmieniać ich właściwości, sterować pogodą, wyświetlać komunikaty, modyfikować interfejs i wiele, wiele innych klawych rzeczy.



1. Kiedy skrypty są potrzebne?

Jeżeli oficjalna zawartość gry w pełni nas satysfakcjonuje, a ewentualne zapędy twórcze w zupełności zaspokaja wbudowany edytor misji - skrypty nie są potrzebne.

Jeżeli wszystko, czego nam brakuje w grze możemy sobie wygodnie dodać w postaci moda - skrypty nie są potrzebne.

Jeżeli natomiast chcielibyśmy tworzyć w Armie własne scenariusze (lub mody, ale o tym nie tutaj) i z dostępną w grze zawartością zrobić w tych scenariuszach coś, czego nie zrobi ani ona sama, ani dostępne mody lub jeśli nie chcemy, by nasze scenariusze wymagały modów do uruchomienia - skrypty SQF mogą się przydać.



2. Zanim napiszemy skrypt

Może wcale nie trzeba samemu nic pisać. Może inni już napisali. W okolicach internetu okupowanych przez społeczność Army, można znaleźć wiele gotowych skryptów. 

Bywają publikowane w gotowym scenariuszu demonstracyjnym, jako osobne pliki SQF, a nawet w formie "żywego kodu" wklejonego otwartym tekstem na forum, wrzuconego na bloga etc. 

Zanim więc pogadamy o pisaniu własnych skryptów, w niniejszym rozdziale objaśnijmy, jak konkretnie wykorzystuje się gotowe skrypty w scenariuszach. Autorski opis skryptu może zawierać wystarczające instrukcje, jednak czasem tak nie jest - sprawy poruszane niżej bywają przemilczane jako oczywiste. Wiedzę o nich się u odbiorcy zakłada, co dla laika bywa barierą nie do przeskoczenia.   



3. Jak używać gotowych skryptów SQF w grze

Sposobów jest kilka. Skupimy się na jednym, moim zdaniem najbardziej uniwersalnym i polecanym, a przy tym możliwym do objaśnienia bez nadmiaru dodatkowej wiedzy.

Nie muszą, ale mogą istnieć różnice między poprawnym użyciem danego skryptu w scenariuszu dla jednego gracza oraz w scenariuszu do gry wieloosobowej. Skupię się wyłącznie na scenariuszach solowych - omawiamy podstawy, a multiplayer komplikuje nam pewne sprawy, sam zaś rzadko się nim zajmuję. Z podobnych względów pomijam pewne nieistotne teraz niuanse i alternatywy. Zakładam znajomość podstawowych funkcji obecnego w grze Arma 3 edytora misji EDEN. Na potrzeby ćwiczenia poniższych punktów zalecam uruchomić grę bez żadnych modów. Jeżeli instrukcje umieszczone w dostarczonym przez autora opisie skryptu odbiegają od poniższych, należy się trzymać wytycznych autora. Pewne objaśnienia zakładają OS Windows 10.

a) Skrypty uruchamia się w scenariuszach (zwanych też misjami), więc najpierw musimy przygotować sobie w edytorze scenariusz, o jaki nam chodzi. Najprostszy, często wystarczający do testów, to jeden żołnierz/jednostka/ludzik jako awatar gracza ustawiony na dowolnej mapie - zapisujemy go (nie eksportujemy!). Zapisane scenariusze w Windows 10 znajdziemy tu:



Każdy zapisany w ten sposób w edytorze scenariusz to osobny subfolder w folderze "missions". 

Na marginesie, jeżeli nasz skrypt został już ujęty przez twórcę w scenariusz demonstracyjny - często tak bywa - tutaj wyląduje również folder scenariusza demonstracyjnego, po czym wedle chęci można go otworzyć i uruchomić z edytora EDEN.  

b) Otwieramy folder naszego scenariusza. Powinien na tym etapie zawierać jeden plik: mission.sqm. Ignorujemy ten plik.

c) Jeśli mamy skrypt w formie gotowego pliku lub plików .sqf, ten podpunkt pomijamy i przechodzimy do d).

Jeżeli mamy kod jako otwarty tekst do skopiowania i wklejenia, musimy go umieścić w pliku .sqf, skąd zostanie uruchomiony w scenariuszu. 

Podstawowym plikiem .sqf, z którego scenariusz uruchamia swoje skrypty, jest init.sqf. 

Istnieje też parę innych plików o podobnej funkcji, głównie używanych w scenariuszach wieloosobowych, którymi się tu nie zajmujemy, w każdym razie i tam init.sqf funkcjonuje.

Jak zrobić plik .sqf? To proste. W folderze naszego scenariusza klikamy prawym przyciskiem myszy i z menu wybieramy: nowy > dokument tekstowy

Powinien pojawić się nowy plik .txt. Zmieniamy jego nazwę i rozszerzenie na init.sqf i gotowe. Analogicznie możemy tworzyć inne pliki .sqf. 

Pliki .sqf można edytować w tych samych programach, co pliki .txt, również w zwykłym Notatniku/Notepadzie, jednak domyślnie nie są z żadnym skojarzone.

Do edycji kodu polecam wybrać sobie program bardziej zaawansowany, niż Notepad. Który - to kwestia upodobań, sam używam Notepad++, ale najpewniej istnieją równie nie gorsze alternatywy, w tym dedykowane językowi SQF.

Zawartość pliku init.sqf jest wykonywana (realizowana) na samym początku rozgrywki. Może zawierać bezpośrednio sam skrypt do wykonania, polecenia uruchomienia skryptów z innych obecnych w folderze scenariusza (i jego podfolderach) plików .sqf lub kombinację obu opcji. 

Najprostsze, co możemy teraz zrobić, to wkleić nasz skrypt do pliku init.sqf "jak leci". 

Przykładowy rezultat w folderze scenariusza:



Tu uwaga techniczna: skrypt wklejany "na żywca" z niektórych forów internetowych itp. może zawierać ukryte znaki, które sprawiają, że nie zadziała. Dla pewności można go wpierw wkleić do programu, który pozwala zobaczyć ukryte symbole, np. MS Word, by takie znaki ręcznie usunąć. 

d) Jeśli skrypt ma formę pliku lub plików .sqf, czy to w folderze demonstracyjnym, czy też "luzem", wklejamy te pliki do foldera naszego scenariusza. Jeśli wedle opisu dostarczonego przez autora, skrypt do działania wymaga jakichś konkretnych elementów w scenariuszu, wracamy do edytora i starannie umieszczamy w naszym scenariuszu wymagane elementy (mogą to być jednostki, pojazdy, obiekty statyczne, markery...). Dla przykładu, można się spodziewać, że skrypt sprawiający, by AI używała artylerii do ostrzału wskazanych celów będzie wymagać obecności jednostki artylerii i celu na mapie, prawda? Jeśli wymagane elementy powinny zostać konkretnie ponazywane - dbamy, by nazwy zgadzały się co do joty. 

Trzeba bowiem pamiętać, że komputer to kompletny idiota, który natychmiast się pogubi, jeśli natrafi na najmniejszy błąd czy to w samym skrypcie, czy w nazwach, do których się skrypt odwołuje. Żadnej domyślności czy inwencji spodziewać się z jego strony nie należy i jeśli chcemy zająć się pisaniem własnych skryptów, winniśmy tę fundamentalną prawdę dobrze zapamiętać (nie, żeby skrypterowi dane było o niej zapomnieć).

Instrukcje uruchomienia skryptów dostarczonych w gotowych plikach często zawierają stosowną linijkę bądź linijki kodu, jakie należy umieścić w pliku init.sqf (patrz c)). Przykład takiej instrukcji z witryny armaholic.com:



Wówczas wnętrze pliku init.sqf łączące porcję prostego kodu wstępnego (linijki 1-4) i polecenie wykonania zasadniczego skryptu SQF z innego pliku (linijka 5) może wyglądać np. tak:



zaś folder scenariusza gotowego do uruchomienia:



W tym wypadku zasadnicze pliki skryptu są dla zachowania porządku umieszczone w subfolderze RYD_FFE - dobra praktyka przy obszernych skryptach obejmujących wiele plików.