VariationalAction2
en
EN
pl
PL

nfo

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

B
Dostęp do najniższego bajtu
Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.52.5 W
'Dostęp do najniższego słowa'
Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.52.5 D
'Dostęp do najniższego podwójnego słowa'
Uzyskaj dostęp do zmiennej ogólnej lub
zmiennej obiektu podstawowego
81 85 89
Dostęp do zmiennej "powiązanego" obiektu 82 86 8A

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 Obsługiwane przez OpenTTD 0.70.7 Obsługiwane przez TTDPatch 2.6 (r1928)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 - Obsługiwane przez OpenTTD 1.1 (r21604)1.1 Obsługiwane przez TTDPatch 2.6 (r2359)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.

Obsługiwane przez OpenTTD 1.2 (r23138)1.2 Nieobsługiwane przez TTDPatch 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 Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.6 (r1315)2.6 Specjalna zmienna 60+x używana do uzyskiwania dostępu do wartości przechowywanych w rejestrach persistent storage.
7D D Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.6 (r1246)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 Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.52.5 Specjalna zmienna 60+x wskazująca procedure call. Dostępne na liście zakupów.
7F D Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.52.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 Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.02.0 liczba bitów do 'przesunięcia; w prawo <variable>
5 20 Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.52.5 To jest advanced VarAction2
6 40 Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.52.5 Jest to regulacja typu 'przesuń-i-dodaj-podziel'.
7 80 Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.52.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).

Obsługiwane przez OpenTTD 0.60.6 Obsługiwane przez TTDPatch 2.5 (2.0.1 alpha 57)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