Symulator/MaSzyna/EU07.EXE 390

Z Rainsted
Skocz do: nawigacji, wyszukiwania

Plik wykonywalny symulatora EU07.EXE w wersji 1.8.696.390 jest trzecią częścią ósmego etapu prac. Etap ten ma celu przede wszystkim dalsze dopracowanie AI (tabelka ograniczeń, poprawione hamowanie) oraz ulepszenie animacji w pojazdach.

Wersja ta obejmuje zmiany wprowadzone od końca września do połowy listopada 2012. Zostały poprawione "ostatnie łatwe do poprawienia błędy", jak również doszło kilka nowych funkcjonalności, postulowanych w ankiecie przeprowadzonej wśród użytkowników. Jest to jednocześnie ostatnia wersja wydana w roku 2012.

Wbudowana dekompresja DDS

Wbudowana programowa dekompresja DDS (omijająca OpenGL) jest włączana automatycznie, jeśli karta graficzna nie obsługuje sprzętowej dekompresji DDS (wewnątrz OpenGL). Dotyczy to raczej starszych kart i niektórych wersji sterowników dla Linuxa. Dotychczas próba wczytania DDS mogła powodować wysypanie programu. Algorytm programowej dekompresji został dodany w 2009 roku, ale nie załączał się automatycznie (ręczne włączenie też nie dawało pożądanego efektu). Użycie wbudowanej dekompresji można wymusić przez decompressdds yes w pliku INI, może to spowodować dłuższe wczytywanie się scenerii. Normalnie nie ma potrzeby używania tego parametru.

Poprawione wczytywanie T3D

Podczas przygotowań do generatora napisów (który wymaga rozróżniania wielkości liter w nazwach submodeli) nie została usunięta zmiana wielkości liter na małe podczas wyszukiwania submodelu nadrzędnego. W efekcie, jeśli w nazwach submodeli były używane wielkie litery, to psuła się hierarchia modeli. Do czasu upowszechnienia się wersji z poprawką wskazane jest używanie wyłącznie małych liter w nazwach submodeli, zwłaszcza posiadających submodele potomne. W przyszłości konieczna będzie konsekwencja w stosowaniu wielkości liter, tzn. np. Rectangle11 i rectangle11 to będą dwa osobne submodele.

Lusterka jako dodatkowe widoki

Od wersji 374 dostępne są dodatkowe widoki, udające patrzenie przez lusterka. Po przytrzymaniu klawisza [Ctrl] razem ze strzałką w lewo albo w prawo, kamera przenosi się w okolice lusterka i patrzy do tyłu. Kamera jest umieszczana w przednim rogu prostopadłościanu ograniczającego ruch w kabinie (zapisanego w MMD) oraz 1.5m od poziomu podłogi. W przyszłości możliwe będzie określenie współrzędnych lusterek w MMD albo w modelu kabiny, niezależnie od obszaru ograniczającego ruch.

Podgląd rozkładu jazdy

Począwszy od wersji 375, po przyciśnięciu klawisza [F3] pojawia się rozkład jazdy dla prowadzonego pojazdu. Aby jednak był wyświetlany, musi zostać zdefiniowany w scenerii. Większość scenerii w PC2011 nie ma rozkładów, wyjątkiem jest sceneria Quark. Rozkłady są również na scenerii Krzyżowa, jednak nie będą działać z powodu braku W4. Wygląd wyświetlanego rozkładu może się zmieniać w kolejnych wersjach (nie jest to oryginalna treść pliku TXT z rozkładem). Ze względu na to, że rozkład może być długi (kilkadziesiąt stacji), wyświetlana jest tylko jego początkowa część, tzn. od najbliższego posterunku. W miarę mijania kolejnych posterunków (W4), początkowe pozycje są usuwane, aby pokazać kolejne.

Płynna regulacja kranu hamulca zasadniczego

Parametr w INI brakestep określa krok ("ilość pozycji") na jedno przyciśnięcie klawiszy [Num3]/[Num6]. Domyślna wartość to 1.0, da działanie jak dla wcześniejszych wersji. Przykładowe ustawienie: brakestep 0.6. Dla położeń pośrednich hamulca ciśnienie jest interpolowane pomiędzy wartościami zapisanymi w CHK. Dotyczy to tylko zaworu Oerlikona, pozostałe będą ustawiane na pozycję określoną liczbą całkowitą. Użycie wartości spoza przedziału (0.0;1.0> nie ma sensu.

Przestawiacz próżny/ładowny

Przestawiacz może być użyty na dowolnym pojeździe w trybie swobodnego latania [F4]. Dotychczas działało to tylko na tym samym torze, co prowadzona lokomotywa. Należy użyć klawiszy [H] albo [Shift]+[H].

Wybór kanału radiotelefonu

Kanał (w kabinie) można wybrać używając klawiszy [-] (zmniejszenie) oraz [=] (zwiększenie). Zakres zmian jest od 0 (wyłączony) do 8. Wybrany kanał jest wyświetlany w drugiej linijce po naciśnięciu [F2], po znakach "RT:".

Również w scenerii można umieszczać wskaźniki W28 z eventem PutValues i komendą Radio_channel. Pierwszy parametr komendy to numer kanału (od 1 do 8), drugi powinien mieć wartość 0 (będzie używany przy W29). Komenda ta ustawia kanał dla obiektu zarządzającego składem (np. ustawi kanał kierownikowi pociągu).

Jest to przygotowane pod przyszłe zastosowania, obecnie raczej bezużyteczne.

Logowanie błędów w TSegment

W przypadku błędów w geometrii odcinka (np. pętelka), znalezienie błędnego odcinka było utrudnione. Również poziom wyliczania geometrii łuku nie ma dostępu do nazw odcinków, a w wielu przypadkach odcinki nawet nie mają unikalnych nazw. Obecnie, w przypadku błędnej geometrii odcinka, w pliku errors.txt zostaną zapisane współrzędne jego punktu początkowego (Point1), co ułatwi lokalizację błędu.

Ulepszone pauzowanie

Klawisz [Esc] może być używany do pauzowania symulacji, o ile nie jest włączony tryb testowy (Debugmode). Jest to rozwiązanie dla użytkowników laptopów, którzy mogą nie mieć klawisza [Pause].

Niezależnie od tego, możliwe jest zapauzowanie symulacji zaraz po wczytaniu, poprzez wpis pause yes w EU07.INI albo w scenerii jako config pause yes endconfig. Uwaga! Pauzowanie nie działa w trybie multiplayer 1.

Ulepszone przejęcie pojazdu

Przy przejęciu innego pojazdu klawiszem [F5], automatycznie uruchamiany jest widok z kabiny.

Dodatkowo, jeśli przejęcie następuje w trybie Debugmode, to pojazd będzie nadal prowadzony przez AI. W takim przypadku przejęcie sterowania wymaga ręcznego wyłączenia AI klawiszem [Q].

Zapalanie światła w kabinie

Światło można zapalić kombinacją klawiszy [Shift]+[Ctrl]+[;], wyłączyć przez [Ctrl]+[;]. Dodatkowo [Shift]+[Ctrl]+['] i [Ctrl]+['] odpowiadają za przyciemnienie. Lampę w kabinie można zdefioniwać w MMD jako i-cablight: (przygotował Hunter).

Poprawiona 1. pozycja w EZT

Nastawnik jazdy w EZT nie wymaga już oczekiwania na 1. pozycji na załączenie sterowania, jak to jest w EU07. Można od razu ustawić pozycję S albo R.

Uwaga! Należy używać nastawy NAPRZÓD II. Dla nastawy NAPRZÓD I nie ma połączenia równoległego silników, po uzyskaniu jazdy bezoporowej na połączeniu szeregowym załączane są boczniki. Ze względu na błąd w programie, na nastawie NAPRZÓD I napięcie na silniku nie zanika po cofnięciu nastawnika jazdy na pozycję 0. Zostało to poprawione w wersji 394, a od wersji 395 ma być obsługiwany parametr ScndS=Yes w CHK, który będzie włączał boczniki szeregowe (wyłączał połączenie równoległe) na nastawie NAPRZÓD I.

Zmiany Huntera

Również tym razem Hunter dostarczył pakiet swoich zmian:

- usunieto uzaleznienie lampki ogrzewania od przetwornicy
- poprawienie przyciskow od sprezarki i ogolne dzialanie (zaleznosc CompessorPower w CHK znow dziala)
- wywalono odtwarzanie z movera dzwieku stycznika przy rozlaczaniu WS, zostal przeniesiony do Train.cpp
- usunieto zapetlanie sie dzwieku rozlaczenia WSa przy jego trzymaniu
- rozlaczanie WSa przy braku napiecia w sieci, do przetestowania EZT
- dopieszczenie oswietlenia:
  - swieci ciemniej gdy wylaczona przetwornica
  - jesli po zapaleniu jest ciemniejsze niz bylo przed zapaleniem to wraca do poprzednich wartosci
  - zalaczenie oswietlenia pod Univ3 (Ctrl+Shift+; i Ctrl+;)
  - zalaczenie przyciemnienia oswietlenia pod Univ4 (Ctrl+Shift+' i Ctrl+')
  - zdefiniowanie przyciskow dla siodemki:
    cablight_sw: sw-osw-kabiny rot -0.2 0 0.2
    cablightdim_sw: sw-przyc-kabiny rot -0.2 0 0.2
- dodany test czuwaka po przytrzymaniu spacji
- poprawka w wentylatorach - teraz na pozycji 0, po zejsciu z kierunku predkosc wentylatorow dalej spada
  (wczesniej byla stala, dopoki nie ustawilo sie kierunku)
- mozna zdefiniowac czas otwierania stycznikow poprzez SCDDelay=(czas); gdy parametr nie jest podany to
  SCDDelay=SCDelay
- zrobione natychmiastowe zamykanie stycznikow jazdy szeregowej dla 303E, gdy mamy na kole 28 pozycje - za
  parametrami czasow pracy stycznikow nalezy podac parametr FSCircuit=Yes

Poprawiona jazda AI pod górę

Poprawione zostało ruszanie na pochyleniu tak, że AI zaczyna naciągać skład, gdy ciśnienie w cylindrach pojazdów spadnie poniżej 0.08MPa.

Jadąc pod górę AI włączy wysoki rozruch, gdy pochylenie przekracza 10‰, a z podzielenia mocy na niskim prądzie przez masę składu i składową styczną grawitacji wynika prędkość mniejsza niż 10km/h. Również w takim przypadku AI prewencyjnie posypuje tory piaskiem.

Przywrócone przesunięcie przy Event0

Dla zachowania zgodności wstecz, przywrócone zostało przesuwanie składu, który ma stać na torze z Event0. Skład jest przesuwany na odległość 8m od początku toru, jeśli ma prędkość mniejszą od 1km/h, a odległość od początku toru jest między 0 a 8m. Jednocześnie komenda Jump_to_order 0 0 działa jak Jump_to_order 1 0 i powoduje uruchomienie lokomotywy (rozkaz w pozycji 0 tabelki to zawsze Wait_for_orders, czyli bezterminowe czekanie na dalsze polecenia). W nowych scenariuszach nie należy tego używać.

Ulepszona kolejka eventów

Event Multiple może sam siebie dodać do kolejki (pętla eventowa), o ile ma opóźnienie co najmniej 5 sekund. Wcześniej realizacja pętli eventowej wymagała użycia co najmniej dwóch eventów Multiple.

Za pomocą joinduplicatedevents yes można uzyskać efekt połączenia eventów o tych samych nazwach w jeden. Będą one dodawane do kolejki jako jeden i zostaną wykonane niemal równocześnie (w kolejności wpisów). Opcja ta wymaga świadomego stosowania, najlepiej tylko w zakresie eventów sterujących scenerią (przy wpisach sygnalizatorów i rozjazdów powinna być wyłączona). Zgrupowanie eventów nazwanych identycznie przez przypadek może prowadzić do trudnych do wyłapania błędów.

Dla joinduplicatedevents no (ustawienie domyślne) duplikaty również są łączone i dodawane grupowo do kolejki, jednak wykonywany będzie tylko ostatni o danej nazwie, a wcześniejsze są pomijane. Zostało to wprowadzone jako zgodność wstecz, w celu uruchomienia scenerii z błędami.

Poprawione uproszczone wnętrze

Lowpolyinterior jest wyświetlany również w fazie przezroczystych, dotychczas były wyświetlane tylko nieprzezroczyste submodele.

Ze względu na błąd w programie, w trybie Display Lists uproszczone wnętrze z przezroczystymi teksturami może być wyświetlane również przy normalnym widoku z kabiny. Zostało to naprawione w wersji 391.

Odluźnianie przeładowania lokomotyw na zimno

AI odluźni lokomotywy ciągnięte na zimno, w przypadku ich przeładowania. Dotychczas podłączenie zimnej lokomotywy do składu AI skutkowało szybkim przeładowaniem hamulca w niej i trwałym zatrzymaniem w przypadkowym miejscu. Wiele razy scenarzyści musieli rezygnować ze składów zawierających zimne lokomotywy, jeśli miały być prowadzone przez AI. Nadal możliwe jest przeładowanie hamulca zimnej lokomotywy w składzie prowadzonym przez użytkownika, w takim przypadku musi on ręcznie odluźnić ten hamulec w trybie swobodnego latania (klawisz [F4]), albo usunąć przeładowanie umiejętną obsługą kranu. Wskazane jest nie używanie fali przy ciągnięciu zimnych lokomotyw.

Zmiana wpisu terenu w E3D

Od wersji 383 teren zapisany w pliku E3D wstawia się za pomocą składni node -1 -1 model ... endmodel, czyli jak każdy inny model, z wyjątkiem tego, że minimalna odległość musi być ujemna. Zmiana jest wprowadzona dla uproszczenia składni, póki jeszcze teren w E3D nie wszedł do szerszego użycia. Składnia wprowadzona w wersji 325 nie będzie obsługiwana.

Else w evencie Multiple

Od wersji 383 można w evencie Multiple używać słowa else. Eventy wymienione po else zostaną dodane do kolejki, jeśli warunek nie będzie spełniony. Jednocześnie wykonanie eventu z else nie będzie potwierdzane zewnętrznemu programowi sterującemu, ponieważ fakt wykonania tego eventu nie jest jednoznaczny. Przykład:

event keyctrl09 multiple 0 mem tak1 else nie1 nie2 condition memcompare * 0 * endevent

Warunek w evencie UpdateValues

Od wersji 383 można używać warunkowych eventów UpdateValues, dotychczas było to możliwe wyłącznie w przypadku Multiple. Warunek condition memcompare dotyczy wyłącznie tej komórki, którą modyfikuje UpdateValues. Przydatne to może być np. do rezerwowania przebiegów. Rezerwacja zostanie dokonana jedynie pod warunkiem, że nie została dokonana wcześniej. Przykładowo, po wykonaniu obydwu poniższych eventów (w przypadkowej kolejności), zawartość komórki zostanie zmieniona tylko przez jeden z nich (wykonany wcześniej):

node -1 0 głowica memcell 0 0 0 tekst 0 0 none endmemcell 
event keyctrl01 updatevalues 0 głowica * 1 1 condition memcompare * 0 0 endevent
event keyctrl02 updatevalues 0 głowica * 2 1 condition memcompare * 0 0 endevent

Logowanie zawartości komórek

Jeśli nie istnieje komórka pamięci, której nazwę podano w evencie LogValues, to zostanie wypisana do logu zawartość wszystkich komórek w scenerii. Przykład:

event keyctrl09 logvalues 0 none endevent

Kopiowanie komórek pamięci

Za pomocą nowego eventu CopyValues można przekopiować zawartość jednej komórki do innej. We wpisie jako pierwszą podaje się docelową, a drugą źródłową. Opcjonalnie można podać parametr binarny, który spowoduje przekopiowanie: +1 tekstu, +2 pierwszej wartości liczbowej, +4 drugiej wartości liczbowej. Przykłady:

event keyctrl05 copyvalues 0 mem_do mem_z 5 endevent
event keyctrl07 copyvalues 0 mem_do mem_z endevent

Rozszerzenie działania WhoIs

Podobnie jak w CopyValues, można używać flag bitowych (1..7), określających które zmienne komórki zostaną zmodyfikowane. Zmienione zostało znaczenie liczb wpisywanych do komórki. Dodatkowo można zmienić działanie eventu WhoIs, dodając +8, +16 albo +24. Znaczenie jest następujące:

Parametr Tekst (+1) Liczba 1 (+2) Liczba 2 (+4)
+0 (1..7) Plik rozkładu Ile stacji do końca 1=postój, 0=przelot
+8 (9..15) Miejsce docelowe Kierunek w składzie: 1 albo -1 Moc silników (0=wagon)
+16 (17..23) Nazwa ładunku Ilość ładunku Maksymalna ilość ładunku
+24 (25..31) Typ pojazdu (CHK) 0 (zero) 0 (zero)

Przykład: W torze umieszczony jest wpis event2 test_whois, którego zadaniem zapisanie do komórek informacji o jadącym taborze

//komórki pamięci
node -1 0 mem-typ memcell 0 0 0 none 0 0 none endmemcell 
node -1 0 mem-lad memcell 0 0 0 none 0 0 none endmemcell 
node -1 0 mem-doc memcell 0 0 0 none 0 0 none endmemcell 
node -1 0 mem-roz memcell 0 0 0 none 0 0 none endmemcell 
//eventy zgrupowane pod jedną nazwą (nie jest to wymagane)
config joinduplicatedevents yes endconfig
event test_whois whois 0 mem-roz  7 endevent //rozkład
event test_whois whois 0 mem-doc 15 endevent //docelowość
event test_whois whois 0 mem-lad 23 endevent //ładunek
event test_whois whois 0 mem-typ 31 endevent //typ pojazdu
event test_whois logvalues 0 none endevent //wpisz do logu
config joinduplicatedevents no endconfig

Nie jest to ostateczna wersja i w toku dalszego rozwoju znaczenie zapisywanych wartości może się jeszcze zmienić.

Poprawiona jazda na widoczność

Jeśli pomiędzy pociągiem prowadzonym przez AI a sygnałem wolnej drogi znajdują się jakieś inne pojazdy (nie z własnego składu), to AI nie będzie reagować na taki sygnał (nie ruszy z miejsca). Jedynie w przypadku wstecznego skanowania w trybie manewrowym może zmienić kierunek jazdy. Zachowanie to dotyczy tylko pociągów, samochody zatrzymane sygnalizatorem ruszą jednocześnie.

Ograniczony przesuw drzwi

Losowa prędkość otwierania i zamykania drzwi została zrealizowana przez mnożenie wektora przesuwu przez losową wartość z przedziału od 1 do 2.5. Efektem ubocznym było otwieranie drzwi nawet do 2.5 raza bardziej, niż przewidywała animacja w MMD. Przesuw został ograniczony do maksymalnej jego wartości.

Trąbienie na ostatniej stacji

Sygnał dźwiękowy przed ruszeniem z ostatniej stacji jest uruchamiany po odczekaniu czasu postoju (ok. 60 sekund), a nie zaraz po podaniu sygnału manewrowego (Ms2).

Poprawione łączenie ze składem AI

Jeżeli lokomotywa użytkownika ma zostać dołączona do składu prowadzonego przez AI (popych, przetaczanie przez AI, np. na odcinku bez drutu) należy delikatnie dojeżdżać do składu AI, a przed łączeniem (użyciem klawisza [Insert]) należy ustawić nastawnik kierunkowy na 0 albo przestawić kran hamulca w odcięcie. W przeciwnym przypadku główną lokomotywą w składzie stanie się lokomotywa użytkownika, a AI zostanie deaktywowane. W przypadku niezamierzonej deaktywacji AI należy pojazdy rozłączyć i połączyć ponownie.

Poprawione sterowanie EN57 przez AI

Na użytek EN57 (ale dotyczy to wszelkich wagonów sterowniczych bez silnika) został zmieniony sposób sterowania nastawnikiem jazdy. Od razu ustawiana jest odpowiednia pozycja (zależnie od docelowej prędkości) i nie jest ona zmieniana przez najbliższe kilka sekund. Dodatkowo sprawdzany jest stan przekaźnika nadmiarowego we wszystkich członach (wcześniej AI sobie nie radziło po jego zadziałaniu w EN57).

Automatyczne uruchomienie AI w Debugmode

Po włączeniu trybu testowego (Debugmode) w pociągu wybranym do jazdy zostanie automatycznie uruchomione AI. Dzięki temu można uruchomić wczytywanie scenerii i za jakiś czas tylko sprawdzić, czy ruch pociągów przebiega zgodnie z założeniami. W celu uruchomienia ręcznej jazdy w trybie testowym, należy wyłączyć AI klawiszem [Q] natychmiast po wczytaniu scenerii.

Przyspieszacz symulacji

W trybie testowym (Debugmode) można użyć klawisza [F6] do zmiany prędkości upływu czasu. Z klawiszem [Shift] przyspieszenie jest dwukrotne, z [Ctrl] - pięciokrotne, a z [Shift] oraz [Ctrl] - dziesięciokrotne. Przyciśnięcie samego [F6] przywraca normalny tryb upływu czasu. Uwaga! Ze względu na to, że obliczenia fizyki nie są deterministyczne (zależą od FPS), scenerie z przyspieszonym czasem mogą nie działać prawidłowo. Nieprawidłowe efekty nie powinny mieć miejsca, jeśli osiągana wartość FPS podzielona przez wybrane przyspieszenie przekracza 20. Przykładowo, pięciokrotne przyspieszenie wymaga 100 FPS.

Wcześniej klawisz [F6] w Debugmode przestawiał jedynie godzinę, ta funkcja nie jest już dostępna.

Poprawione przechodzenie pomiędzy członami

Po wprowadzeniu obiektu zarządzającego składem (w połączeniu z wirtualnym mechanikiem, czyli AI) pojawił się problem przemieszczenia użytkownika w składzie prowadzonym przez AI. Obecnie zostało to rozwiązane w następujący sposób:

1. Jeśli użytkownik prowadzi pojazd ręcznie, obiekt zarządzający jest przenoszony przy przejściu do innego członu. W docelowym członie można włączyć AI przez [Shift]+[Q].

2. Jeśli pojazd jest prowadzony przez AI, użytkownik może przejść do innego członu, AI będzie kontynuować jazdę nie przemieszczając się. Aby wyłączyć AI (przejść na sterowanie ręczne), należy wrócić do członu, w którym się ono znajduje.

3. Jeśli pojazd jest prowadzony przez AI, a AI zmienia człon z powodu zmiany kierunku jazdy, użytkownik zostanie przeniesiony razem z AI, o ile znajduje się w tym samym członie.

Sprawdzanie typu hamulca w składzie

AI sprawdza, czy wszystkie pojazdy w składzie posiadają hamulec Oerlikon. Jeśli nie, to nie będzie używać napełniania uderzeniowego.

Uwaga autorska

Prace nad wersją zostały zakończone 2012-11-13, opublikowana 2012-11-25.

Ra.

MaSzyna - wersje
Wersje 2005-2009 699kB • Mega Pack (KURS90, 717kB) • Dizelpack (735kB)
Wersje z 2011 71113120145162 (PC2010)212231291
Wersje z 2012 325 (PC2011)355372390SPKS@390
Wersje z 2013 394 (01.13)Kurs 2013408SPKS@408 (08.13)414
Wersje z 2014 424435441450457
Wersje z 2015 464 (15.02)469 (15.04)
Wersje robocze SPKSwarsztat