Colobot

Z Wikibooks, biblioteki wolnych podręczników.
Skocz do: nawigacja, szukaj

Informacje ogólne[edytuj]

Colobot – gra typu RTS z elementami programowania. Dokładny opis gry znajduje się w Wikipedii.

Niniejszy podręcznik zawiera różne informacje umożliwiające ułatwienie rozgrywki poprzez m.in. ingerencje w pliki gry.

Zdecydowana większość plików gry ma charakter otwarty. Oznacza to, że pliki są zapisane w szeroko dostępnych formatach i użytkownik może je edytować za pomocą zwykłych programów tekstowych i/lub graficznych.

Struktura katalogów gry[edytuj]

W głównym katalogu gry Colobot znajdują się następujące foldery: diagram, files, help, program, savegame, scene, script, textures, user. Jedynie pliki w tych folderach dają się w łatwy sposób edytować i ten podręcznik jedynie ich będzie dotyczył. Główny katalog gry zawiera również plik colobot.ini zawierający ustawienia gry.

Diagram[edytuj]

Folder zawiera pliki wszystkich obrazów, które są wykorzystane w podręczniku programowania wewnątrz gry oraz w opisach misji i przedmiotów. Wszystkie pliki zapisane są w formacie mapy bitowej (*.bmp). Ich edycja nie ma jakiegokolwiek wpływu na przebieg gry, jednak przy tworzeniu modyfikacji do gry ich zmiana może okazać się przydatna.

Files[edytuj]

Folder domyślnie nie zawiera żadnych plików. Przeznaczony jest on dla użytkownika i może on go wykorzystać zgodnie z własną wolą. W tym katalogu znajdują się pliki, z których korzystają programy (w CBot można programować operacje na plikach).

Help[edytuj]

Folder zawiera pliki tekstowe (*.txt) zawierające wszystkie teksty pojawiające się w opisach misji czy podręczniku programowania wewnątrz gry. Tekst formatuje się za pomocą specjalnych znaczników. W celu wprowadzenia sformatowanego tekstu na początku wiersza należy wpisać \x;, gdzie x to litera oznaczająca odpowiednie formatowanie.

Niektóre z znaczników:

  • b → powoduje wyświetlenie dużego tekstu na brązowym tle
    • prawidłowa składnia: \b;Przykładowy tekst
  • t → powoduje wyświetlenie tekstu na brązowym tle
    • prawidłowa składnia: \t;Przykładowy tekst
  • s → powoduje wyświetlenie tekstu na żółtym tle
    • prawidłowa składnia: \s;Przykładowy tekst
  • tab → powoduje wyświetlenie tabeli na pomarańczowym tle
    • prawidłowa składnia: \tab;Przykładowy tekst
  • c → powoduje użycie czcionki Courier
    • prawidłowa składnia: \c;Przykładowy tekst
  • image → powoduje wyświetlenie obrazu znajdującego się w folderze diagram
    • prawidłowa składnia: \image nazwa pliku x y;

Nazwa pliku musi być podana bez rozszerzenia pliku, czyli np. obraz, a nie obraz.bmp. X i Y – szerokość i wysokość obrazu w znakach.

Program[edytuj]

Folder zawiera wszystkie programy stworzone przez gracza, które zostały zapisane w folderze publicznym.

Savegame[edytuj]

W tym folderze znajdują się zapisane profile użytkowników w grze. Każdy folder w katalogu savegame reprezentuje jednego użytkownika w grze. Wewnątrz folderu konkretnego użytkownika znajdują się pliki określające postęp gracza w poszczególnych trybach gry. Wszystkie pliki z postępem użytkownika mają rozszerzenie *.gam, jednak są one zwykłymi plikami tekstowymi i można je modyfikować dowolnym edytorem tekstu.

Pliki postępu:

  • face.gam → ustawienia wyglądu atronauty
  • scene.gam → plik postępu zawierający informacje o wykonanych misjach tryby fabularnego gry; zawartość pliku:
[...]
Chapter 5: Scene 3: numTry=1 passed=1
Chapter 6: Scene 0: numTry=6 passed=1
[...]

Chapter oznacza numer rozdziału, scene numer misji, numTry próby wykonania misji, a passed informację, czy dana misja jest, czy nie jest wykonana (1 – zaliczona, 0 – niezaliczona).

  • train.gam → plik postępu ćwiczeń programistycznych, struktura pliku jest taka sama jak w pliku scene.gam
  • defi.gam → plik postępu wyzwań programistycznych, struktura pliku jest taka sama jak w pliku scene.gam

Scene[edytuj]

Folder zawiera pliki określające przebieg misji. Wewnątrz plików znajdują się informacje o nazwie misji, położeniu określonych obiektów na mapie oraz warunków do zakończenia misji. Nazwy plików są utworzone wg zasady:

  • defixyy.txt → pliki zawierające dane wyzwań programistycznych
  • freexyy.txt → pliki zawierające dane swobodnej gry
  • scenexyy.txt → pliki zawierające dane misji (tryb fabularny)
  • trainxyy.txt → pliki zawierające dane ćwiczeń programistycznych

x oznacza numer rozdziału, a yy numer misji, np. misja "Budowanie" z Ziemi to scene102.txt

Opis pliku zawierającego dane misji znajduje się w podręczniku dot. tworzenia własnych poziomów

Script[edytuj]

Folder zawiera pliki z programami, którymi zaprogramowane są obce formy życia w grze, oraz roboty, którymi nie może kierować gracz.

Textures[edytuj]

Folder zawiera pliki określające topografię map w grze. Poziomy w grze są trójwymiarowe, jednak są generowane na podstawie dwuwymiarowych obrazów. Obrazy te są mapami bitowymi o wymiarach 161 x 161 pikseli. Mapy są zapisane w odcieniach szarości, im ciemniejszy kolor na mapie, tym wyższy punkt na mapie. Ponieważ poziomy gry są generowane na podstawie plików *.bmp w folderze textures, ich modyfikacja (np. za pomocą programu MS Paint) spowoduje zmianę wyglądu terenu na konkretnej mapie w grze.

Mapy bitowe z topografią terenu mają nazwę reliefxx.bmp. Pliki z nazwą resxx.bmp zawierają informację o umiejscowieniu rud tytanu/uranu oraz energii na danej mapie. Liczby xx nie mają nic wspólnego z numerami misji. Następującymi kolorami oznaczone są:

  • kolor czerwony → ruda tytanu
  • kolor żółty → ruda uranu
  • kolor zielony → energia
  • kolor zielonkawy → zakopane klucze

Modyfikując te pliki można wpływać na to, w jakim miejscu dana ruda czy energia będzie występować na mapie.

User[edytuj]

Folder zawiera pliki z poziomami stworzonymi przez gracza. Większość plików graficznych, pomocy itp. może być tworzona w tym katalogu, bez ingerencji w inne katalogi. Takie rozwiązanie zapewnia przenośność własnych poziomów.

Dokładna instrukcja tworzenia własnych poziomów znajduje się w instrukcji (plik .pdf, podręcznik w języku angielskim). Obecnie tworzony jest także podręcznik na Wikibooks na ten temat.

Kody do gry[edytuj]

W celu wpisania kodów wciśnij klawisze Ctrl+Break. W lewym górnym narożniku ekranu wyświetli się pole tekstowe, w które można wpisać któryś z poniższych kodów. Po wpisaniu kodu należy wcisnąć klawisz ENTER. Ponowne wpisanie niektórych kodów dezaktywuje je.

  • winmission – wygrana misji
  • lostmission – przegrana misji
  • fullpower – naładowanie do pełna ogniwa elektrycznego, ostudzenie silnika i odnowienie osłony
  • fullenergy – naładowanie do pełna ogniwa elektrycznego
  • fullshield – naprawa osłony
  • fullrange – ochłodzenie reaktora
  • fly – umożliwia latanie
  • nolimit – możliwość wyższego wznoszenia się robotami latającymi i astronautą
  • addfreezer – silnik robota latającego dłużej się przegrzewa (dla każdego robota kod ten musi być wpisany osobno)
  • addhusky – zmniejsza wrażliwość osłony (czyli np. dłużej może być atakowany)
  • allresearch – wszystkie roboty są dostępne
  • allmission – wszystkie misje są dostępne
  • showsoluce – wszystkie rozwiązania misji są dostępne
  • invradar – mapa działa jak po wybudowaniu radaru
  • selectinsect – pozwala sterować wrogiem (lub zabezpieczonym robotem, np. w ćwiczeniach) tak jak zwykłym robotem
  • photo1 – swobodne oglądanie otoczenia kamerą "przyklejoną" do gruntu (obraz można przybliżać i oddalać za pomocą klawiszy [+] i [-] na klawiaturze numerycznej
  • photo2 – to samo, ale nie widać mapy ani panelu z informacjami o zaznaczonym robocie

Ponowne wpisanie photo1 lub photo2 wyłącza tryb przeglądania

  • showstat – wyświetlenie w rogu ekranu informacji technicznych: liczby klatek na sekundę, generowanych trójkątów i trybu graficznego
  • showpos – wyświetlenia w rogu ekranu pozycji aktywnego obiektu. Działa tylko przy włączonym showstat.

Kontrola Obcych[edytuj]

Kod selectinsect umożliwia ręczne sterowanie Obcymi formami życia, jak również ich programowanie. Każdy Obcy po uruchomieniu misji wykonuje program rozkazujący mu atakowanie astronauty/robotów/budynków. Wyłączenie programu wykonywanego przez Obcego dezaktywuje go. Poniżej znajdują się umiejętności poszczególnych Obcych:

Nazwa Kategoria Możliwości
Mrówka AlienAnt Strzelanie
Pająk AlienSpider Wybuchy samobójcze
Osa AlienWasp Latanie, chwytanie i puszczanie (także w locie)
Robal AlienWorm UWAGA: Nie ma instrukcji wirusującej. Roboty wirusują się przez kontakt z robalami!
Królowa Obcych AlienQueen Składa jaja z których później wykluwają się obcy. (właściwie to każdy programowalny obiekt może tworzyć jaja)

Obce formy życia można programować tak jak zwykłe roboty. Osa może przejąć zadania transportera latającego. Zaletą Os jest to, że są wodoodporne oraz brak silnika sprawia, że nie "przegrzewają" się, dzięki czemu mogą cały czas pozostawać w powietrzu.

Przykładowy program rozkazujący Osy wyszukanie rudy tytanu i przetopieniu jej na tytan w hucie:

extern void object::Tytan()
{

        object rudatyt; // deklaracja zmiennej
        object huta; // deklaracja zmiennej
        
        rudatyt = radar(TitaniumOre); // znajdź położenie rudy tytanu
        goto(rudatyt.position); // idź do rudy tytanu
        grab(); // podnieś ją
        
        huta = radar(Converter); // znajdź położenie huty
        goto(huta.position); // idź do niej
        drop(); // upuść rudę tytanu
       move(-2.5); // cofnij się 2,5 metra 
}

Produkcja niektórych rzeczy[edytuj]

Poniższy program umożliwia utworzenie przez robota dowolnego obiektu przenośnego, Obcego lub punktu kontrolnego:

extern void object::Produkuj()
{

   produce(position, 0, Titanium, "");

}

produce(item.position, 0, Titanium,"") → wytłuszczone słowo oznacza jaki przedmiot ma zostać utworzony pod robotem; w tym wypadku jest to tytan, zamiast Titanium, można użyć m.in.:

  • TitaniumOre → spowoduje utworzenie rudy tytanu
  • PowerCell → spowoduje utworzenie ogniwa elektrycznego
  • WayPoint → utworzenie niebieskiego punktu kontrolnego
  • AlienWasp → utworzenie osy

Ostatni parametr to nazwa pliku z programem dla Obcego.

Matematyka[edytuj]

Wikipedia, nasz siostrzany projekt, zawiera artykuł na temat CBot.

W języku CBOT są dostępne następujące funkcje matematyczne:

  • sin, cos, tan (funkcje trygonometryczne)
  • asin, acos, atan (funkcje odwrotnie trygonometryczne arcus-...)
  • abs (wartość bezwzględna)
  • pow, sqrt (potęgowanie, pierwiastek kwadratowy)
  • rand (wartość losowa z zakresu 0–1)

Przykład wykorzystania:

extern void object::Oblicz_i_strzel()
{
      object target = radar(AlienAnt);
      turn(direction(target.position));
      float a = distance2d(target.position, position); // odległość od celu
      float b = 2; // przybliżona wysokość działa
      float c = sqrt(pow(a, 2) + pow(b, 2)); // przeciwprostokatna
      float angle = asin(a/c);
      aim(angle);
      fire(1);
}

Ciekawostki[edytuj]

  • Można programować nawet człowieka! Wystarczy, że odpowiednio zmodyfikujemy pliki misji (lub własny poziom). Zainteresowanych takimi zmianami odsyłam do odpowiedniej sekcji podręcznika dot. własnych poziomów.
  • Wbrew informacjom w SatCom, nie ma takich stałych jak UraniumSite, TitaniumSite, EnergySite. Kompilator CBot-a w ogóle nie zna takich symboli. Zamiast tego występują odpowiednio:
    • UraniumSpot (znacznik występowania rudy uranu)
    • TitaniumSpot (znacznik występowania rudy tytanu)
    • PowerSpot (znacznik występowania energii).

Zobacz też[edytuj]

Wikipedia, nasz siostrzany projekt, zawiera artykuł na temat Colobot.