Plik scenerii
OPIS FORMATU PLIKU SCENERII
Opracowanie na podstawie dokumentu scenery.doc autorstwa
Marcina Woźniaka i Macieja Czapkiewicza
Aktualizacja wg stanu na rok 2015
Na zebranych tu informacjach oparte zostały skrypty eksporterów
jaki i importerów scenerii dla środowiska 3DS Max Studio oraz
parser przetwarzajacy dane z plików scenerii wbudowany w programie EU07.EXE
Domyślny plik trasy powinien nazywać się scene.scn, możliwe jest wgranie innego pliku poprzez podanie jego nazwy jako parametr w skrócie lub w konsoli polecen, np.
eu07.exe –s scenery/testowo.scn.
Można również zdefiniować domyślną nazwę scenerii w pliku eu07.ini podajac parametr w kluczu sceneryfile np.:
sceneryfile testowo.scn
Parametry obiektów w scenerii mogą być oddzielane spacjami, przecinkami, średnikami, tabulatorami lub końcami linii, jednak dla lepszej czytelności dla człowieka zaleca się oddzielanie ich wyłącznie spacją.
Przykłady:
include;tree.inc;l61_plants/drzewo1024f;-3947.2;-4.0;2401.17;56.0;8.3;4.2;end
include,tree.inc,l61_plants/drzewo1024f,-3947.2,-4.0,2401.17,56.0,8.3,4.2,end
include tree.inc l61_plants/drzewo1024f -3947.2 -4.0 2401.17 56.0 8.3 4.2 end
W pliku scenerii rozróżniamy 12 typów obiektów, są to:
node, event, include, trainset, rotate, orgin, description, fog, atmo, light, camera, config
Dwa z wymienionych typow, tj. node i event dziela się na podtypy. Wpis typu node posiada 12 podtypów zaś wpis event 8.
1 Wpis node
Typ NODE definiuje obiekty widoczne (a ogólniej: obiekty które bierze pod uwagę funkcja Render).
Obiekty tego typu mogą być rysowalne lub niewidoczne. Parametry podstawowe wspólne dla wszystkich podtypów to:
MaxDistance – maksymalna odległość z jakiej obiekt będzie widoczny
MinDistance – minimalna odległość z jakiej obiekt będzie widoczny
Name – nazwa obiektu, jeśli nie potrzebujemy należy wpisać none
Type - rodzaj obiektu
Poniżej tabela opisująca poszczególne podtypy wpisu NODE
track |
Definiuje trajektorię, po której może poruszać się obiekt dynamic. Kształt trajektorii definiujemy za pomocą krzywej Beziera |
|
---|---|---|
traction |
Definiuje obiekt odcinka drutu sieci trakcyjnej |
|
dynamic |
Definiuje obiekt poruszający się po ścieżkach typu track lub road |
|
model |
Wstawia obiekt modelu 3d statyczny lub z możliwością animacji |
|
triangles |
Definiuje jeden trójkąt składajacy się z trzech wierzchołków jako element składowy terenu |
|
riangle_strip |
Definiuje wielokąt jako element składowy terenu |
|
triangle_fan |
|
|
lines |
Definiuje linię – pojedynczy odcinek od punktu A do punktu B |
|
line_strip |
|
|
line_loop |
|
|
memcell |
Komórka pamięci, nie jest rysowana ale ma współrzędne X, Y, Z, które np. są przekazywane do AI jako pozycja semafora. |
|
eventlauncher |
Obiekt wyzwalany naciśnięciem klawisza albo o określonej godzinie lub raz na jakiś czas. Nie jest rysowany ale ma współrzędne X, Y, Z, istotne przy wyzwalaniu klawiszem. |
|
NODE::Track ###############################################################################
Definiuje tor, po którym możemy puścić obiekt dynamic. Kształt toru definiujemy za pomocą krzywej Beziera.
Parametry: na zielono wartości domyślne (default) które powinny być w skrypcie tworzącym
TrackType normal (tor kolejowy prosty), switch — zwrotnica, table — obrotnica, przesuwnica, wywrotnica, road — droga lądowa, cross — skrzyżowanie dróg (ma dwa odcinki), river — rzeka, kanał, ciek wodny, droga wodna, tributary — połączenie dróg wodnych
TrackLength – długość odcinka toru
TrackWidth – szerokość toru (potrzebne w wielu sprawach) 1.435
Friction – statyczny współczynnik tarcia 0.15 czy ta wielkość jest prawidłowa?
SoundDist – co ile metrów będzie odgrywany dźwięk stukotu 20
Quality – pierwsze 4 bity – ile ton/oś, pozostałe – rezerwa 20
DamageFlag – kombinacja stałych dtrack_* z mover.pas, np 128 oznacza brak szyn 0 dla normal, 2 dla switch
Environment – słowo kluczowe oznaczające otoczenie toru: flat, mountains, canyon, tunnel (w zależności od tego będzie się zmieniać oświetlenie i/lub echo dźwięków
Visibility – jeśli tor ma być niewidoczny wpisujemy unvis ale normalnie powinno być vis i wtedy należy podać:
Tex1 – tekstura szyn (jeśli none to szyny nie są rysowane) Rail_screw_used1
TexLength – długość w [m] odpowiadająca teksturze szyny 4.0
Tex2 – dla track normal tekstura podsypki z podkładami (gdy none to nie jest automatycznie rysowana) a w przypadku zwrotnicy tekstura szyn drugiego toru (dla zwrotnicy podkłady trzeba zdefiniować jako oddzielny obiekt!) TpD.tex
TexHeight – wysokość rysowanej podsypki (w przypadku zwrotnicy odstęp iglicy od szyny) 0.2
TexWidth – szerokość rysowanej podsypki od szyny do początku nachylenia (w przypadku zwrotnicy długość odbojnicy) 0.5
TexSlope – szerokość rysowanej podsypki w obszarze pochylenia (w przypadku zwrotnicy odległość środka odbojnicy od końca rozjazdu) 1.1
Point1 – punkt początkowy toru [x,y,z]
Roll1 – przechyłka początku toru [deg]
CVec1 – wektor [x,y,z]
CVec2 – wektor [x,y,z]
Point2 – punkt końcowy toru [x,y,z]
Roll2 – przechyłka końca toru [deg]
Radius1 – najmniejszy promień toru
Point3 – (tylko w przypadku zwrotnicy) punkt początkowy toru [x,y,z]
Roll3 – (tylko w przypadku zwrotnicy) przechyłka toru [deg]
CVec3 – (tylko w przypadku zwrotnicy) wektor [x,y,z]
CVec4 – (tylko w przypadku zwrotnicy) wektor [x,y,z]
Point4 – (tylko w przypadku zwrotnicy) punkt końcowy toru [x,y,z]
Roll4 – (tylko w przypadku zwrotnicy) przechyłka toru [deg]
Radius2 – najmniejszy promień toru (tylko w przypadku zwrotnicy)
Velocity (opcjonalny) – prędkość jakiej będzie się starał nie przekroczyć jadący przez ten tor obiekt dynamic jeśli jest sterowany przez AI
Event0 (opcjonalny) – zdarzenie zostanie uruchomione gdy obsadzony załogą dynamic stoi na torze.
Event1 (opcjonalny) – zdarzenie zostanie uruchomione gdy obsadzony załogą dynamic wjedzie na tor w kierunku punktu początkowego (Point1)
Event2 (opcjonalny) – zdarzenie zostanie uruchomione gdy obsadzony załogą dynamic wjedzie na tor w kierunku punktu końcowego (Point2)
Eventall0 (opcjonalny) – zdarzenie które zostanie uruchomione gdy jakikolwiek dynamic stoi na torze.
Event1 (opcjonalny) – zdarzenie zostanie uruchomione gdy jakikolwiek dynamic wjedzie na tor w kierunku punktu początkowego (Point1)
Event2 (opcjonalny) – zdarzenie które zostanie uruchomione gdy jakikolwiek dynamic wjedzie na tor w kierunku punktu końcowego (Point2)
Isolated (opcjonalny) – nazwa odcinka izolowanego, do którego należy tor
Overhead (opcjonalny) – podać parametr 0, jeśli AI ma przejeżdżać bezprądowo
Angle1 (opcjonalny) – ścięcie końca 1 pod innym kątem
Angle2 (opcjonalny) – ścięcie końca 2 pod innym kątem
Fouling1 (opcjonalny) – wskazanie modelu ukresu od strony 1
Fouling2 (opcjonalny) – wskazanie modelu ukresu od strony 2
Jeśli chcemy otrzymać tor prosty należy oba wektory CVec wyzerować oraz dać Radius1=0.
Nazwa toru jest potrzebna tylko gdy chcemy na ten tor jakoś oddziaływać (np. przełożyć zwrotnicę) albo ustawić na nim obiekt dynamic. Zwykły tor nie musi mieć konkretnej nazwy tzn. można go nazwać none.
Przykład toru prostego o nazwie track_sbl02, o długości 100m, z ograniczeniem szlakowym 40km/h:
node -1 0 track_sbl02 track normal 100.0 1.435 20.0 19 4 flat vis
Rail_screw_used1 4.0 TpB-old1.tex 0.2 0.5 1.1
-646.0 0.2 169.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
-646.0 0.2 69.0 0.0
0
event1 test_sbl02_s1
event2 test_sbl02_s1
velocity 40
endtrack
Przykład anonimowego zakrętu w wykopie
node -1 0 none track normal 100.0 1.435 25.0 20 0 canyon vis
Rail_screw_used1 4.0 TpD.tex 0.3 0.6 0.9
-46.0 0.2 -65.0001 0.0
0.0 0.0 -11.3351
1.28189 0.0 11.2623
-47.9246 0.2 -98.9273 0.0
300.0
endtrack
Przykład zwrotnicy:
node -1 0 Testowo_zwr1 track switch 34.0 1.435 25.0 20 2 flat vis
Rail_screw_used1 4.0 Rail_screw_uNused1 0.2 1.5 2.5
-46.0 0.2 269.0 0 //point 1
0.0 0.0 0.0 //control vector 1
0.0 0.0 0.0 //control vector 2
-46.0 0.2 235.0 0 //point 2
0
-46.0 0.2 269.0 0 //point 1
0.0 0.0 -11.3351 //control vector 1
1.28189 0.0 11.2623 //control vector 2
-47.9246 0.2 235.073 0 //point 2
-100
endtrack
NODE::Traction##############################################################################ˆ
Definiuje odcinek drutu sieci trakcyjnej
Parametry: na zielono wartości domyślne (default) które są w skrypcie tworzącym
PowerSourceName – nazwa źródła zasilania, tak sama dla każdego odcinka zasilania
NominalVoltage – napięcie w sieci trakcyjnej bez obciążenia 3500
MaxCurrent – prąd przy którym napięcie w sieci spadłoby o połowę 4500
Resistivity – rezystancja styku ślizgacz-przewód 0.01
Material – z czego zrobiony jest drut [Cu, Al] Cu
WireThickness – grubość drutu w mm 3
DamageFlag – flaga bitowa uszkodzeń, 1 oznacza patynę, 128 oznacza zerwanie 1
Point1 [x,y,z] – punkt początkowy dolnego przewodu (jezdnego)
Point2 [x,y,z] – punkt końcowy dolnego przewodu (jezdnego)
Point3 [x,y,z] – punkt początkowy górnego przewodu (nośnego)
Point4 [x,y,z] – punkt końcowy górnego przewodu (nośnego)
Hmin – najniższa wysokość górnego przewodu nad dolnym 0.4
DeltaL – odstęp pomiędzy kolejnymi wieszakami
Wires – ilość przewodów (0,1,2,3 a w przyszłości 4) 2
WireOffset – odstep między przewodami jezdnymi gdy Wires=3 0.04
Visibility – jeśli trakcja ma być niewidoczna, wpisujemy unvis vis
CurrentEvent (opcjonalny) – zdarzenie które zostanie uruchomione gdy dynamic pobiera prąd z sieci.
Przykład:
include tra/sb165-3d.inc tra/betonrelief1 -2.313 5.8 100.247 0 end
node -1 0 none traction pwr01 3500 4500 0.01 cu 3.0 1
0.687223 5.8 100.247
0.087223 5.8 170.247
0.687223 7.5 100.247
0.087223 7.5 170.247
0.4 4.0 3 0.04 vis
endtraction
(skrypt oblicza P3 i P4 dodając do P1 i P2 zmienne h1 i h2 czyli wysokości zaczepu górnego nad dolnym, defaultowo wynoszą one 1.65 m)
Uwaga – słupy/wysięgniki są odrębnymi obiektami (skrypt 3dsmax umożliwia dołączanie słupów .inc do każdego wezła linii typu Traction)
NODE::TractionPowerSource ###################################################################
Definiuje zasilacz trakcji elektrycznej
składnia: TractionPowerSource (p2) (p3) (p4) (p7) 0 (p8) (p9) 1.0 3 60.0 norecuperation end
przykład: node -1 0 pwr01 tractionpowersource 0 0 0 3400 0 0.01 2000 1.0 3 60.0 section end
UWAGA – nazwa tego obiektu informuje program że wszystkie obiekty typu Traction które mają taką samą nazwę w polu PowerSourceName należą do tego samego odcinka zasilania.
Origin [x,y,z] – położenie źródła prądu
NominalVoltage – napięcie w sieci trakcyjnej bez obciążenia
VoltageFrequency – częstotliwość prądu (0 dla stałego)
InternalRes – rezystancja wewnętrzna podstacji
MaxOutputCurrent – prąd przy którym uruchamia się bezpiecznik nadmiarowy szybki
FastFuseTimeOut – czas po którym obwód się uruchamia ponownie po przeciążeniu
FastFuseRepetition – ilość prób wznowienia pracy obwodu
SlowFuseTimeOut – czas po jakim zostanie uruchomiony obwód jeśli zostanie przekroczona ilość wznowień (załączeń bezpiecznika szybkiego)
Recuperation – czy jest odzysk prądu z sieci (jeśli nie to dać NoRecuperation)
NODE::Dynamic #############################################################################
Obiekt poruszający się po torach.
Składnia: node mindist maxdist name type dir replacableskin chktype dist cabocupancy coupler loadquantity loadtype enddynamic
przykład: node -1 0 505126-08109-8 dynamic pkp\bdhpumn_v2 505126-08109-8 bdhpumn 0.0 nobody 0 0 enddynamic
przykład: node -1 0 eamos dynamic pkp\eams_v1 eams3 401zl 0.0 nobody 3 1 sand enddynamic
Parametry:
Dir – katalog bazowy obiektu np. PKP/EU07
ReplacableSkin – tekstura która zostanie podmieniona (na ogół nadwozie) – patrz model
Type – plik (bez rozszerzenia .chk) z charakterystyką techniczną obiektu np. 303E
Track (tylko jeśli nie jest częścią TrainSet) – nazwa toru na którym ustawiamy obiekt
Dist – odległość początkowa (w/m pocz. Toru) jeśli jest -1 to pojazd będzie wstawiony odwrotnie
CabOccupancy – obsługa pojazdu, możliwe wartości: headdriver, reardriver, nobody, passenger, conductor
Vel (tylko jeśli NIE JEST częścią TrainSet) – prędkość początkowa
Coupler – (tylko jeśli JEST częścią TrainSet) – typ sprzęgu łączącego z poprzednikiem
Loadquantity – ilość ładunku
LoadType – nazwa ładunku – TYLKO gdy Loadquantity > 0
Komentarz: typ sprzęgu definiowany jest jako kombinacja bitowa flag: 1=sprzęg rzeczywisty, 2=sprzęg pneumatyczny, 4=sprzęg sterowania ukrotnionego itp. Zero oznacza brak fizycznego połączenia.
NODE::Model ###############################################################################
Wstawia model nieruchomy ale z możliwością animacji, np. semafor.
Parametry:
Position – pozycja [x,y,z]
Angle – kąt [deg]
Model – model obiektu
texture – jeśli w modelu istnieje tekstura o takiej nazwie to zostanie ona podmieniona
Lights (opcjonalny) – stany świateł obiektu 0-wył, 1-wł, 2-migające
w modelu trzeba je nazwać Light_On01, Light_Off01, Light_On02, Light_Off02 itd.
Light_On01 to światło włączone, Light_Off01 to wyłączone
składnia: node –1 0 none model pos.x pos.y pos.z angle model texture lights 0 0 1 0 0 0 endmodel
Przykład osadzenia modelu semafora świetlnego z napisem A na tabliczce:
node –1 0 none model 10 20 4 90 SS5zpcpbY.t3d A Lights 0 0 1 0 0 0 endmodel
Przykład osadzenia modelu latarni zwrotnicowej:
node -1 0 Testowo_zwr1_Wz model –44.0 0.2 234.5 0.0 WzL.t3d none endmodel
NODE::Triangles#############################################################################
Definiuje trojkąt jako element skladowy terenu:
Parametry:
ambient, diffuse, specular – podatność materiału na oświetlenie tymi 3ma składowymi światła
Texture – nazwa pliku z tekstura obiektu
Vertices – lista wierzchołków w formacie [x,y,z,nx,ny,nz,tu,tv], ich ilość musi być podzielna przez 3
x, y, z – współrzędne wierzchołka
nx, ny, nz – wektor normalny do płaszczyzny o długości 1
tu, tv – współrzędne tekstury w danym wierzchołku
info: materiał błyszczący powinien mieć wysoką składową specular, ściany tunelu powinny mieć wysoką składową ambient i bardzo niskie diffuse i specular aby światło słoneczne na nie nie padało, itp
składnia: node 1000 0 none triangles material ambient: r g b diffuse: r g b specular: r g b endmaterial texture
x y z nx ny nz tu tv end
x y z nx ny nz tu tv end
x y z nx ny nz tu tv
endtri
Przykład trójkąta, który będzie widoczny z odległości mniejszej niż 1km, z teksturą grass:
node 1000 0 none triangles material ambient: 100 100 100 diffuse: 255 255 255 specular: 200 200 200 endmaterial grass
-51.4 0.2 0.0 -1.1094 1.6641 0.0 0.15 0.0 end
-51.4 0.2 100.0 -0.554701 0.83205 0.0 0.15 25.0 end
-48.6 0.2 0.0 0.0 2.0 0.0 0.85 0.0
endtri
NODE::Triangle_Strip#########################################################################
Definiuje wielokąt:
Parametry:
Texture – nazwa pliku z tekstura obiektu
Vertices – lista wierzchołków w formacie [x,y,z,nx,ny,nz,tu,tv]
NODE::Triangle_Fan##########################################################################
Definiuje wielokąt:
Parametry:
Texture – nazwa pliku z tekstura obiektu
Vertices – lista wierzchołków w formacie [x,y,z,nx,ny,nz,tu,tv]
NODE::Lines#################################################################################
Definiuje listę linii:
Parametry:
Color – [r,g,b]
Thickness – grubość linii
Points – lista wierzchołków w formacie [x,y,z], ich ilość musi być podzielna przez 2
Jeśli grubość linii (liczona w pierwszym wierzchołku) odwzorowana na ekran jest mniejsza niż jeden piksel to linia rysowana jest jako częściowo przeźroczysta (chyba że przeźroczystość jst mniejsza niż 4%, wtedy w ogóle nie rysuje).
Przykład czarnych linii o grubości 3mm:
node 300 0 none lines 0 0 0 3
-638.0 0.0 -89.0 -638.0 1.7 -89.0
-638.0 1.7 -89.0 -630.5 1.5 -86.0
endline
NODE::Line_Strip############################################################################
Definiuje łamaną:
Parametry:
Color – [r,g,b]
Points – lista wierzchołków w formacie [x,y,z]
Przykład zielonej łamanej o grubości 1mm:
node 300 0 none lines 0 255 0 1
-638.0 0.0 -89.0
-638.0 1.7 -89.0
-630.5 1.5 -86.0
endline
NODE::Line_Loop############################################################################
Definiuje łamaną zamkniętą:
Parametry:
Color – [r,g,b]
Points – lista wierzchołków w formacie [x,y,z]
Przykład niebieskozielonej linii zamkniętej nigdy nie przeźroczystej:
node 300 0 none lines 0 255 128 -1
-638.0 0.0 -89.0
-638.0 1.7 -89.0
-630.5 1.5 -86.0
endline
NODE::MemCell#############################################################################
Komórka pamięci, nie jest rysowana ale ma współrzędne X,Y,Z
Parametry:
Position X,Y,Z: współrzędne komórki pamięci
Command: początkowa wartość parametru (informacji) tekstowego
Value1: początkowa wartość parametru liczbowego
Value2: początkowa wartość drugiego parametru liczbowego
TrackName: nazwa toru na który oddziałowywuje w przypadku zmiany parametrów (można dać none)
Przykład:
node -1 0 memcell_train3 memcell 1.0 1.0 1.0 Wait_for_orders 0 0 StatAStatC_trk415 endmemcell
NODE::EventLauncher########################################################################
Obiekt wyzwalany naciśnięciem klawisza albo o określonej godzinie lub raz na jakiś czas. Nie jest rysowany ale ma współrzędne X,Y,Z
Parametry:
Position X,Y,Z: współrzędne wyzwalacza
Radius: maksymalna odległość obserwatora od obiektu, -1 oznacza brak sprawdzania odległości
Key: kod klawisza (tylko literowe, none= brak reakcji na klawisze)
Time: godzina w formacie hh:mm albo ze znakiem minus: okresowość wyzwalania w sekundach, zero -brak reakcji czasowej
Event1: zdarzenie wyzwalane przy naciśnięciu klawisza gdy SHIFT nie jest naciśnięty albo gdy upłynął określony czas
Event2: zdarzenie wyzwalane przy naciśnięciu klawisza gdy SHIFT jest naciśnięty opcjonalnie, po słowie condition
MemCell: nazwa komórki pamięciowej
Parameters – String, Val1, Val2 – wartości którym się muszą równać wartości komórki pamięciowej żeby zdarzenia zostały wysłane do kolejkowania
Przykład z pliku scenery/ zwrL34R300M.inc:
//sterowanie zwrotnica za pomoca klawiszy t,t
node -1 0 (p1) eventlauncher (p2) (p3) (p4) 3.0 t 0 (p1)+ (p1)- end