Contents |
Wprowadzenie
Aby wesprzeć zmiany grafiki oparte na innych czynnikach niż tylko stany obciążenia, użyj VarAction2. Zapewnia to wyrafinowany sposób decydowania, jakiej grafiki użyć.
VarAction2 może być używane jak każda inna akcja 2, ale zapewnia dodatkowy krok pośredni: zamiast od razu zdefiniować zestawy akcji 1, określa listę dodatkowych wpisów akcji 2, z których jedna jest używana w zależności od rodzaj wariacji, która jest zdefiniowana. Wspomniane wpisy akcji 2 mogą z kolei być wariacyjne lub losowe (w celu zapewnienia łańcuchów decyzji) lub mogą być elementem końcowym, czyli zwykłą akcją 2, która zawiera definicje zestawów akcji 1 lub wynikiem wywołania zwrotnego.
Format
Dane wyglądają następująco:
<Sprite-number> * <Length> 02 <feature> <set-id> <type> <variable> <varadjust> <nvar> (<set-id> <low-range> <high-range>){n} <default>
Element | Rozmiar | Opis |
---|---|---|
<Sprite-number> | dec | Sekwencyjny numer 'sprite' |
<length> | dec | Łączna liczba bajtów użytych w tej akcji. |
02 | B | Definiuje action 02 |
<feature> | B | Do jakiego rodzaju pojazdu/stacji należy zastosować tę definicję? |
<set-id> | B | ID tej akcji 2 (używany jak ID ładunku) |
<type> | B | Typ VarAction2, patrz poniżej |
<variable> | B | Na której zmiennej opieramy decyzję |
<varadjust> | V | Jak manipulować wartością przed podjęciem decyzji. |
<nvar> | B | Liczba różnych zakresów wartości (nie licząc wartości domyślnej) |
<set-id> | W | Akcja 2 set-id do użycia dla następującego zakresu. |
<low-range> | B/W/D | Minimum (włącznie) zakresu, dla którego należy użyć powyższego zestawu identyfikatorów |
<high-range> | B/W/D | Maksymalny (włącznie) zakresu |
<default> | W | Akcja 2 set-id do użycia, jeśli żaden zakres nie pasuje |
Rozmiar <varadjust> zależy od <type>, a także dostosowań, które należy wykonać i zawsze musi zapewniać maskę AND. Dla <type> 81, „nic nie rób” <varadjust> to 00 FF.
Powtarzasz sekwencję <set-id> <low-range> <high-range> tak często, jak określa to <nvar>.
<low-range> i <high-range> mają rozmiar B, W lub D, w zależności od <type> . Zobacz ten wpis, aby uzyskać więcej informacji.
Opis
Numer sprite'a
To tylko numer, na którym jesteś.
Długość
Policz liczbę bajtów w tej akcji.
Cecha
Ustawia to rodzaj feature , który chcesz zmienić. Ustaw na:
00 | Trains |
01 | Road Vehicles |
02 | Ships |
03 | Aircraft |
04 | Stations |
05 | Canals/Rivers |
06 | Bridges |
07 | Houses |
09 | Industry Tiles |
0A | Industries |
0B | Cargos (brak zmiennych specyficznych dla funkcji) |
0C | Sound Effects (brak zmiennych specyficznych dla funkcji) |
0D | Airports |
0E | Signals |
0F | Objects |
10 | Railtypes |
11 | Airport Tiles |
12 | Roadtypes |
13 | Tramtypes |
Set-ID
Określa liczbę tego działania 2. ID można następnie wykorzystać jako cel w akcji 3 lub innej akcji wariacyjnej/losowej 2.
Typ
Typ dostępu określa zarówno wielkość dostępu do zmiennych, jak i wybiera między zmiennymi ogólnymi a zmiennymi wrodzonymi obiektu lub zmiennymi konkretnego "pokrewnego" obiektu.
00-03 | Vehicles | Pierwszy vehicle składu |
04 | Stations | Town do której stacji należy |
05 | Canals/Rivers | N/A |
06 | Bridges | Town mostu |
07 | Houses | Town domu |
09 | Industry Tiles | Industry zawierające kafel |
0A | Industries | Town przedsiębiorstwa |
0B | Cargos | N/A |
0C | Sound Effects | N/A |
0D | Airports | N/A |
0E | Signals | N/A |
0F | Objects | Town obiektu |
10 | Railtypes | N/A |
11 | Airport Tiles | N/A |
12 | Roadtypes | N/A |
13 | Tramtypes | N/A |
Każda zmienna określa jej rozmiar. Nie każda zmienna jest podwójnym słowem. Jeśli dostępna zmienna jest mniejsza niż podany tutaj rozmiar, dodatkowe bity mogą zawierać śmieci i powinny być <and-masked>.
Zmienna
Działanie wariacyjne 2 umożliwia dostęp do tych zmiennych:
Numer | Rozmiar | Wersja | Znaczenie |
---|---|---|---|
00-3F | Zobacz global variables page. | ||
40+x | D | specjalnie obliczona zmienna charakterystyczna dla funkcji, patrz następujące strony dotyczące funkcji | |
5F | D | 0.7 2.6 | Dane losowe specyficzne dla funkcji: wyzwalacze w młodszym bajcie, bity w pozostałych trzech bajtach. Bity zmiennej niezwiązane z bitami losowymi lub wyzwalającymi są zarezerwowane. |
60+x | D | podobny do 40+x zmiennych, ale po numerze zmiennej musi następować bajt, który zostanie przekazany do obsługi zmiennej jako parametr. | |
7B | - | 1.1 2.6 | Specjalna zmienna 60 + x do użycia w zaawansowanej akcji wariacyjnej 2. Umożliwia ocenę dowolnej innej zmiennej 60+x przy użyciu niestałego parametru z rejestru. Parametr zmiennej 7B określa inną zmienną 60+x, która jest oceniana. Parametr dla tej zmiennej jest odczytywany z akumulatora ('val1'), tj. Wynik z poprzednich operacji tego samego zaawansowanego działania wariacyjnego 2. Dlatego zmienna 7B nie może być pierwszą zmienną używaną w obliczeniach. Zmienna 7B i 7E (wywołanie procedury) nie mogą być używane jako parametry dla zmiennej 7B. 1.2 Od OpenTTD r23138 możesz używać tego do przekazywania 32-bitowych parametrów do 60+x zmiennych. Obecnie jest to przydatne tylko w przypadku kilku zmiennych, np. zmienna pojazdu 60. W przypadku większości zmiennych wyższe bity parametru uważa się za zarezerwowane. Dlatego pamiętaj o zamaskowaniu wyższych bitów w poprzednich obliczeniach. |
7C | D | 0.6 2.6 | Specjalna zmienna 60+x używana do uzyskiwania dostępu do wartości przechowywanych w rejestrach persistent storage. |
7D | D | 0.6 2.6 | Specjalna zmienna 60+x używana do uzyskiwania dostępu do wartości przechowywanych w rejestrach temporary storage. Dostępne na liście zakupów. |
7E | D | 0.6 2.5 | Specjalna zmienna 60+x wskazująca procedure call. Dostępne na liście zakupów. |
7F | D | 0.6 2.5 | Specjalna zmienna 60+x odczytująca parametr GRF, którego numer jest określony przez parametr 60 + x. Dostępne na liście zakupów. |
80+x | Zmienna charakterystyczna dla funkcji, zobacz następujące strony dotyczące funkcji. Chociaż większość z tych zmiennych w rzeczywistości odnosi się do surowych lokalizacji pamięci oryginalnych struktur TTD, nie można na tym polegać. Niektóre zmienne zostały dodane później, inne zostały przeniesione lub zastąpione. Tylko zmienne wymienione w specyfikacjach są w pewnym stopniu ustawione tak, aby nie ulegały zmianie w przyszłości. |
W przypadku wszystkich funkcji zmienne 80+x są przesunięte w odpowiednią strukturę w danych gry TTD. Zmienne 40+x i 60+x są specjalnymi zmiennymi, które są obliczane w locie i nie są tak naprawdę nigdzie przechowywane w pamięci, chyba że podano inaczej. Dlatego należy ich używać tak mało, jak to konieczne, aby nie spowalniać zbytnio gry przy obliczaniu tych zmiennych (które można nazwać tysiące razy na sekundę, ilekroć porusza się pojazd).
Podczas wyświetlania pojazdu (itp.) Na liście zakupów, gra prawidłowo pokaże te odmiany na podstawie zmiennych zewnętrznych (daty itp.), Ale odmiany na podstawie zmiennych pojazdu (zmienne 40+x, 60+x i 80+x) zawsze pokaże pierwszy (nie domyślny) identyfikator ładunku, chyba że dla danej zmiennej podano inaczej. Jeśli wykonasz obliczenia, pierwszy identyfikator ładunku zostanie wybrany, jeśli którakolwiek z potrzebnych zmiennych jest niedostępna.
Listy 80+x zmiennych na kolejnych stronach nie są wyczerpujące; wymienione są tylko przydatne zmienne. Aby uzyskać pełną listę, sprawdź definicję odpowiednich struktur w TTD. Marcin Grzegorczyk ma dość dobrą listę definicji struktur savegame internals page.
varadjust
Dostosuj zmienną do bardziej użytecznego zakresu. Ma następujący format:
<shift-num> <and-mask> {{__snippet|post|0|nowiki}}
Element | Rozmiar | Opis |
---|---|---|
shift-num | B | value, aby przesunąć zmienną w prawo i kilka specjalnych bitów. Zobacz poniżej. |
and-mask | B/W/D | wartość, za pomocą której ORAZ zmienną po przesunięciu. Zwróć tę wartość, jeśli ani bit 6, ani bit 7 funkcji shift-num nie są ustawione. |
add-val | B/W/D | wartość do dodania do zmiennej po wykonaniu operacji AND. Występuje tylko wtedy, gdy bity 6 lub 7 są ustawione w shift-num. |
divide-val | B/W/D | zwraca sumę podzieloną przez tę wartość. Występuje tylko wtedy, gdy bit 6 jest ustawiony w shift-num. |
modulo-val | B/W/D | zwraca sumę modulo (reszta z dzielenia przez) tę wartość. Występuje tylko wtedy, gdy bit 7 jest ustawiony w shift-num. |
<shift-num> jest częściową maską-bitową; jego bity mają następujące znaczenie:
Bit(y) | Wartość | Wersja | Znaczenie |
---|---|---|---|
0..4 | 0..1F | 0.6 2.0 | liczba bitów do 'przesunięcia; w prawo <variable> |
5 | 20 | 0.6 2.5 | To jest advanced VarAction2 |
6 | 40 | 0.6 2.5 | Jest to regulacja typu 'przesuń-i-dodaj-podziel'. |
7 | 80 | 0.6 2.5 | Jest to regulacja typu shift-and-add-modulo. |
Nie można ustawić obu bitów 6 i 7. Jeśli żaden z nich nie jest ustawiony, ten varadjust jest zmianą i zmianą.
Należy zauważyć, że w przypadku operacji dodawania i dzielenia zarówno zmienna, jak i dzielnik są traktowane jako liczby ze znakiem. Oznacza to, że jeśli ustawiony jest wysoki bit, liczba jest traktowana jako ujemna, więc może być konieczne maskowanie najbardziej znaczącego bitu, aby wykonać podział bez znaku.
nvar
Tutaj ustawiasz liczbę różnych zakresów do sprawdzenia. Jeśli wartość zmiennej po powyższych manipulacjach nie mieści się w jednym z tych zakresów, zostanie użyta wartość domyślna. Wyświetlana w oknie zakupu, gra zawsze pokaże pierwszy zakres, jeśli zmienna jest typu 40 + x lub 80 + x (ponieważ zmienna jest niezdefiniowana, ponieważ pojazd jeszcze nie istnieje).
0.6 2.5 Od TTDPatch 2.0.1 alfa 57 nvar=0 jest szczególnym przypadkiem. Zamiast używać zakresów, nvar = 0 oznacza, że wynik obliczenia advanced (lub, jeśli nie zostanie wykonane obliczenie, sama wartość zmiennej skorygowanej) jest zwracana jako wynik wywołania zwrotnego, z ustawionym bitem 15. Jest to przydatne w przypadku tych wywołań zwrotnych, w których możliwych jest wiele różnych wartości zwracanych, i łatwiej jest je obliczyć niż podać je w zakresach. Wartość domyślna musi być nadal określona i będzie używana w przypadku, gdy użyte zmienne nie są dostępne.
sets i zakresy
Dla każdego zakresu, który chcesz sprawdzić, podajesz set-id jako wartość WORD (tj. Z 00 po, np. set-id 5 staje się 05 00, lub - w przypadku wyniku wywołania zwrotnego - przez ustawienie wysokiego bitu, np. 05 80), a następnie dolnego i górnego limitu tego zakresu. Zostanie użyty pierwszy pasujący zakres.
Różne sekwencje specjalne \b, \w i \d mogą być przydatne dla <min-range> i <max-range> . Zobacz the discussion of escape sequences w celu uzyskania dalszych informacji.
domyślne
Set-id do użycia, jeśli żaden z zakresów nie pasuje.
Przykład
-1 * 15 02 05 03 81 // Akcja2, cecha 05 (kanały), akcja2ID 03, zmienna 1-bajtowa 81 00 04 // zmienna 81 (typ terenu), przesunięcie 00, maska 0x04 (=bit dla "na // lub powyżej linii śniegu 01 // sprawdź jeden zakres 02 00 04 04 // śnieżny kafel: link do action2ID 02 01 00 // domyślnie: link do action2ID 01