W związku z zainteresowaniem nowym taborem spółek prywatnych (KM, CTL, DB Schenker, itp.), którego obecnie nie ma w PKP Secie, chciałbym przedstawić techniczne propozycje dalszego rozwoju polskich setów kolejowych.
Moim zdaniem, tabor przewoźników prywatnych zdecydowanie powinien być realizowany jako odrębne sety. Przemawiają za tym następujące argumenty:
- nowe sety mogą być rozwijane niezależnie przez różne zespoły osób,
- development nowych setów nie będzie wpływał na kompatybilność i stabilność podstawowego PKP Setu,
- dodawanie i usuwanie przez gracza taboru należącego do innych spółek będzie odbywało się w najprostszy możliwy sposób – poprzez dodanie lub usunięcie setu z listy NewGRF, bez konieczności tworzenia skomplikowanej parametryzacji setów,
- każdy set może mieć własne, niezależnie rozwijane parametry i logikę działania.
Jedyną wadą może być ograniczenie wynikające z maksymalnej ilości NewGRF-ów, obsługiwanych jednocześnie przez OTTD. Ale chyba mało kto używa 64 dodatki naraz.
Kompatybilność - warunki wymagane
Aby sety przewoźników prywatnych były kompatybilne z PKP Setem, muszą one korzystać z tych samych template'ów, definiujących rozmiary i pozycję sprite’ów. Inaczej grafiki będą "rozjechane". Wszystkie template'y są dostępne w repozytorium PKP Setu:
http://dev.openttdcoop.org/projects/pkpset/repository
Dodatkowo, nowe sety powinny być wykonane w zbliżonej do PKP Setu skali. Stosowany w PKP Secie przelicznik długości wygląda nastepująco:
(D jest rzeczywistą długością wagonu w [m], a d jest długością sprite'a wyrażoną w jednostkach OTTD)
dla D<=12m: d=D/1.5
dla 12m<D<24m: d=4+D/3
dla D>=24m: d=12
Dla pojazdów wieloczłonowych długość jest wyznaczana dla każdego członu osobno, a nie dla całego pojazdu. Zaokrąglenie wartości powinno być realizowane raczej w dół. Zaokrąglenie w górę tylko w szczególnych przypadkach, np. gdy nie da się inaczej poprawnie zobrazować danego pojazdu.
Współpraca setów - propozycja rozwiązań technicznych
Logika napisana dla jednego setu, nie będzie działała w innym secie. Dlatego, aby uniknąć takich absurdów jak np. EN57 i pendolino podpięte jako wagony do Freightliner'a, każdy polski set kolejowy (w tym także PKP Set) powinien zasadniczo blokować możliwość mieszania taboru z różnych setów w jednym pociągu. Będzie to nawet zgodne z rzeczywistością, gdzie tabor różnych przewoźników co do zasady nie jest łączony z taborem konkurencji.
Od tej reguły mogą oczywiście istnieć wyjątki. Do obsługi takich sytuacji konieczny jest jednak pewien "interfejs" pomiędzy setami. Do tej roli proponuję przeznaczyć ostatni (najstarszy) bit parametru bitmask_vehicle_info, który można właśnie odczytywać między setami. Ustawienie tego bitu na 1 w definicji pojazdu powinno informować inne sety, że dany pojazd może być dołączany do pociągów z innych setów. W przeciwnym wypadku (domyślnie) pojazd powinien zostać odrzucony.
Jak to powinno działać? Poniżej przykład dwóch setów (w nawiasie wartość omawianego bitu):
Set A: EU07 PKP(0), Eaos(1), ABdnu(0)
Set B: Class66 FPL(0), Eaos FPL(1)
Powyższa konfiguracja powinna zabraniać połączenia ze sobą EU07 i Class66 w jakiejkolwiek konfiguracji (obie mają 0). Będzie za to możliwe mieszanie obu typów węglarek (obie mają 1) w jednym składzie i podpinanie ich albo pod EU07, albo pod Class66. Ale już skład osobowy złożony z ABdnu będzie mógł jeździć wyłącznie z EU07 (tylko w ramach własnej spółki).
Oczywiście każdy set może wprowadzać odstępstwa od tej logiki. Przykładowo taka SM42 PKP, jako lokomotywa manewrowa, może mieć zdjęte te ograniczenia, zaś SA106 na pewno będzie miał całkowicie zablokowane podpinanie czegokolwiek poza tym, co jest możliwe do tej pory.
Implementacja rozwiązania
Aby powyższa logika działała, każda lokomotywa w każdym ze współpracujących ze sobą setów powinna być wyposażona w krótki kawałek kodu, który sprawdzi, czy dołączany pojazd należy do jednego z polskich setów. Jeśli tak, to sprawdzi odpowiednią flagę. W zależności od tego pozwoli dołączyć pojazd lub wyświetli komunikat z ostrzeżeniem.
Poniższy przykładowy kod NML sprawdza, czy dołączany pojazd należy do PKP Setu i wykonuje wspomniane wyżej czynności:
Moim zdaniem, tabor przewoźników prywatnych zdecydowanie powinien być realizowany jako odrębne sety. Przemawiają za tym następujące argumenty:
- nowe sety mogą być rozwijane niezależnie przez różne zespoły osób,
- development nowych setów nie będzie wpływał na kompatybilność i stabilność podstawowego PKP Setu,
- dodawanie i usuwanie przez gracza taboru należącego do innych spółek będzie odbywało się w najprostszy możliwy sposób – poprzez dodanie lub usunięcie setu z listy NewGRF, bez konieczności tworzenia skomplikowanej parametryzacji setów,
- każdy set może mieć własne, niezależnie rozwijane parametry i logikę działania.
Jedyną wadą może być ograniczenie wynikające z maksymalnej ilości NewGRF-ów, obsługiwanych jednocześnie przez OTTD. Ale chyba mało kto używa 64 dodatki naraz.
Kompatybilność - warunki wymagane
Aby sety przewoźników prywatnych były kompatybilne z PKP Setem, muszą one korzystać z tych samych template'ów, definiujących rozmiary i pozycję sprite’ów. Inaczej grafiki będą "rozjechane". Wszystkie template'y są dostępne w repozytorium PKP Setu:
http://dev.openttdcoop.org/projects/pkpset/repository
Dodatkowo, nowe sety powinny być wykonane w zbliżonej do PKP Setu skali. Stosowany w PKP Secie przelicznik długości wygląda nastepująco:
(D jest rzeczywistą długością wagonu w [m], a d jest długością sprite'a wyrażoną w jednostkach OTTD)
dla D<=12m: d=D/1.5
dla 12m<D<24m: d=4+D/3
dla D>=24m: d=12
Dla pojazdów wieloczłonowych długość jest wyznaczana dla każdego członu osobno, a nie dla całego pojazdu. Zaokrąglenie wartości powinno być realizowane raczej w dół. Zaokrąglenie w górę tylko w szczególnych przypadkach, np. gdy nie da się inaczej poprawnie zobrazować danego pojazdu.
Współpraca setów - propozycja rozwiązań technicznych
Logika napisana dla jednego setu, nie będzie działała w innym secie. Dlatego, aby uniknąć takich absurdów jak np. EN57 i pendolino podpięte jako wagony do Freightliner'a, każdy polski set kolejowy (w tym także PKP Set) powinien zasadniczo blokować możliwość mieszania taboru z różnych setów w jednym pociągu. Będzie to nawet zgodne z rzeczywistością, gdzie tabor różnych przewoźników co do zasady nie jest łączony z taborem konkurencji.
Od tej reguły mogą oczywiście istnieć wyjątki. Do obsługi takich sytuacji konieczny jest jednak pewien "interfejs" pomiędzy setami. Do tej roli proponuję przeznaczyć ostatni (najstarszy) bit parametru bitmask_vehicle_info, który można właśnie odczytywać między setami. Ustawienie tego bitu na 1 w definicji pojazdu powinno informować inne sety, że dany pojazd może być dołączany do pociągów z innych setów. W przeciwnym wypadku (domyślnie) pojazd powinien zostać odrzucony.
Jak to powinno działać? Poniżej przykład dwóch setów (w nawiasie wartość omawianego bitu):
Set A: EU07 PKP(0), Eaos(1), ABdnu(0)
Set B: Class66 FPL(0), Eaos FPL(1)
Powyższa konfiguracja powinna zabraniać połączenia ze sobą EU07 i Class66 w jakiejkolwiek konfiguracji (obie mają 0). Będzie za to możliwe mieszanie obu typów węglarek (obie mają 1) w jednym składzie i podpinanie ich albo pod EU07, albo pod Class66. Ale już skład osobowy złożony z ABdnu będzie mógł jeździć wyłącznie z EU07 (tylko w ramach własnej spółki).
Oczywiście każdy set może wprowadzać odstępstwa od tej logiki. Przykładowo taka SM42 PKP, jako lokomotywa manewrowa, może mieć zdjęte te ograniczenia, zaś SA106 na pewno będzie miał całkowicie zablokowane podpinanie czegokolwiek poza tym, co jest możliwe do tej pory.
Implementacja rozwiązania
Aby powyższa logika działała, każda lokomotywa w każdym ze współpracujących ze sobą setów powinna być wyposażona w krótki kawałek kodu, który sprawdzi, czy dołączany pojazd należy do jednego z polskich setów. Jeśli tak, to sprawdzi odpowiednią flagę. W zależności od tego pozwoli dołączyć pojazd lub wyświetli komunikat z ostrzeżeniem.
Poniższy przykładowy kod NML sprawdza, czy dołączany pojazd należy do PKP Setu i wykonuje wspomniane wyżej czynności:
Kod:
switch(FEAT_TRAINS, SELF, switch_check_pkpset, hasbit(bitmask_consist_info, 7)) {
1: return CB_RESULT_ATTACH_ALLOW; // bit 'interfejsu' ustawiony - można dołączyć
return string(STR_ALIEN_VEHICLE_DISALLOWED); // komunikat błędu
}
switch(FEAT_TRAINS, SELF, switch_can_attach, grfid) {
str2number("TD\01\03"): return switch_check_pkpset; // dołączany pojazd pochodzi z PKP Setu, sprawdzamy dalej
return CB_RESULT_ATTACH_ALLOW;
}
item(FEAT_TRAINS, item_jakas_lokomotywa) {
...
graphics {
...
can_attach_wagon: switch_can_attach; // włączamy sprawdzanie możliwości podpięcia pojazdu
}
}![OpenTTD #Polska - Polskie forum gry OpenTTD [ARCHIWUM] OpenTTD #Polska - Polskie forum gry OpenTTD [ARCHIWUM]](https://forum.openttd.pl/images/logo.png)
