Symulator/MaSzyna/Silnik graficzny
MaSzyna posiada autorski silnik graficzny, który powstał na potrzeby symulacji.
Poniższy opis pozwala się zapoznać z możliwościami silnika, jednak pominięte są szczegóły uzyskiwania poszczególnych efektów. Pominięty jest też opis fizyki ruchu pojazdów. Podane tu informacje dotyczą najnowszej wersji EU07.EXE (kwiecień 2015), we wcześniejszych mogą być istotne różnice.
Spis treści
Wymagana wersja OpenGL
Silnik graficzny jest oparty na bibliotece OpenGL. Użycie DirectX nie było, nie jest, ani w dającym się przewidzieć czasie nie będzie planowane.
OpenGL 1.1
Minimalnie wymagana wersja OpenGL. W większości przypadków, wykrycie tej wersji OpenGL świadczy o braku bądź nieprawidłowym zainstalowaniu sterowników karty graficznej. Dla starszych kart (np. RAGE 128 PRO Ultra GL AGP) jest to jedyna dostępna wersja OpenGL.
Do wersji 372 EU07.EXE uruchomienie paczki z teksturami DDS zakończy się błędem programu. Od wersji 373 uruchomiona została dekompresja DDS na poziomie EU07.EXE (nie działa ona do końca poprawnie, tzn. nieprawidłowo wyświetlane są przezroczystości, ale nie przeszkadza to w symulacji).
OpenGL 1.3
Pozwala uruchomić antyaliasing (multisampling) na poziomie programu. Multisampling nie działa prawidłowo na kartach Intel, dlatego od wersji 408 jest on wyłączany dla kart tego producenta. Możliwa jest też obsługa tekstur DDS po stronie OpenGL (wersja 1.3 powinna posiadać standardowo rozrzenie GL_EXT_texture_compression_s3tc, ale może ono dostępne w emulacji Windows na Linuxie).
OpenGL 1.4
Działa wyświetlanie w trybie VBO (GL_ARB_vertex_buffer_object), przy czym animacja zwrotnicy wymaga odświeżenia siatek wszystkich torów w całym sektorze. Niemniej, pozwala to uruchomić symulację na starszych kartach firmy Intel, które nie radziły sobie z wyświetlaniem Display Lists (znikały losowo trójkąty).
OpenGL 1.5
Pełne działanie trybu VBO, animacja zwrotnicy jest wykonywana poprzez aktualizację siatek poruszanych iglic.
Założenia techniczne
Grafika jest oparta na systemie metrycznym. Jednostką odległości zarówno w scenerii jak i obiektach jest jeden metr. Obliczenia są wykonywane na liczbach double float (64 bity), natomiast współrzędne wewnętrzne obiektów (trójkątów obiektu) są zapisywane jako single float (32 bity).
Mapa świata
Dwuwymiarowa mapa obejmuje obszar 250×250=62500 kilometrów kwadratowych. Każdy kilometr kwadratowy podzielony jest na 5×5=25 sektorów o boku 200 metrów (wcześniejsze wersje miały 10×10=100 sektorów o boku 100m). Wyświetlanie wybiera sektory najbliższe kamerze, do ustalonego promienia renderowania. Promień renderowania (w zakresie od 600m do 3.5km) ustalany jest tak, aby FPS utrzymywał się w przedziale od 16 do 25 klatek na sekundę. Dodatkowo odrzucane są sektory znajdujące się pod kątem większym niż 60° od kierunku patrzenia kamery, z wyjątkiem sektorów w promieniu 500m od kamery (aby były widoczne wystające fragmenty obiektów znajdujących się z tyłu obserwatora). Jedynie dźwięki i wyzwalacze zdarzeń są zawsze przetwarzane w promieniu 2 kilometrów od kamery. Oś X rośnie na zachód, oś Y w górę, a oś Z – na północ.
Kilometr kwadratowy
W ramach kilometra kwadratowego trójkąty terenu o tej samej teksturze (dotyczy tylko tekstur bez przezroczystości) są łączone w jedną wspólną siatkę. Siatka ta zostaje wyświetlona, jeśli tylko wyświetlany jest jeden z sektorów należących do danego kwadratu kilometrowego. Na ogół na kilometr kwadratowy przypada względnie niewielka liczba trójkątów terenu, a połączenie ich w jeden obiekt zwiększa wydajność. Współdziała to z automatycznym dzieleniem zbyt dużych trójkątów (bok większy niż 1.5km), które znikały w zauważalny sposób po wyłączeniu wyświetlania sektorów z tyłu kamery.
Sektor
Sektor jest podstawową jednostką grupowania obiektów. W ramach sektora trójkąty automatycznie generowanych trajektorii (proceduralnych torów, dróg i rzek) o tej samej teksturze łączone są w jedną siatkę. Jeśli sektor nie jest wyświetlany przez pewien czas, związane z nim siatki obiektów proceduralnych są usuwane.
Obiekty
Obiektami scenerii są trójkąty, linie, egzemplarze modeli, odcinki trajektorii, druty zasilające (sieć trakcyjna), zasilacze sieci trakcyjnej, pojazdy, komórki pamięci, dźwięki i wyzwalacze zdarzeń (eventlauncher).
Rozdzielanie obiektów
Obiekt wczytywany z pliku scenerii zostaje umieszczony w sektorze odpowiednim dla jego współrzędnych. Wyjątkiem są nieprzezroczyste trójkąty terenu oraz pojazdy. Obiekty niemieszczące się na mapie (o współrzędnych przekraczających ±250km w planie) są ignorowane. Najdłuższa sceneria "Czarne" to 460km prostego toru (elektryfikacja obejmuje 52km). Trójkąty terenu z nieprzezroczystą teksturą są przenoszone na poziom kwadratu kilometrowego, a pojazdy są doczepiane do odcinków trajektorii.
Trójkąty terenu
Trójkąty terenu o nieprzezroczystej teksturze umieszczane są na poziomie kwadratu kilometrowego. Jeśli takowy trójkąt wystaje więcej niż 300m poza kwadrat kilometrowy, w którym znajduje się jego środek, zostaje podzielony na dwa mniejsze. Podzielony będzie bok pomiędzy wierzchołkiem wystającym, a tym, który jest bardziej oddalony od przecinanej linii siatki kilometrowej, w miejscu przecięcia tej linii. Powstałe w ten sposób trójkąty są następnie dalej dzielone rekurencyjnie, aż do uzyskania trójkątów nie wystających bardziej niż 300m z kwadratu kilometrowego. Pozwala to uniknąć znikania trójkątów terenu, których środek umieszczony byłby w niewyświetlanym (zbyt odległym) sektorze.
Trajektorie
Trajektorie ruchu (tory, drogi, rzeki) są zbudowane z odcinków prostych oraz krzywych Béziera trzeciego stopnia. Są to obiekty proceduralne, dla których siatki trójkątów są tworzone i usuwane dynamicznie. Po wczytaniu scenerii odcinki te są łączone w punktach styku (InitTracks). Ruch pojazdu możliwy jest tylko wzdłuż trajektorii (również określa ona wysokość). Kolizje możliwe są tylko dla pojazdów znajdujących się na tej samej trajektorii ruchu (w przygotowaniu jest możliwość wskazania przecinanej trajektorii). Nie jest możliwa swobodna jazda po trójkątach terenu ani zderzanie z innymi obiektami.
Dla odcinka trajektorii można określić parametr środowiska, który zmodyfikuje oświetlenie i dźwięki (np. tunel, przekop, most). Oświetlenie pojazdu na połączeniu odcinków zmienia się płynnie.
Zakończenia trajektorii
W przypadku przejechania pojazdu przez odcinek trajektorii, którego przeciwny koniec nie jest połączony z innym odcinkiem, tworzone są dynamicznie dodatkowe odcinki (niewidoczne). W przypadku pojazdów kolejowych dodawany jest tor wykolejający długości 450m, a dla samochodów jest to pętla zawracająca, długości około 40m.
Możliwe jest też włączenie w takim końcowym odcinku usuwania pojazdów, wtedy dodatkowy odcinek nie zostanie wygenerowany. Usuwanie pojazdów zostanie wyłączone, jeśli w scenerii znajdzie się odcinek łączący się z odcinkiem usuwającym. Mechanizm ten pozwala wczytać tylko potrzebne fragmenty większej scenerii i nie przejmować się pojazdami wyjeżdżającymi poza dostępną scenerię. Planowane jest również wstawianie pojazdów wjeżdżających na scenerię za pomocą zdarzeń czasowych.
Niebo
Niebo jest osobnym modelem 3D, wyświetlanym zawsze w miejscu kamery. W większości przypadków jest to czasza o promieniu około 1.5km, pokryta teksturą uzyskaną z fotografii nieba. Istnieje też model gwiazd, w postaci świecących punktów, których animacja uwzględnia aktualną godzinę i szerokość geograficzną.
Oświetlenie
Światło słoneczne
Dostępne są dwa rodzaje oświetlenia: statyczne, w którym kąt padania, jasność i kolor promieni słonecznych określa się bezpośrednio oraz dynamiczne, w którym parametry te wyliczane są na podstawie aktualnej godziny oraz zadanej szerokości geograficznej i dnia roku.
Odcinek trajektorii
Odcinek trajektorii może mieć modyfikator środowiska typu "kanion" albo "tunel". Ten pierwszy powoduje zmniejszenie oświetlenia znajdującego się na nim pojazdu, drugi zaś całkowite wyłączenie zewnętrznego oświetlenia i załączenie smugi, widocznej z kabiny (podobnie jak w nocy). Planowane jest dodanie dodatkowych modyfikatorów, odpowiadających oświetleniu przez latarnię albo światła wewnątrz hali.
Modele
Trójwymiarowe modele są wczytywane z plików T3D albo E3D. Obydwa formaty są autorskie i nie są obsługiwane przez edytory innych producentów oprogramowania. Model ma strukturę hierarchiczną, a jego elementy składowe są nazywane submodelami. Każdy submodel ma swój układ współrzędnych (nazywany transformem albo macierzą przekształcenia) i może mieć inną teksturę, czy inne parametry (zakres widoczności, animacje automatyczne, próg załączania oświetlenia). Animacje można wykonywać na poziomie pojedynczego submodelu, w takim przypadku ulegają jej wszystkie potomne submodele w hierarchii. Jeśli submodel ma być animowany, należy zaznaczyć to w jego własnościach, inaczej podczas zapisu pliku E3D zostanie zoptymalizowany, co może zepsuć układ odniesienia dla animacji. Modele są również używane dla pojazdów, ale pojazdy mają dodatkowo pliki opisujące dźwięki i fizykę.
Egzemplarze
Z jednego pliku modelu można utworzyć dowolną liczbę egzemplarzy modelu w scenerii, każdy z nich może mieć inną teksturę (jeśli w modelu jest użyta nazwa replacableskin zamiast konkretnej nazwy pliku tekstury) oraz stan animacji czy świateł. Wstawiając egzemplarz podaje się współrzędne XYZ oraz kąt obrotu w osi pionowej. Dodatkowym wpisem można również obrócić egzemplarz względem jego osi poziomych (pochylenie). Nie ma możliwości skalowania egzemplarzy.
Ukrywanie
Możliwe jest wyłączenie widoczności całego egzemplarza (za pomocą zdarzenia), nie będzie on wtedy wyświetlany. Domyślnie wyświetlane są wszystkie egzemplarze.
Zakres widoczności
Dla każdego egzemplarza można oddzielnie określić zakres odległości od kamery, w jakim będzie widoczny, lecz na ogół jest to mało użyteczne (kiedyś było używane do zwiększania FPS, przy obecnej regulacji promienia widocznej scenerii nie ma to sensu). Dla każdego submodelu osobno można określić zakres widoczności, będzie to działało we wszystkich egzemplarzach identycznie. Pozwala to zastąpić prosty model, widoczny z daleka, modelem bardziej szczegółowym, widocznym z bliska (tzw. fazy LoD).
Przesunięcie i obrót
Dla dowolnego (wskazanego we wpisie) egzemplarza możliwe jest przesunięcie i obrót dowolnego (wskazanego) submodelu względem jego układu współrzędnych (transform). Można obrócić również cały model. Przesunięcie i obrót są od siebie niezależne. Położenie zerowe określa transform danego submodelu. Jeśli submodel ma być animowany w ten sposób, należy to oznaczyć we własnościach, aby nie został zoptymalizowany (przeliczenie współrzędnych wierzchołków w celu uzyskania jednostkowej macierzy przekształcenia).
Animacje automatyczne
Dla dowolnego submodelu można ustawić automatyczne animacje, które będą widoczne we wszystkich egzemplarzach. Animacje te to przede wszystkim ruch wskazówek zegarów (zarówno płynny jak i skokowy), ale również obracanie submodelu w stronę kamery (drzewa), odkształcenie związane z wiatrem, a także symulacja ruchu obrotowego Ziemi (model nieba z gwiazdami).
Światła
Światła tworzone są w ten sposób, że w modelu istnieją dwa submodele, z których jeden reprezentuje światło zgaszone, a drugi zapalone. W danej chwili może być wyświetlany tylko jeden z nich. Istnieje również opcja, aby światło migało (stały okres), albo było uzależnione od jasności oświetlenia scenerii (zapalanie latarń po zmroku). Światła są używane przez sygnalizatory i pojazdy. Można użyć do 8 niezależnych świateł w modelu.
Świecące punkty
Możliwe jest umieszczenie w modelu świecących kierunkowo punktów (tzw. FreeSpotLight). Punkt ten jest widoczny jako jasny, niezależnie od odległości od kamery (oczywiście, jeśli mieści się w promieniu renderowania i nie jest rozmyty przez mgłę). Używane jest to do widocznych z daleka świateł sygnalizatorów i pojazdów. W parametrach światła można podać dwa kąty: mniejszy, w którym jasność światła będzie maksymalna i większy, poza którym światło nie jest widoczne. Pomiędzy tymi kątami światło zmniejsza swoją intensywność.
Wiele świecących punktów
Oprócz submodeli zbudowanych z trójkątów możliwe jest utworzenie submodelu ze świecących punktów. Każdy z punktów może mieć inny kolor. Obecnie jest to wykorzystane do symulacji gwiazd na nocnym niebie, ale może być również użyte jako model widocznych w nocy latarń (w większej odległości), czy świateł pozycyjnych pojazdu.
Generator napisów
Możliwe jest również przygotowanie modelu, który będzie wyświetlał napisy. W takim przypadku model musi zawierać oddzielne submodele dla poszczególnych znaków. Po ustaleniu treści napisu wyświetlane będą submodele odpowiadające kolejnym znakom, każdy przesunięty o odpowiednią odległość. Pozwoli to wygodnie budować tablice z napisami (nazwami stacji, miejscowości, informacjami), jak również zamieszczać numery seryjne czy wyświetlacze kierunkowe na pojazdach. Submodele generatora nie muszą reprezentować znaków pisma, mogą być również używane do budowania unikalnych obiektów złożonych z sekwencji powtarzalnych elementów, np. ogrodzenia, bloki mieszkalne, stragany, garaże. Mechanizm jest w trakcie dopracowywania szczegółów.
Zdarzenia
Zdarzenia (zwane eventami) powodują zmianę własności obiektów scenerii. Zdarzenia są łączone z trajektoriami, wyzwalaczami, komórkami pamięci i modelami zaraz po wczytaniu scenerii (InitEvents). Wyzwalane mogą być przez ruch pojazdów na trajektoriach, z klawiatury albo po ustalonym z góry czasie. Wyzwolone zdarzenie jest dodawane do kolejki z zadanym z góry opóźnieniem. Zdarzenia, którym minął czas oczekiwania w kolejce, są wykonywane. Możliwe jest zapętlenie zdarzenia z zadanym czasem powtarzania oraz warunkiem zakończenia. Opcjonalnie opóźnienie wykonania zdarzenia może być zwiększone o losową wartość o zadanej wartości maksymalnej.
Komórki pamięci
Komórki pamięci są zmiennymi złożonymi, zawierającymi jeden tekst i dwie wartości zmiennoprzecinkowe (czasem traktowane jako wartości całkowitoliczbowe). Każda komórka ma własną nazwę i stałe współrzędne XYZ (co służy do obliczania jej odległości od pojazdu). Na komórkach można wykonywać proste operacje za pomocą zdarzeń (zmiana wartości, dodawanie tekstów lub liczb, przesłanie jako komendy do pojazdu sterowanego przez komputer).
Skanowanie trajektorii
Poszczególne odcinki trajektorii mogą mieć przypisane zdarzenia, które będą dodawane do kolejki w sytuacji: wjazdu dowolnego pojazdu (od każdej strony osobno), wjazdu pojazdu z obsadą (od każdej strony osobno), postoju dowolnego pojazdu, postoju pojazdu z obsadą.
Każdy poruszający się pojazd skanuje swoją trajektorię ruchu w poszukiwaniu innego pojazdu, z którym mógłby się zderzyć. Samochody dodatkowo uwzględniają odsunięcie od osi drogi, co pozwala uniknąć zderzenia pojazdów poruszających się po różnych pasach.
Pojazd z włączonym napędem dodatkowo skanuje w poszukiwaniu podłączonych (za pomocą zdarzeń) do trajektorii komórek pamięci (GetValues) i wartości stałych (PutValues). Wartość tekstowa jest interpretowana jako komenda dla pojazdu z napędem - jeśli zostanie jako taka rozpoznana, zdarzenie nie jest dodawane do kolejki, ale zostaje wpisane do tabelki ograniczeń. Rozpoznawane są również ograniczenia prędkości na trajektorii oraz zwrotnice (których przełożenie może się zmienić, przez co inne odcinki będą musiały być skanowane). Skanowanie obejmuje co najmniej drogę hamowania pojazdu albo 1km w czasie postoju. Po zebraniu wszystkich znalezionych informacji do tabelki, jest ona analizowana pod kątem doboru optymalnej prędkości jazdy (reakcja na sygnały).
Zwrotnica
Zwrotnice są elementami trajektorii pojazdów kolejowych, które łączą ze sobą trzy odcinki w jednym punkcie. W przypadku jazdy na ostrze można wybrać zdarzeniem, na który tor przejedzie pojazd kolejowy. Iglica zwrotnicy jest animowana przez kilka sekund od przełożenia. W przypadku jazdy z ostrza, zwrotnica przestawi się samoczynnie, a dodatkowo doda do kolejki zdarzenie rozprucia. Ułożenie drogi dla pociągu polega na wykonaniu zdarzeń przestawienia odpowiednich zwrotnic. Obecnie nie ma możliwości utwierdzenia przebiegu (zablokowania zmiany zwrotnic). Nie ma też możliwości zmiany trajektorii dla samochodów i statków.
Obrotnica
Obrotnica jest prostym odcinkiem trajektorii, który można odłączyć zdarzeniem od sąsiednich odcinków, a następnie obrócić o dowolny kąt w osi pionowej. Następnie za pomocą zdarzenia można włączyć poszukiwanie innych odcinków, do których obrócony odcinek może się podłączyć. Razem z odcinkiem, o ten sam kąt, obracany jest model. W planach jest zwiększenie zakresu możliwych animacji, co pozwoli utworzyć przesuwnicę i wywrotnicę.
Skrzyżowania dróg
Skrzyżowania dróg mogą łączyć trzy albo cztery odcinki dróg. Samochód dojeżdżający do skrzyżowania losuje sobie wybór dalszej drogi. Wyświetlanie skrzyżowań oraz ruch samochodów na nich wymaga dalszego dopracowania.
Tor ładunkowy
Do toru można przyczepić zdarzenie z komendą załadowania bądź rozładowania pojazdu. Dla ładunku w ilości różnej od zera może być wyświetlany model ładunku razem z pojazdem. Możliwa jest też zmiana typu ładunku po rozładowaniu poprzedniego.
Odcinki izolowane
Dowolną liczbę odcinków trajektorii można połączyć logicznie w odcinek izolowany. Wskazane jest, aby były to odcinki połączone ze sobą w sposób ciągły. Odcinek izolowany generuje dwa zdarzenia: zajęcie, w momencie gdy jakakolwiek oś pojazdu zostanie umieszczona na dowolnym z kontrolowanych odcinków trajektorii oraz zwolnienia, gdy na skutek usunięcia ostatniej osi wszystkie odcinki trajektorii będą wolne. Własność ta jest przeznaczona do rozbudowy sterowania ruchem kolejowym.
Pojazdy
Pojazdy są to modele, które poruszają się po trajektoriach i mają dodatkowo określone parametry fizyczne oraz dźwięki i animacje. Obliczeniowo pojazdy mają dwa punkty styku ze swoją trajektorią ruchu. Liczba animowanych elementów pojazdu jest obecnie ograniczona z góry, trwają prace nad zniesieniem tych ograniczeń.
Osie i wiązary
Można podać średnicę osi, kąt obrotu będzie uzależniony od przebytej drogi (z wyjątkiem poślizgu i zablokowania kół przez hamulce). Dodatkowo (w szczególności dla parowozów) istnieje możliwość podania innej średnicy kół przednich i tylnych osi tocznych. Osie nie poruszają się względem wózków (nie licząc obrotu kół). Można użyć do 16 osi na pojazd.
Wiązary obsługiwane były podobnie jak osie, jedynie obracane w przeciwnym kierunku. Aby pozostawały poziome, musiały być doczepione do osi. Ponieważ równie dobrze działają wiązary utworzone jako osie, od wersji 390 wiązary nie są obsługiwane jako osobny typ animacji.
Wózki
Wózki grupują osie (stanowią dla nich submodel nadrzędny). Na przechyłkach są odpowiednio pochylane, na łukach są obracane tak, aby były styczne do toru. Przechylenie pudła pojazdu jest średnią przechylenia obu wózków.
Zderzaki
Zderzaki taboru kolejowego są animowane, jeśli występuje siła dociskająca zderzak. Obsługiwane są dwa z każdej strony pojazdu.
Wahacze
Wahacze są elementami poruszanymi w zakresie pewnego kąta. Są używane jako napęd drezyny ręcznej oraz nogi modeli ludzi i zwierząt (koń).
Odbieraki
Dwa odbieraki (pantografy) są sterowane niezależnie. We wcześniejszych wersjach użytkownik mógł wybrać, czy mają być podnoszone tak, aby dotykały drutu (nie było to zoptymalizowane i obniżało FPS), czy na stałą wysokość (większa wydajność symulacji).
Od wersji 414 obsługa odbieraków została zoptymalizowana pod względem wydajności i dokładności, a napięcie zasilające jest odczytywane bezpośrednio z drutu (można już zrobić sieć o napięciu 25kV albo 600V dla tramwajów, jak również symulować jazdę z obniżonym napięciem, np. 2.2kV). Jeżeli drut jezdny znajdzie się poniżej ślizgu podniesionego odbieraka, odbierak zostaje "połamany". Możliwe również stało się symulowanie zjawisk związanych z odrywaniem odbieraka od sieci (łuk elektryczny, wyłączenie obwodów).
Drzwi
Można użyć do 8 drzwi, otwieranych obrotowo albo przesuwnie. Pierwotnie animowane drzwi były używane tylko w elektrycznych zespołach trakcyjnych, natomiast modele wagonów nie miały ruchomych drzwi. Po wprowadzeniu animacji drzwi w wagonach, modele są sukcesywnie przystosowywane.
Sprzęgi
Pojazdy kolejowe mogą zostać połączone za pomocą różnych rodzajów sprzęgów. Podstawowym sprzęgiem jest hak, oprócz tego są węże: hamulcowy i zasilający, dostępne są także przewody ukratniające, sprzęg wysokiego napięcia oraz mostek przejściowy. Sprzęgi są wyświetlane albo w stanie połączonym, albo neutralnym. Węże powietrzne mogą być połączone "na wprost" albo "na krzyż", zależnie od położenia przewodu głównego w wagonie.
Światła
Pojazd może mieć maksymalnie 3 światła białe oraz 2 czerwone, zarówno z przodu jak i z tyłu (każde jest zapalane niezależnie). Dodatkowo jest możliwość załączenia z każdej strony pojedynczego modelu tabliczek końca pociągu. Światła funkcjonują na zasadzie wyświetlania jednego z dwóch submodeli (zapalony/zgaszony), mogą też mieć widoczne z daleka punkty świetlne. Nie są dostępne kierunkowskazy dla samochodów, ani światła stopu.
Ładunek
Jeśli pojazd ma ładunek w ilości niezerowej, do modelu pojazdu zostanie dodany model ładunku. Dla niektórych wagonów (Eaos, Sis) możliwe są różne rodzaje ładunku (tzn. różne modele; dla wagonów krytych ładunek nie jest widoczny). Ładunek wagonu można zmienić na odcinku trajektorii ze zdarzeniem przesyłającym odpowiednią komendę.
Dźwięki
Dla pojazdu można zdefiniować zestaw dźwięków, które będą odtwarzane w określonych sytuacjach.
Parametry fizyczne
Każdy pojazd musi mieć określone swoje parametry fizyczne. W szczególności długość, masę, rozstaw osi/wózków, typ i parametry hamulca, rodzaj i parametry sprzęgów, a dla pojazdów z napędem również parametry silnika. Dla samochodów istotna jest również szerokość (pozwala określić, czy mogą się minąć na wąskiej drodze).
Kabiny
Pojazdy nadające się do prowadzenia przez użytkownika mają dodatkowo model kabiny, dla którego można określić animacje i dźwięki. Elementami w kabinie można poruszać za pomocą klawiatury. Wpływ na sterowanie silnikiem, hamulcem czy innymi urządzeniami jest ściśle określony. Można jedynie regulować zakres animacji elementów kabiny, jak również używać własnych nazw dla animowanych submodeli w modelu kabiny. Kabina z każdej strony może mieć osobny model.
Ograniczenie ruchu kamery
Poruszanie się wewnątrz kabiny jest ograniczone prostopadłościanem, zdefiniowanym w pliku MMD. Niemniej możliwe jest wyjście do korytarza, a stamtąd powrót albo przejście do przeciwległej kabiny. Jeśli włączony jest mostek przejściowy (patrz Sprzęgi), można po nim przejść do sąsiedniego pojazdu.
Lusterka jako widoki kamery
Parametry służące do ograniczenia ruchu w kabinie są również używane do umiejscowienia dwóch dodatkowych widoków kamery, udających widok z lusterek zewnętrznych. Dostępne jest to od wersji 390.
Sztuczna inteligencja (AI)
Do prowadzenia pojazdów (z wyjątkiem pojazdu wybranego przez użytkownika) używane są odpowiednie algorytmy, uwzględniające możliwości fizyczne pojazdów. Sztuczna inteligencja skanuje trajektorię w poszukiwaniu sygnałów ograniczających prędkość i stosuje się do nich, dobierając siłę rozpędzania albo hamowania. Nie będzie przekraczać prądów maksymalnych w lokomotywach ani hamować zbyt gwałtownie. Jeśli użytkownik włączy AI w prowadzonym przez siebie pojeździe, będzie mógł obserwować wpływ wirtualnego maszynisty na przełączniki i dźwignie w kabinie.
Tryby pracy
Podstawowe dwa tryby pracy to jazda pociągowa (Obey_train) oraz manewrowa (Shunt). Dodatkowe tryby są używane do wykonania określonych czynności, są to: oczekiwanie na rozkazy (Wait_for_orders), uruchamianie i wygaszanie silnika (Prepare_engine), jazda w celu połączenia (Connect), rozłączanie składu (Disconnect) oraz zmiana kierunku jazdy (Change_direction). W danej chwili możliwy jest tylko jeden z trybów. Kolejne czynności do wykonania przez AI są zapisane w tabelce rozkazów. Dzięki temu AI może "skupić się" na uruchomieniu silnika, a dopiero gdy rozruch się zakończy, przejdzie np. do trybu jazdy pociągowej.
Sygnalizacja i skanowanie
Pojazd prowadzony przez komputer reaguje na zawartość komórek pamięci, które są przypisane do torów. Oblicza odległość od komórki pamięci (rzutując na wektor kierunku jazdy). Jeśli pojazd stoi w trybie manewrowym, to również skanuje tory wstecz. Dzięki temu możliwe jest sterowanie jedynie przez podawanie sygnałów manewrowych. W komórce pamięci sygnalizatora można umieścić również komendę do wykonania, jak podłączenie do składu, czy przypisanie rozkładu jazdy. Komenda taka będzie traktowana jak zakaz dalszej jazdy (analogicznie jak czerwone światło) i zostanie przekazana po zatrzymaniu.
Rozkłady
Na trasie pociągu można umieścić punkty zatrzymania (wskaźnik W4), przed którym zatrzymają się pociągi osobowe. Aby pociąg zatrzymał się w takim miejscu, należy wpisać jego nazwę do rozkładu jazdy. W rozkładzie można również podać godzinę odjazdu, przed którą pojazd nie odjedzie. Niemniej, jeśli jest spóźniony, to i tak zatrzyma się na kilkanaście sekund. Zależnie od tego, czy przyjechał przed czasem, czy się spóźnił, inna będzie technika jazdy na kolejnym odcinku (spóźniony będzie jechał bardziej agresywnie).
Przypisanie rozkładu do AI można wykonać poprzez statyczny wpis w pliku scenerii (definicja składu) albo w czasie symulacji, poprzez wysłanie odpowiedniej komendy. Dodatkowo można dodać przesunięcie godzin rozkładu o określony czas, co ogranicza liczbę plików w przypadku cyklicznego ruchu, np. komunikacji miejskiej.
Formaty plików
Tekstury
Aktualnie wczytywane są tekstury w formatach DDS (muszą być odbite w pionie), TGA (24 i 32 bity na piksel, opcjonalnie z kompresją), BMP (24 bity) oraz autorski format TEX (podobny strukturą do TGA bez kompresji). Rozszerzenie nazwy pliku jest dobierane automatycznie, dzięki czemu w celu uzyskania nieco lepszej jakości można zastąpić pliki DDS plikami TGA bez potrzeby modyfikowania innych plików. Boki tekstur muszą być potęgami liczby 2 (256, 512, 1024, 2048, 4096). Tekstury DDS i TGA są automatycznie skalowane w dół do maksymalnego rozmiaru akceptowalnego przez kartę graficzną, ewentualnie do mniejszego rozmiaru ustalonego przez użytkownika (niektóre karty graficzne dają większą wydajność przy ograniczeniu boku tekstur do 512 pikseli).
Stosowanie formatów BMP i TEX jest odradzane (brak kompresji). Podstawowym formatem jest DDS, jednak pojedyncze pliki muszą być pozostawione w TGA, gdyż kompresja DDS czasem powoduje zauważalne obniżenie jakości. Format DDS jest wtórny, ponieważ pliki DDS są tworzone automatycznie z pierwotnych plików TGA. Pliki DDS również nie nadają się do dalszej obróbki — przerabiając tekstury należy bazować na oryginalnych plikach TGA.
Modele
Modele mogą być wczytywane tylko z autorskich formatów T3D (tekstowy) oraz E3D (binarny). Format E3D ma nieco większe możliwości i wczytywany jest praktycznie bez dodatkowej obróbki. Zawarty w pojedynczym pliku model może mieć dowolną liczbę submodeli, tekstur, czy animacji. Ograniczona do 8 jest liczba świateł on/off.
Dźwięki
Dźwięki wczytywane są wyłącznie w formacie WAV. Standardem formatu dźwięków jest PCM 22kHz, 8 bit, mono. Wyjątkiem od tej reguły są modulowane dźwięki pojazdów, które mogą być nagrane z inną częstotliwością (szybkość odtwarzania takich dźwięków jest zależna od prędkości pojazdu i efektu Dopplera).
Scenerie
Scenerie wczytywane są z autorskiego formatu tekstowego. Rozszerzenia plików to SCN, SCM, INC i CTR (określają kontekst użycia pliku, składnia jest ta sama). Pliki scenerii mogą się odwoływać do innych plików scenerii, używając różnych zestawów parametrów aktualnych, które będą zastępować tekstowo parametry formalne (głównie jest to używane w plikach INC). Pliki ze zdarzeniami powinny mieć rozszerzenie CTR.
Parametry pojazdów
Parametry fizyczne pojazdów wczytywane są z plików tekstowych o rozszerzeniu FIZ (wcześniej CHK). Informacje o dźwiękach i animacjach pojazdów zapisane są w plikach tekstowych o rozszerzeniu MMD (składnia zbliżona do YAML).
Ponieważ niektóre programy narzędziowe dla Windows potrafią usunąć masowo pliki o rozszerzeniu CHK, traktując je jako pozostałości po naprawie struktury logicznej dysku, w najnowszych wersjach jest używane rozszerzenie FIZ. Składnia pozostała ta sama, z wyjątkiem jednostki ciśnienia, zmienionej ze względu na nowy system symulacji hamulców (zwany SPKS), oparty na barach zamiast megapaskali.
Rozkłady jazdy
Rozkłady jazdy dla pociągów wczytywane są z semigraficznych plików tekstowych (o rozszerzeniu TXT), stylizowanych na kolejowe rozkłady jazdy.
Mechanizmy pomocnicze
Dwie metody wyświetlania
Dostępne są dwie metody wyświetlania: Display Lists i VBO. Jak dotąd Display Lists w większości przypadków okazuje się być wydajniejsze (o około 20%). Są jednak wyjątki, gdy włączenie VBO daje lepsze efekty. W szczególności VBO jest automatycznie włączane dla kart Intel, gdyż użycie Display Lists powodowało znikanie trójkątów. Zmiana podczas symulacji nie jest możliwa.
Antyaliasing
Można wybrać poziom antyaliasingu (multisampling). Zmiana podczas symulacji nie jest możliwa. W przypadku spadku FPS multisampling zostanie wyłączony (płynność symulacji ma większy priorytet niż jakość grafiki).
Dwie metody wyświetlania napisów
Dwuwymiarowe napisy na ekranie są wyświetlane pomocniczo. Ponieważ jako Display Lists nie zawsze są widoczne, uruchomiona została alternatywna metoda, z użyciem GLUT32.DLL. Biblioteka jest linkowana dynamicznie i przy jej braku dostępne są jedynie standardowe napisy.
Informacje zwrotne
Stan zapalenia kontrolek w kabinie może być wysyłany na wyjścia komputera, takie jak kontrolki w klawiaturze, LPT, czy USB (aktualnie PoKeys55). Mechanizm ten jest przeznaczony do współpracy z dedykowanym pulpitem (makietą kabiny). Sterowanie portem LPT wymaga zainstalowania w systemie biblioteki INPOUT32.DLL i przy jej braku nie będzie działać (linkowanie dynamiczne).
Komunikacja z innym programem
Z innego programu, za pomocą mechanizmu WM_COPYDATA, możliwe jest wykonywanie zdarzeń, uzyskiwanie potwierdzenia zdarzeń, przesyłanie komend do AI, wykrycie zajęcia toru, sprawdzenie zajętości toru, czy pozycji i prędkości pojazdów. Mechanizm ten jest przeznaczony do połączenia z programem symulującym sterowanie ruchem kolejowym lub obsługującym jazdę wieloosobową.
Działanie programu w tle
W zależności od preferencji użytkownika, program przełączony w tło może się zatrzymać albo działać nadal. Ciągłe działanie programu jest przydatne, jeśli np. użytkownik oczekuje na dalszą jazdę, a w tym czasie potrzebuje korzystać z innego programu. Używanie klawiatury nie ma wtedy wpływu na symulację, aż do momentu przełączenia programu na pierwszy plan. Niemniej nadal możliwe będzie sterowanie dedykowanym pulpitem.
Debugmode
Specjalny tryb uruchomienia służy do testowania scenerii. Parametry prowadzonego pojazdu są wyświetlane tekstowo na ekranie. Zmieniona jest funkcja niektórych klawiszy, np. możliwe jest przesunięcie pojazdu o 100m do przodu lub do tyłu. Wykolejenie pojazdów jest wyłączone, podobnie jak ograniczenie ruchu kamery w kabinie.
Zmiany w poszczególnych wersjach:
MaSzyna - wersje | |
---|---|
Wersje 2005-2009 | 699kB • Mega Pack (KURS90, 717kB) • Dizelpack (735kB) |
Wersje z 2011 | 71 • 113 • 120 • 145 • 162 (PC2010) • 212 • 231 • 291 |
Wersje z 2012 | 325 (PC2011) • 355 • 372 • 390 • SPKS@390 |
Wersje z 2013 | 394 (01.13) • Kurs 2013 • 408 • SPKS@408 (08.13) • 414 |
Wersje z 2014 | 424 • 435 • 441 • 450 • 457 |
Wersje z 2015 | 464 (15.02) • 469 (15.04) |
Wersje robocze | SPKS • warsztat |