Colobot/Tworzenie własnych poziomów
Wprowadzenie
[edytuj]Konwencje stosowane w podręczniku
[edytuj]Uwaga!
|
Tekst na zielonym tle
Prezentowane są tu praktyczne informacje |
tu są instrukcje
W niebieskiej ramce prezentowane są fragmenty plików misji lub programów. Pogrubiony tekst oznacza wyszczególnienie informacji, a kursywa - symbol, do którego odwołanie znajduje się w dalszej części tekstu. W przypadku opisów składni polecenia CBOT - pogrubione mogą zostać słowa kluczowe.
Co potrzebne
[edytuj]Do tworzenia własnych poziomów będziemy potrzebowali następujących narzędzi i programów:
- System operacyjny, na którym będą działać poniższe narzędzia, czyli Windows 98/Me/2k/XP/Vista. Bardziej ambitni użytkownicy mogą się pokusić o zainstalowanie Colobota na Linuxie, np. na emulatorze Wine, Cedega itp.
- Gra Colobot
- Edytor tekstu: na przykład vim z kolorowaniem składni dla colobota.`
- Zaawansowany program graficzny, np. Photoshop, GIMP itp.
- Prosty program graficzny do rysowania, np. windowsowy Paint
Słowniczek
[edytuj]- wysokość bezwzględna - wysokość względem koloru białego w pliku rzeźby terenu.
- kolor bez przezroczystości - zapis koloru (zobacz niżej) bez podania czwartej wartości.
- ułamek jedynkowy - wartość większa od zera i mniejsza od jedynki. Ułamek dziesiętny.
Formatowanie wartości
[edytuj]Pozycja
[edytuj]x;y
- x, y - położenie punktu
Kolor
[edytuj]r;g;b;a
- r, g, b - wartości kolorów: czerwonego, zielonego i niebieskiego. Możliwe wartości: 0 - 255.
- a - przezroczystość. Od 0 do 255.
r;g;b
Określenie koloru bez przezroczystości.
Środowisko pracy, foldery
[edytuj]Wszystkie własne poziomy tworzyć będziemy w katalogu user. W nim muszą znaleźć się katalogi opisujące grupy poziomów (w praktyce planety). Najlepiej w nazwach folderów stosować na początku liczby, np.
01_Merkury 02_Wenus 03_Ziemia 04_Mars
itd. Dzięki temu planety będą według naszej kolejności, nie alfabetycznej.
Ścieżki do plików
[edytuj]Podczas tworzenia misji należy użyć plików aby opisać rzeźbę terenu, zasoby planety, tło, programy Obcych itp. Pliki te powinny znaleźć się w katalogu planety. Można korzystać też ze standardowych plików (używanych we wbudowanych misjach).
Aby odwołać się do stworzonego przez siebie pliku np. terrain1.bmp
, który będziemy potrzebować np. na Wenus, należy ten plik umieścić w katalogu user\02_Wenus
. Z kodu misji w odpowiednim miejscu trzeba napisać: %user%\terrain1.bmp
. Przykład:
Jeśli korzystasz z wbudowanych plików, nie poprzedzaj nazwy pliku tekstem "%user%\
"
Plik scene00.txt
[edytuj]W tym pliku jest zamieszczona nazwa planety. Jego zawartość to:
Title.J text="opisowa" resume="krótka"
- J - język do użycia, w przypadku wielojęzykowości może być kilka linii
P | polski |
E | angielski |
F | francuski |
- opisowa - nazwa opisowa, widoczna na liście misji.
- krótka - nazwa użyta przy zapisywaniu.
Pliki misji
[edytuj]W tych plikach zapisana jest treść misji. Zawartość takiego pliku przedstawiono poniżej.
- Nazewnictwo plików misji
Nazwy, są to "scenenn.txt
". nn to numer kolejny z zerem (np. scene01.txt
)
Ważne informacje o składni
[edytuj]Komentarze
[edytuj]Tu wpisz jakieś instrukcje (choć nie jest to konieczne) // tu wpisz komentarz
Komentarze zaczynają się od znaków //
a kończą wraz z końcem linii.
Zapis liczb
[edytuj]Liczby zapisujemy z kropką jako seperatorem dziesiętnym.
Komendy dotyczące nazw i plików pomocy
[edytuj]Nazwa misji
[edytuj]Title.J text="tytuł" Resume.J text="opis"
Te linie przechowują tytuł i opis misji.
- J - język, jak przy scene00.txt
- tytuł - Zwięzły tytuł, widoczny na liście
- opis - tekst widoczny w polu "streszczenie"
Domyślna nazwa nowych programów
[edytuj]ScriptName.J text="nazwa"
- J - język
- nazwa - Domyślna nazwa funkcji
Pliki pomocy
[edytuj]Instructions name="ścieżka" // Zadania misji Satellite name="ścieżka" // Raport z satelity Loading name="ścieżka" // Programy z Houston SoluceFile name="ścieżka" // Rozwiązanie HelpFile name="cbot.txt" // Podręcznik programowania
Definiuje pliki pomocy pokazywane w SatCom. Jeśli nie chcesz definiować wszystkich, pomiń niektóre linie.
- ścieżka - Ścieżka do pliku. Pamiętaj o
%user%\
w przypadku plików w katalogu użytkownika!
Nazwy plików misji zwyczajowo powinny zaczynać się od:
Zadania misji | mhelp |
Raport satelitarny | minfo |
Programy | mload |
Rozwiązanie | msolu |
Takie nazewnictwo nie jest jednak konieczne.
Przykład:
Satellite name="%user%\minfo01.txt"
oraz:
Satellite name="%user%\sat01.txt"
Wyświetlenie SatCom na początku misji
[edytuj]Wystarczy na końcu wiersza dodać "immediat=1"
aby otworzył się SatCom na początku misji z wybraną stroną. Przykład:
Instruction name="%user%\INSTRUCT1.txt" immediat=1
spowoduje otwarcie SatCom z zadaniami misji na jej początku. Często stosowane w Ćwiczeniach i Wyzwaniach programistycznych.
Pliki obrazów wygranej / przegranej
[edytuj]EndingFile win=w lost=p
- w - numer pliku wygranej (
winw.txt
z dodanymi zerami) - p - numer pliku przegranej (
lostp.txt
z dodanymi zerami)
EndingFile win=12 lost=0
Plik wygranej win012.txt
, plik przegranej lost000.txt
(z katalogu wbudowanych misji)
Niestety nie można zdefiniować własnych plików...
Czas wyświetlania informacji
[edytuj]MessageDelay factor=n
- n - czas wyświetlania. 1 - normalne, 2 - 2 razy dłużej, 0.5 - o połowę krócej.
W związku z tym, że domyślnym czasem jest 5 sekund, można przeliczyć na sekundy:
- n - wartość do MessageDelay
- t(s) - czas w sekundach
Komendy dotyczące otoczenia
[edytuj]Muzyka w tle
[edytuj]Audio track=n
- n - numer ścieżki z płyty CD-audio, 0 oznacza ciszę.
Możesz nagrać swoją własną ścieżkę dźwiękową i udostępniając swoje poziomy, udostępnić także obraz ISO takiej płyty |
Kolor otoczenia
[edytuj]AmbiantColor air=ląd water=woda
- ląd - Kolor "otaczający" na lądzie.
- woda - Kolor "otaczający" w wodzie.
Kolor otaczający to kolor, który jest niezależny od źródeł światła.
Tej komendy należy użyć jedynie do budowania "nastroju" misji. Typowe wartości to:
AmbiantColor air=102;102;102;102 water=20;20;20;20
Zwykle kolor powienien być szary (wszystkie wartości RGB takie same). Jeśli ma być ciemniej, należy zmniejszyć te wartości. Przezroczystość jest ignorowana.
Można udawać lawę robiąc kolor wody jak kolor lawy, niestety odbicie nadal zachowuje się jak dla wody |
Kolor zamglonych obiektów
[edytuj]Obiekty, które są słabo widoczne mają odmienny kolor od standardowego. Można ustawić to komendą:
FogColor air=ląd water=woda
Kolory są formatowane jak zwykle. Kolor wody zwykle jest zielonkawy lub niebieski, np. 10;20;100;0
. Kolor lądu zależy od nastroju planety.
Kolor robotów
[edytuj]VehicleColor color=kolor
- kolor - kolor fragmentów robotów i budynków, użyty zamiast standardowego szarego.
Kolor roślin
[edytuj]GreeneryColor color=kolor
- kolor - kolor roślin, będzie identyczny dla wszystkich!
Kolor Obcych
[edytuj]InsectColor color=kolor
- kolor - kolor Obcych, będzie identyczny dla wszystkich!
Widoczność
[edytuj]DeepView air=ląd water=woda
Wartości podajemy w metrach. Decydują one o tym, jak daleko widać.
FogStart air=ląd water=woda
Tutaj wartości (ułamki jedynkowe) decydują o tym, jak gęsta jest mgła. Im mniejsza wartość, tym gęstsza, tzn. tym wcześniej się zaczyna. Aby obliczyć, gdzie zaczyna się mgła (od kamery 3D) należy pomnożyć wartość z DeepView przez tę z FogStart. Przykład:
DeepView air=200 FogStart air=0.4
Mgła zacznie się 80m od kamery.
Brud
[edytuj]SecondTexture rank=t
- t - typ brudu, wartość od 0 do 8. 0 oznacza brak brudu. Wartości 1 - 8 różne jego rodzaje.
Tło
[edytuj]Background image="obraz" up=góra down=dół
Tworzy tło (np. nieruchomy fragment mgławicy).
- obraz - Plik z obrazem do użycia (BMP lub TGA). Maksymalne wymiary: 1280x480px.
- góra, dół - Kolory do użycia, gdy gracz wyłączy opcję "Niebo". Wtedy zostanie wyświetlony gradient tych kolorów (płynne przejście).
Background up="góra" down="dół" cloudUp="chmury-góra" cloudDown="chmury-dół"
- góra, dół - kolory do użycia (gradient) (przy wyłączonej opcji Niebo)
- chmury-góra, chmury-dół - Kolory do gradientu, gdy opcja Niebo jest włączona. Chmury (polecenie
TerrainCloud
) zostaną nałożone na gradient.
Background up="góra" down="dół"
Tworzy prymitywne tło wyłącznie z gradientu.
Efekt soczewki
[edytuj]FrontsizeName image="obraz"
- obraz - Nazwa pliku z obrazem dolnej połówki efektu soczewki obiektywu. Tłem powinien być kolor czarny.
Jeśli nie chcesz tworzyć pliku, po prostu napisz:
FrontsizeName image="lens5.tga"
Ruchome ciała niebieskie
[edytuj]przykład:
Planet pos=1.2;0.2 dim=0.40 speed= 0.000 dir=0.5 image="planet02.tga" uv1=0.0;0.0 uv2=0.5;0.5
- pos - pozycja na niebie
- speed - prędkość
- image - obraz
W przygotowaniu: opisać zagadnienie |
Komendy dotyczące gruntu
[edytuj]Komenda startowa
[edytuj]TerrainGenerate vision=widoczność depth=1 hard=twardość
- widoczność - Widoczność gruntu, musi być co najmniej dwukrotnością widoczności objektów. (
DeepView
) - twardość - Twardość gruntu, decyduje o odgłosach. Ułamek jedynkowy.
Wiatr
[edytuj]TerrainWind speed=NS;WE
- NS - szybkość wiatru z północy na południe. Użyj wartości ujemnej aby wiał w kierunku przeciwnym.
- WE - szybkość wiatru z zachodu na wschód. Użyj wartości ujemnej aby wiał w kierunku przeciwnym.
Burze elektromagnetyczne
[edytuj]TerrainBlitz sleep=s delay=d magnetic=m
- s - Czas przed pierwszym uderzeniem. Użyteczne, gdy nie ma statku kosmicznego (czas na zbudowanie Odgromika).
- d - Czas pomiędzy błyskawicami.
- m - Promień "pochłaniania" piorunów przez objekty. Jeśli piorun uderzy dostatecznie blisko objektu, zostanie on zniszczony. 0 spowoduje, że burza będzie nieszkodliwa.
Rzeźba terenu
[edytuj](zaczynają się ciekawsze rzeczy ;)
TerrainRelief image="plik" factor=f
- plik - Obraz rzeźby terenu do użycia. Musi to być bitmapa w skali szarości (256 odcieni) o wymiarach 161x161px. Im ciemniej na obrazie, tym wyżej. Np. mała czarna plamka oznacza wysoką i stromą górę.
- f - Zależność wysokości od koloru, zazwyczaj
1
.
Zasoby podglebia
[edytuj]TerrainResource image="plik"
- plik - Obraz zasobów gruntu (bitmapa 256 kolorów z odpowiednią paletą). Kolory przedstawiono poniżej.
RGB | Indeks palety kolorów | Rodzaj zasobu |
---|---|---|
255;0;0 | 5 | Ruda tytanu |
255;255;0 | 35 | Ruda uranu |
0;255;0 | 30 | Złoże energii |
0;204;0 | 24 | Klucz A |
51;204;0 | 25 | Klucz B |
102;204;0 | 26 | Klucz C |
153;204;0 | 27 | Klucz D |
Pobierz obraz bazowy do tworzenia plików zasobów.
Instrukcja rysowania zasobów
|
Woda
[edytuj]TerrainWater image="obraz" level=poziom moveX=faleX moveY=faleY color=kolor brightness=efekt
- obraz - Ścieżka do pliku z obrazem tekstury powierzchni wody. Plik BMP lub TGA.
- poziom - Poziom wody względem koloru białego w pliku rzeźby terenu.
- faleX - wielkość falowania poziomego
- faleY - wielkość falowania pionowego
Ponieważ rozpryski i "kółka" na wodzie nie są teksturowane obrazem, a jednolitym kolorem, należy zdefiniować ten kolor:
- kolor - Kolor wody
- efekt - Jasność efektu rozbryzgiwania się wody przy wchodzeniu do niej. Ułamek jedynkowy.
TerrainLava mode=1
Powoduje, że woda zamienia się w lawę (wejście powoduje zniszczenie lub śmierć).
Chmury
[edytuj]TerrainCloud image="obraz" level=poziom
- obraz - Ścieżka do pliku BMP lub TGA, wygląd chmur. Maksymalne wymiary: 640x480px.
- poziom - Wysokość chmur.
Proste tekstury gruntu
[edytuj]TerrainInitTextures image="nazwa" dx=wymiarX dy=wymiarY table=rozkład
- nazwa - część nazwy pliku (z rozszerzeniem). Przed kropką sygnalizującą rozszerzenie zostanie włączony trzycyfrowy numer (zobacz poniżej)
- wymiarX, wymiarY - wymiary "tabeli" tekstur
- rozkład - oddzielone średnikami numery plików, które wypełnią tabelę
- Przykład
TerrainInitTextures image="%user%\gr.bmp" dx=5 dy=2 table=1;2;3;4;5;18;19;20;2;3
Spowoduje wygenerowanie "tabeli" tekstury z teksturami z plików z katalogu użytkownika:
gr001.bmp | gr002.bmp | gr003.bmp | gr004.bmp | gr005.bmp |
gr018.bmp | gr019.bmp | gr020.bmp | gr002.bmp | gr003.bmp |
Taka konstrukcja będzie powtarzana poziomo i pionowo.
Wymiary pliku powinny wynosić 512x512px, bitmapa 24 bitowa, plik BMP
Zaawansowane tekstury gruntu
[edytuj]W Colobocie istnieje możliwość szczegółowego zaprogramowania, jaki rodzaj tekstury będzie wykorzystywany na określonej wysokości, stromiźnie itp. Np. możliwe jest coś takiego:
- Na wysokości powyżej 40m skała. Powyżej 43m śnieg, o ile nie jest stromo i śnieg tylko na 70% możliwej powierzchni.
Mało tego, tekstury i przejścia między nimi mogą być malowane w programie graficznym. Bardzo dobry do tego jest darmowy GIMP.
Zacznijmy od pliku graficznego. Musi być to 24-bitowa bitmapa o wymiarach 512x512px. Jest ona podzielona na 16 kwadratów o wymiarach 128x128px. Jest to obraz przejścia między teksturami. W lewym górnym rogu jest jedna tekstura, a w prawym dolnym inna. Pozostałe kwadraty to przejścia. Konieczne jest uwzględnienie wszystkich kombinacji, dlatego jest ich 14. Na obrazku obok widoczny jest układ przejść.
Następnie musimy napisać coś takiego:
TerrainMaterial id=1 image="%user%\gnd01.bmp" u=0.00 v=0.00 up=1 down=1 left=1 right=1 hard=0.5 TerrainMaterial image="%user%\gnd01.bmp" u=0.25 v=0.00 up=2 down=1 left=1 right=1 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.50 v=0.00 up=1 down=1 left=1 right=2 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.75 v=0.00 up=2 down=1 left=1 right=2 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.00 v=0.25 up=1 down=2 left=1 right=1 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.25 v=0.25 up=2 down=2 left=1 right=1 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.50 v=0.25 up=1 down=2 left=1 right=2 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.75 v=0.25 up=2 down=2 left=1 right=2 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.00 v=0.50 up=1 down=1 left=2 right=1 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.25 v=0.50 up=2 down=1 left=2 right=1 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.50 v=0.50 up=1 down=1 left=2 right=2 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.75 v=0.50 up=2 down=1 left=2 right=2 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.00 v=0.75 up=1 down=2 left=2 right=1 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.25 v=0.75 up=2 down=2 left=2 right=1 hard=0.3 TerrainMaterial image="%user%\gnd01.bmp" u=0.50 v=0.75 up=1 down=2 left=2 right=2 hard=0.3 TerrainMaterial id=2 image="%user%\gnd01.bmp" u=0.75 v=0.75 up=2 down=2 left=2 right=2 hard=0.2
- id=1, id=2 - oznaczają, że ten fragment obrazu tekstury w całości ma jedną teksturę o podanym numerze. Numery nie mogą się powtarzać!
- image="..." - pod trzykropek należy podstawić ścieżkę do pliku BMP.
- u=.... v=.... - położenie fragmentu na obrazie.
- up=... down=... left=... right=... - oznacza numery "pełnych" tekstur, do których będzie przylegać ten fragment.
To co tu napisałem zapewne wydaje ci się niezrozumiałe, dlatego poniżej znajduje się instrukcja.
Jeśli mamy wiele tekstur, to przy przejściach np. 1 na 2 dajemy normalne id'y, ale już przy 2 na 3 będzie trochę dziwnie:
TerrainMaterial id=4 image="%user%\gnd02.bmp" u=0.00 v=0.00 up=2 down=2 left=2 right=2 hard=0.5 ... // tu podstaw przejście TerrainMaterial id=3 image="%user%\gnd01.bmp" u=0.00 v=0.00 up=3 down=3 left=3 right=3 hard=0.5
Zastosowaliśmy 4 zamiast 2, aby id'y się nie powtarzały.
Po wszystkich opisach plików graficznych należy użyć poleceń:
TerrainInit id=numer
Początkowe pokrycie całej planety jedną teksturą. Obowiązkowe na początku!
TerrainLevel id=numer [ min=minimum ] [ max=maksimum ] [ slope=pochylenie ] → [ center=pozycja radius=promień ] freq=występowanie
Pokrycie planszy teksturą według wielu kryteriów:
- numer - id tekstury, wartości oddzielone średnikami spowodują losowe wymieszanie.
- minimum, maksimum - minimalna i maksymalna wysokość, na której może być tekstura (względem koloru białego w pliku rzeźby terenu)
- pochylenie - wartość od -10 do 10, nachylenie gruntu na którym zostanie użyta tekstura. Wartości dodatnie dążą do jak najbardziej płaskiego gruntu, ujemne do jak najbardziej pochyłego.
- pozycja, promień - środek i promień obszaru "panowania" tekstury. Jeśli nie będzie tych wartości, tekstura "opanuje" całą planszę. Pozycja jest formatowana tak jak dla obiektów.
- występowanie - Częstotliwość występowania na obszarze określonym pozostałymi parametrami, podana w procentach ze znakiem "%".
Parametry w nawiasach kwadratowych nie są obowiązkowe. Nie należy przepisywać do pliku misji nawiasów kwadratowych !!!
Warstwy tekstur oczywiście nakładają się i tworzą płynne przejścia.
Praktyczny przykład:
TerrainLevel id=1;2 min=30 max=50 slope=6.0 freq=96% TerrainLevel id=3 slope=0.3 center=0;0 radius=50 freq=100%
A oto realizacja marzenia z początku podrozdziału (przyjmujemy, że skała ma id=1, śnieg id=2)
TerrainLevel id=1 min=40 freq=100% TerrainLevel id=2 min=43 slope=8.0 freq=70%
Instrukcja końcowa
[edytuj]Po nałożeniu tekstury, jednym lub drugim sposobem, należy utworzyć grunt poleceniem:
TerrainCreate
Warstwa mgły
[edytuj]CreateFog pos=pozycja height=ww dim=promień delay=szybkość type=typ
Tworzy poziomą warstwę mgły.
- pozycja - lokalizacja do utworzenia mgły
- ww - wysokość względem pozycji. Np. jeśli wynosi 1, to mgła będzie 1 metr nad gruntem.
- promień - geometryczny promień mgły
- szybkość - szybkość ruchu mgły
- typ - rodzaj:
type=... | Kolor |
---|---|
0 lub 1 | niebieski |
2 lub 3 | ognisty krąg |
4 lub 5 | szary |
6 lub 7 | żółty |
Kolorowanie gruntu
[edytuj]GroundSpot pos=pozycja radius=promień color=kolor
Koloruje grunt promień metrów dookoła pozycji pozycja kolorem bez przezroczystości kolor.
GroundSpot min=minimum max=maksimum color=kolor
Koloruje grunt na wysokościach bezwzględnych od minimum do maksimum kolorem bez przezroczystości kolor.
Komendy dotyczące obiektów
[edytuj]W grze skądś muszą się brać roboty, budynki, surowce itd. Wszystkie te objekty programowane są w pliku misji.
Na początku należy napisać:
BeginObject
Potem można już tworzyć objekty. Podstawowa składnia polecenia jest następująca:
CreateObject pos=x;y dir=d type=t
- x, y - pozycja według układu współrzędnych mapy.
Jak w praktyce sprawdzić pozycję przedmiotu?
Należy przemieścić się dowolnym robotem / astronautą w miejsce, w którym ma być przedmiot. Następnie trzeba wprowadzić kody: najpierw |
- d - kierunek objektu:
Wartości pośrednie odpowiadają pośrednim kierunkom, np. 1.25 to SW.
- t - typ objektu, w większości przypadków taki sam jak stała w CBOT.
Aby utworzyć kostkę tytanu w samym środku planszy należy napisać:
CreateObject pos=0;0 dir=0 type=Titanium
Użyteczne przedmioty
[edytuj]Czasem zachodzi taka potrzeba, aby ukryć jakiś przedmiot dopóki, dopóty nie nie zostanie "odkryty" przez zbliżenie się do niego. Nie ma go na mapie, i nie można go znaleźć przy pomocy instrukcji radar
.
CreateObject ... proxyActivate=1 proxyDistance=d
- d - wymagana odległość do odkrycia przedmiotu
CreateObject pos=-100;90 dir=1.5 type=Derrick proxyActivate=1 proxyDistance=50
Zostanie stworzony użyteczny przedmiot - kopalnia. Będzie dostępny po zbliżeniu się do niego na 50m.
Ogniwa elektryczne
[edytuj]CreateObject ... power=p
- p - Moc ogniwa elektrycznego robota. Dozwolone są następujące wartości:
Wartość / zakres | Znaczenie |
---|---|
-1 | Brak ogniwa elektrycznego |
0 - 1 | Moc normalnego ogniwa elektrycznego (dozwolone ułamki) |
1 - 100 | Moc atomowego ogniwa elektrycznego |
Uwaga!
|
Programy
[edytuj]CreateObject ... scriptn="plik"
Załącza do robota lub Obcego program.
- n - numer programu w bazie robota
- plik - ścieżka do programu, w przypadku plików zlokalizowanych w katalogu planety należy poprzedzić ją
%user%\
(zobacz wyżej informacje o ścieżkach do plików)
CreateObject ... run=n
Uruchamia program:
- n - numer programu w robocie
CreateObject pos=-140;50 dir=0.2 type=AlienQueen script1="%user%\queen1.txt" run=1
Tworzy Królową Obcych, która wykonuje program z pliku queen1.txt
z katalogu planety.
Przekazywanie parametrów
[edytuj]CreateObject ... cmdline=param
- param - parametry przekazywane do programu, oddzielone średnikami. Muszą być to liczby typu float.
CreateObject pos=-140;50 dir=0.2 type=AlienWorm script1="%user%\wormatt.txt" → run=1 cmdline=5;-40;20;100;550
Spowoduje przekazanie parametrów:
Parametr | Wartość |
---|---|
0 | 5 |
1 | -40 |
2 | 20 |
3 | 100 |
4 | 550 |
Informacje na temat pobierania parametrów przez programy znajdują się niżej.
Podatność na zniszczenia
[edytuj]CreateObject ... magnifyDamage=d
- d - Podatność na zniszczenia.
0
oznacza, że jest niezniszczalny - robot może wchodzić do wody nawet jeśli nie jest nurkiem (Subber
), pioruny go nie niszczą.1
to wartość standardowa, powyżej 1 to większe zniszczenia. Między 0 a 1 - większa odporność.
CreateObject pos=0;3 dir=0.5 type=Me magnifyDamage=0.1
Spowoduje to, że człowiek będzie odporniejszy.
Opcje typu prawda / fałsz
[edytuj]CreateObject ... selectable=0
Tworzy objekt niemożliwy do wybrania. Bardzo użyteczne dla Obcych - selectinsect
jest bezskuteczny.
CreateObject ... trainer=1
Tworzy robota, którym można sterować jedynie przy pomocy programu. Tylko taki robot "likwiduje" waypoint'y.
Opcje statku kosmicznego
[edytuj]CreateObject ... type=SpaceShip run=n
- n - akcja do wykonania:
run=... | Akcja |
---|---|
0 | Drzwi są otwarte, nic się nie dzieje |
1 | Lądowanie i otwarcie drzwi |
2 | Ruch statku kosmicznego nad ziemią, następnie osadzenie i otwarcie drzwi (należy połączyć z dźwigiem) |
3 | Tryb specjalny dla plików wygranej lub przegranej misji |
11 | Podróż międzyplanetarna i lądowanie. |
Opcje człowieka
[edytuj]CreateObject ... option=n
- n - Numer opcji wyglądu człowieka:
Numer | Hełm | Plecak | Uwagi |
---|---|---|---|
0 | TAK | TAK | Kombinacja domyślna, najczęściej występująca w grze |
1 | NIE | TAK | Wejście do wody powyżej szyi powoduje śmierć |
2 | NIE | NIE | Wejście do wody powyżej szyi powoduje śmierć,nie można latać! |
3 i więcej | NIE | NIE | Znika ciało, są same ręce, nogi, okulary i działo neutronowe |
Jaja
[edytuj]CreateObject ... type=AlienEgg autoValue1=czas autoType=typ autoString=skrypt run=1
Tworzy jajo, z którego wykluje się określony Obcy po określonym czasie z określonym programem.
- czas - czas w sekundach po którym nastąpi wyklucie
- typ - kategoria Obcego
- skrypt - program dla obcego
- run=1 - powoduje, że Obcy wykluje się z jaja.
run=0
spowoduje, że jajo nigdy się nie otworzy.
Możesz jaju przekazać parametry przy pomocy parametru cmdline , a Obcy zastosuje te parametry tak, jakbyś robił to normalnie
|
Efekty pirotechniczne
[edytuj]CreateObject ... pyro=efekt
- efekt - Efekt, jaki ma towarzyszyć objektowi. Dostępne wartości:
pyro=WIN
- kolorowe iskry z wnętrza objektupyro=LOST
- dymienie się dookoła objektu
CreateObject pos=10;-30 dir=0 type=Firework pyro=WIN
Stworzy fajerwerk strzelający iskrami
Działanie skrytki
[edytuj]Aby ukryć coś w Skrytce (Vault
), należy po prostu umieścić to wewnątrz niej, np.
CreateObject pos=10;30 dir=0 type=Vault proxyActivate=1 proxyDistance=30 CreateObject pos=10;30 dir=0.5 type=WingedOrgaShooter power=100 range=500 magnifyDamage=0
Tworzy skrytkę, a wewnątrz niej niezniszczalne (!) latające działo organiczne.
Uwaga!
|
Lista obiektów
[edytuj]Ta lista obejmuje obiekty, których nie ma wyjaśnionych w SatCom, lub ich nazwy są inne.
Kategoria | Znaczenie | Stała w CBOT |
---|---|---|
Target1 | Słup z kolcami do ćwiczeń lotniczych | Target1 |
Target2 | Punkt kontrolny do ćwiczeń lotniczych | Target2 |
Rośliny | ||
Greenery1..4 | Ciemnozielony krzew |
(nie występuje) |
Greenery5..7 | Kilka jasnozielonych liści | |
Greenery8..9 | Kaktus bez kolców | |
Greenery10..14 | Drzewko z dużymi liśćmi | |
Greenery15..19 | Paprotka | |
Tree0..3 | Suche drzewo | |
Mushroom1 | Grzyb (neutralny) | |
Mushroom2 | Trujący grzyb | |
MegaStalk0..4 | Wielkie dziwne drzewo | |
MegaStalk5 | Drzewo uniemożliwiające latanie (Grawi-roślina) | |
Quartz0..3 | Kryształy (od najmniejszego do największego) | |
Ozdoby | ||
Barrier0 | Krótka barierka |
Barrier |
Barrier1 | Długa barierka | |
ApolloLEM ApolloFlag |
Moduły księżycowe | (nie występuje) |
Firework | Fajerwerk | (nie występuje) |
Home | Dziwny domek (obraz wygranej misji na Nowej Ziemii) | (nie występuje) |
Ruiny i wraki | ||
WreckBotw1..2 | Wrak robota z kółkami (transporter) |
Wreck |
WreckBott1 | Wrak robota z małymi gąsienicami (działo organiczne) | |
WreckBott2 | Wrak robota z małymi gąsienicami (transporter) | |
WreckBotr1..2 | Wrak robota z dużymi gąsienicami (typu Osłaniacz, Recykler itp.) | |
RuinBaseCamp | Ruiny statku kosmicznego - podstawa |
Teoretycznie - |
RuinHeadCamp | Ruiny statku kosmicznego - "kapelusz" "grzybka" | |
RuinConvert | Ruiny podstawy huty lub stacji energetycznej | |
RuinDoor | Ruiny drzwi huty | |
RuinBotFactory | Ruiny fabryki robotów - kawałek ściany (użyteczne do ukrycia np. tytanu) | |
RuinPedestal | Podstawa radaru lub stacji przekaźnikowej | |
RuinSupport | Metalowy odpad w kształcie "[ "
| |
Różne | ||
ApolloJeep | Pojazd księżycowy "LRV" (można nim jeździć!) | (nie występuje) (!) |
Portico | Dźwig portowy | (niezbadane) |
Tech | Inżynier | Tech |
Bag | Zestaw przetrwania | (niezbadane) |
Objekty udokumentowane, jednak niemożliwe do budowania (wybór niestandardowych) | ||
SpaceShip | Statek kosmiczny | |
PracticeBot | Robot treningowy | |
TargetBot | Robot - cel | |
Houston | Centrum kontroli misji | |
Vault | Skrytka | |
StartArea | Podest startowy | |
GoalArea | Podest końcowy | |
AlienNest | Gniazdo Obcych | |
WayPoint | Punkt kontrolny | |
Mine | Mina | |
OrgaMatter | Materia organiczna | |
BlackBox | Czarna skrzynka | |
TNT | Ładunek wybuchowy | |
KeyA..D | Klucze A, B, C, D |
W przygotowaniu: dokończyć listę |
Oświetlenie
[edytuj]Przykładowe instrukcja: CreateLight dir= 0.0;-1.0; 0.0 color= 0.63; 0.63; 0.63 type=Terrain
Mapa
[edytuj]MapColor floor=ląd water=woda MapZoom factor=f
- ląd, woda - kolory na mapce, bez przezroczystości! (np.
150;110;10
) - f - powiększenie, od 1 do 8.
MapZoom factor=1 enable=0
Wyłącza mapę. W jej miejscu pojawia się X (np. misja "Utrata pamięci" z Tropiki).
Automatyczne ładowanie skryptów
[edytuj]NewScript name="program" type=robot
- program - ścieżka do pliku z programem
- robot - kategoria robota, na którego będzie automatycznie ładowany program, lub
All
, oznaczające wszystkie roboty.
Komendy dotyczące budowania i wynalazków
[edytuj]Możliwości astronauty
[edytuj]EnableBuild type=typ
- typ - Kategoria objektu - budynku, który astronauta może budować. Dochodzą jeszcze dwie wartości:
Flag
- umożliwia stawianie i usuwanie flagFlatGround
- umożliwia badanie płaskości terenu.
Uwaga!
|
Badania w Centrum Badawczym i Laboratorium
[edytuj]EnableResearch type=typ
Umożliwia zbadanie zagadnienia.
DoneResearch type=typ
Zagadnienie zostało już zbadane.
- typ - Zagadnienie, dozwolone poniższe wartości:
Wartość | Znaczenie | Umożliwia... | Badane przez... |
---|---|---|---|
TRACKER | Napęd gąsienicowy | Tworzenie robotów |
Centrum badawcze |
WINGER | Napęd odrzutowy | Tworzenie robotów i latanie | |
SHOOTER | Działo zwykłe | Tworzenie robotów | |
TOWER | Wieża obronna | Budowanie budynków | |
ATOMIC | Elektrownia atomowa | Budowanie budynków | |
THUMPER | Uderzacz | Tworzenie robotów | |
SHIELDER | Osłaniacz | Tworzenie robotów | |
PHAZER | Działo fazowe | Tworzenie robotów | |
iPAW | Napęd - nogi | Tworzenie robotów |
Laboratorium |
iGUN | Działo organiczne | Tworzenie robotów | |
SUBBER | Robot nurek | Tworzenie robotów |
Niemożliwe do badania |
SNIFFER | Szperacz | Tworzenie robotów | |
RECYCLER | Robot recykler | Tworzenie robotów |
Ukończenie misji
[edytuj]Podstawowa składnia
[edytuj]EndMissionTake pos=pozycja dist=odległość type=typ ...
Bada objekty kategorii typ znajdujące się w odległości odległość od pozycji pozycja.
- pozycja - Punkt na planecie formatowany w formacie
x;y
(jak przy objektach).
Statek kosmiczny
[edytuj]Aby sprawdzić, ile czegoś jest na statku kosmicznym, pomijamy parametr dist
.
Przykład - niech statek kosmiczny będzie w pozycji 80;-40
:
EndMissionTake pos=80;-40 type=TitaniumOre min=4
Parametr min
omówiony jest poniżej.
Wygrana
[edytuj]EndMissionTake ... min=minimum max=maksimum
Warunek wygrania misji. minimum i maksimum określają zakres ilości objektów, dla których misja będzie wygrana. Jeśli zamieścimy wiele warunków, wszystkie muszą być spełnione
Przegrana
[edytuj]EndMissionTake ... lost=ilość
- ilość - Ilość objektów, przy której nastąpi natychmiastowe przegranie misji. Czyli wymagane jest ilość+1 objektów.
We wszystkich grach stosowana jest linia:
EndMissionTake pos=0;0 dist=25000.00 type=Me lost=0
Dzięki temu po śmierci astronauty gra się przerywa i jest przegrana.
Opóźnienie
[edytuj]EndMissionDelay win=wygrana lost=przegrana
Ta komenda nie jest obowiązkowa.
- wygrana, przegrana - Opóźnienia (w sekundach) dla zdarzeń wyświetlenia planszy (np. z fajerwerkami).
EndMissionDelay win=-1
Spowoduje, że misja zakończy się bez konieczności odlatywania statkiem kosmicznym. Użyteczne, gdy sprawdzamy wiele warunków, a nie chcemy, aby trzeba było odlatywać. Niedogodnością tego rozwiązanie jest to, że nie da się ustalić czasu oczekiwania.
Natychmiastowa wygrana
[edytuj]EndMissionTake ... immediat=1
- immediat=1 - spowoduje, że po spełnieniu tego warunku nastąpi natychmiastowe zakończenie (wygranie) misji. Inne warunki nie są sprawdzane.
Programowanie
[edytuj]Wszystkie objekty, które tworzymy we własnych poziomach, można zaprogramować tak, jak robi się to w grze. Jednak język CBOT zawiera dodatkowe polecenia, nie omówione w dokumentacji. Dla niektórych Obcych różnią się też pewne funkcje.
Produkowanie
[edytuj]Przy pomocy funkcji produce
można stworzyć dowolny obiekt przenośny, znacznik lub jajo Obcego. Niestety nie da się w ten sposób tworzyć budynków i robotów. Składnia polecenia jest następująca:
produce(point position, float direction, int category, string script)
- position - pozycja tworzonego objektu.
- direction - kierunek objektu.
- category - kategoria objektu
- script - program do wykonania (tylko dla Obcych).
Uwaga!
|
- Stworzenie obiektu bezpośrednio pod Obcym może spowodować nieprzewidziane skutki!!! Czy wyobrażasz sobie malutkiego pajączka, który nic nie umie zniszczyć?
;)
- Przy daniu pod category któregoś z Obcych zostanie stworzone jajo, z którego Obcy się wykluje.
Inne funkcje polecenia fire
[edytuj]- U pająków instrukcja
fire(1)
spowoduje wybuch samobójczy niezależnie od parametru. - U mrówek parametrem funkcji musi być pozycja w którą trzeba strzelać. W przypadku podania typu float, tak jak w zwykłych robotach, nastąpi wyłączenie gry i komunikat systemu o niepoprawnym działaniu programu.
- Przykład:
fire(item.position);
- Przykład:
Tablica pod radar
[edytuj]Można jako pierwszy parametr funkcji radar
dać tablicę liczb całkowitych (int[]
).
Przykład:
int cells[]; cells[0]=PowerCell; cells[1]=NuclearCell; object item; item=radar(cells); goto(item.position); grab(EnergyCell); drop(Behind); grab(); drop(InFront); grab(Behind); goto(space(position)); drop();
Pobieranie parametrów
[edytuj]float cmdline(n)
Funkcja zwraca parametr numer n przekazany za pomocą parametru cmdline
.
Uwaga!
|
point pos; pos.x=cmdline(0); pos.y=cmdline(1); goto(pos);
Powyższy kod spowoduje pójście do punktu zdefiniowanego współrzędnymi określonymi jako pierwszy i drugi parametr.
Sprawdzanie początku gry
[edytuj]Funkcja ismovie()
zwróci 0
, jeśli skończył się film rozpoczynający misję (wyświetla się "Naciśnij F1 aby wyświetlić rozkazy ...").
while (ismovie()!=0) { wait(1); }
Powyższą instrukcję należy umieścić przed instrukcjami rozpoczynającymi działanie np. Obcego. Nie musi być to koniecznie na początku skryptu.
extern void object::Attack() { errmode(0); point nav1, nav2; nav1.x=cmdline(0); nav1.y=cmdline(1); nav2.x=cmdline(2); nav2.y=cmdline(3); while (ismovie()!=0) { wait(1); } while(true) { goto(nav1); ...
TOKSYCZNE BAGNA
[edytuj]
W przygotowaniu: opisać zagadnienie |
Formatowanie tekstu do SatCom
[edytuj]Teksty do SatCom są formatowane przy pomocy instrukcji w pliku tekstowym. Każda instrukcja rozpoczyna się znakiem backslash i kończy średnikiem, np. \b;
.
Formatowanie kończące się wraz z końcem linii
[edytuj]Instrukcja musi wystąpić na początku linii, a formatowanie kończy się na końcu linii.
\b;
- wielki tytuł rozdziału, używane zazwyczaj na początku pliku instrukcji\t;
- tytuł podrozdziału\s;
- tekst o stałej szerokości znaków na żółtym tle. Używane do programów\tab;
- tekst o stałej szerokości znaków na żółtym tle. Używane do raportów satelitarnych.
Instrukcje zaawansowane
[edytuj]\l;tekst\u nazwa_pliku;
- łącze do innego pliku. Nazwa pliku nie może zawierać rozszerzenia.txt
. Między\u
a nazwą pliku występuje spacja. Obowiązuje reguła nazewnictwa z "%user%\" jak przy pliku misji.\image nazwa_pliku dx dy
- wyświetlenie obrazka .bmp. Nazwa pliku bez rozszerzenia. dx oraz dy to szerokość i wysokość w znakach. Obowiązuje reguła nazewnictwa z "%user%\" jak przy pliku misji.
Inne instrukcje
[edytuj]\c;
- użycie czcionki "Courier" o stałej szerokości znaków.\n;
- przywrócenie normalnej czcionki.
Instrukcje formatowania kolorów tła m.in. do języka CBOT | |
---|---|
\token; | Tło pomarańczowe, do instrukcji |
\type; | Zielone tło, do typów |
\const; | Czerwone tło, do stałych |
\key; | Szare tło, do klawiszy na klawiaturze |
\norm; | Powrót do normalnej czcionki po użyciu jednego z powyższych symboli. |
Bibliografia
[edytuj]- Creating Colobot user levels - oficjalny podręcznik autorstwa Epsitec