Colobot/Tworzenie własnych poziomów

Wprowadzenie

edytuj

Konwencje stosowane w podręczniku

edytuj
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
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ę.

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.

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.

SecondTexture rank=t
  • t - typ brudu, wartość od 0 do 8. 0 oznacza brak brudu. Wartości 1 - 8 różne jego rodzaje.
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

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.
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.

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
 
Prawidłowy plik przejścia między teksturą żółtą (1) a brązową (2)

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.

 

  • 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

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
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.

Efekty pirotechniczne

edytuj
CreateObject ... pyro=efekt
  • efekt - Efekt, jaki ma towarzyszyć objektowi. Dostępne wartości:
    • pyro=WIN - kolorowe iskry z wnętrza objektu
    • pyro=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.

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
ApolloAntenna
ApolloAntena

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 - Ruin
Praktycznie nie występuje.

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

Oświetlenie

edytuj

Przykładowe instrukcja: CreateLight dir= 0.0;-1.0; 0.0 color= 0.63; 0.63; 0.63 type=Terrain

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 flag
    • FlatGround - umożliwia badanie płaskości terenu.

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).

  • 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);

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.

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

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