Symulator/MaSzyna/EU07.EXE 372
Plik wykonywalny symulatora EU07.EXE w wersji 1.8.637.372 jest drugą częścią ósmego etapu prac. Etap ten ma celu przede wszystkim dalsze dopracowanie AI (tabelka ograniczeń, poprawione hamowanie) oraz ulepszenie animacji w pojazdach.
Spis treści
- 1 Rezygnacja z separacji przecinkiem
- 2 Poprawione spychanie składu
- 3 Błąd z wejściem do drugiej kabiny
- 4 Odczepianie przy spychaniu
- 5 Uporządkowanie prędkości początkowych
- 6 Zmiana znaczenia prędkości w Timetable:
- 7 Zmiana działania Change_direction
- 8 Komenda doczep i odczep
- 9 Blokada sprzęgów na poziomie wpisów
- 10 Blokada sprzęgów na poziomie CHK
- 11 Zatrzymanie przed zajętym rozjazdem
- 12 Sygnały manewrowe w trybie pociągowym
- 13 Zmiany w działaniu komend AI
- 14 Rozróżnienie eventów skanowanych i dodawanych do kolejki
- 15 Skanowanie wsteczne
- 16 Proporcjonalne mapowanie podsypki
- 17 Naprawione wczytywanie T3D
- 18 Naprawione oświetlenie kabiny
- 19 Logowanie brakujących include
- 20 Uwzględnianie czasu zadziałania hamulca
- 21 Poprawione zapamiętywanie ograniczeń
- 22 Automatyczny rewident
- 23 Komendy w sygnalizatorach
- 24 Szybsze wyszukiwanie eventów
- 25 Submodele w cyklu nieprzezroczystych
- 26 Uwaga autorska
Rezygnacja z separacji przecinkiem
Podczas wczytywania scenerii używane jest wiele znaków jako separatory słów (nowa linia, tabulacja, spacja, przecinek, średnik). W wersji 356 z listy separatorów został usunięty przecinek, który był najrzadziej używanym. Wymagane są poprawki w plikach tree.inc, treebig.inc, treesmall.inc (automatyczne poprawianie tych plików zostało dodane do Rainsted). Uwaga: złożenie separatorów jest traktowane jako jeden, więc ;;; ma takie samo znaczenie jak pojedynczy ;. Wcześniej (w celu zwiększenia wydajności wczytywania) zostało usunięte rozpoznawanie podwójnego minusa jako początku komentarza (również praktycznie nie używane, konwencja z SQL).
Poprawione spychanie składu
W nowej wersji AI pojawił się błąd: podczas spychania składu odległość sygnałów liczona jest od lokomotywy, a nie od pierwszego pojazdu w składzie. W efekcie skład sterowany przez AI może wyjechać poza Ms1, jak również wygasić sobie Ms2 początkiem składu i stanąć na Ms1. Zostało to poprawione w wersji 356.
Błąd z wejściem do drugiej kabiny
Podczas przechodzenia pomiędzy lokomotywami w ukrotnieniu program może się wysypać, jeżeli w MMD nie został określony cab2model (np. SM42 z PC2011). Wersja 356 sprawdza w takiej sytuacji cab1model.
Odczepianie przy spychaniu
Dotychczas odczepianie składu działało tylko podczas jego ciągnięcia. Od wersji 357, jeśli skład jest spychany, to po komendzie Shunt 0 0 w pierwszej kolejności zostanie automatycznie zmieniony kierunek jazdy. Uwaga! Nie jest możliwe automatyczne rozłączenie sprzęgów i kontynuowanie spychania (np. na górce rozrządowej). Komenda Shunt zawsze powoduje zahamowanie odłączanej części składu. Najprawdopodobniej zostanie wprowadzona dodatkowa komenda do zarządzania wagonami w składzie, obsługująca rozłączenie sprzęgu, zahamowanie hamulcem ręcznym, odhamowanie wagonu, przestawienie próżny/ładowny, czy wybranie typu hamulca.
Uporządkowanie prędkości początkowych
O kierunku jazdy składu umieszczonego we wpisie trainset decyduje tylko znak podanej prędkości. Jeśli będzie dodatnia, to skład pojedzie "do przodu", czyli w kierunku punktu 2 wskazanego toru (pierwszego pojazdu za trainstet), a dla ujemnej - w kierunku punktu 1 (ostatniego pojazdu przed endtrainset). Należy zadbać o to, aby została wybrana odpowiednia kabina, zależnie od kierunku jazdy oraz odwrócenia pojazdu. Jeśli do przodu, to powinno to być albo 0 headdriver, albo -1 reardriver, w przeciwnym przypadku lokomotywa będzie jechać na pozycji wstecznej (i np. nie będzie mogła osiągnąć pełnej prędkości).
Zmiana znaczenia prędkości w Timetable:
Zostało zmienione znaczenie znaku prędkości w komendzie Timetable:. Jeśli prędkość będzie dodatnia, skład pojedzie "do mnie", czyli w kierunku współrzędnych eventu (PutValues) albo komórki pamięci (GetValues). Ujemna prędkość da oddalanie się od tego punktu ("ode mnie"). Wskazane jest umieszczenie eventów/komórek przesyłających na jednym z końców stacji.
Zmiana działania Change_direction
Komenda Change_direction z niezerowym parametrem miała dotychczas dosyć ograniczone zastosowanie, ponieważ kierunek jazdy był określony przez zorientowanie sprzęgów pojazdu. Znaczenie parametru zostało zmienione, podobnie jak dla komendy Timetable:, tzn. wartość dodatnia ustawi kierunek jazdy w kierunku eventu/komórki pamięci ("do mnie"), a ujemna w przeciwną stronę ("ode mnie"). Należy zadbać o to, aby położenie obiektu przesyłającego komendę pozwalało jednoznaczne określić kierunek jazdy, tzn. nie może być przypadkowo minięty przez lokomotywę sterującą składem.
Komenda doczep i odczep
Możliwe jest wykonanie podczepienia spychanych wagonów do składu i następnie odczepienie dowolnej ich ilości za pomocą pojedynczej komendy Shunt x -y, gdzie x jest nieujemną liczbą wagonów do zabrania, a y jest maską dla sprzęgu, którym pchane wagony zostaną podłączone. Pozostawione wagony zostają zahamowane i niemożliwa jest kontynuacja jazdy bez zmiany kierunku. Dodatnia wartość drugiego parametru zostanie użyta do innych celów. Szczególnym przypadkiem jest działające już wcześniej Shunt 0 0, które powoduje odczepienie samej lokomotywy. Możliwy jest też wariant Shunt x 0, który spowoduje odłączenie i zabranie podanej liczby x wagonów z dostępnego składu, bez spychania go w celu połączenia z innym.
Blokada sprzęgów na poziomie wpisów
Pojazdy wieloczłonowe (np. Bhp, ET41, EN57) powinny być traktowane jako pewna całość podczas liczenia pojazdów do odczepienia. Dotychczas w CHK nie było informacji, że pojazd ma sprzęg międzyczłonowy, który nie powinien (albo nawet nie może być) rozłączany podczas zwykłych manewrów. Pliki CHK pojazdów wieloczłonowych wymagają poprawek. Od wersji 357 można we wpisie do scenerii użyć ujemnej wartości sprzęgu (np. -3, -55) pomiędzy pojazdami, co będzie oznaczało blokadę sprzęgu. Można w ten sposób zabezpieczyć pojazdy wieloczłonowe, a także ukrotnione SM42, czy TEM2. Sprzęg taki nie da się również rozłączyć ręcznie. Nie należy nadużywać blokowania sprzęgów, zwłaszcza przy łączeniu wagonów.
Blokada sprzęgów na poziomie CHK
W plikach CHK dla członów skrajnych należy zamienić linijkę BuffCoupl. na dwie oddzielne linijki BuffCoupl1. i BuffCoupl2.. Następnie w parametrze AllowedFlag= należy wpisać maskę bitową z minusem, jeśli sprzęg ma być zablokowany. Parametr ten określa, jakie typy sprzęgów można połączyć dla danego pojazdu, np. dla EU07 nie powinno zadziałać tworzenie mostka przejściowego. W członach środkowych może być jedna linijka BuffCoupl. z ujemną wartością dla AllowedFlag=.
Zatrzymanie przed zajętym rozjazdem
Skanując tory AI sprawdza również, czy znaleziony na drodze ruchu rozjazd nie jest zajęty przez inny pojazd. W razie wykrycia takiej sytuacji zatrzymuje się 30 metrów przed rozjazdem, co zabezpiecza przed wjeżdżaniem dwóch pociągów w siebie. Znaczenie ma to raczej w przypadku testów, ponieważ zaprogramowanie ruchu na scenerii powinno uniemożliwiać takie sytuacje.
Sygnały manewrowe w trybie pociągowym
Komenda ShuntVelocity umieszczona w komórce pamięci sygnalizatora jest również dodawana do tabelki prędkości w trybie pociągowym. Jednakże jest ignorowana, jeśli prędkość w pierwszym parametrze jest zerowa. Pozwala to przełączyć pojazd na tryb manewrowy za pomocą sygnału Ms2, np. po zatrzymaniu na S1.
Zmiany w działaniu komend AI
Od wersji 363 komendy ShuntVelocity 0 0 oraz Shunt -2 0 powodują włączenie trybu manewrowego (uruchomienie silnika i zapalenie świateł), jednak bez ruszenia pojazdu z miejsca. Po komendzie Prepare_engine 1 0 zostanie włączony silnik bez zapalania świateł. W powyższych przypadkach pojazd będzie reagował na sygnalizatory umieszczone w odległości do 1000 metrów (ale sam nie podjedzie). Przy braku sygnalizatora należy dodatkowo wysłać komendę, która uaktywni ruch. Pojazd z wyłączonym silnikiem (Prepare_engine 0 0) nie będzie reagował na sygnalizatory i nie da się włączyć silnika jedynie poprzez podanie sygnału zezwalającego na jazdę. Komenda Shunt -1 0 uruchomi tryb manewrowy z podjeżdżaniem do sygnalizatorów.
Rozróżnienie eventów skanowanych i dodawanych do kolejki
Odkąd uruchomiono skanowanie torów w poszukiwaniu sygnałów wpływających na jazdę AI, zaistniała potrzeba odróżnienia eventów używanych podczas skanowania od tych dodawanych do kolejki. Obecnie (od wersji 361) takie rozróżnienie jest wykonywane na etapie wczytywania scenerii. Jeśli event PutValues zawiera komendę SetVelocity, ShuntVelocity albo zaczynającą się od PassengerStopPoint:, zostanie uznany jako uczestniczący w skanowaniu. Podobnie GetValues, jeśli połączona z nim komórka pamięci będzie zawierać pierwotnie komendę SetVelocity albo ShuntVelocity, nawet jeśli później komenda w komórce zostanie wymieniona na inną (jak dotąd nie używa się tego, wyjątkiem jest służba 3 na Linii 053).
Skanowanie wsteczne
Od wersji 361 AI jadące w trybie manewrowym sprawdza również sygnalizatory znajdujące się z tyłu. Jeśli znajdzie sygnał zezwolenia na jazdę (Ms2), to automatycznie zmieni kierunek i pojedzie w przeciwną stronę. Skanowanie wsteczne w trybie pociągowym nie jest aktywne, aby można było puszczać pociągi po utwierdzonym w przeciwną stronę przebiegu manewrowym (procedura awaryjna).
Proporcjonalne mapowanie podsypki
Od wersji 363 został zmieniony sposób mapowania podsypki na proporcjonalny. Dotychczas po 33% szerokości tekstury było używane do mapowania skosów, a 34% dla górnej powierzchni, co powodowało nierównomierne zagęszczenie pikseli i konieczność specyficznego skalowania przy tworzeniu tekstury pod konkretny profil. Obecnie szerokość tekstury jest ustalana na podstawie długości jej powielania oraz proporcji boków w pliku. Dla toru normalnego zalecane jest używanie tekstur kwadratowych z powielaniem 6m, co pozwoli uwzględnić rozstaw podkładów zarówno 0.5m jak i 0.6m. W odróżnieniu od poprzedniego rozwiązania, zmiana wymiarów przekroju podsypki nie wymaga już oddzielnych tekstur. Oddzielne tekstury będą jednak wymagane dla różnych rozstawów szyn. Tekstury dla toru normalnego powinny być umieszczone w folderze textures/1435mm. Stare mapowanie jest załączane przy powielaniu równym 4m (ten warunek może ulec zmianie w kolejnych wersjach).
Naprawione wczytywanie T3D
Po rezygnacji z automatycznych bananów okazało się, że modele z plików T3D (nie posiadające banana) wczytują się nieprawidłowo. Zostało to naprawione w wersji 362.
- Uwaga! Jeśli plik T3D ma być prawidłowo skonwertowany do formatu E3D, to nazwy submodeli muszą być pisane małymi literami. Błąd ten pojawił się w związku z wprowadzeniem generatora napisów, który musi dostosować submodele do wielkości liter w napisach. W wersji 373 do funkcji wyszukującej submodele po nazwie została dodana opcja ignorowania wielkości liter bez konieczności zmieniania na małe.
Naprawione oświetlenie kabiny
Po wyłączeniu oświetlenia na drutach i liniach, kabina renderowała się również z wyłączonym oświetleniem, jeśli nie była generowana smuga. Zostało to naprawione w wersji 362.
Logowanie brakujących include
Do pliku errors.txt dopisywane są też braki plików include. Brak jest logowany również jeśli plik istnieje, ale ma zerową długość.
Uwzględnianie czasu zadziałania hamulca
Dotychczas podczas hamowania AI potrafiło zwiększać stopień hamowania za każdym razem, gdy uruchamiała się jego świadomość. Obecnie przed zmianą położenia dźwigni hamulca odczekuje czas wynikający z prędkości jego działania. Mechanizm ten został przygotowany już wcześniej, ale był wyłączony, gdyż poprzednia wersja AI zbyt słabo reagowała na sygnały. Odczekiwanie jest pomijane, jeśli zalecane opóźnienie hamowania przekracza 0.6 [m/s^2], a także jeśli poprzednim działaniem było luzowanie.
Poprawione zapamiętywanie ograniczeń
W pewnych sytuacjach AI potrafiło zapomnieć, że koniec składu nadal jedzie po torze z ograniczeniem i nie należy jeszcze przyspieszać. Zostało to naprawione w wersji 367. Dodatkowo, skanowanie torów rozpoczyna się od ostatniego pojazdu w składzie, więc jeśli tył znajduje się na ograniczeniu, a przód już nie, to ograniczenie i tak zostanie uwzględnione.
Automatyczny rewident
Od wersji 367 nastawia opóźnienie hamulca dla składów prowadzonych przez AI, włączających tryb pociągowy. Algorytm uproszczonego nastawiania przygotował youBy.
Komendy w sygnalizatorach
Wpisanie do komórki sygnalizatora komendy innej niż SetVelocity i ShuntVelocity (również SetProximityVelocity) będzie traktowane jako SetVelocity 0 0, czyli zatrzymanie AI w każdym trybie jazdy. Po zatrzymaniu komenda umieszczona w komórce zostanie jednorazowo wysłana do AI oraz zostanie dodany do kolejki event (nazwa_komórki):sent, o ile zostanie taki zdefiniowany. Właściwość tę można wykorzystać do zarządzania manewrami (np. odczepianie lokomotywy) przy wykorzystaniu istniejących sygnalizatorów. Wysyłanie komendy będzie działać również z sygnalizatora znajdującego się z tyłu AI, o ile jedzie w trybie manewrowym (tryb pociągowy nie skanuje sygnałów wstecz). Należy pamiętać o przywróceniu zawartości komórki pamięci sygnalizatora do pierwotnego stanu, najlepiej poprzez ustawienie odpowiedniego sygnału przez event (nazwa_komórki):sent.
Szybsze wyszukiwanie eventów
Zmieniony został sposób wyszukiwania eventów po nazwach. Dotychczasowe porównywanie z każdym po kolei zostało zastąpione wyszukiwaniem w drzewku binarnym (podobnie jak tory jakiś czas temu). W przypadku zdublowanych nazw eventów w scenerii (jest to błąd), może się wykonać inny event niż poprzednio (wykonywał się ostatni). Wszystkie zdublowane eventy logowane są w pliku errors.txt. Jeśli jakiś event ma być celowo zdublowany (np. zatrąbienie AI na W6 nie musi mieć unikalnej nazwy), nazwa powinna się rozpoczynać od znaku # (np. #w6_warning), nie będzie wtedy logowana jako duplikat. W przypadku istnienia dwóch eventów o identycznej nazwie, wykonywać się będzie pierwszy (wcześniej wczytany), a pozostałe zostaną zignorowane.
Submodele w cyklu nieprzezroczystych
Aby wymusić renderowanie submodelu w cyklu nieprzezroczystych (czyli wcześniej niż submodele z przezroczystością), należy w T3D wpisać Opacity: 0. Będzie miało to wpływ na flagi w nowo wygenerowanym E3D (na już istniejące wpływu nie będzie). Renderowanie submodeli w cyklu przezroczystych skutkuje np. znikaniem wózków pod smugą latarni, jeśli tekstura wózka ma włączoną przezroczystość. Wymuszenie renderowania wózków w fazie nieprzezroczystych spowoduje ich narysowanie przed dodaniem smugi do sceny, czyli będą widoczne.
Uwaga autorska
Ze względu na wprowadzone zmiany w obsłudze AI, wersja ta może nie współpracować ze sceneriami dostępnymi w PC2011. Scenerie te będą wymagały dokonania poprawek, w szczególności w zakresie aktywowania AI na początku oraz usunięcia zdublowanych eventów.
Ra, 2012-09-20
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 |