-
Notifications
You must be signed in to change notification settings - Fork 0
generalFunctions
EN PL |
Korzystanie z funkcji ogólnych
Funkcje ogólne są funkcjami niezależnymi od funkcji, np. do obsługi parametrów i błędów, rozgałęziania wewnątrz newGRF, definiowania ciągów tekstowych itp. W przeciwieństwie do funkcji globalnych, nigdy nie są używane w łańcuchu sterowania, ale są samodzielne lub jako parametry innych funkcji:
Funkcja | Opis |
---|---|
Initialisation | Funkcje inicjalizacyjne |
Flow of control | Przebieg funkcji kontrolnych i obsługa parametrów |
Error handling | Ffunkcje obsługi błędów i dezaktywacji newGRF |
Auxiliary functions | Funkcje pomocnicze |
Callback helper functions | Funkcje pomocnicze 'cb' |
Sound handling | Funkcje obsługi dźwięku |
Recolouring | Funkcje do ponownego kolorowania |
Price and cost handling | Funkcje uwzględniające 'real' ceny i koszty |
basecost(<List::(<Label>,<Byte>)>) | Ustalanie kosztów 'bazowych' |
grf_override(<block>) | Ddefiniuje 'nadpisania' newGRF |
insertcomment(<String>) | Wstawia trwały komentarz do wygenerowanego kodu nfo |
random_[im]pair(<range>) | uzyskać parzystą/nieparzystą liczbę losową z zakresu |
readregister(<register>, <reference>) | odczyta rejestr i 'łańcuch' |
setproperties(<ID> | <Range::ID>) | Zastosuje pojedynczą funkcję właściwości do ID funkcji |
setrefreshbox(<block>) | setrefreshbox |
setregisters(<register>, <List::value>, <reference>) | ustawia rejestr(y) i 'łańcuch' |
snowlinetable(<Byte*12*32>) | Ustawi dane dotyczące wysokości linii śniegu |
Opis |
Ta funkcja pozwala na ustawienie kosztów bazowych, które określają ile wszystko kosztuje w grze. Każdy koszt jest obliczany na podstawie (stałego) współczynnika pomnożonego przez koszt podstawowy, który jest korygowany co miesiąc o inflację.
Funkcja przyjmuje jako parametr listę par pozycji kosztów i współczynników. Domyślnym współczynnikiem wpisu kosztu podstawowego jest '1' , co powoduje, że koszt podstawowy pozostaje niezmieniony. Podwojenie współczynnika podwaja koszt bazowy, czynniki ujemne zmniejszają go o połowę (tj. -64,-32,-16,-8,-4,-2,1,2,4,8,16,32,64,128).
Dostępne wpisy kosztu podstawowego to:
ID | Etykieta | Default | Opis |
---|---|---|---|
0x01 | BUILD_TRACK | 100 | build track tile |
0x02 | BUILD_ROAD | 95 | build road tile |
0x03 | BUILD_SIGNAL | 65 | place signal |
0x04 | BUILD_BRIDGE | 275 | build bridge tile |
0x05 | BUILD_DEPOT | 600 | build rail depot |
0x06 | BUILD_RVDEPOT | 500 | build road vehicle depot |
0x07 | BUILD_SHIPDEPOT | 700 | build ship depot |
0x08 | BUILD_TUNNEL | 450 | build tunnel unit |
0x09 | BUILD_PLAT | 200 | build station platform tile |
0x0B | BUILD_AIRPORT | 600 | build airport tile |
0x0C | BUILD_BUS | 200 | build bus station |
0x0D | BUILD_LORRY | 200 | build lorry loading area |
0x0E | BUILD_DOCK | 350 | build dock |
0x0F | BUILD_ENGINE | 400,000 | locomotive purchase |
0x10 | BUILD_WAGON | 2000 | wagon purchase |
0x11 | BUILD_PLANE | 700,000 | build aircraft |
0x12 | BUILD_RV | 14,000 | road vehicle purchase |
0x13 | BUILD_SHIP | 65,000 | ship purchase |
0x14 | BUILD_TREE | 20 | plant tree |
0x15 | BUILD_LAND | 250 | raise/lower land |
0x16 | CLEAR_GRASS | 20 | clear grass tile |
0x17 | CLEAR_ROUGH | 40 | clear rough land tile |
0x18 | CLEAR_ROCK | 200 | clear rocky tile |
0x19 | CLEAR_FIELD | 500 | clear field tile |
0x1A | DEL_TREE | 20 | remove tree |
0x1B | DEL_TRACK | -70 | remove track tile |
0x1C | DEL_SIGNAL | 10 | remove signal |
0x1D | DEL_BRIDGE | 50 | remove bridge tile |
0x1E | DEL_DEPOT | 80 | remove rail depot |
0x1F | DEL_RVDEPOT | 80 | remove road vehicle depot |
0x20 | DEL_SHIPDEPOT | 90 | remove ship depot |
0x21 | DEL_TUNNEL | 30 | remove tunnel tile |
0x22 | CLEAR_WATER | 10,000 | clear water tile |
0x23 | DEL_PLAT | 50 | remove station platform tile |
0x24 | DEL_AIRPORT | 30 | remove airport tile |
0x25 | DEL_BUS | 50 | remove bus station |
0x26 | DEL_LORRY | 50 | remove lorry loading area |
0x27 | DEL_DOCK | 55 | remove dock |
0x28 | DEL_HOUSE | 1600 | remove house |
0x29 | DEL_ROAD | 40 | remove road tile |
0x2A | RUN_STEAM | 5600 | steam engine running cost |
0x2B | RUN_DIESEL | 5200 | diesel engine running cost |
0x2C | RUN_ELECTRIC | 4800 | electric engine running cost |
0x2C | RUN_ENGINE | 4800 | locomotive running cost |
0x2D | RUN_PLANE | 9600 | aircraft running cost |
0x2E | RUN_RV | 1600 | road vehicle running cost |
0x2E | RUN_WAGON | 1600 | wagon/coach running cost |
0x2F | RUN_SHIP | 5600 | ship running cost |
0x30 | BUILD_INDUSTRY | 1,000,000 | fund industry |
0x31 | DEL_INDUSTRY | 1600 | remove industry |
0x32 | BUILD_OBJECT | 40 | build object |
0x33 | DEL_OBJECT | 40 | remove object |
0x34 | BUILD_WAYP | 600 | build waypoint |
0x35 | DEL_WAYP | 80 | remove waypoint |
0x36 | BUILD_BUOY | 350 | build buoy |
0x37 | DEL_BUOY | 50 | remove buoy |
0x3C | BUILD_CANAL | 5000 | build canal |
0x3D | DEL_CANAL | 5000 | remove canal |
0x3E | BUILD_ACQUAE | 10,000 | build aquaeduct |
0x3F | DEL_ACQUAE | 2000 | remove aquaeduct |
0x40 | BUILD_LOCK | 7500 | build lock |
0x41 | DEL_LOCK | 2000 | remove lock |
Przykład (ustalone koszty bazowe 'train'): basecost( {BUILD_SIGNAL,4}, {BUILD_BRIDGE,2}, {BUILD_DEPOT,4}, {BUILD_TUNNEL,8}, {BUILD_ENGINES,2}, {BUILD_WAGGONS,4}, {DEL_SIGNAL,2}, {DEL_BRIDGE,4}, {DEL_DEPOT,2}, {DEL_TUNNEL,8}, )
Należy pamiętać, że użycie funkcji basecost() z wieloma parametrami da taką samą liczbę 'spriteów' kodu nfo. Dlatego jeśli trzeba pominąć funkcję basecost() , w funkcji skipif() należy użyć tej samej liczby, a nie tylko "1" . Aby zapoznać się z przykładem, zobacz tutaj .
Ta funkcja musi być używana, aby umożliwić newGRF modyfikowanie danych innego newGRF w OpenTTD. Zawiera listę 'źródłowych' i 'docelowych' nowych identyfikatorów GRF, aby umożliwić silnikom w źródłowym newGRF "nadpisanie" (override) tych w docelowym newGRF, ale tylko wtedy, gdy włączona jest funkcja "silników dynamicznych" OpenTTD.
Blok parametrów jest ustawiany przez jeden lub więcej wpisów funkcji maymodify() .
Można użyć wielu wpisów, a różne elementy newGRF można ustawić tak, aby przesłaniały ten sam 'docelowy' newGRF, ale aktywna jest tylko ostatnia instancja 'źródłowego' newGRF. Nowe identyfikatory GRF, które nie są obecne, nie będą miały żadnego efektu.
Zakres tej funkcji jest dość ograniczony i należy jej używać tylko dla zestawów modyfikujących dane innego zestawu, na przykład dodatku DBSetXL ECS do DBSetXL lub ocenzurowanej wersji LV4.
Ta funkcja przyjmuje parę identyfikatorów newGRF (1. source-ID, 2. dest-ID) i musi być używana w kontekście grf_override() , patrz wyżej.
Przykład (DBXL_ECS may override DBXL): // "enginepool" only available in OTTD skipif(1, PLATFORM, ==, PATCH) // if OTTD: DBXL_ECS may override DBXL grf_override( maymodify(GRF_DBXLECS, GRF_DBXL) )
Są to dwie funkcje, które zwracają parzyste lub nieparzyste liczby losowe dla danego zakresu. Wartość zwracana to wywołanie zwrotne, które ma być używane jako dane wejściowe dla innych funkcji.
Np. Możliwe wyniki z
random_pair(4 .. 11) może wynosić 4, 6, 8 lub 10 i
random_impair(4 .. 11) może wynosić 5, 7, 9 lub 11.
Przyjemnym przypadkiem użycia byłoby włączenie randomizacji do funkcji setregisters () podczas pracy z ASL :
def(_PAIR) random_pair(4 .. 35) // return even random numbers def(10) setregisters(5, sub(_PAIR), ref(RESOLVE))
który zastąpiłby ten jawny kod:
Przykład: def(1) setregisters(5,4, ref(RESOLVE)) def(2) setregisters(5,6, ref(RESOLVE)) def(3) setregisters(5,8, ref(RESOLVE)) def(4) setregisters(5,10, ref(RESOLVE)) def(5) setregisters(5,12, ref(RESOLVE)) def(6) setregisters(5,14, ref(RESOLVE)) def(7) setregisters(5,16, ref(RESOLVE)) def(8) setregisters(5,18, ref(RESOLVE)) def(9) setregisters(5,20, ref(RESOLVE)) def(10) setregisters(5,22, ref(RESOLVE)) def(11) setregisters(5,24, ref(RESOLVE)) def(12) setregisters(5,26, ref(RESOLVE)) def(13) setregisters(5,28, ref(RESOLVE)) def(14) setregisters(5,30, ref(RESOLVE)) def(15) setregisters(5,32, ref(RESOLVE)) def(16) setregisters(5,34, ref(RESOLVE)) def(10) random(BUILT,16, ref(1),ref(2),ref(3),ref(4),ref(5),ref(6),ref(7),ref(8), ref(9),ref(10),ref(11),ref(12),ref(13),ref(14),ref(15),ref(16))
Lub jeszcze lepiej, ustawienie rejestrów 5 (dla x-) i rejestru 6 (dla kierunku y) za jednym razem:
def(_PAIR) random_pair(4 .. 35) // return even random numbers def(_IMPAIR) random_impair(4 .. 35) // return odd random numbers def(10) setregisters(5,{sub(_PAIR), sub(_IMPAIR)}, ref(RESOLVE))
Należy odnotować, że w przypadku stacji dostępne są tylko 4 losowe bity na płytkę. Aby więc uzyskać losowość opartą na kafelkach, nie używaj zakresów większych niż 16.
Ta funkcja służy do ustawiania (lub nadpisywania) pojedynczej funkcji właściwości, albo dla pojedynczego ID , albo dla ciągłego zakresu ID. Jest to przydatne w przypadkach, gdy jedna właściwość musi zostać zmodyfikowana z przyczyn zewnętrznych, na przykład na podstawie wartości parametru.
ID mogą dotyczyć dowolnej funkcji TTD (pojazdy, stacje, domy, ...).
Przykład 1 (ustaw właściwość typu kolei ze względu na wartość parametru): // main line electrified setproperties(_BR111, railtype(SACE) ) // branch line setproperties(_BR92 .. _BR38, railtype(SABN) )
Przykład 2 (w przypadku NMF ustaw prześwit dla stacji na poziomy 3): skipif(1, PLATFORM, !=, NMF) setproperties(ANDRAE .. BUIR, bridge_height({3,3,3,3}) )
Ta funkcja ustawia rejestry, zaczynając od <register> , na wartości podane na liście i łańcuchy do <reference> . Podanie '-' jako wartości powoduje zawieszenie ustawień powiązanych rejestrów, co może być przydatne w niektórych aplikacjach. Zamiast wartości można również dołączyć wywołanie podprogramu, używając funkcji pomocniczej sub (<Byte>). Jak zwykle, listę zawierającą więcej niż jedną wartość należy podać.
// set registers "4 .. 6" to values "1,2,3" and chain def(6) setregisters(4, {1,2,3}, ref(0x14)) // set registers "4 .. 6" to values "1,2,3" and register "8" to "4", // leave register "7" untouched def(6) setregisters(4, {1,2,3,-,4}, ref(0x14)) // set register "4" to result of subroutine "5" def(6) setregisters(4, sub(5), ref(0x14)) // set registers "4 .. 6" to values "1,2,3" and register "8" to // result of subroutine "__randomsprite", leave register "7" untouched def(6) setregisters(4, {1,2,3,-,sub(__randomsprite)}, ref(0x14))
Ta funkcja prawdopodobnie będzie używana w połączeniu z zaawansowanymi układami sprite (ASL). Zobacz przykład lub tutoriale .
Funkcja ta instaluje tzw. "tabelę wysokości linii śniegu" , która pozwala określić wysokość linii śniegu na każdy dzień roku. Tabela musi zawierać 12*32 = 384 bajtów, wartości będą odczytywane jako liczby szesnastkowe.
Aby uprościć sprawę TTDPatch, każdy miesiąc ma 32 wpisy, a niemożliwe kombinacje (takie jak 32 stycznia lub 31 kwietnia) nigdy nie zostaną odczytane. Wpisy powinny być wielokrotnością 8 lub mogą pojawić się pewne wizualne usterki. Wartości poniżej "10" (szesnastkowo!) I powyżej "EF" mogą powodować przepełnienie i nie należy ich używać. Ponieważ najwyższa możliwa ziemia ma wysokość 0x78, podanie „"88" lub więcej skutecznie wyłączy linię śniegu.
Jeśli włączona jest linia śniegu umiarkowanego , ta tabela ma również zastosowanie do temperatury umiarkowanej.
Uwaga:
W niektórych kodach w TTD zakłada się, że linia śniegu pozostanie stała: niektóre gałęzie przemysłu są budowane tylko powyżej/poniżej linii śniegu i zakładają, że linia śniegu nie będzie się poruszać, gdy są już zbudowane. Podobnie, zaśnieżone domy na Arktyce nadal będą wyglądać na zaśnieżone, nawet jeśli wokół nich zniknie śnieg. Jeśli chcesz korzystać z tej funkcji, pamiętaj, aby przeciwdziałać tym efektom, zastępując arktyczne domy i gałęzie przemysłu wersjami uwzględniającymi śnieg. |
snowlinetable( 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 // jan 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 // feb 20 20 20 20 20 20 20 20 20 20 20 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 // mar 28 28 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 38 38 38 38 38 38 38 38 38 38 38 38 38 // apr 38 38 40 40 40 40 40 40 40 40 40 40 40 40 40 40 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 // may 48 48 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 58 58 58 58 58 58 58 58 58 58 58 // jun 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 // jul 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 // aug 58 58 58 58 58 58 58 58 58 58 58 58 58 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 // sep 50 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 // oct 40 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 // nov 30 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 20 20 20 20 20 20 20 20 20 20 20 20 // dec )