Skip to content

stationProperties

extrazi edited this page Jun 30, 2023 · 14 revisions
original    original
EN     PL

Manual m4nfo i Raport Techniczny

Właściwości dla stacji

Definiowanie właściwości dla stacji kolejowych
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:

Przykład 1 (defining single station):
 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

anim_info(<Byte>, LOOP | NOLOOP)

Ta funkcja definiuje sposób działania animacji dla kafli stacji. Jego parametr określa liczbę używanych klatek animacji. Maksymalna liczba klatek to 255, chociaż mogą wystąpić pewne problemy, jeśli animacja przekracza 253 klatki. Drugi parametr ustawia typ animacji, zapętlony lub niepętlowy.

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 .

anim_speed(<Byte>)

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.

anim_triggers(<List>)

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
Kolumna "dzieje się" informuje, które kafle CB_ACONTROL zostaną wywołane.

W przypadku wyzwalaczy NEWCARGO i NOCARGO funkcja cargo_trigger() zwraca dany typ ładunku .

bridge_height(<Byte>, <Byte>, <Byte>, <Byte>)

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.

callbacks(<List::Callback>)

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)

class(<Label>)

TTDPatch/OpenTTD grupuje zestawy nowych grafik stacji w różne klasy. Klasy można wybrać z górnej listy rozwijanej w oknie konstrukcji, a poszczególne stacje w klasie z dolnej listy rozwijanej. Ponadto każda stacja może zmienić swój wygląd za pomocą funkcji wydajności i/lub funkcji losowych.

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.
Możesz po prostu użyć innych klas niż powyższe, o ile w dowolnym momencie jest używanych nie więcej niż (w tej chwili) 16 klas spośród wszystkich aktywnych plików newGRF.

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' .

flags (<List>)

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()
FOUNDATIONS działa trochę podobnie do GROUNDSPRITES: twój wybór 'sprite' zostanie wywołany ponownie, a tiletype() zwróci "2" . Jeśli łańcuch zakończy się wynikiem wywołania zwrotnego, TTDPatch przyjmie, że wybór podstawy nie powiódł się i użyje domyślnych sprite'ów fundaton. Funkcja tiletype() zwróci typ kafla bieżącego kafla; jeśli masz włączone wywołanie zwrotne CB_LAYOUT, będzie to wartość zwracana przez 'callbacki' - w przeciwnym razie domyślne typy TTD (0/1 - zwykła platforma, 2/3 - platforma z budynkiem, 4/5 - platforma z lewą stroną 'dachu', 6/7 - platforma z 'dachem' po prawej stronie). W obu przypadkach dla orientacji NW-SE dodawane jest '1' , na wypadek gdyby stacja wymagała różnych fundamentów w zależności od jej orientacji. W wynikowej wartości bity 16 i 17 są ustawione, jeśli fundamenty NW i NE mają zostać scalone z odpowiednim sąsiadującym kaflem , więc nie należy rysować odpowiedniej krawędzi w spricie fundamentu.

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):
TTDPatch połączy potrzebne podstawy z tych 8 'sprites' w zależności od bieżącego nachylenia. Nie musisz martwić się o scalanie danych w bitach 16..17, TTDPatch zajmie się tym automatycznie, dodając 7. i 8. sprite tylko wtedy, gdy będzie to konieczne.

  • EXTENDED set (fundamenty rozszerzone; niezalecane):
Musisz mieć jednego 'sprite' na każde możliwe nachylenie poniżej stacji kolejowej. TTDPatch wybierze właściwy w zależności od aktualnego nachylenia. Nie radzi sobie jednak z samym scalaniem, więc potrzebujesz czterech bloków fundamentowych: jednego bez usuniętych krawędzi, jednego z usuniętą krawędzią NW, jednego z usuniętą krawędzią NE i jednego z usuniętymi obydwoma krawędziami północnymi. Twój kod wyboru sprite'a jest odpowiedzialny za wybranie właściwego z tych bloków zgodnie z informacją o scaleniu zwróconą przez funkcję tiletype().

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.

include_lengths/exclude_lengths(<List::Byte>), include_widths/exclude_widths(<List::Byte>)

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)

nontrack (<Label>)

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() ) .

pylons/nopylons(<Label>)

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 .

setcargotriggers(<List::CargoType>)

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.

tiletypelayout({<tiletypes>,})

Format
<platform-layout> ::= "{" <platform-length> * <TileType> "}"
tiletypelayout(
  {tiletypes({ "{" <number-of-platforms> * <platform-layout>, "}" })}
)
Ta właściwość pozwala wybrać, który typ kafla TTD zostanie zbudowany na którym kaflu nowo budowanej stacji. Typ kafla TTD nie ma nic wspólnego z grafiką pokazaną dla danego kafla stacji, ale należy go wziąć pod uwagę podczas rysowania słupów , przewodów lub definiowania kafli bez-torów .

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.

threshold(<Word>)

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.

wires/nowires(<Label>)

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.

Table of Contents

Clone this wiki locally