Skip to content

railTypeFunctions

extrazi edited this page Jun 25, 2023 · 8 revisions
original    original
EN     PL

Manual M4nfo

Funkcje dla typów kolei

Korzystanie z funkcji dla typów kolei

Introduction

W m4nfo typy szyn używają tylko dwóch typów funkcji:

Funkcje do definiowania układu sprite'ów

Format
Układ ikonek dla typów szyn jest bardzo prosty:
spriteset(<number>)
Przykład 1 (defining rail type features):
 def(6) spriteset(0) // level crossing open
 def(7) spriteset(1) // level crossing closed

Funkcje dla wykonania typu szynowego

Funkcje te służą do oceny zmiennych związanych z grą i udostępniania ich funkcji aktywacji typu szyny.
Funkcja Opis
depotage(block>) Wiek zajezdni w latach
depotdate(<block>) Data budowy zajezdni
displaymode(<block>) Ustaw tryb wyświetlania dla niestandardowych 'sprites' sygnałowych
gatesclosed(<block>) Stan przejazdu kolejowego: "0" = otwarte (lub nie przejazd), "1" = zamknięte.
terrain(<block>) Typ terenu: NORMAL (0), DESERT (1), RAINFOREST (2), SNOW (4, na lub powyżej linii śniegu).
townzone(<block>) Town zone przejazdu kolejowego lub zajezdni (od OTTD r23866)
tunneltype(<block>) Typ tunelu (0 = zwykły portal) (od OTTD r23952)
signaltype(<block>), signalvariant(<block>), signalstate(<block>), signal(<block>) Informacje o sprite'ach sygnału niestandardowego (od OTTD r24367)
randomrel(0, <randombit> <List::ref()>) Uzyskaj losowe odniesienie

depotage(<block>) / depotdate(<block>)

Te dwie funkcje służą do sprawdzania wieku zajezdni w latach i / lub daty budowy zajezdni:
 Przykład 1 (check a depot's age): 
 def(1) depotage(
 	ref(7) if(>20) // older than 20 years
 	ref(6) else
 ) 
 Przykład 2 (check a depot's building date): 
 def(2) depotdate(
ref(7) if(<date(1-1-1970)) // built before 1970
ref(6) else
 )

displaymode(<block>)

Ta funkcja zwraca rzeczywisty tryb wyświetlania skojarzony z niestandardowymi sprite'ami sygnału. W ten sposób możliwe jest użycie różnych 'sprites' dla danego sygnału, w zależności od trybu wyświetlania (na mapie lub w oknie GUI).
Wartość Znaczenie
DP_VIEWPORT Sygnał jest rysowany w rzutni, czyli na mapie
DP_SIGNALGUI Sygnał jest pobierany w graficznym interfejsie użytkownika sygnału. Zwrócony zestaw 'sprites' musi nadal zawierać 8 'sprites', ale OpenTTD będzie używać tylko siódmego 'sprite', więc wszystkie inne sprites mogą być puste.
Wszystkie inne wartości są zastrzeżone i nie wolno ich używać. Ta funkcja jest dostępna tylko w OTTD od r24367.

townzone(<block>)

Ta funkcja zwraca strefę miasta, od centrum do najbardziej oddalonej, gdzie znajduje się aktualny przejazd kolejowy lub zajezdnia. Zwracane wartości są następujące:
Wartość Etykieta Znaczenie
4 TZ_CENTRE Strefa najbardziej wewnętrzna, światła uliczne
3 TZ_COMMERCIAL Drzewa
2 TZ_RESIDENTIAL Drogi utwardzone
1 TZ_PERIPHERY Strefy zewnętrzne, zwykłe drogi
0 TZ_OUTSKIRTS
Należy pamiętać, że mniejsze miasta mogą mieć mniej stref.

signaltype(<block>), signalvariant(<block>), signalstate(<block>), signal(<block>)

Te funkcje zwracają dodatkowe informacje o niestandardowych ikonkach sygnałów.
Funkcja
Wartość Opis
signaltype(<block>)
0 Normal block signal
1 Entry pre-signal
2 Exit pre-signal
3 Combo pre-signal
4 Two-way path signal
5 One-way path signal
signalvariant(<block>)
0 Light signal
1 Semaphore signal
signalstate(<block>)
0 Red signal
1 Green signal
Wszystkie inne wartości są zastrzeżone i nie wolno ich używać. Funkcja signal() zwraca połączoną wartość dla wariantu, typu i stanu sygnału:
Light signals Semaphore signals
opis etykieta wartość etykieta wartość
block BLK_LIT_RED 0 BLK_SEM_RED 64
BLK_LIT_GRN 128 BLK_SEM_GRN 192
entry ENT_LIT_RED 1 ENT_SEM_RED 65
ENT_LIT_GRN 129 ENT_SEM_GRN 193
exit EXT_LIT_RED 2 EXT_SEM_RED 66
EXT_LIT_GRN 130 EXT_SEM_GRN 194
combo CMB_LIT_RED 3 CMB_SEM_RED 67
CMB_LIT_GRN 131 CMB_SEM_GRN 195
PBS 2-way PBS2_LIT_RED 4 PBS2_SEM_RED 68
PBS2_LIT_GRN 132 PBS2_SEM_GRN 196
PBS 1-way PBS1_LIT_RED 5 PBS1_SEM_RED 69
PBS1_LIT_GRN 133 PBS1_SEM_GRN 197

Przykłady
 Przykład 1 (handling level crossings):
 def(1) gatesclosed(
 	ref(7) if(1) // closed
 	ref(6) else  // open
 )
 
 Przykład 2 (town zones):
 
 def(2) townzone(
 	ref(4) if(TZ_PERIPHERY)
 	ref(5) if(TZ_RESIDENTIAL)
 	ref(6) if(TZ_COMMERCIAL)
 	ref(7) if(TZ_CENTRE)
 	ref(8) else  // TZ_OUTSKIRTS
 )
 
 Przykład 3 (custom signals):
 
 def(3) signalvariant(
 	ref(5) if(1) // semaphores
 	ref(6) else  // light signals
 )
 
 Przykład 4 (custom signals):
 
 def(4) signal(
 	ref(0) if(PBS2_SEM_RED) // PBS german semaphores 2-way RED
 	ref(2) if(PBS1_SEM_RED) // PBS german semaphores 1-way RED
 	ref(1) if(PBS2_SEM_GRN) // PBS german semaphores 2-way GREEN
 	ref(3) if(PBS2_SEM_GRN) // PBS german semaphores 1-way GREEN
 	ref(0) else
 )

randomrel(<trigger>, <randombit> <List::ref()>)

W przeciwieństwie do powyższych funkcji wydajnościowych, których wyniki są zawsze określane przez przewidywalną decyzję, można również użyć funkcji losowych, aby wybrać jeden z kilku zestawów graficznych lub wyników wywołania zwrotnego.
Opis

trigger

Nie ma wyzwalaczy dla obiektów, dlatego zawsze należy zdefiniować 0 (lub CONSTRUCT).

randombit

Ustawienie randombit określa pierwszy bit do 'ponownego losowania', a także oparcie losowej grafiki. Całkowita liczba użytych bitów to 2-logarytm liczby użytych odniesień, np. W przypadku 16 odniesień używane są 4 bity.

'Kafle' kolejowe mają 2 pseudolosowe bity, w zależności od położenia kafla.

List::ref()

Liczba przywoływanych zestawów do wyboru musi być potęgą 2, czyli 2, 4, 8, 16 etc.

Przykład (old/modern level crossing transition in-game):
 def(5) year(
 	ref(10) if(&lt;_YEAR)               // wszystko stare
 	ref(12) if(_YEAR .. _YEAR+4)     // 25% modern
 	ref(13) if(_YEAR+5 .. _YEAR+9)   // 50% modern
 	ref(14) if(_YEAR+10 .. _YEAR+14) // 75% modern
 	ref(11) else                     // wszystko nowoczesne
 )