Symulator/MaSzyna/EU07.EXE 291
Plik wykonywalny symulatora EU07.EXE w wersji 1.6.289.291 jest końcowym efektem szóstego etapu prac, który miał na celu przede wszystkim doprowadzenie AI do sensownego działania i ułatwienie dalszych prac nad AI. Przy okazji zostały dokonane drobne zmiany w innych zagadnieniach. Wprowadzone zmiany nie są do końca zgodne wstecz i niektóre scenerie oraz pojazdy mogą nie działać zgodnie z oczekiwaniami. Są one uwzględniane przy tworzeniu Paczki Całościowej 2011.
Spis treści
- 1 1. Optymalizacja plików TGA
- 2 2. AI przepisane na C++
- 3 3. Miejsce docelowe dla pojazdów
- 4 4. Poprawione wczytywanie dźwięków
- 5 5. Możliwość przejścia do innego pojazdu
- 6 6. Zmiana kierunku jazdy w rozkładzie
- 7 7. Wpływ origin na PutValues
- 8 8. Zabezpieczenie przed dalekimi obiektami
- 9 9. Przyspieszone wyświetlanie torów
- 10 10. Przyspieszenie InitTracks
- 11 11. Poprawione dzielenie trójkątów
- 12 12. Event zmieniający widoczność
- 13 13. Kontrolki przód/tył
- 14 14. Doczepianie AI do składu
- 15 15. Ładowanie i rozładunek wagonów
- 16 16. Zamienione pantografy
- 17 17. Zablokowane logowanie ruchu pojazdów
- 18 Uwaga autorska
1. Optymalizacja plików TGA
Dekompresja plików TGA odbywa się teraz w buforze pamięci, do którego plik wczytywany jest jednorazowo. Powoduje to szybsze wczytanie tekstur o około 10%. Jednak nie dla każdego pliku TGA taka dekompresja przebiega efektywnie. Aby usprawnić wczytywanie, do pliku EU07.INI został dodany parametr modifytga, który określa możliwość optymalizowania plików na dysku za pomocą flag bitowych (poszczególne wartości można sumować). Modyfikowanie plików TGA powinno być wykonywane przede wszystkim na etapie tworzenia paczki całościowej oraz dodatków. Kompresja TGA jest efektywna, gdy istnieją linie o identycznym kolorze pikseli. Dla zwiększenia efektywności dekompresji zalecane jest pozostawienie identycznych pikseli w górnej linijce tekstury.
- Może się okazać, że skompresowany plik TGA jest większy niż plik bez kompresji. W takim przypadku krótszy plik nieskompresowany zostanie zapisany zamiast nieefektywnie skompresowanego (modifytga 1).
- Również zostanie to wykonane dla plików, po kompresji których nie uzyskuje się zmniejszenia pliku o co najmniej 18 bajtów. Rozmiar nieskompresowanego pliku TGA jest na ogół wielokrotnością 4kB (od rozmiaru 64×64 pikseli), co odpowiada przeciętnej wielkości jednostki alokacji dysku twardego. Nagłówek TGA ma 18 bajtów i jeśli pliku nie da się skrócić o taką liczbę, to i tak będzie zajmował tyle samo jednostek alokacji, co przełoży się na identyczną prędkość wczytania, a dekompresja tylko to niepotrzebnie przedłuży.
- W szybszej dekompresji przeszkadza również umieszczone na końcu rozszerzenie wersji 2.0 TGA (zwykle napis "TRUEVISION-XFILE." oraz 9 bajtów zerowych). Ponieważ plik TGA nie ma licznika ilości bajtów użytych na skompresowane piksele, używana jest w tym celu długość pliku, pomniejszona o 18. Doklejone na końcu bajty mogą powodować, że dekompresja potrzebuje więcej miejsca, niż rozmiar bufora na zdekompresowany plik. Istnieje jednak możliwość permanentnego obcięcia niepotrzebnej końcówki pliku TGA (modifytga 2).
- Zdarza się też tak, że kompresja przebiega poprawnie do pewnego momentu, a następnie bufor przestaje wystarczać. Jeśli do końca pliku zostało mniej niż 128 pikseli, można je zapisać w pliku bez kompresji, dzięki czemu bufor nie zostanie przekroczony (modifytga 4). Może to jednak prowadzić do wcześniej opisanych przypadków, a w efekcie do zapisania pliku bez kompresji.
- W sytuacji jak powyżej, jeśli do końca pozostaje więcej niż 128 pikseli, najprawdopodobniej nie da się skompresować pliku TGA lepiej, aby nie dochodziło do przekroczenia rozmiaru bufora pamięci.
2. AI przepisane na C++
Sterowanie pojazdami przez komputer (AI) od początku było napisane w języku Pascal, podczas gdy poruszanie pojazdów i ich modeli obsługiwał kod w C++. W efekcie pewne informacje musiały być osobno przekazywane do AI (np. współrzędne semafora), a inne nie były dostępne wcale (np. moment pełnego otwarcia/zamknięcia drzwi). Ze względu na ograniczenia w dostępie do danych z poziomu Pascala, część funkcjonalności AI została umieszczona w obsłudze pojazdu w C++ (np. wyszukiwanie sygnalizatorów na drodze ruchu). Obecnie kod AI został przepisany do C++ i zebrany w jednym module, co powinno usprawnić dalsze modyfikacje i zwiększyć możliwości (np. o generowanie sygnałów odjazdu, czy informowanie początkującego użytkownika, co w danej sytuacji wykonałoby AI).
3. Miejsce docelowe dla pojazdów
Dla wagonów jest to stacja docelowa. Informacja taka umożliwi wykonywanie automatycznych manewrów przez AI (łączenie i rozłączanie składów, obsługa górki rozrządowej). Miejsce docelowe można wpisać po słowie destination, umieszczonym przed enddynamic, podobnie jak velocity w torach. Jeśli nie zostanie to wyszczególnione we wpisie, miejsce docelowe zostanie określone po przypisaniu rozkładu jazdy.
4. Poprawione wczytywanie dźwięków
Dotychczas przed wczytaniem scenerii były wczytywane wszystkie dźwięki z katalogu sounds. Również z tego powodu dźwięki nie mogły znajdować się w innym miejscu. Obecnie dźwięki są wczytywane w momencie wystąpienia ich w scenerii albo pojeździe, dzięki czemu można je rozmieścić w podkatalogach w sounds. Również możliwe jest umieszczenie dźwięków pojazdu w jego podkatalogu (w dynamic).
5. Możliwość przejścia do innego pojazdu
Z trybu swobodnego latania (klawisz [F4]) można wejść do znajdującego się w pobliżu innego pojazdu sterowanego przez AI, pod warunkiem, że on stoi albo porusza się z niewielką prędkością. Wejście i przejęcie pojazdu następuje poprzez naciśnięcie klawisza [F5]. Może być konieczne przyciśnięcie [F4] w celu odświeżenia widoku kabiny.
6. Zmiana kierunku jazdy w rozkładzie
Jeśli w parametrach stacji w rozkładzie zostanie umieszczony znak @, AI zmieni na niej kierunek. Dla składów niebędących EZT, lokomotywa się odczepi, a następnie wykona cykl komend: jazda manewrowa, zmiana kierunku, jazda manewrowa, zmiana kierunku, podczepianie do składu. Wymagane jest jedynie podanie sygnałów manewrowych, a także przesłanie komendy zmiany kierunku, jeśli AI nie dojeżdża do W5 ani na tor z kozłem i eventem odwracającym kierunek jazdy.
7. Wpływ origin na PutValues
We wczesniejszych wersjach event PutValues umieszczony wewnątrz origin nie był prawidłowo przesuwany. Przesunięta o wektor sceneria przestawała działać prawidłowo.
8. Zabezpieczenie przed dalekimi obiektami
Symulator obsługuje obszar 500km×500km z początkiem układu na środku (±250km od środka układu współrzędnych). Dotychczas obiekty ustawione poza dopuszczalnym obszarem powodowały błąd uniemożliwiający uruchomienie, obecnie są ignorowane.
9. Przyspieszone wyświetlanie torów
Dotychczas każdy odcinek toru/drogi/rzeki był wyświetlany oddzielnie. Teraz obiekty są sortowane wg tekstur, a siatki ich są łączone w jedną. Powinno to poprawić FPS na dużych stacjach. Optymalizacja dotyczy tylko Display Lists, dla VBO nie została dopracowana.
10. Przyspieszenie InitTracks
Przy łączeniu torów wyszukiwane są one tylko w sąsiednich sektorach, a nie na całym obszarze scenerii. Przyspiesza to znacznie łączenie torów dla scenerii z dużą ich ilością (np. Wrocław).
11. Poprawione dzielenie trójkątów
Duże trójkąty terenu, jeśli wystają za bardzo poza siatkę kilometrową, są obecnie dzielone na dwa. Dzielony jest bok pomiędzy wierzchołkami najbardziej oddalonymi od krawędzi siatki kilometrowej, w punkcie przecięcia tej siatki. Operacja wykonywana jest rekurencyjnie. Powstaje mniej trójkątów niż w poprzedniej metodzie (podziału na 4 - każdy bok na pół). Znikanie trójkątów nie powinno już być zauważalne.
12. Event zmieniający widoczność
Dodany event Visible, załączający i wyłączający obiekty (np. druty trakcyjne). Składnia podobna jak Lights, ale jest tylko jedna wartość 0 albo 1. Event może służyć np. do zamiany uszkodzonej sieci trakcyjnej na naprawioną albo usuwania modeli pracowników wykonujących naprawę.
13. Kontrolki przód/tył
W kabinie można użyć oddzielnych kontrolek do sygnalizacji jazdy do przodu oraz do tyłu. W pliku MMD mają one nazwy i-forward oraz i-backward.
14. Doczepianie AI do składu
Za pomocą komendy Shunt -1 x, gdzie x<>0 jest maską sprzęgu, można wykonać podłączenie AI do stojącego składu. AI po podłączeniu będzie kontynuować jazdę, w kierunku zależnym od znaku liczby x - dla wartości dodatnich skład będzie spychany. Aby AI po podłączeniu się zatrzymało w oczekiwaniu na dalsze rozkazy (np. podanie semafora do jazdy pociągowej), należy użyć liczby -2 jako pierwszej wartości: Shunt -2 x. Przejście w tryb manewrowy bez zmian w składzie wykonuje się komendą Shunt -1 0.
15. Ładowanie i rozładunek wagonów
Zostały dopracowane procedury załadunku i rozładunku wagonów. Naprawiony został kod wczytujący model ładunku po wykryciu ładowania oraz usuwający model, gdy ładunku nie ma. Działa to zgodnie z założeniami z poprzednich lat. Przetestować można na scenerii Quark (Dejawy Kopalnia) bez potrzeby dokonywania modyfikacji.
16. Zamienione pantografy
Dotychczas podniesienie przedniego pantografu działało na tylny. Aby wyglądało to dobrze, numery pantografów musiały być zamienione w pliku T3D lokomotywy. Na wcześniejszych paczkach będzie to działało odwrotnie, ale od PC2011 ma zostać to uporządkowane (tzn. przedni pantograf z przodu). Wcześniej podobny problem był ze światłami, które również były zamienione miejscami.
17. Zablokowane logowanie ruchu pojazdów
Jest to efekt uboczny przepisania AI do C++, w którym inaczej obsługuje się pliki. Parametry fizyczne ruchu pojazdów nie zostaną zapisane do plików DAT. Aby uzyskać taki zapis należy używać wcześniejszych wersji (np. 231), bądź czekać na nowszą wersję, w której będzie to przywrócone.
Uwaga autorska
Wersję tę prezentuję przed wydaniem Paczki Całościowej 2011, aby do tego czasu można było wyłapać jeszcze jakieś błędy. Jeśli będzie taka potrzeba, do paczki będzie przygotowana poprawiona wersja.
Ra, 2011-12-23
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 |