-
Notifications
You must be signed in to change notification settings - Fork 0
stationProperties
EN PL |
Introduction |
W przeciwieństwie do pojazdów stacje nie mają predefiniowanych ID w TTD. W związku z tym ID można dowolnie wybierać i w rzeczywistości będą one przydzielane automatycznie przez TTDPatch. W definicji stacji określa się tylko ID w odniesieniu do zestawu, tj. ID pierwszego typu stacji to 0, drugiego typu stacji to 1 i tak dalej. W sumie każda gra może mieć tylko 255 ID stacji dla wszystkich aktywnych plików newGRF.
Właściwością, którą należy ustawić dla każdego ID stacji, jest etykieta klasy , cokolwiek innego można pozostawić domyślnie. Musi to być pierwsza właściwość ustawiana dla każdego ID stacji, ponieważ ID stacji jest w rzeczywistości niezdefiniowany, dopóki nie zostanie przypisana mu klasa. Ponadto wszystkie ID stacji muszą mieć swoje klasy we właściwej kolejności, począwszy od ID 0.
Właściwości są zdefiniowane w bloku funkcyjnym definestation() . Wszystkie właściwości stacji są objęte poniższymi funkcjami właściwości .
Aby uprościć definicję szeregu stacji z kolejnymi ID-stacji, funkcje właściwości wewnątrz funkcji definestation() mogą być dostarczane dane właściwości dla wielu stacji jednocześnie. Odbywa się to po prostu poprzez oddzielenie właściwości przecinkami (",") , z wyjątkiem przypadków, w których parametrem funkcji właściwości dla pojedynczej stacji byłaby lista, tj. Już zawierająca przecinki. Muszą one być zawsze "cytowane" , nawet jeśli definiujesz tylko jeden ID-stacji:
definestation(STAIRS,"Stairs", class(PLATFORMS) callbacks({CB_LAYOUT, CB_SLOPE}) // <-- this is a list, quote! include_widths(1) include_lengths(1) threshold(36) nopylons(0) nowires(0) flags({GROUNDSPRITES, DIVAMOUNT, FOUNDATIONS}) // <-- a list, quote! ) Przykład 2 (defining two stations (IDs 0x36 and 0x37): definestation(0x36,{"3rd track","3rd track"}, class(THIRD_TRACK, THIRD_TRACK) callbacks(CB_LAYOUT, CB_LAYOUT) // <-- this is not a list, no quoting include_widths(2, 2) include_lengths(1, 1) threshold(128, 128) nopylons(0, 0) nowires(0, 0) nontrack({0,1}, {0,1}) // <-- these are two lists, quote! flags(GROUNDSPRITES, GROUNDSPRITES) )
Właściwości |
Funkcja właściwości | Opis |
---|---|
anim_info(<Byte>, LOOP | NOLOOP) | Informacje o animacji |
anim_speed(<Byte>) | Prędkość animacji |
anim_triggers(<List>) | Wyzwalacze animacji |
bridge_height(<Byte>, <Byte>, <Byte>, <Byte>) | Wysokość płytek stacji |
callbacks(<List::Callback>) | 'callbacks' stacji |
class(<Label>) | Klasa stacji |
flags(<List>) | Flagi ogólne |
include_lengths/exclude_lengths(<List::Byte>) | Dobór długości platform |
include_widths/exclude_widths(<List::Byte>) | Wybór liczby platform |
nontrack(<Label>) | Ustaw kafle bez-toru |
pylons/nopylons(<Label>) | Umieszczenie 'pylonu' |
setcargotriggers(<List::CargoType>) | Typy ładunków dla losowych wyzwalaczy |
tiletypelayout({<tiletypes>,}) | Definiuje niestandardowy układ typu kafli |
threshold(<Word>) | Próg mały/dużo |
wires/nowires(<Label>) | Umieszczenie drutu |
Opis |
Ponieważ nie można mieć właściwości dla poszczególnych kafli stacji, ta właściwość ma zastosowanie do każdego pola stacji. Jeśli nie chcesz animować niektórych kafli , powinieneś sprawdzić aktualną pozycję kafla podczas wywołania zwrotnego CB_ACONTROL i zwrócić wartość "A_NOP" (253), jeśli bieżący kafel nie musi być animowany. Jeśli potrzebujesz również animacji o różnej długości na kafel, będziesz musiał użyć do tego wywołania zwrotnego CB_AFRAME . Znaczenie jest takie samo jak w przypadku szybkości animacji domu , ale dolna granica wynosi 0 zamiast 2, więc najszybsza możliwa animacja zmienia klatki co tik gry (27 ms). Wartość domyślna to 0. Parametr to lista zdarzeń, które powinny wywołać callback CB_ACONTROL , pozwalająca na zmianę stanu animacji:
Wyzwalacz | Znaczenie | To się dzieje |
---|---|---|
BUILT | Budowa części stacji | nowo wybudowane kafle |
NEWCARGO | Na stację przybywa nowy ładunek | cała stacja |
NOCARGO | Typ ładunku zostaje całkowicie usunięty ze stacji | |
PERIODIC | Co 250 'ticks' | |
ARRIVE | Pociąg wjeżdża na stację (rozpoczyna załadunek/rozładunek) | peron tego pociągu |
LEAVE | Pociąg odjeżdża ze stacji (zakończony załadunek/rozładunek) | |
LOADING | Pociąg ładuje/rozładowuje ładunek |
W przypadku wyzwalaczy NEWCARGO i NOCARGO funkcja cargo_trigger() zwraca dany typ ładunku . Ta funkcja jest dostępna tylko dla rozwidlenia "Nowe funkcje mapy" (NMF) OTTD , które umożliwia budowanie mostów nad stacjami. Funkcja określa minimalne odstępy wymagane dla mostu dla każdego typu kafla tej stacji (lub zero, aby nie dopuszczać żadnego mostu). Wartości są podawane w jednostkach „poziom wysokości” (1 level == 8px) i muszą być takie same dla rozpatrywanych typów kafli zarówno w kierunku x, jak i y. Ta właściwość przyjmuje jako parametr listę wywołań zwrotnych do użycia z tą stacją. Ta funkcja może włączyć następujące wywołania zwrotne:
Callback | Opis |
---|---|
CB_AFRAME | Wybiera następną klatkę animacji |
CB_ASPEED | Decyduje o szybkości animacji |
CB_AVAILABLE | Czy udostępnić stację w oknie konstrukcyjnym (niezerowy zwrot 'callback') lub nie (callback zwraca zero) |
CB_LAYOUT | Użyj 'cb' , aby wybrać układ sprite'a |
CB_SLOPE | 'Niestandardowa kontrola nachylenia' |
Przykład (set callbacks for layout and custom slope): callbacks(CB_LAYOUT, CB_SLOPE) |
Etykiety klas to unikalne identyfikatory złożone z czterech bajtów (lub znaków). Wstępnie zdefiniowano tylko dwie etykiety klas:
Etykieta klasy | Reprezentowanie | Przeznaczenie do stacji |
---|---|---|
DFLT | 44 46 4c 54 | Domyślnie brak specjalnego typu stacji |
WAYP | 57 41 59 50 | Stacje non-cargo, waypointy, sygnalizatory etc. |
Kiedy zbudowana zostanie stacja WAYP, nie przyjmie ona ładunku ani nie pojawi się żaden ładunek z pobliskich gałęzi przemysłu lub miast. Pociągi nie zatrzymują się na stacjach WAYP, bez względu na kolejność non-stop i/lub przesiadkę 'nonstop' . Parametrem tej funkcji jest lista zawierająca co najmniej jedną z następujących flag:
Flaga | Znaczenie |
---|---|
DIVAMOUNT | przy obliczaniu ilości ładunku do wyświetlenia należy podzielić ilość przez rozmiar stacji (aby zasymulować ładunek rozłożony na obszarze stacji) |
EXTENDED | Po ustawieniu 'FUNDAMENTÓW' użyj rozszerzonego bloku fundamentowego zamiast prostego |
FOUNDATIONS | Użyj niestandardowych fundamentów na pochyłych kaflach (funkcja tiletype() zwraca "2" dla 'sprites' 'fundamentów') |
GROUNDSPRITES | użyj innego zestawu 'sprites' dla 'sprites' naziemnych (funkcja tiletype() zwraca "1" dla 'sprites' naziemnych) |
RANDOMBITS | dostępność losowych bitów według funkcji randombits() |
Twój kod wyboru 'sprite' powinien wskazywać podstawowy blok 'sprite' . Zawartość tego bloku zależy od tego, czy ustawiono EXTENDED, czy nie.
- EXTENDED nieustawiony (proste fundamenty; zalecane):
- EXTENDED set (fundamenty rozszerzone; niezalecane):
W obu przypadkach do rejestru 0x100 można wstawić dodatkową wartość, która posłuży jako przesunięcie w wybranym bloku. Jeśli nie zmodyfikujesz rejestru 0x100 podczas łańcucha, przesunięcie będzie domyślnie wynosić 0.
Ważne jest, aby wymiary 'sprites' pozostały takie same - tzn. Musisz użyć bitu 6 w real sprites , aby zapobiec przycinaniu przez GRFCodec 'pustych niebieskich' obszarów. Odsunięcie tych 'sprites' fundamentu musi wynosić -31 w kierunku X i -9 w kierunku Y.
Domyślnie dla stacji niestandardowych dostępne są wszystkie długości peronów i dowolna liczba platform. Korzystając z tych funkcji właściwości, możesz wybrać, które platformy lub długości powinny być niedostępne, podając odpowiednie liczby jako parametry.
Przykład (set platform numbers and lengths): // platform "roofs" w platforms <8 and lengths < 8 exclude_widths(8) exclude_lengths(8) // glass roofs for "double" platforms and lengths < 8 exclude_widths({1,8}) exclude_lengths(8) // "waypoints" w max 4 "platforms" and length == 1 include_widths({1,2,3,4}) include_lengths(1) // a small station hall w max 4 platforms and lengths < 8 include_widths({1,2,3,4}) exclude_lengths(8) // a large station hall w 2 or 4 platforms and lengths <8 include_widths({2,4}) exclude_lengths(8) |
Ta funkcja umożliwia ustawienie typów pól, na których pociągi nie mogą przejeżdżać przez lub wjeżdżać na dowolny kafel tego typu.
TTD obsługuje 4 "typy kafli" stacji (każdy w kierunku X i Y), które zostaną umieszczone w zależności od rozmiaru stacji, np. typy kafli 2/3 (TTD_BUILDING) dla jednej stacji kafli (1*1) lub 4/5 (TTD_ROOFLEFT) dla dwóch lewych kafli stacji 2*2 itp.
Należy pamiętać, że TTDPatch/OpenTTD modyfikuje tylko kafle stacji pod względem graficznym, ale nie zmienia podstawowego typu kafla TTD. To znaczy, aby umieścić pylony i przewody lub zapobiec wjeżdżaniu do kafli przez pojazdy, musisz ustawić typy kafli TTD w funkcjach pylons()/nopylons(), wires()/nowires() i nontrack() , jak pokazano poniżej :
Typ kafla | Etykieta | Opis | Default(s) |
---|---|---|---|
n/a | TTD_NONE | wszystkie typy kafli | default |
0/1 | TTD_PLATFORM | zwykła platforma | bez pylonów, przewodów |
2/3 | TTD_BUILDING | platforma z zabudową | |
0/1, 2/3 | TTD_PLATFORMBUILDING | platforma zwykła lub platforma z zabudową | |
4/5 | TTD_ROOFLEFT | platforma z 'daszkiem po lewej stronie | pylony, przewody |
6/7 | TTD_ROOFRIGHT | platforma z daszkiem po prawej stronie | |
4/5, 6/7 | TTD_ROOFBOTH | platform with roof either left or right | |
0/1 .. 6/7 | TTD_ALLTILES | wszystkie powyższe | podobnie |
Funkcje nontrack(), pylons(), nopylons(), wires() i nowires() muszą ustawić jedną z tych etykiet, albo używane są wartości domyślne. Ponadto możesz jawnie ustawić każdą kombinację typów kafli, używając cudzysłowów. Oznacza to, że nontrack ({0,1,2,3,4,5,6,7}) to to samo co nontrack (TTD_ALLTILES) itd.
Podczas określania więcej niż jednego ID-stacji w funkcji definestation() może być konieczne jawne określenie wartości domyślnej dla pylonów, przewodów lub bez ścieżki dla podzbioru tych ID-stacji. Można to zrobić za pomocą TTD_NONE (tj. Bez pylonów, bez przewodów lub bez kafli 'bez-torów' dla funkcji pylons(), wires() lub nontrack(); odpowiednio wszystkie pylony i wszystkie przewody dla funkcji nopylons() lub nowires() ) .
Podobnie jak funkcja nontrack() , funkcje te ustawiają typy kafli , na których powinny znajdować się pylony, a nie pylony wyświetlane.
Ta właściwość funkcji powinna być używana tylko wtedy, gdy pylony powodują problemy z sortowaniem sprite'ów, ponieważ nawet gdy pylony są zasłonięte przez halę stacji lub podobne, powinny nadal pojawiać się w trybie przezroczystym, aby każdy kafel mógł być łatwo zweryfikowany jako zelektryfikowany .
Ta funkcja określa, które typy ładunków powinny wyzwalać ponowne losowanie . Typy ładunków są podane w formie listy. Jeśli nic nie jest ustawione (ustawienie domyślne), nie wystąpią żadne losowe wyzwalacze, aby zaoszczędzić czas procesora.
Format |
<platform-layout> ::= "{" <platform-length> * <TileType> "}" tiletypelayout( {tiletypes({ "{" <number-of-platforms> * <platform-layout>, "}" })} ) |
Istnieją cztery różne typy kafli , które TTD zwykle definiuje jako
Typ kafla | Wygląd |
---|---|
0/1 | zwykła platforma |
2/3 | platforma z zabudową |
4/5 | platforma z 'daszkiem', lewa strona |
6/7 | platforma z daszkiem, prawa strona |
Numery parzyste są używane dla stacji na kierunku północno-zachodnim (x), liczby nieparzyste są używane dla stacji na kierunku północno-wschodnim (y).
Aby zdefiniować niestandardowy układ, typy kafli dla każdej platformy, zaczynając od 0, muszą być wymienione, jedna platforma po drugiej, zaczynając od platformy numer 0. Tylko dozwolone wartości to 0, 2, 4 lub 6.
Ta właściwość jest przydatna tylko do definiowania typów kafli dla stacji wielokaflowych z tylko jednym lub kilkoma układami (tj. Różnymi numerami i długościami platform), ponieważ konieczne jest zdefiniowanie układów dla wszystkich obsługiwanych kombinacji długości i numerów. Wszelkie kombinacje, które nie są zdefiniowane, zostaną zbudowane przy użyciu domyślnego układu TTD.
Należy odnotować, że zwykle łatwiej jest rysować różne zestawy 'sprites' za pomocą funkcji plt_*() , niż przedefiniować układ typu kafli . Ponadto wywołanie zwrotne CB_TILETYPE zostanie użyte do dalszego dostosowania układu zgodnie z definicją w tej funkcji właściwości. Może to być również łatwiejsze niż zdefiniowanie układu dla każdej kombinacji długości i liczby platform.
Układ typu kafla można skopiować do użycia z innymi ID-stacji za pomocą funkcji copytilelayout() .
Examples |
Poniższy przykład definiuje układy typów kafli dla dwóch ID-stacji. Dla pierwszego ID definiowane są dwa układy: pierwszy dla stacji 3*3, ustawiający pierwszą platformę na typ kafla 0, drugą platformę na typ 2, a trzecią na 4; a drugi układ dla stacji 3*5. Dla drugiego ID-stacji zdefiniowany jest pojedynczy układ 4*3 ze wszystkimi kaflami ustawionymi na typ 0.
Przykład (zestaw typów kafli dla ID 2 stacji):
tiletypelayout(tiletypes({{0,0,0},{2,2,2},{4,4,4}}, {{0,2,4},{0,2,4},{0,0,0},{0,2,4},{0,2,4}}), tiletypes({{0,0,0,0},{0,0,0,0},{0,0,0,0}}) ) |
Przypadki użycia przy ustawianiu układów typu kafli mogą być rzadkie. Jedyne, jakie kiedykolwiek widziałem, to parowozownie w NewStations.
TTDPatch rozdziela pełen zakres ilości ładunków (0 ... 4095) na dwa oddzielne podzakresy, "małe" i "duże" partie ładunków. Ta funkcja definiuje ilość ładunku do zmiany ładunku z "małego" na "dużo" , umożliwiając lepszą kontrolę grafiki opartej na ilości ładunku (w razie potrzeby).
Jeśli na przykład ustawisz próg na "200", wówczas zakres 0 ... 199 jest dzielony przez <num_littlesets> , a pozostały zakres 200 .. 4095 jest dzielony przez <num_lotssets> . Odnotuj, że gdy ustawiasz próg na zero, „małe” zestawy nigdy nie są używane, więc <num_littlesets> może wynosić zero. Jednak <num_lotssets> nigdy nie może wynosić zero.
Te funkcje ustawiają typy kafli, na których powinny znajdować się przewody lub nie powinny być wyświetlane. Domyślnie wszystkie typy kafli mają przewody.
Podobnie jak pylons/nopylons() powyżej, te typy kafli nie uwzględniają wywołania zwrotnego CB_LAYOUT, ale raczej typ domyślny, gdy został zbudowany. I znowu, te funkcje właściwości powinny być używane tylko wtedy, gdy przewody powodują problemy z sorterem sprite'ów.