Plik scenerii jest plikiem tekstowym, zawierającym różne komendy całkowicie definiujące wygląd scenerii, wszelkie obiekty poruszające się po torach, a także działanie tzw. zdarzeń (zjawisk, które mogą następować w ustalonej kolejności, a także w wyniku reakcji na inne zdarzenia). Szczegółowy opis tych komend czytelnik znajdzie w pliku:
http://rainsted.com/pl/Symulator/MaSzyna/Scenery.docJednak co wpisać do scenerii, aby nie jechać składem zdefiniowanym przez jej autora, lecz zdefiniowanym przez siebie?
Otwórzmy plik
*.scn z wybraną scenerią. Jest to główny plik, gdyż może on za pomocą komendy "
include" dołączać też inne pliki. Ale nas interesuje w tym momencie tylko ten główny plik. Jeśli nie jest on zbyt duży objętościowo, można go otworzyć nawet w systemowym
Notatniku. Jeśli jest większy, polecam np.
WordPad z
Windows 98 albo też
MS Word - wówczas trzeba pilnować, aby przy późniejszym zapisie zapisać ten plik w postaci czysto tekstowej - bez żadnego formatowania, a nie jako dokument
Word (który nie jest już plikiem czysto tekstowym).
Poszukajmy w tym pliku ciągu
FirstInit
samotnie stojącego w jakimś wierszu tego pliku. W kolejnych wierszach, poniżej tego ciągu znajdują się już wpisy wszelkich obiektów ruchomych w scenerii. Nie tylko pociągów, ale też i tzw. "przeszkadzajek" czyli np. samochodów na ulicach (w scenerii "
Quarkowo" po peronie łazi sobie sokista - to też jest obiekt ruchomy zdefiniowany za pomocą takich wpisów).
No, to przyjrzyjmy się tym wpisom:
trainset none zwrotnicowo_f03 0.0 0.0
//$o Pociąg osobowy - wpierw manewruj zgodnie z semaforami Tm (wypchaj skład na boczny tor ale nie odczepiaj go). Po wyciągnięciu składu na peron odczep loka i manewruj zgodnie z Tm aby doczepić loka z drugiej strony. No a potem ..... ciuch ciuch ... uuuuuu..... uuuuuu !!! ;)
node -1 0 EU07-424 dynamic PKP\EU07 eu07-424 303E 0.0 reardriver 3 0 enddynamic
node -1 0 505120-00351-4 dynamic PKP\Adu none 112a 0.0 nobody 3 2 Passengers enddynamic
node -1 0 505120-00351-4 dynamic PKP\Bdhpumn none bdhpumn 0.0 nobody 3 20 Passengers enddynamic
node -1 0 505120-00351-4 dynamic PKP\Bdhpumn none bdhpumn 0.0 nobody 3 25 Passengers enddynamic
node -1 0 505120-00351-4 dynamic PKP\Bdhpumn none bdhpumn 0.0 nobody 3 10 Passengers enddynamic
node -1 0 505120-00351-4 dynamic PKP\Bdhpumn none bdhpumn 0.0 nobody 0 21 Passengers enddynamic
endtrainset
Tutaj podałem przykładowy wpis ze scenerii "
Zwrotnicowo". Co my tu mamy?
Należy pamiętać, że cała definicja składu musi się zawierać w obrębie komendy "
trainset". Komenda ta składa się z tzw. ograniczników:
trainset ...
...
endtrainset
Komenda ta posiada swoje parametry:
[*]
TrainName - jest to nazwa pociągu. W przykładzie mamy tutaj "
none", co oznacza, że nie definujemy jej. Jeśli jednak występuje, symulator przy wczytywaniu scenerii będzie próbował wczytać też plik (o takiej nazwie jak zdefiniowana i rozszerzeniu
.txt) z rozkładem jazdy tego pociągu. Brak tego pliku zasygnalizowany zostanie komunikatem błędu (dobrze znany
Error @-8).
[*]
Track - nazwa toru, na którym zostanie ustawiony skład. W naszym przykładzie jest to tor o nazwie "
zwrotnicowo_f03". W scenerii niektórym torom można nadawać nazwy (odsyłam tutaj do pliku
Scenery.doc). Nazwa w tym parametrze musi odpowiadać istniejącemu w scenerii torowi, gdyż inaczej symulator nie będzie mógł ustawić składu (wszak pociągi jeżdżą po torach, nie? ;-) i pojawi się wówczas komunikat błędu.
[*]
Dist (ang.
distance - odległość) - odległość od początku toru. Każdy tor w scenerii ma swój
początek i
koniec - zdanie to wydawałoby się banalne, gdyby nie to, że w przypadku naszego symulatora, tor nie jest kijem (który zawsze ma dwa końce ;-), zatem tutaj
początek nie jest tym samym co
koniec (znowu odsyłam do
Scenery.doc - opis parametrów komendy "
node ... track ... "). A parametr ten określa odległość pojazdu
od początku toru w metrach. W powyższym przykładzie skład będzie stał na samym początku toru (odległość
0.0 m). Oczywiście ten parametr jest wymagany, gdyż symulatorowi musi być znana dokładna lokalizacja składu.
[*]
Vel (ang.
velocity - prędkość) - prędkość początkowa składu. Tutaj mamy wartość
0.0. Za pomocą tego parametru można zdefiniować skład, który zaraz po załadowaniu scenerii od razu porusza się z podaną prędkością wyrażoną w km/h. Jasne chyba jest to, że wartość
0.0 tutaj powoduje, że skład nie porusza się.[/list]To wszystko, jeśli chodzi o parametry komendy "
trainset". A co mamy w jej "wnętrzu"?
W przytoczonym przykładzie napotykany na taki oto zapis:
//$o Pociąg osobowy - wpierw manewruj zgodnie z semaforami Tm (wypchaj skład na boczny tor ale nie odczepiaj go). Po wyciągnięciu składu na peron odczep loka i manewruj zgodnie z Tm aby doczepić loka z drugiej strony. No a potem ..... ciuch ciuch ... uuuuuu..... uuuuuu !!! ;)
Z uważnej lektury pliku
Scenery.doc wynika, że w kolejnych wierszach pliku scenerii wszystko, co znajduje się za znakami "
//" stanowi tylko komentarz i jest ignorowane przez symulator. Wszystko się zgadza - powyższy zapis również jest ignorowany przez symulator. Jednak, gdy zechcemy wystartować symulator za pomocą dołączonego startera (
start.exe), to po zaznaczeniu w jego okienku tej scenerii zobaczymy taki oto opis:
Pociąg osobowy - wpierw manewruj zgodnie z semaforami Tm (wypchaj skład na boczny tor ale nie odczepiaj go). Po wyciągnięciu składu na peron odczep loka i manewruj zgodnie z Tm aby doczepić loka z drugiej strony. No a potem ..... ciuch ciuch ... uuuuuu..... uuuuuu !!! ;)
Wygodnie zatem jest tutaj, po znakach "
//$o " umieścić opis, który potem pozwoli przypomnieć sobie podczas startu symulatora, jaki jest wybierany w okienku startera skład i jaką "misję" nalezy nim wykonać. Opis ten powinien być w jednym wierszu, choćby nie wiem, jak by był długi - nie można go kontynuować w wierszu następnym.
Po wpisie definiujemy już skład. Mogą to być samotnie stojące gdzieś na bocznicy wagony, może to być lokomotywa "luzem", a może to być też cały pociąg (także z więcej niż jedną lokomotywą i tzw. sterowaniem ukrotionym).
Przytoczę tutaj dwie pierwsze jednostki z przykładu "
Zwrotnicowa" - lokomotywę i wagon:
node -1 0 EU07-424 dynamic PKP\EU07 eu07-424 303E 0.0 reardriver 3 0 enddynamic
node -1 0 505120-00351-4 dynamic PKP\Adu none 112a 0.0 nobody 3 2 Passengers enddynamic
Jak widzimy, jest to zwykła komenda "
node ... dynamic ... " służąca do umieszczenia w scenerii obiektu ruchomego. W zależności od tego, czy komenda ta jest albo nie jest w kontekście komendy "
trainset" - istnieją dwie, nieco od siebie się różniące wersje tej komendy.
Tutaj jednak mamy ją w kontekście "
trainset". Zatem parametry tej wersji komendy "
node ... dynamic ... " zostaną omówione poniżej:
[*]Najpierw są parametry wchodzące w skład
każdej komendy "
node" bez względu na jej rodzaj:
[*]
MaxDistance - parametr ten określa maksymalną odległość, z jakiej obiekt będzie widoczny. Wartość
-1 nie określa tej odległości - obiekt będzie widoczny wówczas z każdej odległości. Polecam do przeczytania rozpoczęty przez mnie
wątek o tym parametrze i jego wpływie na wydajność grafiki w symulatorze.
[*]
MinDistance - jest to najmniejsza odległość, z jakiej obiekt będzie widoczny. Nie widzę sensu dawać tutaj innej wartości, niż
0.0, aby obiekt ten (tu: jednostka) był widoczny też z bardzo bliska.
[*]
Name - nazwa obiektu. Można tutaj wpisać nazwę pojazdu, np.
EU07-424. Nie ma ona zbyt wielkiego znaczenia, jednak program
start.exe robi z niej użytek taki, że potrafi w swoim oknie, przy pomocy małych obrazków wyświetlić poszczególne pojazdy w składzie. Dobrze jest więc każdej jednostce nadać nazwę.
[*]
Type - tutaj następuje ciąg "
dynamic" określający, że chodzi o obiekt ruchomy.[/list]
[*]Dalej są już właściwe parametry komendy:
[*]
Directory - podkatalog w obrębie podkatalogu
dynamic katalogu z symulatorem (a konkretnie, z plikiem
eu07.exe), w którym znajduje się definicja obiektu zawarta np. w plikach
*.mmd. Zapewne trochę zamieszałem, więc już spieszę z wyjaśnieniami. W przykładzie ze "
Zwrotnicowa" lokomotywa ma tutaj wpisane "
PKP\EU07". Oznacza to, że definicji obiektu reprezentującego lokomotywę
EU07 w tym składzie należy szukać (symulator ma szukać) w podkatalogu
dynamic\PKP\EU07 katalogu z symulatorem.
[*]
ReplacableSkin - ten parametr sprawia użytkownikom taki kłopot, że po niewłaściwym jego ustawieniu często mamy białe (bez tekstur) wagony lub lokomotywy. A sprawa jest bardzo prosta. O ile w pliku określającym budowę modelu pojazdu (plik
*.t3d w katalogu określonym w wyżej omówionym parametrze
Directory) tekstury z nadwoziem pojazdu określone są przy pomocy zapisu "
replacableskin.bmp", można (a właściwie trzeba) wówczas w tym parametrze podać nazwę pliku z teksturą, która ma stanowić elementy nadwozia pojazdu. W przypadku, gdy plik z tą teksturą jest typu
*.bmp, można już nie pisać tego rozszerzenia, dla np.
*.tga - trzeba ją wpisać. Jeśli zaś w pliku
*.t3d tego pojazdu "na sztywno" zostały podane tekstury nadwozia, wówczas ten parametr niczego nie zmieni i można tutaj wpisać "
none". Autorzy modeli pojazdów coraz częściej odchodzą od tego, by ustawiać te tekstury na stałe w modelu. Na przykład tutaj mamy podane "
eu07-424". Wszak różnych lokomotyw
EU07 jest cała masa - mają inne malowanie, inne szczegóły nadwozia itp. Jednak autorowi scenerii "
Zwrotnicowo" chodziło konkretnie o lokomtywę
EU07-424, dla której tekstura nadwozia zawarta jest w pliku
dynamic\PKP\EU07\eu07-424.bmp. Zatem ten parametr służy rozróżnieniu wyglądu tych pojadów od siebie.
[*]
Type - charakterystyka pojazdu. Jest to nazwa pliku o rozszerzeniu
.chk zawartego w podkatalogu określonym parametrem
Directory omówionym powyżej. Ważne: samego rozszerzenia (
.chk) nazwy tego pliku
nie piszemy. W naszym przykładzie dla lokomotywy
EU07, jej charakterystyka będzie wczytana z pliku
dynamic\PKP\EU07\303E.chk.
[*]
Dist - odległość od początku toru (według dokumentacji w pliku
Scenery.doc). Mam jednak tutaj pewne wątpliwości co do sensu istnienia albo funkcjonalności tego parametru (przecież istnieje już taki parametr w komendzie "
trainset"). Nie jestem pewny, czy nie chodzi tutaj o odległość danego pojazdu od pojazdu bezpośrednio go poprzedzającego. W każdym razie, jak zauważyłem, zawsze ten parametr ma wartość
0.0.
[*]
CabOccupancy - tutaj określamy, jaką w danym pojeździe funkcję może pełnić użytkownik tego składu. Na przykład w lokomotywie można być maszynistą, a w wagonie pasażerem. Implementacja tego parametru prawdopodobnie jest wciąż jeszcze nie dokończona. W każdym jednak razie może on przyjmować następujące wartości:
[*]
nobody - brak jakiejkolwiek obsługi tego pojazdu;[*]
headdriver - maszynista w tej kabinie lokomotywy, która skierowana jest w kierunku
początku toru (co to jest
początek i
koniec toru - opisałem przy okazji omawiania parametru "
Dist" komendy "
trainset");[*]
reardriver - maszynista w drugiej kabinie (czyli tej, która skierowana jest w kierunku
końca toru);[*]
passenger - pasażer (można sobie po prostu jechać w wagonie);[*]
conductor - (wg
Scenery.doc) konduktor - znaczenie tego również nie jest dla mnie jasne.[/list]Jedna sprawa: gdy startujemy symulator za pomocą programu
start.exe, na skutek błedu, nie uwzględnia on obsługi (definiowanej tym parametrem) innej niż pierwsza jednostka - "daje" on symulatorowi tylko pierwszy taki możliwy pojazd. Konsekwencją tego błędu jest to, że nie można np. jechać sobie jako pasażer ("
passenger") w wagonie pociągu, który ma być sterowany przez maszynistę ("
headdriver" lub "
reardriver"), gdyż przecież lokomotywa jest przed wagonem. Jeśli jednak umieścimy odpowiedni wpis w pliku
eu07.ini, będzie można sobie jechać w dowolnej zdefiniowanej jednostce.
[*]
Coupler - typ sprzęgu z następną jednostką. Wartość ta jest liczbą, lecz będącą tzw. kombinacją bitową. Ustalamy więc najpierw, czym nasz pojazd będzie sprzężony z kolejną jednostką w składzie. Wybrać można spośród następujących pozycji:
[*]
1 - hak spinający z sobą jednostki;[*]
2 - przewód pneumatyczny (służący do hamowania składu);[*]
4 - przewód do sterowania ukrotnionego;[*]... -
ten dokument defniuje jeszcze inne rodzaje sprzęgów, jednak pierwsze trzy są najczęściej używane;[/list]a potem dodajemy do siebie liczby stojące przy wybranych pozycjach. Na przykład w "
Zwrotnicowie" w omawianym składzie lokomotywa
EU07-424 połączona będzie ze stojącym za nią wagonem
Adu przy pomocy haka i przewodu pneumatycznego (
3=
1+
2). Nie jestem pewny, ale nie widzę sensu ustawiać tego parametru na wartość inną niż
0 (co oznacza brak sprzęgu) dla ostatniej jednostki w składzie - nie wiem, czy nie jest to przyczyną kłopotów z ruszeniem "kibelkiem" (
EN57) w niektórych seceneriach (wykorzystują one sprzęg ukrotniony - wartość
7=
1+
2+
4, a wtedy ostatni człon jest połączony z... niczym i symulator nie może nim sterować - to taka moja nie sprawdzona hipoteza).
[*]
Load - ładunek dla danej jednostki. Jest to ilość ładunku w tej jednostce wyrażona w jednostkach określonych w pliku
*.chk (określonym w parametrze
Type wymienionym wcześniej - patrz: opis parametru
LoadType poniżej). Oczywiście
0 określa, że jednostka jest pusta (nie załadowana) - wówczas nie ma też kolejnego parametru:
LoadType. Dla pasażerów ("
Passengers" w
LoadType) w pierwszym wagonie składu w "
Zwrotnicowie" ustawiona została wartość
2 (zatem w tym wagonie jedzie dwóch pasażerów), a dla drugiego wagonu - wartość
20 (dwudziestu pasażerów); dla lokomotywy zaś jest
0 - nie ma ona więc żadnego ładunku (przyjmując, że maszynisty nie uwzględniamy jako "ładunek" ;-). Parametr ten jest o tyle ważny, że symulator na jego podstawie może wyliczyć wagę składu i zastosować wszystkie wynikające z tej wagi konsekwencje w fizyce ruchu tego składu. Inaczej przecież prowadzi się cięższy skład, a inaczej lżejszy.
[*]
LoadType - określamy tutaj typ ładunku. Bardzo ważnym jest to, że ten parametr
nie występuje, gdy wartość parametru
Load równa jest
0. Jako typy ładunku można podawać zwykle: "
Passengers" (pasażerowie), "
Coal" (węgiel), "
Lumber" (drewno) itp. A konkretnie, to co można podawać w tym parametrze, zależy od definicji z pliku
*.chk, określonego w parametrze
Type (omówiłem go wcześniej). W tym pliku trzeba odszukać linijkę rozpoczynającą się od "
Load:", a dalej wpisane są w niej, po kolei:
[*]
MaxLoad= maksymalna wielkość ładunku;[*]
LoadQ= jednostka dla ilości ładunku (z moich obserwacji: "
pieces" - sztuki, np. pasażerowie, "
tonns" - tony, np. węgiel);[*]
LoadAccepted= wymienione wszystkie rodzaje ładunku, oddzielone od siebie przecinkami;[*]
LoadSpeed= szybkość załadunku (w jednostkach z "
LoadQ=" na sekundę);[*]
UnLoadSpeed= szykość rozładunku (j. w.).[/list]Dzięki temu łatwo zorientować się, jakimi dopuszczalnymi typami oraz wielkościami ładunków można załadować daną jednostkę.[/list]
[*]Na końcu jest ciąg "
enddynamic" oznaczający koniec komendy "
node ... dynamic ... ".[/list]Oto wymieniłem wszystkie parametry komendy "
node ... dynamic ... " użytej w kontekście komendy "
trainset". W kolejnych wierszach pomiędzy "
trainset" a "
endtrainset" podajemy więc wpisy dla kolejnych jednostek naszych składów, oczywiście może być ich wiele.
Plik ze scenerią zapisujemy i... w drogę :-).
Pozdrawiam wszystkich serdecznie i życzę zielonego na szlaku ;-).