Contents |
Wprowadzenie
Działanie 6 pozwala modyfikować zawartość następującego 'sprite'. Wykorzystuje wartości parametrów grf i zapisuje je w danych następnego 'sprite'.
Ta akcja jest przetwarzana tylko raz podczas inicjowania pliku .grf i jest ignorowana podczas kolejnych aktywacji za każdym razem, gdy gra jest uruchamiana lub ładowana. Dlatego, aby warunkowo pominąć tę akcję, musisz użyć akcji 9, a nie akcji 7.
Od wersji TTDPatch 2.0.1 alfa 51 nie jest to już prawdą, działanie 6 zostanie zastosowane zarówno podczas inicjalizacji, jak i aktywacji. Możesz więc użyć akcji 7 lub 9, aby ją pominąć, w zależności od tego, co jest odpowiednie.
Format
Dane wyglądają następująco:
<sprite-number> * <Length> 06 (<param-num> <param-size> <offset>){n} FF
Element | Rozmiar | Opis |
---|---|---|
<sprite-number> | dec | Sekwencyjny numer 'sprite' |
<length> | dec | Łączna liczba bajtów użytych w tej akcji |
06 | B | Definiuje action 06 |
<param-num> | B | Który parametr GRF należy zastosować |
<param-size> | B | Ile bajtów do zastąpienia |
<offset> | B* | Który bajt zastąpić |
<FF> | B | Oznacza koniec listy |
Triplet <param-num> <param-size> <offset> można powtarzać tak często, jak to pożądane.
Opis
Sprite-number
To tylko numer, na którym jesteś.
Length
Policz liczbę bajtów w tej akcji.
param-num
Jest to numer parametru z parametrów newgrf(w).cfg, który ma zastosowanie do następujących danych duszka. Może to oczywiście wynikać również z obliczeń ActionD. Pierwszy parametr ma numer 00.
Modyfikacja nie jest przeprowadzana, jeśli parametr nie został jeszcze zdefiniowany.
param-size
Ile bajtów parametru użyć. Jeśli jest to więcej niż 4 (rozmiar parametru), używane są bajty następującego parametru. W takim przypadku należy zdefiniować wszystkie wymagane parametry, w przeciwnym razie nie zostaną wykonane żadne modyfikacje.
Jeśli ta wartość ma ustawiony bit 7, parametr jest added do wartości docelowej, zamiast po prostu zapisywany. Jest to przydatne szczególnie przy alokacji duszków za pomocą GRF Resource Management, ponieważ zwykle alokuje się więcej niż jedną duszkę, ale parametr może przechowywać tylko jedną liczbę, pierwsza przydzielona duszka. Tak więc, aby poprawnie zastosować kilka liczb ikonek (tak, że działa na kilka aktywacji, nie tylko na pierwszą), użyj algorytmu takiego jak poniżej:
- Załóżmy, że masz numer duszka <s>, do którego chcesz dodać <i> (gdzie <i> jest zwracane przez Zasób GRF Zarządzanie)
- Aby to działało kilka razy (za każdym razem, gdy grf jest aktywowany), nie możesz po prostu bezpośrednio dodać <i> do <s>
- Zamiast tego użyj ActionD, aby zdefiniować nowy, w przeciwnym razie nieużywany parametr <j>, i zapisz w nim wartość <i>, zanim zostanie on ustawiony przez działanie D, tj. <j> zawiera poprzednią wartość <i>.
- Następnie, po ustawieniu <i> w GRF Resource Management, obliczyć <j> = <i> - <j> (tj. Odejmij poprzednią wartość i od nowa wartość i i zapisz w j).
- Użyj działania 6, aby dodać wartość <j> do <s>, zamiast dodawać bezpośrednio wartość <i> .
- W ten sposób nowa wartość <s> to bieżąca wartość <s> plus nowa <i> minus stare <i>, która jest początkową wartością <s> oraz nowego <i>, dokładnie tego, czego chcieliśmy.
- Pomiń akcję D, a także zarówno akcję 6, jak i akcję, którą modyfikuje podczas "test" stage , pomijając te akcje, jeśli akcja 7 var 84 ma ustawiony bit 10.
- Upewnij się, że podczas korzystania z akcji 7/9 both, albo żadna (none) z powyższych dwóch operacji są pomijane. jeśli tylko jedno, ale nie drugie zostanie pominięte, wartości nie zostaną zsynchronizowane.
Przykład poniżej.
offset
Liczba bajtów w poniższym ikonce do zmodyfikowania. Liczenie zaczyna się od 0 w bajcie akcji i może wzrosnąć do długości duszka. Nie ma możliwości dodania danych na końcu duszka.
Od 2.5 , jest to bajt rozszerzony (patrz GRFActionsDetailed).
Przykład
To jest przykład zastosowania liczb sprite zwróconych przez GRF Resource Management do akcji 0:
// First, set param 1 (<j>) to the old value of param 0 (<i>) -1 * 5 0D 01 00 00 00 // Then, use the GRF Resource Management to reserve 3 sprites -1 * 9 0D 00 00 00 FE FF 08 03 00 // Now calculate <j> = <i> - <j> -1 * 5 0D 01 02 00 01 // So <j> = new <i> - old <i> // Use Action 6 to add <j> to the sprite numbers in the sample sprite layout -1 * 11 06 01 84 07 01 84 11 01 84 1B FF -1 * 32 00 04 01 01 00 09 01 00 00 00 00 // first allocated sprite 00 00 00 10 05 02 01 00 00 00 // second allocated sprite 00 0B 00 10 05 02 02 00 00 00 // third 80