Symulator/MaSzyna/EU07.EXE 212

Z Rainsted
Skocz do: nawigacji, wyszukiwania

W wersji 1.3.130.162 uruchomione zostało logowanie błędów sprzęgów. Okazało się, że te błędy się dość często pojawiają i w dużej mierze mogą być przyczyną nieprawidłowego zachowania AI. W związku z powyższym przejrzałem i przerobiłem ruch "osi" po trajektoriach oraz wyszukiwanie kolizji.

Ponieważ sprzęgi AI wyglądają na opanowane, przeszedłem do piątego etapu prac, czyli uruchomienia modeli zapisywanych w plikach binarnych (E3D). Aktualna struktura plików E3D może się jeszcze nieznacznie zmienić, także do końca 2011 roku może być konieczne usuwanie wygenerowanych wcześniej plików w celu zastąpienia ich nowszymi.


Obecne EXE wprowadza nowe funckjonalności i nie jest w pełni zgodne wstecz. Mogą wystąpić poniższe błędy:

  • nieprawidłowe animacje submodeli - wymaga ręcznego dopisania "Anim: true" w animowanych submodelach pliku T3D przed zapisaniem w formacie E3D,
  • migotanie płaszczyzn (podświetlenia) oraz braki niektórych elementów w kabinach, np. czuwak w EP09 - są to niedoskonałości konkretnych modeli, częściowo można je wyeliminować wyżej wymienioną metodą,
  • inne zachowanie AI - wymaga przejrzenia scenerii i połączeń semaforów i Tm z torami za pomocą eventów, a także załączania trybu manewrowego przed odjazdem oraz W4 i rozkładów.


Poprawki w aktualnej wersji 1.3.219.212:

1. Mijanie pojazdów

Poprawione wyszukiwanie pojazdu do podłączenia sprzęgu wirtualnego. Dla samochodów i statków możliwość minięcia się z innym pojazdem, jeśli odległość poprzeczna pomiędzy nimi na to pozwala.

2. Zoptymalizowany ruch osi/wózka

Zmieniony sposób poruszania osi/wózka po torach. Zoptymalizowane wyliczanie pozycji na torze (9 mnożeń i 9 dodawań zamiast 22 mnożeń, 6 odejmowań i 9 dodawań). Azymut wyliczany z pochodnej zamiast z dwóch sąsiednich pozycji (również mniej mnożeń). Przechyłka i pochylenie wyliczane w momencie przesunięcia osi/wózka, zamiast każdorazowo, gdy było to potrzebne. Dla odcinków prostych azymut i przechyłka są wyliczane jednorazowo przy ich tworzeniu. Rezygnacja z przeliczenia dwóch dodatkowych osi, co służyło obliczeniu kąta obrotu wózka.

3. Rozprucie zwrotnicy

Zmieniona została informacja o sposobie połączenia torów. Zamiast wartości binarnej "zmiana kierunku" użyty jest numer punktu podłączenia, z rozróżnieniem torów zwrotnicy. Teraz jadąc z ostrza zwrotnica sama przestawia się (ale nie wykonuje się event przełożenia zwrotnicy), dzięki czemu zlikwidowane zostały przeskoki. Nadal występują przeskoki w przypadku przełożenia zwrotnicy pod taborem jadącym na ostrze. Patrz też punkt 22.

4. Flagi eventów

Na torach bez eventów (większość) nie są sprawdzane dodatkowe warunki wyzwolenia eventu.

5. Wózki obracane niezależnie od drutów

Wyłączenie zależności kręcenia wózkami od poszukiwania sieci trakcyjnej przez pantograf. Dotychczas włączenie poszukiwania sieci było domniemaniem większej wydajności komputera.

6. Alternatywne nazwy modeli wózków

Rozpoznawanie boogie01 oraz boogie02 jako alternatywnych nazw wózków (np. ET22).

7. Poprawione wyświetlanie napisów w Debugmode

Naciśnięcie klawisza funkcyjnego nie powoduje już wymieszania tekstów, a ich przełączenie.

8. Poprawione logowanie naciśnięć klawiszy

Logowana jest również informacja o naciśnięciu [Ctrl].

9. Zlikwidowany problem "NULL track"

W przypadku dojechania do końca toru i nie zatrzymania się, zostanie automatyczne utworzone niewidoczne przedłużenie toru, mające na celu wykolejenie taboru. W przypadku obrotnicy może to jednak spowodować jej nieprawidłową pracę. Niemniej wykolejenie taboru na obrotnicy raczej skutecznie wyłącza ją z ruchu.

10. Rozpoznawanie jedynkowych transformów

Jeśli submodel ma transform z jedynkami na przekątnej, będzie wyświetlany szybciej. Uwaga! Jeśli submodel ma być animowany eventami albo jest ruchomym elementem kabiny, należy mu wpisać "Anim: true", w przeciwnym przypadku submodel może się w ogóle nie animować albo animować w nieprawidłowy sposób!

11. Poprawione sprzęgi wirtualne

Pojazdy stojące na tym samym torze są połączone tzw. sprzęgiem wirtualnym, który pomaga wykrywać kolizje. We wcześniejszych wersjach działanie sprzęgów wirtualnych skutkowało co najmniej trzema poważnymi błędami: I. Przy połączeniach torów typu Point1-Point1 albo Point2-Point2 sprzęg wirtualny mógł być tworzony w nieodpowiednim kierunku, co powodowało podczepianie się wagonów do samych siebie i objawiało się "waleniem w mur", rozrywaniem składu albo odrzucaniem pojazdu z dużą prędkością. II. Sprzęg wirtualny mógł się podłączać po przeciwnej stronie niż powinien (tzn. do bardziej oddalonego sprzęgu najbliższego pojazdu), co powodowało zepsucie listy dwukierunkowej (jednego z kierunków) i mogło prowadzić do rozerwania składu. III. Dodatkowy pojazd aktywny, poruszający się na drugim torze zwrotnicy, przez którą przejeżdżał skład, mógł "atakować" sprzęgiem wirtualnym zastępującym sprzęgi rzeczywiste, powodując zepsucie listy dwukierunkowej (jednego z kierunków), co mogło prowadzić do rozerwania składu. Sytuacja taka ma miejsce np. w przypadku mijanki na jednotorze i dwóch AI jadących jednocześnie z przeciwnych stron.

12. Ignorowanie zbyt dużych trójkątów

Ignorowane są trójkąty w modelach, które mają rozmiar boku większy niż 2km, podobnie jak trójkąty zdegenerowane. Obecność takiego trójkąta w modelu może powodować przycinanie, a może on nawet nie być zauważalny. Informacja o znalezieniu takiego trójkąta zapisywana jest do logu wraz z podaniem nazwy submodelu (nazwa modelu jest wyświetlana wcześniej). Zbyt duże trójkąty scenerii (terenu) są dzielone na mniejsze.

13. Zmienione pauzowanie i działanie programu w tle

Aby zatrzymać symulację, należy użyć klawisza [Pause] (obsługa klawisza [Esc] została wyłączona). W trakcie pauzowania można się poruszać kamerą, jednak symulacja będzie zatrzymana i nie będą obsługiwane ani logowane naciśnięcia klawiszy. Został usunięty problem powodujący spadanie pudła z nieba albo wysuwanie się spod torów po użyciu pauzy (w tym po przełączeniu na inny program). Pauza nie działa po włączeniu komunikacji z innym programem - wpis multiplayer 1 w eu07.ini. Po umieszczeniu w eu07.ini wpisu inactivepause no symulacja będzie nadal działała po przełączeniu innego programu na wierzch, ale nie będą słyszalne dźwięki. Uwaga! Użycie klawisza [Pause] na oknie z logiem również spowoduje zatrzymanie programu, ale będzie wyglądał na zawieszony. Należy wtedy nacisnąć ten klawisz ponownie.

14. Potwierdzenie zakończenia programu

Po przyciśnięciu [F10] pojawi się prośba o potwierdzenie zakończenia programu klawiszem [Y]. Nadal można zamknąć program natychmiastowo poprzez [Alt]+[F4]. Pytanie może się również pojawiać przy przełączaniu na inne okno.

15. Radio-stop

Przyciśnięcie klawiszy [Ctrl]+[Pause/Break] spowoduje wysłanie do wszystkich pojazdów w promieniu 2km komendy Emerency_brake. Warunkiem jest jednak umieszczenie w CHK wpisu RadioStop=Yes. Żadne dźwięki nie są przy tym uruchamiane, a na obecną chwilę pojazdy nie są przystosowane do odbioru tego sygnału z radia.

16. Wyszukiwanie najbliższego pojazdu

W trybie podglądu parametrów pojazdu [F2] wyszukiwany jest pojazd najbliższy kamery. Pojazd jest widoczny w promieniu 10m od jego aktywnej osi (aktywną osią jest pierwsza od strony kierunku ruchu, ale aby nastąpiło przełączenie, obie osie muszą być na tym samym torze). Uwaga! wyszukiwanie pojazdów w miejscach o dużym zagęszczeniu torów i dróg może powodować spadek FPS.

17. Wyświetlanie komendy

W trybie informacji [F2] wyświetlana jest ostatnia wykonana komenda, zarówno przez AI jak i przez prowadzony pojazd. Nie wszystkie komendy się pojawiają, w szczególności ustawienie prędkości jest robione w inny sposób.

18. Modele wczytywane z plików binarnych

Zostało uruchomione zapisywanie modeli w plikach binarnych E3D. Pliki są tworzone automatycznie po wczytaniu T3D. Przy kolejnym uruchomieniu programu wczytanie odbywa się z wygenerowanych plików E3D, chyba że zostaną one usunięte. Format pliku E3D może się jeszcze nieznacznie zmienić do końca roku 2011 i może być konieczne usuwanie tych plików, aby wygenerowały się nowsze, poprawniejsze wersje. Nie wszystkie modele się prawidłowo konwertują, niektóre będą wymagać ręcznych poprawek.

Do paczki z EU07_212.EXE zostały dołączone pliki E3D infrastruktury z poprawionymi animacjami (przygotował Szociu).

19. Podział obiektów na typy

Podczas wczytywania scenerii obiekty są umieszczane wg typu na oddzielnych listach. Dzięki temu wyszukiwanie obiektu o określonej nazwie jest znacznie przyspieszone, co usprawnia przygotowanie scenerii do uruchomienia ("InitTracks", "InitEvents").

20. Automatyczne "banany" dla pojazdów

Dla prawidłowego przechylania pojazdu wymagane jest aby tylko jeden submodel pojazdu miał "Parent: none". Jeśli takich submodeli będzie więcej, zostanie automatycznie utworzony dodatkowy submodel ("banan"), do którego zostaną one doczepione jako potomne.

Automatyczne "banany" zostały wyłączone w wersji 355, ponieważ zmieniony został sposób pochylania pojazdu na przechyłce (obrót lokalnego układu współrzędnych zamiast pochylania modelu ustawionego zawsze pionowo).

21. Naprawione globalne wyzwalacze czasowe

Dotychczas wyzwalacze (EventLauncher) ustawione na określoną godzinę działały tylko i wyłącznie wtedy, gdy były w zasięgu widoczności. Obecnie są umieszczone osobno i "renderowane" niezależnie od swojego położenia.

Po przetestowaniu okazało się, że w wersji 212 jednak to nie działa. Poprawione dopiero w 222.

22. Sygnalizacja rozprucia rozjazdu

Jeśli zostanie zdefiniowany event o nazwie złożonej z nazwy zwrotnicy oraz ciągu :forced+ albo :forced-, to zostanie on wykonany w przypadku jej rozprucia (jazdy z ostrza od przeciwnej strony, niż aktualne ustawienie). Brak definicji takiego eventu nie jest sygnalizowany.

24. Sygnalizacja zajętości/zwolnienia grupy torów

We wpisie toru można umieścić właściwość isolated (nazwa), podobnie jak velocity. Spowoduje to utworzenie obiektu odcinka izolowanego (grupy torów) o nazwie (nazwa). Alternatywnym sposobem (zgodnym wstecz) umieszczenia nazwy odcinka izolowanego jest podanie jej po znaku @ w nazwie toru. Tę samą nazwę odcinka izolowanego można wpisać w dowolnej ilości torów, co będzie oznaczać wspólny dla nich obiekt. Obiekt odcinka izolowanego dodaje do kolejki eventy (nazwa):busy albo (nazwa):free, odpowiednio w momencie wjechania pierwszej osi na dowolny tor należący do grupy i zjechania ostatniej osi. Tory przypisane do jednego odcinka izolowanego powinny być ze sobą połączone (nie powinno być między nimi torów nieprzypisanych albo przypisanych do innego), inaczej zachowanie odcinka izolowanego nie będzie zgodne z oczekiwaniami.

W przypadku niezdefiniowania tych eventów w scenerii żaden komunikat nie informuje o ich braku. Możliwe jest również utworzenie "odcinków izolowanych" dla każdego toru odrębnie, wymagana jest tylko unikalna nazwa w skali scenerii.

25. Konfiguracja konwersji modeli

W pliku "eu07.ini" można użyć parametru convertmodels z wartością liczbową. Wartość 0 wyłączy zapisywanie plików E3D, jednak nadal będą one wczytywane w pierwszej kolejności zamiast T3D. Wartości niezerowe włączają zapis. Wartość 2 włączy, a wartość 1 wyłączy optymalizację submodeli w E3D (niektóre modele nieprawidłowo się optymalizują, ale optymalizacja daje wzrost FPS o około 10%, patrz punkt 10).

26. Przygotowanie do użycia 4 wymiennych tekstur

Wyświetlanie modeli zostało przerobione tak, aby było możliwe użycie do 4 wymiennych tekstur (replacableskin). Odpowiednio zostały dostosowane pliki E3D. Na chwilę obecną nie ma możliwości podania nazw dodatkowych trzech tekstur wymiennych na poziomie wpisów w scenerii ani w modelach T3D.

27. Zmienione ustawianie samochodów na drogach

Na drodze węższej niż 3.5m samochody ustawiane są zawsze na środku. Na szerszych drogach, samochody stojące zostaną ustawione prawym kołem przy krawędzi drogi, włączając pobocze, natomiast samochody jadące - w odległości 1/4 szerokości drogi (bez pobocza) od jej osi, ale nie dalej niż 1.5m.

28. Naprawione przesunięcie w trainset

Dotychczasowe rozwiązania w tym zakresie się nie sprawdziły, składy z ujemnym przesunięciem miały problemy ze sprzęgami. Obecnie zostało to naprawione. Dodatkowo, czoło składu jest ustawiane w podanej odległości od punktu 1 wskazanego toru i nie zależy to od długości pierwszego pojazdu. Dotychczas pozycja przesunięcia określała położenie środka pierwszego pojazdu.

W wersji 355 przywrócono częściową zgodność wstecz. Jeśli skład jest wstawiony z zerowym przesunięciem, a wskazany tor ma Event0, to skład będzie przesunięty do przodu o połowę długości pierwszego pojazdu. Umieszczenie pojazdu na wskazanym torze wymagane było do ciągłego wyzwalania Event0, a od tego było uzależnione działanie scenariusza.

29. Wstawianie odwrotne pojazdów

Aby model pojazdu był obrócony w składzie o 180° względem osi pionowej, należy we wpisie pojazdu podać -1 jako odległość od poprzedniego pojazdu (zaraz przed obsadą - headdriver, nobody). Działa także w pierwszym wpisie pojazdu. Podanie ujemnej wartości przesunięcia w trainset nie ma wpływu na kierunek pojazdów. Również czoło składu będzie zawsze po stronie pierwszego pojazdu w trainset. Obsada headdriver oznacza kabinę od strony pierwszego pojazdu w trainset. Jeśli skład ma lokomotywę na końcu i ma jechać "do tyłu", należy lokomotywę aktywować eventami (wpisanie reardriver nie zapali świateł składu).

trainset none nazwa_toru 30.0 0.1
node -1 0 SM42-1154 dynamic PKP\SM42_v1 6D-1154 6Da -1 reardriver 3 0 enddynamic
endtrainset

30. Reakcja AI na podanie semafora i Ms2

Jeśli AI stoi na torze, który nie jest przypisany eventem do semafora, to również zareaguje na podanie zezwolenia jazdy na semaforze, jeśli jest on przypisany do któregoś z kolejnych torów (do 500m). Ponadto, dotychczas AI przeglądalo tory w poszukiwaniu eventu jedynie z komendą SetVelocity, a obecnie uwzględniane jest również ShuntVelocity, o ile jest w trybie manewrowym. Przypisywanie tarczy ostrzegawczej do toru (z komendą SetProximityVelocity w komórce pamięci) nie jest wymagane i będzie ignorowane. Uwaga! Aby AI stało pod semaforem, tor na wysokości tego semafora powinien mieć przypisany Event1 albo Event2 (zależnie od kierunku semafora); jeśli event będzie na wcześniejszym torze, AI chwilę postoi, zatrąbi i pojedzie dalej.

31. Zatrzymywanie AI na W4

Oprócz SetVelocity oraz ShuntVelocity rozpoznawana jest także komenda PassengerStopPoint:(nazwa), która związana jest ze wskaźnikiem W4 (miejsce zatrzymania czoła lokomotywy). Nazwy kolejnych punktów zatrzymania pobierane są z rozkładu. Po zatrzymaniu nazwa punktu zmieniana jest na następną w rozkładzie. Punkty zatrzymania nie wymienione w rozkładzie są pomijane (pociąg się tam nie zatrzyma). Nazwę najbliższego punktu można wyświetlić przyciskając [F1] (na razie tylko po oddaniu sterowania AI na początku). Pociąg będzie zatrzymany przez W4 aż do godziny podanej w rozkładzie. Również działa pobieranie prędkości rozkładowej z danego fragmentu rozkładu.

W wersji 219 poprawione zatrzymanie na stacji początkowej, dla której w rozkładzie podaje się godziny identycznie jak dla stacji bez zatrzymania.

32. Poprawiona zmiana kierunku AI

AI po otrzymaniu komendy "Change_direction" (w obu trybach) lub "OutsideStation" (w trybie manewrowym) nie ogranicza się do zmiany kierunku tylko w danej lokomotywie/wagonie/członie. Znajduje pojazd z kabiną po drugiej stronie składu i tam się inicjuje (z tyłu AI się kasuje). Dzięki temu możemy dowolnie manewrować takim ET41 lub EN57 i będą one po zmianach kierunku dobrze jeździć niezależnie od liczby dokonanych rotacji. Poprawkę przygotował ZiomalCl.

33. Sygnały końca pociągu

Składy prowadzone przez AI mają kontrolowane SKP. AI po przejściu z trybu manewrowego na tryb pociągowy będzie mieć na końcu SKP. Poprawkę przygotował ZiomalCl.

34. Poprawka na reardriver w wieloczłonach

Wpisanie reardriver w inny niż pierwszy wagon/lok/człon pociągu powodowało dotychczas, że np. taki człon A ET41 z connected potrafił jechać w jedną stronę, a człon B z reardriver w drugą. Zostało to naprawione i możemy wstawiać pociągi z reardriver. Poprawkę przygotował ZiomalCl.

35. Poprawiona jazda AI

Zmiany przygotował youBy.

36. Optymalizacja FPS (stopniowanie "slowmotion")

W przypadku wykrycia FPS niższego niż 16, zostanie w pierwszej kolejności wyłączony multisampling (antyaliasing), a następnie promień renderowania scenerii zostanie ograniczony do 1.5km albo 1km. Po przyciśnięciu [F8] będzie widoczny kod trybu "slowmotion" - odpowiednio 1, 3, 7. Odwrócenie następuje po wykryciu wzrostu FPS powyżej 25.

27. Renderowanie chodników

Jeśli dla drogi poda się ujemną wysokość "pobocza", to zamiast poziomego pobocza od strony jezdni i pochylenia na zewnątrz, zostanie utworzony poziomy chodnik z krawężnikiem od strony jezdni. Pochylenie krawężnika jest stałe i wynosi 1:3.75 (dla wysokości 15cm jest odchylony o 4cm), można tylko regulować jego wysokość. Następna wartość za wysokością chodnika określa jego szerokość z lewej strony, a kolejna z prawej strony. Mapowanie jest wykonywane proporcjonalnie do powierzchni tekstury i podanej długości powtarzania (liczba między nazwami tekstur), podobnie jak nawierzchnia. Lewy chodnik jest mapowany od strony 0/64 (zależnie od szerokości) do 31/64, następnie od 31/64 do 32/64 jest lewy krawężnik, od 32/64 do 33/64 prawy krawężnik i od 33/64 jest mapowany prawy chodnik do strony 64/64 (też zależnie od szerokości).

Renderowanie chodników działa tylko w trybie Display Lists. Dla VBO zostanie przygotowana w kolejnych wersjach.

Uwaga autorska

Wersja została opublikowana w dniu 2011-08-06. Po poprawieniu zauważonych drobnych błędów została wydana wersja 231.

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