Symulator/MaSzyna/Scenery.doc

Z Rainsted
Skocz do: nawigacji, wyszukiwania

Plik Scenery.doc jest podstawową dokumentacją do budowy scenerii. Zachowały się następujące informacje:

  • Utworzony: 06.04.2002, 23:39:00, McZapkie
  • Zmodyfikowany: 06.03.2003, 15:02:00, McZapkie

Od tego czasu zmieniły się niektóre drobiazgi, jednak główna struktura pozostała bez zmian. Do opisanych koncepcji zostały dostosowane skrypty dla programu 3ds Max oraz parser w EU07.EXE. W 2009 roku na bazie tych struktur powstał format RSF o szerszych możliwościach.


Autor: Marcin Woźniak

Komentarze i poprawki: M.Czapkiewicz

Przeniesienie do MediaWiki i dalsze modyfikacje: Ra


Domyślny plik trasy powinien nazywać się scene.scn, możliwe jest wgranie innego pliku poprzez podanie jego nazwy jako parametr, np.

eu07.exe –s testowo.scn

Można też zdefiniować domyślną nazwę scenerii w pliku eu07.ini.

Parametry obiektów w scenerii mogą być oddzielane spacjami, przecinkami, średnikami, tabulatorami lub końcami linii. Na ogół we wpisach stosuje się spacje i końce linii, natomiast dla oddzielania parametrów include - średniki.

Plik trasy może zawierać wpisy node, event, include, trainset i inne.

Wpis node

Definiuje obiekty widoczne (a ogólniej: obiekty które bierze pod uwagę funkcja Render).

Parametry podstawowe:

  • 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 są opisane różne obiekty typu node. Oprócz wyżej wymienionych parametrów, po Type są definiowane dodatkowe parametry zależne od Type.

node … track

Definiuje trajektorię, po której może poruszać się obiekt dynamic. Kształt trajektorii definiujemy za pomocą krzywej Beziera (jak w Corel Draw).

node … traction

Trakcja elektryczna Parametry: na zielono wartości domyślne (default) które są w skrypcie tworzącym

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

(skrypt oblicza Point3 i Point4 dodając do Point1 i Point2 zmienne h1 i h2 czyli wysokości zaczepu górnego nad dolnym, defaultowo wynoszą one 1.65 m)

  • 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. Nie działa.

node … dynamic

Obiekt poruszający się po torach. Parametry:

  • Directory – katalog bazowy obiektu np. PKP/EU07
  • Model – para plików MMD/CHK z modelem i parameterami fizyki obiektu
  • 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)
  • CabOccupancy – obsługa pojazdu, możliwe wartości:
    • headdriver – maszynista w pierwszej kabinie pojazdu
    • reardriver – maszynista w drugiej kabinie pojazdu (niedostępne dla samochodów)
    • nobody – pojazd bez obsługi
    • passenger – bierny pasażer
    • conductor – konduktor (nie działa)
    • connected - człon w pojeździe wieloczłonowym
  • 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
  • Load – ilość ładunku
  • LoadType – nazwa ładunku – TYLKO gdy Load>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.

Przykład lokomotywy która na dzień dobry jedzie z prędkością 40km/h:

node –1 0 EU07-424 dynamic /pkp/eu07 EU07-424 303E track_start 100.0 1 40.0 0 enddynamic

patrz też trainset mój komentarz: w katalogu można trzymać alternatywne modele i CHK danej serii, jak również specyficzne tekstury, a w przyszłości dźwieki. Przykładowo w katalogu /PKP/Bipa są 3 pliki CHK dla środkowych i skrajnych członów, w /PKP/EN57 będą pliki dla 6ra, 6s i 6rb. Ponadto w tym katalogu znajdują sie pliki MMD gdzie definiowane są dźwięki, wskaźniki, regulatory, modele itp.

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
  • ReplacableSkin – 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. Ostatnie wersje EXE nie wymagają istnienia obu submodeli.


Przykład osadzenia modelu semafora świetlnego:

node –1 0 none model 10 20 4 90 SS5zpcpbY.t3d A Lights 0 0 1 0 0 0 endmodel

model będzie wyświetlany z teksturą A.bmp na tabliczce 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 listę trójkątów:




Parametry: ambient, diffuse, specular – podatność materiału na oświetlenie tymi trzema składowymi światła (np. 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).

  • 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

Przykład trójkąta, który będzie widoczny z odległości mniejszej niż 1km:

node 1000 0 none triangles
material ambient: 100 100 100 diffuse: 255 255 255 specular: 200 200 200 endmaterial
TRACK.TGA
-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ść jest 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, które np. są przekazywane do AI jako pozycja semafora.

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, istotne przy wyzwalaniu klawiszem.

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 oznacza brak reakcji na klawisze)
  • Time: godzina w formacie hhmm (np. 1201), albo ze znakiem minus okresowość wyzwalania w sekundach, zero oznacza 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 - patrz plik scenery/ zwrL34R300M.inc.

Zdarzenia, czyli event

Zobacz oddzielną stronę: Eventy.

Definiuje zdarzenia które służą do sterowania obiektami, np. zmienić sygnał na semaforze czy przełożyć zwrotnice.

Parametry:

  • Name – nazwa zdarzenia

Część nazwy może być parametrem, np.

event (P1)_sem_anim12 animation 0 kszt2.t3d rotate Ramie01 0 45 0 80 endevent

oznacza, jeśli taka deklaracja jest w pliku semkszt2.inc, że jak damy w scenerii wywołanie semkszt2 Raba_A to zdarzenie będzie miało nazwę Raba_A_sem_anim11.

  • EventType – typ zdarzenia
  • Delay – opóźnienie przy uruchamianiu zdarzenia

może byc ujemne, wtedy wywoływane jest cyklicznie, ale to jest nieprzetestowane

  • ObjectName – nazwa obiektu do którego odnosi się zdarzenie

dodatkowe parametry zależne od EventType:

Lights

Zmienia światła w danym przez ObjectName modelu Parametry: Lights – stany świateł obiektu 0-wył, 1-wł, 2-migające Przykład: event sem10_light11 lights 0.0 sem10 2 0 0 1 0 endevent

Animation

Zobacz oddzielną stronę: Animacje modeli.

dokonuje rotacji lub translacji fragmentu modelu, nazwa modelu jest w ObjectName Parametry:

  • AnimationType – rodzaj animacji: rotate/translate
  • SubModel – nazwa fragmentu modelu podlegającego animacji
  • X, Y, Z – wartości kątów lub przesunięć
  • AnimationSpeed – prędkość animacji

Przykład: jeśli model jest osadzony (patrz 1.1.3) w ten sposób:

node -1 0 Testowo_A model 100.0 0.2 20.0 180 sem_kszt2.t3d endmodel

i jego fragment nazwany jest Ramie01 to rotacja tego ramienia o 45° wokół osi Y z prędkością 40°/s definiuje się:

event Testowo_A_sem_anim21 animation 0 Testowo_A rotate Ramie01 0 -45 0 40 endevent

translacja jeszcze nie działa (działa w najnowszym EXE)

  • TrackVel

Zmienia przypisaną prędkość do toru. Parametry:

    • Velocity – prędkość która zostanie przypisana do toru.

Przykład:

event zwr_1_wbok trackvel 0.0 t_zwr_1 40.0 endevent

UpdateValues

Ładuje informacje do komórki pamięci. Parametry:

  • Command – łańcuch znaków
  • Value1 – jakaś liczba
  • Value2 – jakaś druga liczba

Uwaga – jeśli któryś z 3 powyższych parametrów jest * to dany parametr komórki pamięciowej nie zostanie uaktualniony (można selektywnie uaktualniać)

Przykłady:

event start3b updatevalues 30.0 memcell_train3 SetVelocity 50 -1 endevent

(po 30 sekundach wpisze komendę SetVelocity(50,-1) do komórki memcell_train3) albo w pliku .inc: event (p1)_sem_info_shunt2 updatevalues 1.0 (p1)_sem_mem ShuntVelocity 40 0 (po 1 sekundzie wpisze komendę ShuntVelocity(40,0) do komórki o nazwie (p1)_sem_mem gdzie P1 jest nazwą semafora definiowaną na zewnątrz pliku .inc a może wykolejnica?

event Wk1_1 updatevalues 0 Wk1_status DamageFlag 128 1 endevent

wykorzystanie komórki pamięciowej do informacji o drodze przebiegu:

event Testowo_Wjazd1-Zaczynek updatevalues 0.0 Testowo_status1 Wjechal 1 * endevent

GetValues

Pobiera informacje z komórki pamięci i wysyła do obiektu dynamic. ObjectName w tym przypadku to nazwa komórki pamięci. Parametry Command, Value1, Value2 oraz współrzędne komórki pamięci X,Y,Z są przekazywane obiektowi który wywołuje zdarzenie GetValues Przykłady:

event StatAStatC_szlak getvalues 1.0 StatAStatC_szlak_mem endevent (z komórki o nazwie StatAStatC_szlak_mem wysyłana jest jej zawartość do obiektu który wjechał na tor w którym była deklaracja event1 StatAStatC_szlak

albo w pliku INC definiujacym semafor:

event (p1)_sem_info getvalues 1.0 (p1)_sem_mem endevent

(z komórki o nazwie (p1)_sem_mem wysyła informacje o aktualnej prędkości tego semafora)


PutValues

Wysyła statyczne informacje do obiektu dynamic (z pominięciem komórki pamięci) Przykłady:

W9-start.inc W9-stop.inc itp


Multiple

Pozwala wywołać więcej zdarzeń. ObjectName jest na ogół nieużywane, chyba że na końcu listy zdarzeń będzie parametr condition Parametry:

  • Events – lista zdarzeń do wywołania

opcjonalnie po słowie kluczowym condition:

  • ConditionType – typ warunku:
    • trackoccupied
    • trackfree
    • propability
    • memcompare

dwa pierwsze: wyzwalane są gdy tor określony w ObjectName jest zajęty lub wolny, propability wyzwalane jest jeśli wylosowana liczba jest mniejsza niz parametr z zakresu 0...1, memcompare wyzwalane jest gdy zawartości komórki pamięciowej określonej w ObjectName równe są podanej liście parametrów: Parameters – String, Val1, Val2 (tylko w przypadku memcompare – wszystkie 3 wartości muszą być równe wartościom z komórki pamięciowej, chyba że któreś z nich jest *)

Przykład:

event semA_S13 multiple 0 none semA_light13 semA_S13set endevent

(wywołuje dwa zdarzenia, jedno ustawia światła na semaforze, drugie definiuje jego prędkość)

albo zdarzenia warunkowe:

event przejazd_otwieraj multiple 2.0 tornaprzejezdzie przejazd_1_sygn1 przejazd_1_sygn2 condition trackfree

wyzwalane jest gdy tor o nazwie tornaprzejezdzie jest wolny;

event Zaczynek-Testowo1 multiple 3.0 Testowo-status Testowo-Zatwierdz Testowo-zwr1+ Testowo_ToA_os2 Testowo_A_S5 Testowo_D_S1 condition memcompare Rozwiazany * *

wyzwalane jest jeśli pierwszy parametr komórki pamięciowej Testowo-status jest słowem Rozwiazany

Switch

Zmienia przełożenie zwrotnicy. Parametry:

  • State – stan na który należy przełączyć zwrotnice 0 lub 1

Przykład:

event Testowo_zwr1+ switch 0.0 Testowo_zwr1 1 endevent

Sound

Odtwarza dźwięk z pliku .wav o nazwie określonej jako ObjectName Parametry: Attenuation – odległość połowicznego zaniku natężenia dźwięku (-1 oznacza brak zależności natężenia od odległości obserwatora od źródła, np. radio)

  • X,Y,Z – położenie dźwięku
  • PlayStatus – czy dźwięk ma być wyłączony (0) czy włączony (1)
(-1 oznacza brak zaniku, np. radio)

Przykład: jeszcze nie działa

TrainSet

Służy do ustawiania składów. Patrz też: dynamic. Parametry:

  • TrainName – nazwa pociągu (taka sama jak nazwa pliku *.txt z rozkładem jazdy)
  • Track – nazwa toru na którym ustawiamy skład
  • Dist – odległość początkowa
  • Vel – prędkość początkowa

Przykład pociągu ciągniętego przez dwie EU07 w trakcji ukrotnionej:

trainset PE2307 StatB_track03 170.0 0.0 
node -1 0 player_train dynamic PKP\EU07 4E 0.0 1 7 0 enddynamic
node -1 0 player_train dynamic PKP\EU07 4E 0.0 0 3 0 enddynamic
node -1 0 5051-503320-2 dynamic PKP\Bipa  Bipa-A 0.0 0 3 10 Passengers enddynamic
node -1 0 5051-503321-7 dynamic PKP\Bipa  Bipa-CD 0.0 0 3 25 Passengers enddynamic
node -1 0 5051-503322-1 dynamic PKP\Bipa  Bipa-CD 0.0 0 3 8 Passengers enddynamic
node -1 0 5051-503323-5 dynamic PKP\Bipa  Bipa-B 0.0 0 0 9 Passengers enddynamic
endtrainset

Include

Dołącza plik z opcjonalnymi parametrami Parametry:

  • FileName – nazwa pliku do dołączenia
  • Parameters – lista parametrów

Ciągi znaków (p1), (p2), (p3) ... w pliku dołączanym zostanie zastąpiony odpowiednimi parametrami.

Przykład:

include drzewo.inc Pine1.tga 42.0 0.0 5.0 45 5 2 end

Plik drzewo.inc wygląda tak:

//---------------drzewo---------------
//param: tekstura, x, y, z, kat, wysokosc, rozpietosc 
origin (p2) (p3) (p4)
	rotate 0 (p5) 0

	node 500 0 none triangle_strip (p1) 
	0 0 (p7)		0 0 0	1 1	end
	0 (p6) (p7)		0 0 0	1 0	end
	0 0 -(p7)		0 0 0	0 1	end
	0 (p6) -(p7)		0 0 0	0 0	end
	0 0 (p7)		0 0 0	1 1	end
	0 (p6) (p7)		0 0 0	1 0
	endtri

	node 500 0 none triangle_strip (p7) 
	-(p7) 0 0		0 0 0	1 1	end
	-(p7) (p6) 0		0 0 0	1 0	end
	(p7) 0 0		0 0 0	0 1	end
	(p7) (p6) 0		0 0 0	0 0	end
	-(p7) 0 0		0 0 0	1 1	end
	-(p7) (p6) 0		0 0 0	1 0
	endtri

	rotate 0 0 0
endorigin

Origin

Przesuwa obiekty o wektor, przykład powyżej.

Rotate

Obraca obiekty o zadane kąty, przykład powyżej.

Description

Opis scenerii, tekst pomiędzy Description a EndDescription jest ignorowany przez program eu07.exe, ale przydatny dla innych programów typu loader scenerii itp.

Fog

Definiuje mgłę, parametry: początek, koniec. Nie używany już, zastąpiony przez atmo.


atmo

Definiuje kolor tła (R,G,B 0...1) oraz mgłę: początek, koniec, kolory R,G, B mgły.

atmo 0.5 0.6 1.0 300 1200 0.7 0.8 1.0 endatmo

Kolory R,G, B mają być z zakresu 0...1.

Light

Definiuje pozycję XYZ oraz kolor RGB <0;1> składowej ambient (rozproszone), diffuse (kierunkowe) i specular (zajączki) światła dziennego.

light –500 500 200   0.5 0.45 0.45   0.50 0.55 0.54   0.95 0.94 0.90  endlight

Pierwsze 3 liczby określają kierunek padania światła. Wektor ten zawsze jest przeliczany na jednostkowy, dlatego nie ma znaczenia, czy będzie –500 500 200, czy –5 5 2. Kolejne liczby są składowymi RGB składowych światła.

We wcześniejszych wersjach EXE definiowane były dwa światła ambient, co powodowało, że znaczenie światła diffuse (tworzącego cienie) było niewielkie. Ponieważ po wyłączeniu jednego światła ambient robiło się zbyt ciemno, dla zachowania zgodności wstecz został wprowadzony parametr doubleambient yes. Docelowo należy używać doubleambient no i przy takim ustawieniu testować wpisy światła, a także jasność modeli i tekstur.

Camera

Definiuje pozycję kamery w przypadku trybu freefly, parametry: X,Y,Z,


...Do poprawienia, podzielenia itd...

Test

Wszystkie wpisy pomiędzy test a endtest są przetwarzane przez parser, ale zamiast tworzyć obiekty scenerii, kopiowane są do logu. Pozwala to np. przetestować podstawienie parametrów w include, a także umieścić komentarz kopiowany do logu.


Config

Pozwala na wpisanie pomiędzy config a endconfig dodatkowych parametrów konfiguracji (specyficznych dla scenerii), podobnie jak w EU07.INI. Nie wszystkie parametry dadzą się ustawić na tym etapie, np. nie da się zmienić rozmiaru okna, czy nazwy wczytywanej scenerii.