Wprowadzenie do moddingu
Wprowadzenie do moddingu
Original War można modyfikować w wielu aspektach. Poniżej znajduje się lista modyfikowalnych rzeczy, które można dowolnie zmieniać używając narzędzi dostarczonych z grą lub zwykłych edytorów tekstwoych:
- Cut-scenki (intra)
- Dźwięki
- Głosy
- Interfejs menu
- Interfejs gry
- Kampanie
- Mapy
- Misje
- Muzyka
- Napisy (twórcy gry)
- Tekstury jednostek
- Tekstury map
Poniższy poradnik wyjaśnia podstawy tworzenia modyfikacji, opisuje poszczególne narzędzia oraz pokazuje jak napisać własną misję w języku SAIL.
1. NARZĘDZIA
Podczas instalacji patcha, instalują się także narzędzia umożliwiające modyfikację Original War. Domyślnie znajdują się one w START -> WSZYSTKIE PROGRAMY -> ORIGINAL WAR -> MOD TOOLS. Każdy z programów ma własne funkcje i odpowiada za zmianę innego aspektu gry.
- Editor - najczęściej używany program przy tworzeniu modów. Posiada on funkcje tworzenia map oraz misji.
- GM Editor - program do edycji plików .GMS, .GMX i .GMZ.
- GM View - program do przeglądania plików .GMA, .GME, .GMS, .GMX i .GMZ.
- GrndSec - program do tworzenia tekstur. Posiada on funkcję konwersji plików .BMP do .GBI.
- Mod Setup Creator - program do tworzenia kreatorów instalacyjnych dla modyfikacji do OW.
- PakView - program do przeglądania i wypakowywania plików .OWP.
- PRCiX - program do tworzenia cut-scenek (wstawek) do misji.
- Title Creator - program do tworzenia napisów (autorzy gry).
- XichtEd - program do tworzenia twarzy jednostek.
2. TWORZENIE MODA
Stworzenie dobrej modyfikacji to proces złożony i czasochłonny. Oprócz pomysłu na kampanie/misje, należy także wiedzieć jak prawidłowo przelać swoje idee bezpośrednio do gry. Jedną z najważniejszych rzeczy jest znajomość poszczególnych narzędzi oraz ich funkcji. Wiele modyfikacji jest niedokończonych lub "niepełnych" właśnie przez brak odpowiedniej wiedzy z zakresu możliwości poszczególnych programów. Poniższy poradnik obejmuje jedynie podstawy moddingu. Szczegółowe opisy wszystkich narzędzi, funkcji, stałych, zmiennych etc., można znaleźć na WIKI portalu OW Support: LINK
Krok 1 - TWORZENIE PODSTAWOWYCH PLIKÓW MODYFIKACJI
Aby rozpocząć zabawę z moddingiem, należy uruchomić program Editor (domyślnie: START -> WSZYSTKIE PROGRAMY -> ORIGINAL WAR -> MOD TOOLS ->EDITOR.EXE) - w systemach z serii Windows Vista polecam uruchamiać wszystkie narzędzia OW w trybie: Uruchom jako administrator.
Po uruchomieniu programu, powinno wyświetlić się powyższe okno. Aby utworzyć nową modyfikację należy kliknąć na Create Mod, aby zmienić już istniejący mod należy kliknąć na Select Mod, aby wyjść z programu należy kliknąć na Close Editor.
Po kliknięciu na Create Mod, wyświetli się powyższe okno. Należy w nim uzupełnić dane nowo tworzonej modyfikacji:
- Mod Name - nazwa moda
- Short Name - krótka nazwa moda (nazwa folderu)
- Version - wersja moda
- Menu Music - muzyka, która będzie odtwarzana w menu głównym moda
Aby zatwierdzić wpisane informacje i utworzyć folder z modyfikacją, należy kliknąć na Create.
Utworzyłem modyfikację o nazwie MyMod. Aby dodać do niej nowe kampanie i misje, należy kliknąć na Select Mod.
Krok 2 - TWORZENIE MAPY
Zaraz po wczytaniu moda, wyświetli się kreator. Umożliwia on dodawanie do modyfikacji nowych misji, lub wczytanie już istniejących. Ponieważ nowo powstały mod nie posiada żadnych misji, należy je utworzyć.
- Start a new Singleplayer mission - utwórz nową misję dla trybu pojedynczego gracza
- American - dla kampanii amerykańskiej
- Arabian - dla kampanii arabskiej
- Russian - dla kampanii rosyjskiej
- Start a new Multiplayer map - utwórz nową mapę dla trybu gry wieloosobowej
- Load a map - wczytaj mapę
Powiedzmy, że chcemy utworzyć misję dla kampanii arabskiej. W tym celu należy zaznaczyć Start a new Singleplayer mission i wybrać Arabian. Aby potwierdzić, należy kliknąć na OK.
Powinno wyświetlić się powyższe okno. Należy w nim wpisać nazwę mapy (pole Name) oraz jej rozmiary: x size - szerokość, y size - wysokość. Aby ją utworzyć, należy kliknąć na OK.
Oto główne okno edytora. Wyposażony jest on w wiele funkcji przydatnych przy tworzeniu nowej mapy.
- A - W pierwszym wierszu znajdują się narzędzia zaznaczania obszaru. Następnie opcje podnoszenia i obniżania terenu, tworzenia jednostek, roślin i trawy.
- Wszystkie jednostki, rośliny, rzeki, trawy etc. można usunąć używając narzędzi poniżej (z rysunkowym koszem obok ikony).
- WAŻNE: aby umieścić cokolwiek na mapie, należy wybrać jednostkę/roślinę z menu (które wyświetli się w oknie D) i kliknąć SHIFT + LPM na mapie.
- B - Panel umożliwiający włączenie lub wyłączenie danej powłoki.
- C - Panel edycji terenu.
- D - Okno, w którym domyślnie wyświetlają się utworzone tereny (Areas), można je przełączyć, aby pokazywało listę jednostek. W oknie tym również wyświetlane są pod menu poszczególnych narzędzi, np. tworzenia ludzi, roślin etc.
Krok 3 - WYPAKOWYWANIE GOTOWEJ MAPY
W tym poradniku nie będę się rozpisywać na temat tworzenia map. Dla celów edukacyjnych użyję gotowej planszy. W tym celu należy zamknąć Editor i uruchomić program PakView (domyślnie: START -> WSZYSTKIE PROGRAMY -> ORIGINAL WAR -> MOD TOOLS -> PAKVIEW.EXE).
Po uruchomieniu programu powinno wyświetlić się powyższe okno. Należy kliknąć na Otwórz. Powiedzmy, że chcemy użyć mapy z drugiej misji kampanii amerykańskiej. W tym celu należy przejść do folderu ORIGINAL WAR/DISK2 i dwukrotnie kliknąć na AM02.OWP.
Tak wygląda zawartość pliku DATA2.OWP, aby wypakować ją do konkretnego miejsca, należy kliknąć na Wypadkuj do.
Wypakowałem pliki do folderu na Pulpicie, który nazwałem FILES. Należy wejść do folderu (w moim przypadku FILES/missions/_am/02) oraz usunąć niepotrzebne pliki.
Niepotrzebne pliki:
- code.bin
- crc.bin
- CZtexts.txt
- map.bin.old
- map.bin.txt.new
- map.bin.txt.old
- output.txt
- sectors.bin
- Texts.txt
- wszystkie pliki z rozszerzeniem .SRC
Należy także zedytować plik sources.txt i usunąć linijki mówiące o plikac .SRC. Dla jasności, ostateczna zawartość powinna wyglądać następująco:
SOURCE_CODES END_OF_SOURCE_CODES
Następnie należy utworzyć folder z misją oraz przenieść tam pliki. W tym celu należy wejść do folderu moda (domyślnie: C://PROGRAM FILES/ORIGINAL WAR/MODS/MYMOD). Ponieważ tworzymy kampanię arabską, należy przejść do MISSIONS/_AR i tam utworzyć folder misji, np. o nazwie 01. Następnie należy przenieść pliki mapy (z folderu ...MISSIONS/_AM/02) do 01.
Dla jasności. Zawartość folderu z modem powinna wyglądać jak na screenie powyżej.
Należy uruchomić Editor i wybrać Load a map w kreatorze tworzenia map. Następnie należy przejść do folderu _AR i dwukrotnie kliknąć na mapę (w naszym przypadku 01). Po pomyślnym załadowaniu planszy, okno edytora powinno wyglądać jak na screenie powyżej.
Na początku, należy usunąć wszystkie obszary/tereny (Areas). W tym celu należy je zaznaczyć (jak na screenie powyżej) i kliknąć na Delete w panelu po prawej stronie.
Następnie należy kliknąć w zakładkę Unit List i kliknąć na Remove All (w panelu po prawej stronie) i potwierdzić, aby usunąć wszystkie jednostki.
Pozostaje jeszcze odpowiednia konfiguracjia mapy. Należy kliknąć na FILES -> MAP PREFERENCES (w górnym pasku narzędziowym edytora).
Powinno pojawić się okno takie jak na screenie powyżej. Należy zmienić Player's Side oraz Fog Side na Side 2.
Następnie należy kliknąć w zakładkę Description i wybrać Arabian Campaign oraz Mission01 w okienkach wyboru powyżej. Należy kliknąć na Accept, aby zatwierdzić zmiany.
Dobrze jest zapisać mapę. W tym celu należy kliknąć na FILES -> SAVE (w górnym pasku z narzędziami edytora).
Krok 4 - PISANIE MISJI
Posiadając czystą mapę, można przejść do tworzenia misji. O ile gra sama w sobie napisana jest trudniejszym językiem, o tyle misje napisane są w SAIL. Jest to język programowania opracowany w Stanford University i w wielu aspektach przypomina znany i szeroko używany Pascal.
Na początek, należy kliknąć na WINDOWS -> SAIL EDITOR VISIBLE (na pasku narzędziowym edytora).
Powinno wyświetlić się powyższe okno. Jest ono puste, ponieważ mapa nie ma zdefiniowanych żadnych plików .SRC. Należy je utworzyć klikając na FILE -> NEW MODULE (na pasku narzędziowym okna). Powinno wyskoczyć okno dialogowe z prośbą o wpisanie nazwy. Standardowo główny plik z kodem nazywany jest Main.
Po utworzeniu pliku .SRC, powinna wyświetlić się jego zawartość. Jak widać na obecną chwilę jest on pusty.
Powiedzmy, że głównym bohaterem będzie losowy, arabski żołnierz. Przed chwilą przeszedł przez EON i musi jak najszybciej skontaktować się z przełożonym, aby podał mu bezpieczną drogę do bazy. W takim celu należy utworzyć dwie zmienne, będą to żołnierz i jego przełożony (ponieważ jest to kampania arabska, będzie to szejk). Trzeba więc użyć opcji EXPORT. Definiuje ona zmienne dla całego kodu misji.
W takim przypadku, w pierwszej linijce należy napisać:
EXPORT arsol1, ardw1;
Nazwa zmiennych może być dowolna. Przyjmijmy, że arsol1 to główny bohater, a ardw1 to jego przełożony. Zmienne oddzielone są przecinkiem, a na końcu należy postawić średnik [;]. Kolejną rzeczą jest wskazanie miejsca, z którego kod ma być wykonywany. W tym celu polecam kliknąć dwukrotnie na Enter, aby przejść do trzeciego wiersza. Następnie należy napisać:
STARTING begin
Od tego miejsca, wszystko co jest poniżej będzie wykonywane podczas gry.
Chcemy, aby nasz bohater nagle się pojawił (jako iż dopiero co przeszedł przez EON) i spróbował się z kimś skontaktować. Najpierw jednak, trzeba go utworzyć, gdyż narazie jest jedynie zmienną o wartości zerowej. Aby utworzyć postać, należy napisać:
InitUc; //inicjuje domyślne wartości dla UC uc_side := 2; //strona postaci, 2 - dla strony żółtych uc_nation := nation_arabian; //nacja, w tym przypadku Arabowie InitHc; //inicjuje domyślne wartości dla HC hc_class := class_soldier; //klasa postaci, w tym przypadku żołnierz hc_skills := [Rand(3, 6), Rand(1, 3), Rand(1, 3), Rand(1, 3)]; //umiejętności postaci (losowe 3-6 dla umiej. walki i 1-3 dla pozostałych) arsol1 := CreateHuman; //tworzy postać o podanych wyżej parametrach i przypisuje jej identyfikator zmiennej hc_class := class_desert_warior; //klasa postaci, w tym przypadku szejk hc_skills := [Rand(3, 6), Rand(1, 3), Rand(1, 3), Rand(1, 3)]; //umiejętności postaci (losowe 3-6 dla umiej. walki i 1-3 dla pozostałych) ardw1 := CreateHuman; //tworzy postać o podanych wyżej parametrach i przypisuje jej identyfikator zmiennej
Aby "zrzucić" postać na mapę o wybranych koordynantach, należy użyć funkcji PlaceUnitXY:
PlaceUnitXY(arsol1, 22, 7, true); //główny bohater będzie umieszczony na mapie o kordynantach x=22, y=7; true oznacza, iż będzie on "zrzucony"
Nie ma potrzeby umieszczania dowódcy (ardw1) na mapie, gdyż będzie on jedynie prowadził dialog radiowy.
Kolejną rzeczą jest natychmiastowe wyśrodkowanie mapy na głównym bohaterze podczas jego zrzutu. W tym celu należy użyć CenterNowOnUnits:
CenterNowOnUnits(arsol1); //natychmiastowo wyśrodkowuje ekran na głównym bohaterze.
Nareszcie możemy przystąpić do dialogów. Powiedzmy jednak, że chcemy aby postać poczekała dwie sekundy przed nawiązaniem kontaktu. Pomocna w tym celu będzie funkcja wait:
wait(0$2); //czeka dwie sekundy przed wykonywaniem dalszego kodu
Następnie dodajmy dialog:
Say(arsol1, 'ARS1'); wait(0$2); SayRadio(ardw1, 'ARD1'); Say(arsol1, 'ARS2');
Omówmy działanie powyższego kodu. Funckja Say (SayRadio tworzy efekt mówienia przez radio) używana jest do tworzenia dialogów w grze. Pierwsza zmienna w nawiasie (np. arsol1) informuje o osobie, a druga (ARS1) o tekście. W związku z tym postać o zmiennej arsol1 (główny bohater) powie tekst, zdefiniowany w pliku .WRI (danej misji) o identyfikatorze ARS1.
Powiedzmy, że przełożony pokieruje głównego bohatera na prawą stronę mapy. Jest to łatwa misja, bez wrogów. Należy więc iść prosto do celu, aby ją wygrać. Pomimo, iż wiadomo co robić, każda dobra misja powinna posiadać Cele Misji. Dodaje się je następująco:
ChangeMissionObjectives('O1'); // O1 to identyfikator celów misji, zdefiniowanych w pliku .WRI danej misji
Następnie należy utworzyć teren (Area) w miejscu, do którego główny bohater powinien dotrzeć.
Aby utworzyć teren, należy wybrać narzędzie zaznaczania (najlepsze do tego typu zadań jest narzędzie "dłoni" w lewym górnym rogu lewego panelu). Należy, trzymając LPM, utworzyć zamkniętą figurę (np. prostokąt), a następnie kliknąć na Create po prawej stronie menu Areas (pod oknem edycji mapy). Kolejnym krokiem jest zmiana nazwy nowo utworzonego terenu. By to uczynić należy kliknąć na nazwę terenu, znajdującą się na samym dole okna edytora (na screenie powyżej jest to Area42), usunąć ją i wpisać własną, np. exit1.
Następnie należy dodać kod, który wyświetli na mapie miejsce, do którego należy dojść. Wygląda on następująco:
SetAreaMapShow(exit1, true); //true oznacza iż teren exit1 zostanie zaznaczony na mapie
Pozostaje jeszcze napisanie kodu, który będzie sprawdzał czy główny bohater dotarł do oznaczonego miejsca. Jeżeli tam dojdzie, otrzyma medale i zakończy się misja. Robi się to używając funkcji every:
every 0$2 trigger IsInArea(arsol1, exit1) do begin SetAreaMapShow(exit1, false); //wyłącza zaznaczanie terenu ChangeMissionObjectives('O2'); //w naszym przypadku wykreśli cele misji AddMedal('wygrales', 1); //dodaje medal za wygraną do pamięci podręcznej AddMedal('wygrales', 1); //dodaje medal za wygraną do pamięci podręcznej AddMedal('wygrales', 1); //dodaje medal za wygraną do pamięci podręcznej GiveMedals('MAIN'); //rozdaje medale za wygraną misję YouWin; //zakańcza misję end;
Identyfikatory MAIN oraz wygrales definiuje sie w pliku .WRI.
Należy pamiętać iż bloki every stawia się zawsze poza głównym blokiem. Należy więc napisać end; przed rozpocząciem powyższego bloku, aby zamknąć poprzedni blok. Dla jasności ostateczny kod misji powinien wyglądać następująco:
EXPORT arsol1, ardw1; STARTING begin InitUc; uc_side := 2; uc_nation := nation_arabian; InitHc; hc_class := class_soldier; hc_skills := [Rand(3, 6), Rand(1, 3), Rand(1, 3), Rand(1, 3)]; arsol1 := CreateHuman; hc_class := class_desert_warior; hc_skills := [Rand(3, 6), Rand(1, 3), Rand(1, 3), Rand(1, 3)]; ardw1 := CreateHuman; PlaceUnitXY(arsol1, 22, 7, true); CenterNowOnUnits(arsol1); wait(0$2); Say(arsol1, 'ARS1'); wait(0$2); SayRadio(ardw1, 'ARD1'); Say(arsol1, 'ARS2'); ChangeMissionObjectives('O1'); SetAreaMapShow(exit1, true); end; every 0$2 trigger IsInArea(arsol1, exit1) do begin SetAreaMapShow(exit1, false); ChangeMissionObjectives('O2'); AddMedal('wygrales', 1); AddMedal('wygrales', 1); AddMedal('wygrales', 1); GiveMedals('MAIN'); YouWin; end;
Kod należy zapisać, kliając na FILE -> SAVE MODULE (w górnym pasku narzędziowym okna edycji SAIL), a następnie skompilować, klikając na COMMANDS -> COMPILE (w górnym pasku narzędziowym okna edycji SAIL). Następnie należy zapisać mapę (jako iż utworzony został teren) i wyłączyć edytor.
Krok 5 - TWORZENIE PLIKU .WRI
W pliku .WRI danej misji definiuje się dialogi, zapytania, teksty medali, cele misji, tekst przegranej etc. Tworzy się go w zwykłym edytorze tekstowym (np. WordPad). Dialogi tworzy się w następujący sposób:
$ identyfikator tekstu użyty w SAIL - tekst
Powiedzmy, że chcemy aby w momencie wywołania identyfikatora ARS1, główny bohater powiadomił przełożonego o tym, że dotarł na miejsce (oczywiście mówiąc szyfrem):
$ ARS1 - Tu Dromader, wzywam Saif, over!
Według kodu, identyfikator kolejnego tekstu to ARD1. Będzie on wypowiedziany przez szejka:
$ ARD1 - Tu Saif. Skieruj się na wschód.
Na końcu odpowiedź żołnierza:
$ ARS2 - Skieruj się na wschód. Przyjąłem.
Następnie należy napisać cele misji. Tworzy się je w następujący sposób:
# identyfikator celów misji użyty w SAIL Add Main identyfikator konkretnego celu misji - tekst #
Identyfikatorem celów misji użytych w naszym modzie jest O1. Natomiast identyfikatorem konkretnego celu misji może być dowolny wyraz, np. east. W takim przypadku cele misji w pliku .WRI powinny wyglądać następująco:
# O1 Add Main east - Przejdź na wschód. #
W kodzie jest jeszcze jeden identyfikator celów misji - O2. Użyjemy go do wykreślenia celu misji (kiedy zostanie on osiągnięty):
# O2 Out east #
Ostatnią rzeczą pozostaje zdefiniowanie tekstu dla medali:
^ główny identyfikator medali * identyfikator konkretnego medalu + tekst
W naszym przypadku jest to:
^ MAIN * wygrales + Przeszedłeś na wschód. *
Podsumowując, ostateczna zawartość pliku .WRI powinna wyglądać następująco:
$ ARS1 - Tu Dromader, wzywam Saif, over! $ ARD1 - Tu Saif. Skieruj się na wschód. $ ARS2 - Skieruj się na wschód. Przyjąłem. # O1 Add Main east - Przejdź na wschód. # # O2 Out east # ^ MAIN * wygrales + Przeszedłeś na wschód. *
Należy pamiętać, aby na końcu zostawić jedną pustą linijkę!
Jako iż jest to plik .WRI pierwszej misji, należy go nazwać Txt01 i zapisać jako dokument Unicode koniecznie dodając .WRI w nazwie. Następnie należy przejść do folderu z modem i utworzyć folder Campaigns, a w nim Ar (jako iż jest to arabska kampania). Plik Txt01.wri należy umieścić w katalogu CAMPAIGNS/AR.
Misję można przetestować w edytorze, klikając na MODE -> GO TO GAME MODE (na górnym pasku narzędziowym edytora). Mam nadzieję, że powyższy poradnik choć trochę przybliżył Wam pojęcie na temat powstawania oraz tworzenia modów. Po więcej informacji zapraszam na WIKI portalu OW Support: LINK.