Colobot
Informacje ogólne
edytujColobot – 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.
Uwaga!
|
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
edytujW 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
edytujFolder 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
edytujFolder 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
edytujFolder 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
edytujFolder zawiera wszystkie programy stworzone przez gracza, które zostały zapisane w folderze publicznym.
Savegame
edytujW 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
edytujFolder 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
edytujFolder zawiera pliki z programami, którymi zaprogramowane są obce formy życia w grze, oraz roboty, którymi nie może kierować gracz.
Textures
edytujFolder 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
edytujFolder 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
edytujW 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.
Uwaga!
|
- 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
edytujKod 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 obiektów
edytujRoboty i Obcy mogą produkować niektóre Kategorie. Poniższy kod zawiera prezentację wszystkich widzialnych, generowalnych obiektów:
extern void object::Produkuj()
{
for(int i=0;i<19;i++){
move(2); //Odstep pomiedzy przywolanymi obiektami
switch(i){
//wszystkie obiekty przenośne
case 0:produce(position, orientation, TitaniumOre, "");break; //Ruda tytanu
case 1:produce(position, orientation, UraniumOre, "");break; //Ruda uranu
case 2:produce(position, orientation, Titanium, "");break; //Tytan
case 3:produce(position, orientation, PowerCell, "");break; //Ogniwo elektryczne
case 4:produce(position, orientation, NuclearCell, "");break; //Atomowe ogniwo elektryczne
case 5:produce(position, orientation, OrgaMatter, "");break; //Materia organiczna
case 6:produce(position, orientation, BlackBox, "");break; //Czarna skrzynka
case 7:produce(position, orientation, TNT, "");break; //Ladunek wybuchowy
case 8:produce(position, orientation, KeyA, "");break; //Klucz A
case 9:produce(position, orientation, KeyB, "");break; //Klucz B
case 10:produce(position, orientation, KeyC, "");break; //Klucz C
case 11:produce(position, orientation, KeyD, "");break; //Klucz D
//Mina i punkt kontrolny
case 12:produce(position, orientation, Mine, "");break; //Mina
case 13:produce(position, orientation, WayPoint, "");break; //Punkt kontrolny
//Wszyscy Obcy bez jaja
case 14:produce(position, orientation, AlienQueen, "");break; //Krolowa Obcych
case 15:produce(position, orientation, AlienAnt, "");break; //Mrowka
case 16:produce(position, orientation, AlienSpider, "");break; //Pajak
case 17:produce(position, orientation, AlienWasp, "");break; //Osa
case 18:produce(position, orientation, AlienWorm, "");break; //Robal
default:
}
}
}
W komendzie produce(position, orientation, category,function)
:
position
→ zmienna typu point określająca lokalizację obiektu generowanego. W powyższym kodzie oznacza również pole obiektu wykonującego funkcjęProdukuj()
(Robot/Obcy) z pominięciemthis.position
. Kierunek pionowy (z) jest pomijany.orientation
→ zmienna typu float orientacja utworzonego obiektu generowanego. Również w domyśle pole obiektu wykonującego funkcjęProdukuj()
(Robot/Obcy) z pominięciemthis.orientation
category
→ kategoria obiektu do przywołania, np.Mine
przywołuje minęfunction
→ funkcja wykonywana przez obiekt generowany, działa tylko dla Obcych. W powyższym przykładzie nowi Obcy nie robią nic.
Uwaga!
|
Niektóre źródła donoszą, że tym sposobem można tworzyć także budynki i roboty. Faktycznie jest to jednak niemożliwe. |
Matematyka
edytujW 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ż
edytujTen artykuł jest w trakcie tworzenia. Jeśli chcesz w tym pomóc, edytuj go. |